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'
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
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.
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?
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.
Outside of Apple and the few examples I haven't met anyone who has decided that objC was an obvious choice.
I still think it's popular.
Edit: I forgot about Android, but Java was "popular" before that - in fact Android probably uses Java because Java was popular...
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.
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.
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).
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 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:
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.
From what I have seen, Apple succeeds in part because they have a corporate culture that fosters good OO and good software architecture. Most companies through the early 2000's didn't have enough BS filtering capability to accomplish this. (Only the top 10% to 25% of shops had that, I would guess.)
Add to that technical capability, the actual ability to market and an understanding of UX/design, and you start to understand how they can execute so well.
This made my day.
Another thing to remember is that compilers were expensive back then. You couldn't just download a language from the web and try it out. Trying a new language mean an investment of several hundred dollars, and so you tended to just stick with your first choice. Turbo C++ was probably the first O-O language available for less than $100, so that became many people's introduction to O-O.
I found C++ to be complex and difficult, but I thought that was just the price to pay for O-O. Later, when I learned Smalltalk, I realized that was not necessarily the case.
(Obj-C now the 5th most popular and quickly rising)
It's the same as 12 years ago: just GNUStep and things in the GNUStep halo like Étoilé. Sony started a project to put GNUStep on mobile (SNAP) a few years ago and promptly dropped it.
> I always wondered if that popularity is tied to Apple devices.
There's no doubt about that.
C# is extremely popular, but Mono is a tiny niche in the Linux world.
Yeah I'm going to call bullshit on that.
Got any sources to back that up? I've often looked for numbers for ObjC vs PhoneGap vs Titanium vs etc comparisons but I've never managed to come up with anything conclusive.
Many applications developers will target iOS before they target android etc, even though the sales numbers may be higher simply because the apple store has a reputation for converting paid apps better.
Therefor, any serious mobile developer probably know objective C.
Not sure what you think the applications are being coded in?
Sure, maybe some use cross platform toolkits but I bet the best selling apps are written in obj-C or at least by developers familiar with it.
I would say thats starting to get pretty common (of course this is probably skewed based on the demographic reading cnbc)
For example the iPad is like 90%+ of all tables sold.
The iPhone has sold 100 million+.
The iPod has the majority of the mp3 player market.
The Mac has ~10% of the US market share.
As for "Obj-C didn't catch on", not true according to the TIOBE index.