10 ms·
A Eulogy for Objective-C
- adamzubi 11y agohttp://googler700.blogspot.com/ http://googler700.blogspot.com/
- fleitz 11y agoRead the eulogy when the base libraries are Swift... 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...
- morqon 11y agoI'm not sure, I've had great fun learning it, and writing it is usually really nice. Sure, there have been pains along the way, but the Apple engineers are doing an amazing job with evolving Swift, intelligently, and very quickly. It is the future, and for many developers I know, it is already part of the present.
- jjtheblunt 11y agoHow is it not an Apple spin on, say, Scala? Seems similar.
- cmollis 11y agoit(swift) feels that way to me too.. my first impressions were 'scala'.
- morqon 11y agoHearing one of the core engineers from the LLVM compiler team speak at some length about their aims and approach to Swift, it was cleat that they had reflected long and hard on the approaches of many other languages. This engineer had very informed and nuanced views on the strengths and weaknesses of pretty much any other language you asked about. I'm sure Scala was on this list, also "Objective-C, Rust, Haskell, Ruby, Python, C#, CLU, and far too many others to list" — http://www.nondot.org/sabre/ http://www.nondot.org/sabre/
- mj_langford 11y agoScala and modern C++ had a baby
- alblue 11y agoIt's like Scala but without all the unknown performance wrappers and confusing code, and with a highly tuned runtime with a minimal library.
- chc 11y agoHow is Scala not a Java spin on F#? It also seems similar. I don't see how any of these comparisons diminish the languages in question.
- fleitz 11y agoIt's certainly gotten much better with Swift 2.0, it feels like Apple finally tried to build an app with Swift 2.0 and fixed a lot of the stuff that is horribly broken.
- saurik 11y agoYeah... I'm pretty certain the only code in iOS 9 that is written in Swift is the Calculator app, which was also the first app I remember Apple shipping that actually used their public version of UIKit; until iOS 4, when Apple dogfooding their library finally made UIKit "good", Apple was still using the as-yet-much-better private UIKit they had written for iOS 1 that shared very little... it even had its own UIScrollView called UIScroller and its own UITableView called UITable. While I'm sure the language keeps getting better as people provide feedback, the product isn't going to move past that "omg this is amazing" threshold until Apple dogfoods it, and until then Apple is just using everyone as guinea pigs ;P. 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".
- artmageddon 11y agoOh goodness. Having written some small apps in both Objective-C and Swift, I'm not even sure which language I should jump back into when I want to pick it up again.
- cageface 11y agoI've been working on a medium-sized Swift 1.2 app for the last few months and, while it's come a long way from 1.0, I still don't think I'd recommend it for new work yet. Compile times are agonizingly long, even worse than C++.
- chc 11y agoFor anyone who isn't familiar, Aaron is one of the most venerable Objective-C programmers out there. He worked at NeXT in the '90s and has been teaching new Objective-C programmers since OS X was released.
- deleted 11y ago[deleted]
- deleted 11y ago[deleted]
- noobthenoon 11y agoI really miss the dynamic features of objective c in swift. Writing a JSON mapper or serializer is really simple if you learn the run time. 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.
- fleitz 11y agoYup, ObjC is light and scripty. Whenever you don't like what it's doing you just make it do what you want, categories, cast to id, swizzling, respondsTo, NSSelectorFromString, etc, and when it's too slow you write those functions in C/C++ which it integrates well with. 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.
- laveur 11y agoI couldn't agree more! There is a ton of things that you can do with the run time that just doesn't seem possible in swift.
- jasode 11y agoFYI for those who prefer to watch videos at faster speeds. Instead of realm.io, I went to the youtube url instead: https://www.youtube.com/watch?v=2s7UR-rNFss 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.
- morqon 11y agoIt's pretty nice though, having the slides synchronised to the video. And on realm.io, below the video, there's a transcript with linked resources :)
- jasode 11y agoThe text below was simply excerpts instead of the full transcript. The incomplete excerpts looked like snippets of context to guide people to the middle parts of the video. You actually had to watch/listen to the video to get the full text. 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.
- timanglade 11y agoTrue. We edit the transcript on purpose to make it more useful to people who want to read it instead of watching the video. If you're looking for a full word-for-word transcript, we have that through the subtitles available in the video. We iterated towards this model after a lot of trial & error but we're still looking for feedback on what people would prefer to see!
- fithisux 11y agoOne question. Why IOKit was not written in ObjC?
- adamnemecek 11y agoObjC has a pretty beefy (and therefore somewhat slow) runtime which is an issue for kernel stuff.
- speeder 11y agoOr explaining this better: 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)
- adamnemecek 11y ago> 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 That's true only for virtual methods. Also to add to what you said, no real way of doing stack allocated objects in ObjC is an issue as well.
- masters3d 11y agoNo language is perfect. If a language is not grounded to solve concrete problems, then we just end up with a new c++. "Swift is not the ultimate language, it’s not flawless, it is compromised because of Objective-C interoperability."
- KSS42 11y agoBlaine Guest? Typo?
- glitch 11y agoYeah, I noticed that too. I told them and they fixed that typo.
- waynecochran 11y agoCan I blissfully go on writing OS X and iOS apps in Objective-C (I spent 15+ years training brain cells in Obj-C)? Aaron H. seems to suggest I can -- Apple isn't just pong to deprecate the entire language one morning in early June I hope. I have learned just enough Swift to read it, but not ready to invest the time to learn it well.
- glhaynes 11y agoYou're definitely safe writing your own apps in it for well into the foreseeable future — there's not only way too much app code out there for it to be deprecated soon, but the vast majority of the system and bundled apps are in Objective-C. 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".
- omarforgotpwd 11y agoI learned Objective-C from Aaron Hillegass's book many years ago. Pretty funny to hear from someone who still loves the language.
- tempodox 11y agoObjC is far from dead for me. And it will take Swift a long time (if ever) to deliver what ObjC can do. 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.
- aidenn0 11y agoObjective C: All the blazing speed of Smalltalk with the memory safety of C.
- tolmasky 11y agoThe developments that Facebook is working on with React Native are just so much more exciting than another riff on C++. For most "utility" apps, I just don't think performance is such an issue that the point of research should be these (comparably) incredibly low level concerns. 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.mov 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.
- rimantas 11y agoOh, React, the newest silver bullet.
- kybernetyk 11y ago>I just don't think performance is such an issue that the point of research should be these (comparably) incredibly low level concerns. 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.
- johndpope 11y agoIf I didn't have so much code in objective-c - I'd welcome the passing. Until then - I've built a project to migrate objective-c code > swift en masse. check out http://objc2swift.io http://objc2swift.io for hockeyapp download.
- kerusan 11y agoAwsome speach! When Apple dumped Objective-C in WebObject we at OOPS printed a TShirt that we showed the crouds at WWDC. I can only repeat now what it read. [objC retain] Kerusan, OOPS, Sweden