You can't do that in swift.
Objective C was a compromised version of small talk. And swift is a compromised version of a true modern language.
I'd much prefer a non compromised small talk.It's better for medium size mobile apps.
And until the rest of the libraries are in swift it doesn't feel very different.
It's like you're writing Python but you're forced to use Java libraries and Java style apis.
I hope apple doesn't ram it down our throats. Well their own frameworks depend on its dynamism and In many ways in my limited opinion objective c is better for developer happiness.
However I have found benefit in having strict model types that my JSON data must map into — or else cause compiler errors. I far prefer to pick up problems up at compile time then learn about them at run time.
Swift you're always contorting yourself to express things in a way that the language wants, it reminds me of writing java, it worships far to heavily at the altar of type safety as if type safety was a goal in and of itself.
ObjC is practical, Swift is academic.
I've enjoyed my time with Objective-C very much. For consumer coding, I think it's very close to the safety/expressiveness sweet spot.
Sounds like RubyMotion.
I'd expect Objective-C jobs, though, to decline in number over time as Swift jobs rise. If you're doing it professionally, not learning Swift is going to increasingly limit your options, perhaps pretty rapidly — a few months ago, I got turned down for a job in part because of lack of Swift experience. Ended up landing a different job where we're writing a Swift app and step 1 for everyone on the team was "learn Swift".
Swift is not completely bad per se, but it's far from being as approachable as C. In C, you only need to read all the header files, then you “know everything”. In Swift, there aren't even any files with declarations you _could_ read. But then, a completely obscure language seems like a perfect fit for a walled garden.
Instead of realm.io, I went to the youtube url instead:
https://www.youtube.com/watch?v=2s7UR-rNFss
The notes say: "THIS VIDEO IS NOT MEANT TO BE WATCHED ON ITS OWN. We went to great pains to synchronize it with the speaker’s slides,"
Well, the embedded youtube at realm.io only allows speed of 1.5x.
The direct youtube url has the speed option for 2x, so I watched it there. However, before I saw it, I spent a few seconds to flip through the slides to get an idea of what Aaron was speaking to.
For example, at the beginning, he says the word "tricycle" and when I searched for that word, it wasn't in the text below. That's when I knew it wasn't a full transcript.
When I see the bugs going on in iOS apps, it has to do with models that are broken for what modern programs looks like today: things like asynchronicity. Animation is still a mess to wrap your mind around when you have a series of asynchronous events (animations, loads, what have you) that are tied together, but can also be canceled half way through. This is why I can still break many apps by just tapping all over the place (or clicking all over the place: http://tolmasky.com/letmeshowyou/Yosemite/Safari%20Animation... ).
Combining the determinism of React style immediate mode drawing with JS async/await is truly exciting for app development.
Now, of course the elephant in the room is that neither of these matter that much when most the apps being written are games that will continue using C++ or Unity (if you actually care about speed these are your best bet). Especially with the work Apple is doing with Metal that will improve these platforms as well.
Yes. Performance maybe not. But power efficiency is. If your mobile app is bloated and takes more resources than needed to perform its task then you're wasting the user's battery.
"Swift is not the ultimate language, it’s not flawless, it is compromised because of Objective-C interoperability."
In old mailing lists posts (https://www.geeklair.net/~dluke/PCIdevice_tutorial.txt), Godfrey van der Linden (one of the IOKit architects) made some comments about the IOKit language choice:
As IOKit is a child of DriverKit which was implemented in ObjC we
wanted to reduce the amount of work necessary to convert from one
space to the other, as ObjC is single inherited this was easiest for
most of our drivers. At first we were going to allow multiple
inheritance as we ported to C++ but then we tripped over the whole
can of worms called 'virtual' inheritance. We really, really didn't
want to turn all of our developers into C++ experts, which you have
to be to use virtual inheritance properly. Another side effect is
that we are now reasonable language independent. At some stage in
the future we may be able to move IOKit over to a good programming
language.
I suspect that if they had re-written IOKit in 2010, it would be in Objective-C. My guesses why it was done in C++ in 2000:- programmer familiarity/comfort level: remember that classic Mac development was mostly being done in C/C++ by the mid-90s, and the Mac developers still around by 2000 didn't need to be given more reasons to jump ship. Carbon was created so that Mac C/C++ applications could be brought to X, and having drivers written in C++ was another easing factor.
This also includes Apple's internal development teams--I don't think all the longtime Apple teams were that bullish on NeXT technologies. Remember that the original OS X Finder was a C++ Carbon app built with CodeWarrior.
- ObjC not considered inevitable: in 2000 it was not at all clear that ObjC would be thriving for another 15+ years. The C/C++ Carbon API was one direction for the future, the Cocoa-Java bridge was another, another was putting C++-style syntax on top of ObjC (which was never completed). C++ wasn't going anywhere, whereas it would be painful to have driver development handcuffed to ObjC if applications abandoned it.
- performance: it probably would have been a non-issue, but C++ is a safer choice performance-wise.
There might be other interesting tidbits on the darwin-development or darwin-drivers if you go back to 2000/2001.
The objects of ObjC work very differently than C++ objects.
In Obj-C for example, there are no "methods" like C++, in C++ when you put a method in a class, (although implementation details may vary) it works like a function pointer in a C struct, and calling that method is just executing whatever code that pointer points to.
In Obj-C in contrast, to call a function of a class, you actually pass a message, that first must be interpreted, then the runtime that interpreted the message find the correct function definition to use and run.
For most apps people don't care about this, but game developers for example frequently make iOS and Mac games that in time-critical parts use pure C or even Obj-C++ so that they can skip this messaging part (that can cause significant performance problems sometimes).
Example: yesterday I was trying to figure why a open source game I like was slowing down, I ran a profiler, and the most called function, and the one with most execution time, was a simple "GetSomeRandomVar()" for spaceships (it is a spacefight battle game), I looked in the source, and saw that every frame, every spaceship call this at least once for every other spaceship, if the spaceship has an AI it calls it many, many times, I inlined it and the code became much faster.
I am very sure that if it was a ObjC call (with messaging) it would be so slow that the original author probably would not even have uploaded that to github. (by the way, the game IS an OSX game, but the original author wisely decided to go with C++ instead of ObjC)
For anyone interested, here's a good analysis of Objective-C's message dispatch machinery: http://blog.zhengdong.me/2013/07/18/a-look-under-the-hood-of...
When swift code that interacts with the base libraries is faster, and when swift code compiles faster.
Swift so far is a language that over promises and under delivers...
FWIW, I think Apple can't ship any base libraries that uses Swift until they finish ABI-compatibility, as they need to be working off the same base Swift runtime as the apps that would run against those libraries. Given that for the last year people have been shipping apps that link against an old-and-incompatible Swift runtime that Xcode bundles into your app, and given how the runtime is "intrusive" (putting stuff into the global Objective-C namespace, for example), it isn't even clear yet (so this may require more time on their end to build out more infrastructure) how they will be able to pull that off without saying "all Swift apps developed before now need to be reshipped or they will stop working on iOS 10".
You hit the nail on the head here. Until the ABI is finalized, Apple can't ship dynamic libraries to developers that are written in Swift. Swift won't be ready to fully replace Obj-C until this happens.
Exactly. I'm not being judgemental about that, but I don't see myself wanting to invest time into being a guinea pig. If Apple wants to build a tool that only works in and for their walled garden, I won't donate any work to it.