One indicator would be that there would be ports of Objective-C to many platforms, is that the case?
One indicator would be that there would be ports of Objective-C to many platforms, is that the case?
That said, Obj-C for me is very much an acquired taste. I had seen it a few times before I started developing iOS applications, and on the surface, it never appealed to me at all. The idea to use it for anything never even crossed my mind, and looking at the sad state of GNUstep usage and the many modern Obj-C features GCC doesn't implement, I'd guess it's not really popular in the FOSS scene either.
Now that I have used Objective-C for some time, it would actually be a serious option anywhere I used to automatically pick C++ before. The more you learn about Obj-C and the more you use it, the more you will like it. It basically has most of the good things of C and C++ without many of their downsides, and it adds some almost Pythonesque dynamic features that are very useful and elegant.
IMO Objective-C deserves a little more credit than 'just the language Apple uses'
I would guess (but don't know the compiler) that Objective-C is a better choice than Go if you want more precise control over memory layout and specially management. But that feature is a PITA when you don't need such control and would much rather the language runtime take care of memory and GC.
Unfortunately, since most of the popularity is due to iOS applications - developers have to touch these frameworks at one point or another and that means touching at least a tiny bit of ObjC
http://www.cocoadev.com/index.pl?HowToCreateTollFreeBridgedC...
When NeXT shared their compiler patches and runtime (after some GPL-prodding), Objective-C became part of gcc and available on pretty much any supported platform, especially after the GNU-runtime delivered a portable messenger ( objc_msg_lookup()() vs. objc_msgSend() ).
That's the language itself, but you also need to consider the frameworks implemented in it.
NeXTSTep itself was, of course, ported to Intel, HP-Precision architecture and SPARC. Compiling for other architectures was as simple as checking a box in Project Builder. Later there were OPENSTEP-compatible implementations on Windows and Solaris.
The grand-daddy of the open-source implementations is, of course, GNUStep, though there are a bunch more that have been around for a while such as libFoundaton and mgstep. My current favorite is Cocotron, it allows cross-compilation for Windows and Linux right out of Xcode.
Is there some inherent feature of the language that would make it more portable than others?
Outside of Apple and the few examples I haven't met anyone who has decided that objC was an obvious choice.
We never ran any NeXT machines. There was no (and frequently continues to be, thankfully - we've got some good negotiators who manage to convince the customer that picking the language themselves is often not smart) customer requirement on language. As I recall, a number of candidate languages were examined as a replacement for C (which was what we were mostly using at the time) and the lightness of Obj-C, its Smalltalk-like object model and the ease of training newcomers to go from C to Obj-C, were amongst the reasons.
I still think it's popular.
To claim that objective-c doesn't count as popular because anyone who chooses to write for iOS must use it whether they like it or not, is like saying that java doesn't count as popular because anyone who chooses to develop on an emterprise stack that a corporation has built on java must use it.
I think the popularity of objc is hindered more by the fact that people would be moving a step back, if they were using it for something besides what it's designed for (cocoa apps).
Edit: I forgot about Android, but Java was "popular" before that - in fact Android probably uses Java because Java was popular...
Languages aren't used in a vacuum, and the economics of them involve positive network externalities and switching costs, so 'individually' needs some qualification.
Of course there was the hype, the hope to find more developers, the idea that there should be only one language in the company and so on. (All wrong, imo...)
Maybe all those factors could be combined into a single one, "popularity" :-)
Is something I wrote about it several years ago.
But really, Java is a fine language, not much worse than C++, and, as far as static typing goes, fairly OK. What bothers me most is the insane proliferation of bloated frameworks and tools that Java seems to generate around itself. In order to use several popular tools, you need Eclipse. It's not a bad IDE, but needing an IDE for even basic stuff like building a web app clearly is a symptom of something that went very wrong. Some wrong decisions are really hard to undo.
I only use Java SE and Apache Commons libraries, along with a very handful speciality libraries. Very little fuss. I like it.
I do a lot of cross-platform integration. This is based on my experience. If you know you're going to cover multiple platforms from the beginning, you will do a lot of things to make that a lot easier.
Most of those would be written to target a graphics framework (like OpenGL) for the visual elements. Then, for each platform there will be a host that OS-specific things like file & network access. You can also use libraries to abstract that for you.
So the amount that needs to be rewritten depends on how similar the new platform is to the old ones. Going from PC to iOS would be about 40%. Going to Nintendo Wii, maybe 70%.
Unless the platform is particularly unusual, most of the hard problems were solved in the first release, adding additional platforms is fairly mechanical. So even if you need to replace >50% of the code, you know roughly how you're going to do it before you start.
I would say No and No. I'm in agreement with John Siracusa on this one, even with ARC Apple can't hang on to Objective-C forever.
John Siracusa's piece: http://arstechnica.com/apple/news/2010/06/copland-2010-revis...
You can summarize Siracusa's piece as 'Objective-C needs automatic memory management, it needs automatic memory management, and all the other popular languages have automatic memory management, so yeah, Objective-C needs automatic memory management'. He then rejects the fact that Objective-C on OS X has had garbage collection for years because 'it is not a no-brainer because not every developer uses it' and because iOS doesn't support it. Guess what, ARC is now the default way of 'managing' memory on iOS and OS X, and it has some very clear advantages over garbage collection. I wrote 'managing' with quotes, because with ARC you don't actually have to do anything as a developer, and if you don't pay attention to anything it is just like writing code in a language that has GC.
So unless you have some actual arguments why Objective-C needs replacing or what important features it is missing that other languages do have, it is very hard to take your 'No and No' very serious.
Just out of curiosity: did you actually ever develop anything non-trivial with Objective-C, and if so, what part of that experience makes you think it people would not use it voluntarily?
* With the caveat: if you're using blocks, you need to be careful about unintentional circular retains, and sometimes take extra steps to avoid them.
You seem to be disputing my claim that "people don't like obj-c and wouldn't use it if they didn't have to" on the grounds that it is capable and getting better. I don't think that is enough. It's all just my opinion, I don't think C# has a bright future either.
As for my "No and No".
## My First No - "No it is not popular" - Purely anecdotal
I interpreted popular as "well liked". Those I have met and worked with all seem to view Objective-C as "what we use" not, "language of choice". I know those who have grown to appreciate and even like it, but not a soul who says "Obj-C is my favorite" outside of the context that it makes them the most money. I'm sure objective-c fans exist, but to qualify as "popular" to me, that would have to be the overwhelming majority. I've never met an objective-c person who talks about it with the same grin that a Ruby person wears when they tell you about "unless".
## Second No - "No, I don't think anyone would use it by choice" (stupid internet assumption, anyone == people who think exactly like me)
The reason for this, I think, has more to do with its lack of popularity than anything else (yup, some circular logic, I know). The fact that every mac developer I know already knows at least one other language that they can use everywhere else is I think why they aren't putting forth any effort into developing the community to use Obj-C for other jobs. Why bother? There's already overwhelming support other languages of similar merit, so why opt for the unpopular one?
## My own experience
ARC has been wonderful, and I think it greatly improves the process of getting things from idea to application. However, I still feel like I am writing - or rather tab-completing - too much code to accomplish trivial tasks. There is so much ritual that could be done away with completely. If the most common case is to @synthesize an @property, why am I forced to @type @it @out every time? I understand there are sound, logical, historical origins to many of my frustrations (like separate .h and .m files and having to wear out my 'n' and 's' keys). To be honest, much of my complaining is nothing more than trivial syntax whining, but to me, that is all friction. Here I must also admit that I am probably seeing Obj-C in a negative light because I have to interact with it through XCode. I've tried JetBrains AppCode, but there is so much switching back and forth to XCode for CoreData and Interface stuff that I now just keep it around for a few specific tasks. With Obj-C it's really hard for me to separate the language from the Apple APIs, XCode and the iOS development community, all of which I would consider "take it or leave it" quality. Every once in a while Apple throws you a bone like NSOperationQueue, which is a joy to work with, but again, that's conceptual, not syntactic, it's still a million characters to do anything with it.
I can't think of a reason I would pick it over C for low-level serious business or over $yourSciprtingLanguageOfChoice / (((your-functional-language-of-choice))) for everything else. It's got some cool features, but nothing that overpowers its awkwardness for me.
In this aspect it's similar to C#, and Mono, I think, but in a much smaller scale.