38

Localization and internationalization, Keeping the strings external allows them to change (read: translated) without needing to recompile (just a relink at most, and just dropping in a new folder at best).


28

Java is extremely suitable for writing cross-platform games. Main advantages: Portability - In general, you can write a Java game and expect it to run unchanged on most platforms. It's probably the most portable option of any language - C/C++ is the other highly portable option but needs to be recompiled for each platform and in many cases libraries have ...


18

Every Valve product is developed using their own in-house game engine called Source. The Source Engine is written in C++. The source engine contains both an OpenGL and a DirectX renderer which helps it in being cross platform, but the key is SDL. The open source Simple Direct Media Library is used by a team inside Valve which is tasked almost exclusively ...


17

what makes it difficult for say the visual C++ compiler on windows to generate a linux binary executable file? Other than an unwillingness to do that on Microsoft's part, absolutely nothing. The obstacles aren't technical. Development toolchains are just programs that take input and produce output. Visual C++ produces x86 assembly and then uses an ...


15

Creating portable code can be very challenging. First some obvious language related advices: use standard C++ and avoid carefully any undefined behavior rely primarily on standard library (and portable libraries such as boost) always include all expected headers. Do not assume that you don't need a header because it's included in another one (i.e.on ...


14

Disclosure: I work for appMobi. There are many similarities between the two, in fact some of appMobi's functions are built on PhoneGap. Fundamentally, they both encapsulate HTML5/CSS3/JS into a webview that is exposed to the user from a native "Container". They both offer an API that lets you access the device's OS in a way that is impossible for a web app ...


13

It is disputed how religious you have to be about unit testing - surely there is some value to tests even if they violate some of the precepts of the Wise Elders of testing (certainly more value than not having them!). However, in this instance you need not break the rules if you don't want to. Note that your test is only testing one of the possible ...


12

If there's one thing I could recommend, it'd definitely be Boost C++ Libraries. In fact, Boost is not a single library. It's a collection of them, and they're high-quality, portable, open source and well praised by people ranging from students to the C++ standards committee. Since Boost does not include GUI or anything else which is platform-dependent, ...


11

According to http://slashdot.org/story/01/02/06/2030205/David-Korn-Tells-All (question 11), UWIN was not originally open source (though that appears to have changed in the 11 years since that interview was published). Not being open source would have been a significant barrier to widespread adoption, especially considering a functionally equivalent open ...


11

You could use some languages with compiled implementations available on all the 3 platforms, e.g. Ocaml or Common Lisp or Haskell or Scheme (or maybe Go, Rust, Opa, Haxe, ...) You could also use implementations which compiles to C or C++ code, in particular Bigloo, Hop, etc.... (At some point Mozart/Oz was doing so) BTW, notice that even C has some runtime ...


11

Internet age distribution logistics disincentivizes fat binaries in two ways: The point of sale does not involve physical goods and therefore favor fewer SKU's as is the case when products compete for retail shelf space and customers have limited opportunities to make a purchase. The costs of bandwidth favors delivering just the minimum necessary bits for a ...


11

There is nothing that can guarantee that the code is compatible with a platform other than building it, running it, and testing it there. Therefore, the approach of all sane people is to build, run and test their application on every platform that they project it will need to be built, run, and test on. Continuous Integration (CI) can ease this burden a ...


10

If you have a file that contains only the string resources then you can give the resource file to a translation-agency or something like that and get a translation. I guess you can imagine how hard that could get if you would have to give a lot of codefiles to a layperson to do some translation (in addition to maybe not wanting to give out your code to ...


10

Xamarin doesn't "target" Windows, because there is no point - whatever you write in C#, is ready to run on Windows in and of itself. That's why they're only selling licences for Xamarin.Android, Xamarin.iOS and Xamarin.Mac. But what would a Xamarin.Windows abstraction layer be supposed to do? That would be a textbook snake oil product :) "Native Windows ...


9

Making CSS specific for each platform is possible, but a lot of work. It also means maintaining multiple CSS files. Also, it is better to do feature-detection, instead of browser detection. I'm no expert on the matter, but you can just Google it, and you'll get enough results. But, you say, isn't it also a lot of work to build and maintain multiple apps for ...


9

A fat binary approach makes most sense if: Both architectures coexist on the same system Everything else is more or less the same for all architectures That's why they are not used for cross-platform code (both criteria don't apply), or to support different Linux distributions with one binary (1. doesn't apply, 2. applies to a certain degree). On Linux, ...


9

As the co-founder of Codename One which does pretty much that I can answer that pretty easily. You can cross compile (which is what we do) but you can't have a single binary that will work everywhere because mobile OS vendors don't allow it. Apple doesn't allow JIT's and limits interpreters. All mobile devices include app isolation which prevents a global ...


9

If you are asking for "development processes" and you primary development platform is Windows with Visual Studio then I would suggest to try building your project without "windows.h" included. You will get a lot of compilation errors that will point you to many places where you'll need to refactor your code. For example, 'DWORD' won't be #defined and you'll ...


9

Is there an industry standard? You betchya. It's the actual Http protocol. An actual Http Request looks something like this. POST /cgi-bin/process.cgi HTTP/1.1 User-Agent: Mozilla/4.0 (compatible; MSIE5.01; Windows NT) Host: www.tutorialspoint.com Content-Type: application/x-www-form-urlencoded Content-Length: length Accept-Language: en-us Accept-...


8

FireMonkey is a framework being the outcome of the hiring of the creator of VGScene and the KSDev company. Following that it is heavily based on OpenGL and as a such not hard to be source code portable between Windows and Mac. Edit: Some more info about FireMonkey just surfaced: http://www.andreanolanusse.com/en/a-little-bit-about-firemonkey-and-delphi-xe2/?...


8

Using the Java platform / JVM would be the obvious choice - it has the widest cross-platform coverage of any language, and if you have a C#/.Net background the concepts will be very familiar. Note that you don't have to use Java language to gain the benefits of the Java platform - in fact nowadays, if starting a project from scratch I'd probably recomemnd ...


8

I have never used Visual C or windows environment, so my answer will be biased. I feel if you want to learn c++, you should do it in on Linux. As Linux is open source platform, and used extensively on heterogeneous environments such as server, mobile, desktop, you will find lot more support when you run into problems as opposed to windows. Next, you would ...


8

C/C++ is fast. The reality is, most apps wont need that performance with the state of the current hardwares. The usual way is to develop the application in a high level language, like python, than optimize when needed with lower level languages, like C/C++. Python will give you a big productivity boost, it's easy to learn and reasonably fast. There is ...


8

Yes, if you have all of the info about your target platform then it should not matter what platform you're actually running on. There's two problems that tend to crop up: People don't focus on it because it's a less common scenario. Often the only thing you cross compile is a compiler so you can then stop cross compiling. Less focus means worse support. ...


7

This sounds like a job for the Strategy Pattern. Pass in a rendering strategy, and instantiate the rendering strategy based on your platform.


7

So we did an analysis of the two (+ HTML 5) for our purposes and found that JavaFX narrowly won out due to our familiarity with Java and Java based tooling and support stacks. Our methodology was to list 20 criteria and rank each technology out of 10 for each. For example, i18n, ease of hiring, x-platform support, mobile support, strength of commnuity, ...


7

In addition to internationalization/localization, separating text strings out like this also allows a proofreader to submit corrections to spelling/grammar/punctuation that are isolated to, messages.${LOCALE}, without having to touch a true source code file. You might have a blackout on code changes but accept such text corrections. If you are accepting ...


7

Any professional organisation would have not just build machines but test environments for all those platforms they support. And that's why most professional organisations won't support such a plethora of platforms, it's just too expensive for the small return that each of them yields except the few big ones like for example Windows, Mac, and RedHat based ...


7

Although Eclipse IDE is written in Java, the graphical control elements use Standard Widget Toolkit (SWT), whereas most Java applications use the Java standard Abstract Window Toolkit (AWT) or Swing. To display GUI elements, the SWT implementation accesses the native GUI libraries of the operating system using JNI (Java Native Interface) in a manner that ...


Only top voted, non community-wiki answers of a minimum length are eligible