[HN Gopher] Brad Cox has died
___________________________________________________________________
Brad Cox has died
Author : carlosrg
Score : 834 points
Date : 2021-01-22 21:54 UTC (1 days ago)
(HTM) web link (www.legacy.com)
(TXT) w3m dump (www.legacy.com)
| tinus_hn wrote:
| What a legacy. Objective-C feels like a fun toy you can play
| with, it really does make cool things quite easy that are really
| hard in most other languages, like the iOS animation system.
| nhojb wrote:
| I've spent pretty much my entire career (20 years!) writing
| Objective-C: first for macOS, later iOS. Of course Swift is now
| the new kid on the block, and has lots to recommend it. But
| there's something about the simplicity and purity of Objective-C
| that has a special place in my developer's heart (despite its
| flaws & imperfections).
|
| So thank you Brad, you've influenced my entire career. RIP.
| armadsen wrote:
| Objective-C is the programming language that made me fall in love
| with programming, and led to my career for the past 14 years.
|
| I never met Brad Cox, but the work he did to create it has had a
| huge impact on my life. Watching his long interview with the
| computer history museum was a delight and made me feel like I
| knew him just a little.
|
| Sincere condolences to his family and friends.
| gigantor wrote:
| There is no doubting the legacy of Objective-C (especially given
| the high likelihood you are reading this post on a mobile device,
| using app written in Objective-C), but to truly appreciate Brad's
| legacy, am curious about the appeal of using Objective-C.
|
| Having developed only one small iOS app with Objective-C code, I
| was mostly turned off by its overall verbosity in the context of
| NS prefixes. Hence, I ask the question on behalf myself and
| others who did not appreciate the language and did not give it a
| proper chance... what did I miss and what are its top appeals?
|
| Nevertheless, Rest In Peace to a pioneer.
| astrange wrote:
| > Having developed only one small iOS app with Objective-C
| code, I was mostly turned off by its overall verbosity in the
| context of NS prefixes.
|
| This is actually a blessing because NS-/name prefixes are a
| simple approach to naming that keeps you humble. If you let
| programmers have namespacing they will invent enterprise
| software frameworks where every class is six layers deep in a
| namespace of random tech buzzwords they thought up.
|
| > Hence, I ask the question on behalf myself and others who did
| not appreciate the language and did not give it a proper
| chance... what did I miss and what are its top appeals?
|
| It implements message-based programming, which is "real" OOP
| and more powerful than something like C++, where OOP just means
| function calls where the first parameter goes to the left of
| the function name instead of the right.
|
| In particular it implements this pattern:
| https://wiki.c2.com/?AlternateHardAndSoftLayers which is great
| for UI programming and lets you define the UI in data rather
| than code. Although iOS programmers seem to like doing it in
| code anyway.
| jonhohle wrote:
| This plague of object wiring in code is pervasive in the Java
| world as well. The joy of declarative late binding and
| decoupled objects at compile time seems to be very lost on
| the vast majority of programmers.
| PaulDavisThe1st wrote:
| > It implements message-based programming, which is "real"
| OOP
|
| No, it's message-based programming, which is a very powerful
| and useful tool. It's not the one true inheritor of the
| fundamental OOP concept.
|
| OOP wasn't defined by "you send messages to objects", it was
| defined by the idea that objects had their own semantics
| which in turn constrained/defined the things you could do
| with them. Some OOP languages implemented "doing something to
| an object" as "send it a message"; some didn't.
|
| ObjC is in the former group; C++ is in the latter.
| mpweiher wrote:
| Well, considering that Alan Kay _coined the term_...
| zepto wrote:
| Absolutely incorrect:
| http://wiki.c2.com/?AlanKayOnMessaging
| acjohnson55 wrote:
| It's not a modern language, so appreciating it has to be in its
| original context. I think it does an admirable job of
| augmenting C with object-oriented capabilities. It's certainly
| easier to master than C++.
|
| I'm not an expert on this, but I suspect that the main reasons
| it was chosen for iOS were:
|
| - The technical limitations of the original iPhone meant that
| you needed to use a low-level language.
|
| - The legacy of NeXT at Apple.
| saagarjha wrote:
| Mostly the latter, I would assume. Apple didn't really use
| anything other than Objective-C for its application
| frameworks (and still generally does not, for the most part).
| pjmlp wrote:
| I read in multiple sources, usually the kind of comments
| that is only possible to validate with inside info, that to
| this day not all business units are sold on Swift.
| apple4ever wrote:
| That verbosity is exactly why I love it.
|
| It's easy to write and easy to read (especially years later).
| It's just such a joy to work with.
| redwall_hp wrote:
| In the context of the time, C++ didn't exist yet. Objective-C
| was actually introduced just prior to C++, and both languages
| were effectively solving the same problem in different ways: C
| was the dominant language, and both language designers were
| trying to graft the OOP paradigm onto it.
|
| Objective-C is a thin-layer on top of C, adding Smalltalk-
| inspired object support. That's pretty much all there is to it.
| C, with some new syntax for objects. In the context of a world
| where C is the norm, that's pretty appealing. This is before
| Java existed, too.
|
| The "NSWhatever" stuff, as far as I'm aware, isn't part of the
| language. That's all in the frameworks Apple/NEXT developed
| _for_ Objective-C. (Note that the base object is called Object,
| not NSObject, and the integer class is Integer.) NSString is
| probably named that way because Objective-C doesn 't include a
| string class (nor does C, as a string is just an array of bytes
| until you write a wrapper to get fancy) and NEXT made one. They
| were just namespacing the NEXTStep classes.
| yawaramin wrote:
| I'm curious--what happened to Objective-C in that fight with
| C++? Why didn't people go for its simplicity?
| PaulDavisThe1st wrote:
| Objective C loses to C++ for performance if you really
| start exploiting OOP a lot. The fact the you can swizzle
| methods in ObjC says a lot about the "weight" of the
| underlying implementation ("it's all messages") compared to
| C++.
| neverartful wrote:
| The fact that you can swizzle methods also says a lot
| about its power and flexibility. When Steve Jobs was at
| NeXT, he was quoted numerous times bashing C++ as having
| 'dead objects' while pointing out that ObjC objects were
| 'alive'. One seldom needs to make use of swizzling, but
| when you do need it, it's an awesome capability.
|
| As prabhatjha pointed out in another comment in this
| thread, swizzling was used to automatically capture
| networking calls just by adding our framework to your app
| and initializing it. You could then log into our app's
| web-based dashboard and see stats about networking calls
| (counts, latency, errors, etc.). This simple and elegant
| solution would not have been possible with C++. We also
| supported Android at the time (Java), and the developer
| was required to change his code to call our networking
| wrapper calls to get the same tracking for their Android
| apps.
| PaulDavisThe1st wrote:
| Absolutely. I've used swizzling myself to fix issues with
| audio plugin's GUIs (to limit how fast they are allowed
| to redraw themselves). It's very clever and sometimes
| very useful.
|
| But the ability to do that comes with certain costs, and
| performance is one of them. The fact that these "methods"
| are dynamically dispatched sometimes matters, and you
| can't change that any more than you can swizzle in C++.
| pjmlp wrote:
| As usual, platform languages win.
|
| C++ was born at Bell Labs and quickly integrated into their
| workflows as C with Classes started to get adopters.
|
| This raised the interest of the C compiler vendors, so by
| the early 90's, all major C compiler vendors were bundling
| a C++ compiler with them.
|
| Additionally, Bjarne got convinced that C++ should follow
| the same path as C and be managed by ISO, so the C++ARM
| book was written, which is basically the first non-official
| standard of the language.
|
| So C++ had ISO, the same birthplace as C and love of C
| compiler vendors, while Objective-C was initial a work from
| a small company and later on owned by NeXT.
|
| So, naturally Apple, Microsoft, IBM decided to go with C++,
| and everyone else followed.
|
| Here is an anecdote for Apple fans, Mac OS was written in
| Object Pascal + Assembly, when market pressure came adopt C
| and C++, the MPW was born and eventually a C++ framework
| that mimic the Object Pascal one (there is a longer story
| here though, ending with PowerPlant framework).
|
| Copland was based on a C++ framework, and Dylan team
| eventually lost the internal competition to the C++ team
| regarding the Newton OS.
|
| Apple was one of the major OS vendors that never cared much
| about C for OS development, only the NeXT acquisition ended
| changing it. And even then they weren't sure about C and
| Objective-C, hence the Java Bridge during the first
| versions.
| microtherion wrote:
| > Apple was one of the major OS vendors that never cared
| much about C for OS development
|
| It's true that MacOS Classic kept providing Pascal
| headers for most of its APIs for a long time (I don't
| recall whether they ever stopped), but internally, they
| started switching to C by the late 1980s (as an external
| developer, I could tell by one bug which would never have
| made it through a Pascal compiler, but was typical for
| the kind of bugs that wouldn't get caught by a K&R C
| compiler), and by the late 1990, it was all C and C++,
| just with Pascal calling conventions for all public
| facing APIs. In my time at Apple, I never encountered a
| single line of Pascal code.
| pjmlp wrote:
| I bet it was actually C++ with extern "C", which was my
| point, specially given the MPW and PowerPlant frameworks.
|
| I never knew anyone doing bare bones C on classic Mac.
| microtherion wrote:
| There was a lot of extern "C" (and there still is a lot
| of that), but there also was a lot of extern "Pascal"
| back then, I seem to recall.
|
| There was a quite a bit of regular C in classic MacOS,
| though there was also a good deal of C++. You're right
| that MacApp (Which I think is what you're referring to
| with "MPW", which was an IDE) and PowerPlant were written
| in C++, but I'm not talking about the _clients_ of the
| MacOS APIs, but about the _implementations_ of those
| APIs.
| pjmlp wrote:
| Faire enough, but sure it wasn't C++'s C subset?
| microtherion wrote:
| In 68K times, the two compilers were quite different, the
| C++ was CFront at one point, and insanely slow. It would
| have taken a real masochist to compile C with a C++
| compiler. I can't guarantee that nobody at Apple ever did
| that, but the suffixes were distinct. In that situation,
| IDEs usually make the distinction automatically, and it's
| not hard to write Makefiles to invoke the right compiler.
| bboreham wrote:
| I tried out both Objective C and C++ in 1988, when neither
| were popular though C++ was more talked about.
|
| What I remember was that with Objective C you needed to
| track all intermediate values and release them, so you
| couldn't write an expression like [[objectA someMessage]
| anotherMessage] - you had to capture the intermediate in a
| variable so you could release it at the end.
|
| So this was annoying and I didn't like Objective C at the
| time. (25 years later I wrote several iOS apps in it)
|
| C++ let you manage memory and temporary values though
| constructors and destructors, which was much more
| appealing, though pre-templates it was quite constrained.
| jfb wrote:
| Part of it was licensing. Probably more of it was the
| personalities involved at e.g. Microsoft or SGI.
| astrange wrote:
| > Note that the base object is called Object, not NSObject,
| and the integer class is Integer.
|
| Objective-C actually doesn't require a base object (although
| these days it essentially does), but Object and NSObject are
| both examples of root objects. IIRC, reference counting is
| not in Object and was a NeXT invention.
| mojuba wrote:
| Objective-C is verbose not just because of the NS suffixes.
| Everything is verbose (by today standards anyway). ObjC is a
| "child" of the 1980's when verbosity was considered a merit and
| a norm in programming.
|
| Two things that I used to like about it:
|
| - Combination of static typing and at the same time pretty high
| level dynamic typing: it was practically possible to call any
| method on any object, right or wrong, just like in dynamic
| languages. For performance critical parts you could always
| resort to C. Later, as a little bonus it was also possible to
| resort to... C++. There was such a beast as Objective-C++.
|
| - The method calling syntax. Quite unusual but neat. I liked it
| a lot.
|
| However, Swift ruined it for me. Now that I'm a total Swift
| convert and I feel a 2x or even 3x boost in productivity I
| can't even look at Objective-C code anymore.
| lapcatsoftware wrote:
| > ObjC is a "child" of the 1980's when verbosity was
| considered a merit and a norm in programming.
|
| It's still considered a merit by some.
| Klonoar wrote:
| I agree with this. Verbose code is code you can come back
| to an understand years down the road.
|
| The easiest projects for me to pick back up are the ones I
| wrote in Objective-C, hands down.
| PaulDavisThe1st wrote:
| >Verbose code is code you can come back to an understand
| years down the road.
|
| For ObjC, "verbose code" means "code you can come back to
| years down the road and hope there's still a manual to
| translate those message argument names into whatever
| current programming terminology uses".
| saagarjha wrote:
| Thankfully, in computer science terms like "array" and
| "string" still mean what they did many years ago.
| PaulDavisThe1st wrote:
| It's not about "array" or string".
| [[NSNotificationCenter defaultCenter] addObserver:self
| selector:@selector(appDidBecomeActive:)
| name:NSApplicationDidBecomeActiveNotification
| object:[NSApplication sharedApplication]];
|
| can you explain to me what any of those terms mean
| without looking a fairly extensive reference manual?
| mpweiher wrote:
| Yep.
|
| AppKit has this concept called a Notification Center,
| which, duh, sends notifications. You want to observe the
| notification called
| _NSApplicationDidBecomeActiveNotification_. The way you
| want to observe this notification is by being sent the
| message * appDidBecomeActive: _. The "object:" parameter
| tends to be nil, so I did actually have to look that up:
| it means I only want to receive this particular
| notification when sent by that object. It is almost
| certainly redundant in this case, because nobody else has
| any business sending
| _NSApplicationDidBecomeActiveNotification _, and it is
| usually precisely what you do_ not* want, hence it is
| usually nil.
|
| Anyway: [prefix
| stringByAppendingString:suffix]; [dictionary
| objectForKey:key];
|
| In the old NeXTstep days, before our editors had code
| completion and other conveniences, you could very often
| just type a phrase describing the operation you wanted
| and magically the code would compile and do what you
| expected. Hard to both describe and probably believe if
| you haven't experienced it yourself.
| eschaton wrote:
| In addition, the semantic consistency of the frameworks
| combined with the verbosity encouraged by the language
| makes it easy to jump into a new-to-you part of a 25+
| year old codebase and start making useful changes very
| quickly.
|
| This is _much_ more difficult when you have to be careful
| about what every single operator dispatches to, or when
| more than just the receiver's type determines the method
| that's called. You can look at code in isolation and get
| a pretty good idea of its intent _and_ the routes that
| its implementation will take, both of which are necessary
| to start making changes.
| grzm wrote:
| At that level you're talking about framework api's (in
| this case NextStep and derivatives), not the language
| itself. Drop me into some Haskell or Java or OCaml or
| Python or Ruby framework, I'm going to have to reach for
| a reference as well.
|
| It's not uncommon to conflate Objective-C
| conversationally with its most common use case, but
| Objective-C is not NextStep and other Apple-ecosystem
| friends.
| PaulDavisThe1st wrote:
| Entirely fair.
| saagarjha wrote:
| Sure, putting on my layman hat: "Add the observer 'self'
| to some centralized place get a notification of some kind
| for when the app becomes active. Something to do with a
| 'shared application' and a 'selector', maybe they are
| some additional context?" Of course, the latter two are
| things you'd know if you have used Objective-C even a
| little bit, with the former being a fairly standard
| nomenclature for a global and the latter being a crucial
| part of the language.
| jfb wrote:
| I loved the idea that the OOP world and the C worlds were
| syntactically different. It made the language significantly
| more elegant than C++, which doesn't even take into account
| the beauty of its Smalltalk message passing semantics.
| [deleted]
| saagarjha wrote:
| Objective-C is a very simple, clean language-very much unlike
| its other "object-oriented-C competitor" C++. Unlike C++ it's a
| 100% superset of C, and it takes its cues from Smalltalk where
| objects send messages to each other rather than statically call
| each other's procedures. To support this, there is a very rich
| runtime that allows all sorts of reflection and metaprogamming
| atypical in a compiled language.
| microtherion wrote:
| Tastes may differ. To me, C++ looks like an organic extension
| of C syntax, while Objective C looks like an alien graft on
| top of C.
|
| Same with semantics: In C++ there is a continuum from POD
| structs to adding non-virtual methods to adding virtual
| methods. In Objective C there is a gaping chasm between C
| types and Objective C types, and weirdness occurs when you
| mix the two (e.g. pass a method taking an (int) to a place
| expecting a method taking an (NSNumber *)).
|
| Containers (arrays and dictionaries) in Objective C, I find
| particularly ugly, especially in earlier (pre-2010 or so)
| versions of Objective C. They can contain only Objective C
| objects, not C objects, but can wildly mix and match objects
| of different types (this has been helped by Objective C
| generics by now). Access to elements is very verbose (this
| has been helped by syntactic sugar by now).
|
| Just recently, I had to review Objective C code using a
| multidimensional numeric array. Even in modern syntax, it was
| no joy to read, and I wept for the senselessly murdered
| memory and CPU time. But if it had been written in pre-2010
| Objective C, I might have lost my will to live for weeks.
| PaulDavisThe1st wrote:
| I don't see how you can call ObjC any more of a superset of C
| than C++.
|
| Object-related syntax in ObjC is completely alien to C.
| Object-related syntax in C++ (mostly) extends C structure
| syntax.
|
| Yes, ObjC takes its cues from Smalltalk. C++ does not. And
| so... ?
|
| [EDIT: ok, so people want to interpret "superset" as meaning
| "every valid C program is a valid Objective C program too.
| This is, with very few exceptions, true of C++ as well ]
| astrange wrote:
| ObjC doesn't change any existing C syntax, it only adds
| messages. C++ is an entirely different language with a
| different spec that merely looks like C.
| PaulDavisThe1st wrote:
| "Yes! C++ is nearly exactly a superset of Standard C95
| (C90 and the 1995 Amendment 1). With very few exceptions,
| every valid C95 program is also a valid C++ program with
| the same meaning."
|
| https://isocpp.org/wiki/faq/c
| astrange wrote:
| The implicit casting rules are different, it doesn't
| allow VLAs, you can implicitly create static constructors
| instead of having your program rejected for non-constants
| at the top level, more keywords are unavailable as
| variable names...
| pjmlp wrote:
| VLAs are optional since ISO C11, clang and gcc are
| probably the only C compilers that care to support them.
|
| C17 also has its share of keywords and C2X plans to
| replace some of the _Keyword with they keyword version,
| as enough time has passed since their introduction.
| saagarjha wrote:
| Clang and GCC being the two largest implementations.
| pjmlp wrote:
| True, but not the only ones, so good luck making that VLA
| code work outside BSD/Linux clones or the few OEM vendors
| that have forked them.
|
| Also Google has sponsored the work to clean Linux kernel
| from VLAs.
| saagarjha wrote:
| Yeah, because VLAs mostly suck.
| astrange wrote:
| I have some perfectly safe code using them that crashes
| Intel icc. Useful if you ever need to, I don't know,
| crash icc I guess.
|
| Among other things, this means icc doesn't run other
| compilers' testsuites, because I reported the same bug in
| the first release of clang and clattner fixed it right
| away.
| pjmlp wrote:
| And given that C11 made them optional, Intel can just
| close such bug reports with won't fix using the ISO as
| justification.
| astrange wrote:
| Not if it claims GCC compatibility, which it does. Though
| I believe the frontend is licensed from EDG anyway.
| armadsen wrote:
| Because ObjC is a strict superset of C in the technical
| sense. That is: every valid C program is also a valid
| Objective-C program.
|
| Of course idiomatic ObjC is heavily tilted toward the non-C
| parts of the language (OOP features), but that doesn't mean
| it's not a true superset of C.
| PaulDavisThe1st wrote:
| "Yes! C++ is nearly exactly a superset of Standard C95
| (C90 and the 1995 Amendment 1). With very few exceptions,
| every valid C95 program is also a valid C++ program with
| the same meaning."
|
| https://isocpp.org/wiki/faq/c
| pjmlp wrote:
| We are on C17 nowadays.
| saagarjha wrote:
| Objective-C has no exceptions.
| grzm wrote:
| Whaddya mean? @try { // do
| something that might throw an exception }
| @catch (NSException *exception) { // deal
| with the exception } @finally {
| // optional block of clean-up code //
| executed whether or not an exception occurred }
|
| https://developer.apple.com/library/archive/documentation
| /Co...
|
| (I'll see myself out. For at least two reasons.)
| fao_ wrote:
| You won't find much on his Wikipedia article, but his C2 wiki
| page has more: http://wiki.c2.com/?BradCox
| AJRF wrote:
| I am giving a talk in work soon around method swizzling in iOS
| and was delving into the history of Objective-C a bit and came
| across Alan Kay's talk about the power of simplicity and how
| we've all screwed up OOP.
|
| In the talk, Alan talks about the ant who lives his life on a
| single plane of existence, the "Gulley World" or "Reality".
|
| The ant goes to work, he finds stuff to eat, he lives his life in
| this Gulley World, which is depicted as a pink 2D plane. However
| some times on this pink plane there are little spots of blue.
| They represent thoughts that don't belong in the pink plane.
|
| Sometimes those blue spots turn into blue planes, and the ant we
| are following starts to move along that plane instead of the pink
| one. Everyone in the pink plane thinks he is wrong. Everyone can
| see the pink plane, in all its reality. It is not until you walk
| on the blue plane until you can see "another way".
|
| The metaphor being that we developers built a world where we
| started to take the general idea of OOP and construct a lot of
| "reality" around it. A lot of process, a lot of formalization so
| we could build mechanical systems of gears that slotted together.
| I think Alan's idea of OOP was something more fluid, more organic
| than this. The world is messy and we often try to abstract the
| mess away in these overbearingly weighty and hierarchical
| programs that everyone agrees is the right way.
|
| I think Objective-C was the most widely used and successful walk
| on this blue plane. Millions of developers were exposed to the
| idea of message passing as a form of OOP, which is an astounding
| accomplishment. It really is a neat language, and I had a lot of
| fun learning it.
|
| Brad definitely walked on the blue plane. RIP.
| coldtea wrote:
| > _Brad definitely walked on the blue plane. RIP._
|
| Your/Alan's "blue plane" analogy remindeded me of this:
| They said, "You have a blue guitar, You do not play
| things as they are." The man replied, "Things as
| they are Are changed upon the blue guitar."
|
| https://www.writing.upenn.edu/~afilreis/88v/blueguitar.html
| captainclam wrote:
| "I think Alan's idea of OOP was something more fluid, more
| organic than this."
|
| I've heard a good deal about Alan Kay's dissent of the state of
| OOP, but I've never seen a concise summary of his vision or the
| principles that Kay's 'ideal' realization of OOP would adhere
| to.
|
| Does such a resource exist, written by Kay himself or
| otherwise? Or do I just need to go play around with Obj C or
| Smalltalk to really "get it?"
| coldtea wrote:
| > _I 've heard a good deal about Alan Kay's dissent of the
| state of OOP, but I've never seen a concise summary of his
| vision or the principles that Kay's 'ideal' realization of
| OOP would adhere to._
|
| Smalltalk 76-like...
| AJRF wrote:
| Here he discusses his thoughts on the term;
| http://userpage.fu-
| berlin.de/~ram/pub/pub_jf47ht81Ht/doc_kay...
| astrange wrote:
| He did an AMA here once:
|
| https://news.ycombinator.com/item?id=11939851
| lostcolony wrote:
| But, yes, you really need to play around with one to 'get
| it'. Or at least, get why the other languages fail to really
| uphold the goal.
|
| Per the original anecdote, being told "it's all blue!" isn't
| that impressive when you've seen the spots of blue and
| shrugged them off as just normal little detours amongst the
| pink, and can't imagine everything being blue. You have to
| see it for yourself.
| prabhatjha wrote:
| What a great tribute you have written. When I first found about
| swizzling through a seasoned iOS dev I was blown away. The
| swizzling capability in obj-c basically helped create my first
| startup, InstaOps, a long time back which allowed no code
| change to instrument an app to capture logs and network
| performance metrics.
| neverartful wrote:
| I second all of these comments. I was on the same team with
| him (Hi Prabhat, this is Paul D.) and concur that swizzling
| is a very powerful mechanism. It's definitely a good thing to
| know about if you're working with Objective-C.
| arthurcolle wrote:
| This is Apple Objective-C right? I thought it was developed in
| house, didn't realize it had already existed.
| thought_alarm wrote:
| Objective-C was adopted by NeXT Computer in the late 1980s for
| their app development framework.
|
| The modern version of Objective-C, the one that's still in use
| today, was developed by NeXT and Sun and was called OpenStep.
| The first OpenStep specification was published in 1994.
|
| OpenStep API implementations were created for NeXTSTEP OS,
| Solaris, and Windows NT, running on Motorola 68040, Intel, PA-
| RISC, and SPARC (and later PPC) platforms.
|
| Sun would switch gears to Java, Apple would buy NeXT, and
| OpenStep would become Cocoa.
| saagarjha wrote:
| The language was selected by NeXT and then later used
| pervasively in Mac OS X as a result. This left Apple as the
| main driver of its development.
| jhbadger wrote:
| It was originally developed by Cox's company in the mid 1980s,
| and then adopted by Steve Jobs' company NeXT in the late 1980s
| as the official language of NextStep. The Apple connection is
| only that Apple bought NeXT and that its OS X is really just a
| Mac-skinned version of NextStep.
| neverartful wrote:
| Yep, Cox's company was Stepstone.
| microtherion wrote:
| > OS X is really just a Mac-skinned version of NextStep.
|
| You could probably describe Rhapsody that way, but by the
| time Mac OS X came out, I don't think that's an accurate
| characterization at all anymore.
|
| In addition to the sizable Carbon subsystem, the NeXTStep
| pieces were also changed substantially, e.g. the refactor of
| Foundation that extracted CoreFoundation and the change of
| the graphics subsystem from Display Postscript to Quartz.
| bartmika wrote:
| > On one scuba diving excursion while in the compound having
| lunch, Brad engaged a couple from Germany in conversation. Brad
| asked about the fellow travelers occupation and discovered he was
| a computer programmer. Lifewise, Brad was asked about his life's
| work and stated I am also a computer programmer. "What do you
| do?" Brad was asked. I wrote Objective-C. Astonished, the
| gentlerman said, "No, Brad Cox wrote that". "Hi, I am Brad Cox",
| was the response and the introduction.
|
| Wonderful story. I wish his family all the best.
|
| I love Objective-C and consider it a beautiful language. Back in
| the day I re-discovered my love for programming when I started to
| learn this language. This was when I was still in the Java world.
|
| As a side project I tried to build a drone (unmanned navel
| vehicle) powered by objective-c. I have abandoned the effort but
| posted the code on GitHub - it was a joy to work with the
| language and the funnest side project I've worked with.
|
| These days I work with python and golang for job/hobby but I
| always am grateful to have spent time with objective-c.
| Reflecting back if I haven't spent time with this language, today
| I would of not been a programmer.
|
| Thank you Brad Cox for your work and positive influence.
| thunderbong wrote:
| Not to sidetrack the conversation, but I found your typo of
| calling a drone an unmanned navel vehicle quite apt!
| omarforgotpwd wrote:
| unmanned belly button vehicles are the best. much better than
| the manned ones
| [deleted]
| bitexploder wrote:
| Objective-C is a real object oriented programming language.
| Everything is messages. Reverse engineering ObjC as a security
| engineer over the years has been a treat. The runtime is a
| breeze to work with and the language itself made substantial
| usability improvements over C. It's phased out over Swift now,
| but I really have no complaints over my time with the language,
| a rare thing in tech. I didn't know you, Mr. Cox, but I enjoyed
| your work.
| userbinator wrote:
| Coincidentally, I've been doing RE for many years, starting
| in the days of DOS and then moving into Windows, but it was
| only very recently --- less than a week ago --- that I had my
| first look at an app written in ObjC, and the first thing I
| noticed was the amount of information in the binary that
| seemed to almost give away most of its source: method, field,
| and class names everywhere. When I saw a method named
| something like checkLicenseSignature, I almost thought it was
| misdirection.
|
| The second thing that I found astonishing was that these
| strings were actually being used by the runtime to determine
| what to call, i.e. something that in basically every other
| native language I've seen would be a direct or indirect call
| to an address or vtable offset. All this in an application
| that has no exported functions. I can definitely see how it
| would make RE extremely straightforward! Efficiency, on the
| other hand...
| saagarjha wrote:
| Objective-C, at least these days, is plenty fast, with a
| the cost of a message send being comparable to a virtual
| function call. The fast path of objc_msgSend is just over a
| dozen instructions.
| why_only_15 wrote:
| as i recall, `libobjc` is ~25% of app launch time.
| `objc_msgSend` is quite expensive when you're making
| hundreds of thousands to millions of calls per second.
| pjmlp wrote:
| Although Swift has the spotlight, Objective-C keeps being
| improved.
|
| "Advancements in the Objective-C runtime"
|
| https://developer.apple.com/videos/play/wwdc2020/10163/
| jcfields wrote:
| Swift uses the Objective-C runtime.
| pjmlp wrote:
| Swift can uses the Objective-C runtime for
| interoperability with Objective-C code, just like .NET
| uses COM on Windows.
|
| They need to interoperate with the rest of the platform.
| microtherion wrote:
| Swift is tiptoeing between static and dynamic typing,
| preferring the former when feasible, but often needing
| some of the latter when dealing with the UI.
| saagarjha wrote:
| I would guess that most of app startup time isn't going
| to objc_msgSend (although it is still probably slow as it
| hasn't warmed up yet) but rather to setting up the
| various data structures used by the runtime, applying
| initial swizzling and the associated cache invalidation
| that comes from that, and those pesky +loads that every
| analytics framework thinks it need to have ;)
| AJRF wrote:
| The compiler does some very fancy stuff with objc_msgSend
| to make it fast, and the selectors are interned.
|
| https://www.mikeash.com/pyblog/objc_msgsends-new-
| prototype.h...
| donarb wrote:
| Objective-C had an IMP pointer, essentially a function
| pointer. If you needed to send a message to an object in
| a tight loop, you could extract the pointer before the
| loop and use it inside.
| nielsbot wrote:
| Plus for critical sections you can obtain method pointers
| which are just C functions.
| bitexploder wrote:
| The M1 chip has specialized paths on it just to make the
| message sending even faster. That's part of the M1 magic.
| saagarjha wrote:
| To be fair I think the extent of this specialization is a
| branch hint
| sorbits wrote:
| _> All this in an application that has no exported
| functions_
|
| This is not strictly true: On macOS/iOS the
| OS/frameworks/plug-ins may call your methods, likewise with
| support for services, input managers, distributed objects,
| etc.
|
| The responder chain is a good example of this dynamism: The
| input manager (responsible for interpreting key strokes)
| translate the user's input into a message, e.g. "copy" or
| "insert A" and then finds the first object in the chain of
| objects that responds to this message.
|
| This chain of objects may consist of standard framework
| objects (like a text view) or it may be your custom objects
| (like a view controller subclass).
|
| In most other environments, you would have to create
| special interfaces for stuff you want to make public, this
| means only that stuff suffers the performance overhead, but
| you generally pay the cost in code complexity, see e.g.
| Window's Component Object Model.
| DaiPlusPlus wrote:
| > these strings were actually being used by the runtime to
| determine what to call
|
| Fortunately it doesn't do a full string comparison - it
| just compares the value of the string pointers, I
| understand.
| saagarjha wrote:
| Yes: selectors are interned.
| pjmlp wrote:
| Java also owns it to Objective-C, while it copied C++ syntax,
| protocols, reflection and dynamic loading come from
| Objective-C.
|
| https://cs.gmu.edu/~sean/stuff/java-objc.html
|
| And what many J2EE/JEE haters aren't aware of, it started as an
| Objective-C framework during the OpenSTEP days, and the OS was
| called Spring.
|
| https://en.wikipedia.org/wiki/Distributed_Objects_Everywhere
| cromwellian wrote:
| I think it's fair to say it owes some to Obj-C, but both
| Obj-C and Java owe a lot more to Smalltalk.
| pjmlp wrote:
| Also true.
| m463 wrote:
| I wonder what objective-c would look like with the square
| brackets turned into parenthesis...
| wgjordan wrote:
| Would probably look a little less sharp...C-flat?
| dilap wrote:
| Great language. Amazing bang for the buck. RIP.
| kdavis wrote:
| Many moons ago I used to work with Brad in DC. He never let on
| that he was a world famous computer scientist. He slinged code
| shoulder to shoulder with us plebes.
|
| He was a Mensch.
| kotrunga wrote:
| plebes... a great word I don't hear often!
| lucb1e wrote:
| For the other Dutch/German people out there confused at what
| Mensch means other than 'human', dictionary says: "a person of
| integrity and honor" (https://www.merriam-
| webster.com/dictionary/mensch)
| js2 wrote:
| Yes, but it also carries the connotation of being the highest
| complement you can say about someone. I don't use the word
| lightly. It's Yiddish in this context.
|
| https://en.wikipedia.org/wiki/Mensch
| DonnieP wrote:
| German derivation, of course, but the American English usage
| is more particularly Yiddish
| (https://en.wikipedia.org/wiki/Mensch).
| cxr wrote:
| I mentioned Brad Cox's "software ICs" today on the phone in a
| conversation about big ideas in programming, not knowing that
| he'd passed away a couple weeks ago.
|
| Here's the Objective-C paper at last year's HOPL:
|
| "The origins of Objective-C at PPI/Stepstone and its evolution at
| NeXT"
|
| https://dl.acm.org/doi/10.1145/3386332
|
| https://news.ycombinator.com/item?id=23516334
| microtherion wrote:
| That's a truly excellent paper (and exceptionally honest,
| considering some of the touchy subjects involved) and
| disentangles many of the origins of the various concepts in
| Objective C between the Stepstone and NeXT environments.
| brightball wrote:
| I had no idea he was living in South Carolina until I saw the
| news begin to appear on local channels.
| Austin_Conlon wrote:
| Computer History Museum interview with him:
| http://archive.computerhistory.org/resources/access/text/201....
| gladimdim wrote:
| and a video interview:
|
| https://www.youtube.com/watch?v=1xrL2d5omuA
| bogomipz wrote:
| What an amazing career. I was curious about this:
|
| >"The late Steve Jobs', NeXT, licensed the Objective-C language
| for it's new operating system, NEXTSTEP. NeXT eventually acquired
| Objective-C from Stepstone."
|
| Does anyone what NeXT paid to acquire the Objective-C license?
| favorited wrote:
| They were both privately held companies, so it might never have
| been disclosed.
|
| Part of the acquisition was that NeXT would license Objective-C
| back to Stepstone for their own products, so it was more than
| an outright purchase anyway.
| grahamlee wrote:
| Tom Love mentioned it in a talk once (sorry, I'm not in a
| position to search for the reference right now). They were
| offered a choice between a fixed fee of some tens of
| thousands of dollars, or fifty cents per device. They picked
| the fixed fee, and felt it was the correct choice right up to
| the 2000s.
| mucholove wrote:
| Two years ago I started writing an app in Swift. After a two year
| sabbatical, this was going to be my first app.
|
| When using Swift, the compiler was painstakingly slow. Because of
| that, I tried Objective-C and it is so clear to me that I love
| it. It is the best language in my humble opinion. The dynamism
| clicked and the modern features make it a real breeze to use.
|
| Messages are so flexible. I also love how it has "gradual
| typing."
|
| My only gripe with it is that Categories can't formally conform
| to protocols--which I understand is an easy to build feature that
| Blaine Garst did finish but Apple never released.
|
| I know I'm talking about the language more than I am talking
| about Brad Cox, but that's because it's the first time I really
| fell in love with a language. Using Objective-C to build it
| brings me joy. Lots and lots of joy.
|
| Thank you Brad. My prayers to your family. May you find peace in
| heaven.
| mpweiher wrote:
| > Categories can't formally conform to protocols
|
| I wasn't aware of that limitation, so I tried it out just now
| only to be certain. Works fine for me. -\\_(tsu)_/-
| @interface UIViewBuilderSmalltalkViewController(storage)
| <MPWStorage> @end @implementation
| UIViewBuilderSmalltalkViewController(storage)
| @end
|
| Compiler correctly complained about the missing methods and
| Xcode kindly offered to add stubs for me: /Use
| rs/marcel/programming/Projects/ViewBuilder/UIViewBuilderMockup/
| UIViewBuilderSmalltalkViewController.m:121:17: Category
| 'copying' does not conform to protocol 'MPWStorage' /Use
| rs/marcel/programming/Projects/ViewBuilder/UIViewBuilderMockup/
| UIViewBuilderSmalltalkViewController.m:121:17: Add stubs for
| missing protocol requirements
| astrange wrote:
| Maybe he meant classes (metaclasses)? Class itself is not
| typed, which definitely feels like a missing feature in the
| language.
| Sunspark wrote:
| Can you build the feature yourself?
| microtherion wrote:
| I met him once in the late 1990s, when his travels took him to
| Zurich and he asked me whether I could book a talk for him at ETH
| Zurich, where I was a grad student.
|
| I did not quite share his confidence in my abilities in that
| area, but to my relief, Jurg Gutknecht agreed to sponsor the
| talk, and I got to spend lunch with Brad Cox, Niklaus Wirth, and
| Jurg Gutknecht. Given their highly divergent aesthetics in
| language syntax, I expected some fireworks, but the conversation
| was quite pleasant, even when they were discussing Perl.
|
| I was at the time the maintainer of the Mac port of Perl, and had
| taken some classes with Wirth, but the idea of discussing Perl
| with him struck me as akin to discussing masturbation with the
| Pope. However, Wirth conceded that in the area of text
| processing, general purpose languages tended to be somewhat
| clumsy, and there had always been a successful niche for
| languages like Snobol and now Perl.
|
| Brad Cox was a splendid conversationalist in many other areas as
| well. His talk focused on Superdistribution as the next evolution
| of the Software IC concept, and he very skillfully pitched this
| to a Swiss audience that a banking nation should be a natural
| superpower to take the lead in a micropayment world. He was very
| good at painting visions like this, but I'm not sure how much of
| it ultimately came to pass:
|
| a) I don't think we're any closer to plug and play "Software ICs"
| than we were in the mid-1980s when he introduced the term. In the
| Objective C ecosystem, the closest there was to that was maybe
| Interface Builder with its Outlets and Actions, but I think that
| part did NOT originate with Cox (I may be mistaken, though).
|
| b) Likewise, I don't see any move to distributed micropayments.
| If anything, more and more of the software revenue seems to come
| from centrally billed cloud services, e.g. comparing the
| Microsoft Office revenue model 20 years ago and now.
| protomyth wrote:
| The book to go with is "Superdistribution: Objects as Property
| on the Electronic Frontier" which is a fun read.
|
| Objective-C is still my favorite language and I loved his
| writing when first learning it in 94.
| coldtea wrote:
| > _I don 't think we're any closer to plug and play "Software
| ICs" than we were in the mid-1980s when he introduced the
| term._
|
| A lot of modern infrastructure works like that -- function as a
| service, serverless, k8s boxes, etc.
| bboreham wrote:
| I think the vision of Software ICs was delivered most fully by
| VBX custom controls for Visual Basic and Delphi. Superseded by
| OCX.
|
| There were hundreds of them you could download for free or
| paid, doing all kinds of GUI and non-GUI tasks.
|
| Doesn't seem so popular now.
| pjmlp wrote:
| Depends on which circles you move around.
|
| https://www.actiprosoftware.com/
|
| https://www.grapecity.com/
|
| https://www.telerik.com/
|
| Just a sample, there are others.
| sigzero wrote:
| Wow, so very sad.
| srcreigh wrote:
| My first programming job used Objective C to make an iOS app.
| Back in 2013 XCode was pretty fast. My naive youthful self
| enjoyed using Objective C's Categories and Associated Objects to
| share some UI code across 2 UIViewControllers.
|
| Did I get it to work? yep. Did it make senior programmers a bit
| nervous? yep. I wrote a blog post about it.
|
| Later, I got to use Java for some Android apps, and after that we
| got Swift. XCode seemed to get slower with swift and
| Java(android) was more a limited language. No complaints, but it
| was just not as fun and easy as using Objective C. (in my naive
| beginner opinion)
|
| Things were a lot simpler back then. I'll never forget my joy
| learning Objective C at my first ever programming job. RIP Brad
| Cox
| arthurofbabylon wrote:
| It's odd to feel sad having never known this man, and only
| written in the language he helped create. Perhaps it is a
| testament to the beauty of Objective-C that I feel moved.
|
| Objective-C is poetic. Its patterns and clarity are the closest
| I've come to an ecological software language: I feel like I'm
| gardening when writing Objective-C code.
| adamnemecek wrote:
| The message passer has passed.
| ahmetyas01 wrote:
| Allah rahmet eylesin
| [deleted]
| raymondh wrote:
| Sorry to hear that he has passed. His book, "Object-Oriented
| Programming : An Evolutionary Approach" still influences how I
| think about and teach OOP today. His legacy will live for a long
| time.
| msie wrote:
| [me say:"Oh no! This sucks."];
|
| I loved his little book on Objective-C.
| erik_seaberg wrote:
| He was bold enough to create a DSL starting from C. Too many
| black bar-worthy losses lately.
| protomyth wrote:
| Given the impact of his contributions, I don't understand why
| there isn't a black bar.
| WoodenChair wrote:
| There's an extended interview with him about Objective-C in the
| book "Masterminds of Programming: Conversations with the Creators
| of Major Programming Languages": https://amzn.to/3iEYfGh
| frr149 wrote:
| Was it covid?
| robbyking wrote:
| I love the quote from him where he says "languages are mere tools
| for building and combining parts of software." I think a lot of
| new developers get hung up on Language A vs. Language B (or OS A
| vs. OS B), so I hope this helps them realize that the languages
| are just tools you have in your toolbox, and that they should be
| open to switching between (and learning new) languages as needed.
| neverartful wrote:
| Absolutely! ObjC's raison d'etre was pragmatic. Brad Cox said
| that he didn't invent ObjC because he wanted to come up with a
| new language, he needed that type of language to solve the
| problems at hand.
|
| I completely agree with your point about languages being just
| tools in your toolbox. With that point, I always feel that many
| of the folks who describe themselves as being 'passionate about
| language xxx' might be selling themselves short when it comes
| to having a toolbox that's not a one-trick pony.
| tartoran wrote:
| Oral History of Brad Cox
|
| https://m.youtube.com/watch?v=1xrL2d5omuA
| rationalfaith wrote:
| Allah I Rahmou
|
| Hope i can achieve contributions like his in my lifetime.
| dwheeler wrote:
| Very sad. I had the privilege of taking a class from him at
| George Mason University, and he was (unsurprisingly) very
| knowledgeable.
|
| He worked hard to enable software reuse. No one was interested in
| his idea of trying to monitor component use during runtime to pay
| developers. That was an unworkable approach, and I told him that
| then. But the general world of making it easy to reuse components
| _is_ a reality today, via open source software and package
| managers.
|
| So, a hat-tip to him and all the other pioneers who helped make
| the world a better place.
| shanev wrote:
| > He worked hard to enable software reuse. No one was
| interested in his idea of trying to monitor component use
| during runtime to pay developers
|
| People are experimenting doing this in blockchain smart
| contracts. It's transparent and supports micropayments as well.
| bluejellybean wrote:
| Yupp! I made a little toy project for the EVM over a year ago
| with this exact concept, never really did anything with it
| sadly, life seems to find ways to get busy. Due to the nature
| of needing to send 'gas' to make function calls, it was a
| natural fit to add a call to send a small portion of the
| value to an address before returning the computations result.
|
| I really loved the idea of being able to create libraries of
| code that could just be called for a small fee or copied for
| free if one didn't have the funds. I hope this idea continues
| to catch on, it seemed to me to be a perfect incentive fit
| for the open source world.
| coldtea wrote:
| > _No one was interested in his idea of trying to monitor
| component use during runtime to pay developers._
|
| Well, today we call it "function as a service" and
| Serverless...
|
| https://en.wikipedia.org/wiki/Function_as_a_service
| sidpatil wrote:
| > No one was interested in his idea of trying to monitor
| component use during runtime to pay developers.
|
| This reminds me of Project Xanadu's ideas about transclusions
| and associated royalties.
|
| What a coincidence that this was posted recently:
| https://news.ycombinator.com/item?id=25875386
| dwheeler wrote:
| That makes sense.
|
| In addition, the telecomms were generally not interested in
| the very early Internet (TCP/IP) because they couldn't figure
| out how to do per-packet metering, and they assumed that was
| necessary.
|
| All 3 examples show that trying to do fine-grained metering,
| in ways that cause tremendous overhead, often don't work. It
| is sometimes better to make something so that it is "too
| cheap to meter".
| andrekandre wrote:
| superdistribution was superinteresting... but i felt the
| same as well when reading it... it could only work if
| everyone agreed at the same time to use the same
| protocols... and of course legislation... but it was
| definitely a grand vision and would have been interesting
| to see the effect on culture and creativity if it had
| actually panned out
| kitd wrote:
| > No one was interested in his idea of trying to monitor
| component use during runtime to pay developers.
|
| Apart from enterprises selling K8s components who call it
| 'metering'.
| astrange wrote:
| > He worked hard to enable software reuse. No one was
| interested in his idea of trying to monitor component use
| during runtime to pay developers.
|
| This is a nice idea although I never thought it could've
| worked; it seems like it took forever for people to stop trying
| though. The app-and-library organization of software is more
| natural than document-and-component organization because of
| Conway's law, which is surprisingly hard to escape.
| ayewo wrote:
| _" No one was interested in his idea of trying to monitor
| component use during runtime to pay developers."_
|
| The way to make people pay for software components is not to
| ask them for money at runtime, but to do so much much earlier
| in the development cycle: at design time.
|
| In the instances that I have seen this business model work,
| the components are usually bought as part of a collection
| [1]--think source-available components similar to the model
| made famous by Apache Commons (Commons Codec, Commons Util,
| Commons Lang etc). The Apache Commons OSS project emerged on
| June 20, 2007 [0] as a way of standardizing the need for
| reusable Java components and libraries, slowly killing the
| market of paid components.
|
| Or, components are bought as part of an ongoing subscription
| to a large catalog containing thousands of components
| [1][2]--think of it as a company-wide Safari Books
| subscription but for software components.
|
| As part of the business model, component designers and
| developers were paid royalties in additional to the one-time
| monetary payment for developing each component, with the top
| 25 royalty earners collectively making as much $458,792.31
| over a multi-year period [3].
|
| 0: https://commons.apache.org/charter.html
|
| 1: https://software.topcoder.com/catalog/c_showroom.jsp
|
| 2: https://www.topcoder.com/tc?module=Static&d1=pressroom&d2=
| pr...
|
| 3: https://www.topcoder.com/tc?module=ComponentRecordbook&c=r
| oy...
| spacedcowboy wrote:
| - (void) dealloc { // :( }
| btzo wrote:
| funny thing, I just discovered the singer Brad Cox [0] searching
| for the original Brad Cox Wikipedia page and I like his songs
|
| [0]: https://www.youtube.com/user/bradleycoxmusic
| [deleted]
| dang wrote:
| A 2009 interview with him:
| https://web.archive.org/web/20110911201409/http://www.mactec...
|
| was discussed in 2014 here:
| https://news.ycombinator.com/item?id=8422695
| WarOnPrivacy wrote:
| Having lived in Manassas, I express my deep regret that this
| pioneer spent his final years there.
| devonkim wrote:
| If I had known he was literally down the road from me I'd have
| tried to pay my respects earlier and didn't catch this in local
| news at all. It's not that bad here probably compared to 10
| years ago, especially with the VRE train routes to DC and new
| stuff downtown.
| WarOnPrivacy wrote:
| I moved there in 1992 from Warrenton, predictably due to
| misfortune. Couldn't get out of Bobbitt-Land fast enough.
| Glad it's improved.
|
| Do city cops there still obsess over teen boy genitals? https
| ://www.techdirt.com/articles/20140709/07330027823/prose...
| devonkim wrote:
| Manassas just elected its first Democrat mayor in like 100
| years, for what it's worth. The area isn't as prosperous as
| the rest of NoVA but it's kind of being forced to stop
| being looked at as a slum. Home prices YoY led the entire
| state this past year with the growth of remote employment.
| I know plenty of people still call it a NoVA ghetto similar
| to Herndon, but I'm happy to not be shielded from day to
| day reality for people that don't have white collar jobs
| when I look outside my windows.
|
| I can't say much about law enforcement honestly one way or
| the other. Danica Roem won multiple elections here for
| focusing upon fixing the terrible traffic on 28, and it's
| proof that local economic issues matter more than social
| issues now. The problems with that road have kept economic
| development from going to an otherwise welcoming community,
| and I blame that upon a laisse-faire style leadership for
| many decades that's ironically impeded growth for the
| community long-term as AWS grew just down the road.
| btilly wrote:
| Does anyone know what he died of?
|
| Given current events, my assumption is COVID-19. But I know that
| I'm assuming that too often. Old people do die of other things.
| luxuryballs wrote:
| I was thinking about how the vaccine just started rolling out
| and has already killed "frail" people, but I have no knowledge
| of this guy other than him being a computer programmer...
| _gulp_ (I am a computer programmer)
| gdubs wrote:
| [BradCox release]
|
| RIP.
|
| I owe so much to Objective-C. My early love for the language is
| what launched my own career, and inspired a love for programming
| in general. Thank you, Brad Cox.
| princekolt wrote:
| The same thing happened to me. I was at university loving C but
| learning Java and hating every minute of it.
|
| One day, with the help of another student, I managed to install
| Snow Leopard on my Acer notebook and the first thing I wanted
| to do was figure out how iPhone programming worked. However I
| was instantly confused at the syntax of the language and that
| threw me off.
|
| I did try again two more times though, and in the last one it
| just clicked. That was mid-2012. I dropped out of university
| for a job opportunity in 2015 and have been an iPhone developer
| ever since.
|
| Thank you, Brad Cox.
| mucholove wrote:
| This is so poetic.
|
| What a beautiful way to remember him.
|
| Alan Kay once said that those who began to talk about objects
| in anthropomorphic terms got object oriented programming. Your
| "code" now reveals to me the cycle of life in all that I type.
| How delightful.
|
| Thank you :)
| jhbadger wrote:
| I always liked his analogy for object oriented programming as
| "software ICs" -- just as in hardware development, you don't have
| to worry about what goes on in a chip (just what it takes as
| input and gives as output), so too a well designed object works.
| lytol wrote:
| Interestingly, I feel like this comparison to an IC and
| input(s) -> output(s) is more akin to functional approaches,
| and many people complain about OOP being the opposite.
|
| To quote Joe Armstrong:
|
| > I think the lack of reusability comes in object-oriented
| languages, not functional languages. Because the problem with
| object-oriented languages is they've got all this implicit
| environment that they carry around with them. You wanted a
| banana but what you got was a gorilla holding the banana and
| the entire jungle. If you have referentially transparent code,
| if you have pure functions -- all the data comes in its input
| arguments and everything goes out and leave no state behind --
| it's incredibly reusable.
| cxr wrote:
| FP comes with the same jungle, especially if you consider
| that when most people talk about FP, they're allowing for
| closures. Even if you don't, though, and you do only have
| pure functions, it's a similar bog.
|
| Consider a function f that itself relies on being able to
| call function g. In FP, you have to either bind by name,
| which introduces coupling on par with OO ("the jungle"), or
| you make it parametric, so f doesn't know anything about g
| per se, but _somebody_ does--perhaps f 's caller, or its
| caller, etc. OO is parametric, too, but in that case they
| live as slots on the objects, rather than being passed as
| arguments.
|
| People can try to _squidge_ this end of the problem and find
| that it _shquoshes_ up on the other side, or vice versa.
| There 's no real escape from the problem of dealing with
| state.
|
| Probably the real silver bullet boost to productivity will
| come when we adapt program execution environments to our dumb
| brains by way of VR. Think of something like a cellular
| automaton such as von Neumann's universal constructor:
|
| https://en.wikipedia.org/wiki/Von_Neumann_universal_construc.
| ..
|
| ... only in 3 dimensions. When we want to debug a program, we
| project it into a 3-dimensional space, and we trace its
| execution the way you can look at something progressing
| through the assembly line on a shop floor, with pieces that
| you can reach out and touch, and even pick them up and mark
| some with blue dots and some without, etc. That looks a lot
| more like OO than FP.
| moron4hire wrote:
| My reaction to PT fundamentalists is always the same. "Jesus,
| what the hell have I been doing, reusing all this unreusable
| OOP code?"
| robotresearcher wrote:
| Many ICs contain state. That's RAM's purpose, for example.
|
| The analogy with OOP is that (ideally) you don't need to know
| how it works internally: you just use the external interface.
| aidenn0 wrote:
| Heck, many mixed-signal ICs are much harder to use
| correctly than a typical object; Things like "Vdd must be
| brought up to +6V or higher before CLK begins toggling" are
| not too uncommon to see.
| [deleted]
| systemvoltage wrote:
| It's a loose analogy. You're going to find exceptions. I
| think its a fantastic analogy to describe what a class is
| despite of some exceptions.
| aidenn0 wrote:
| I was actually agreeing with the analogy.
| saagarjha wrote:
| :(
|
| Objective-C was the "object oriented C" that was simple and a
| delight to use...words that I certainly would not use to describe
| competing efforts. The syntax might be a little disagreeable-a
| concession to strict C compatibility-but the language itself is
| remarkably clean and, dare I say, pretty. Brad Cox struck the
| balance between flexibility and practicality better than almost
| anyone else before or since.
| neverartful wrote:
| Well put. The one word I would add to your description is
| 'pragmatic'. For many years, ObjC was the language that I would
| rate at the top of the pragmatic list. That stayed true for me
| until Nim arrived and now it's a toss-up.
| smaili wrote:
| Very sad, rest in peace and thank you for all your contributions.
| throw03172019 wrote:
| RIP. Objective-C was my first language and I enjoyed it even with
| manual memory management!
| neverartful wrote:
| True! For those who might be wondering how it's even possible
| to enjoy working with a language that required manual memory
| management, I submit to you 'autorelease' and auto-release
| pools.
___________________________________________________________________
(page generated 2021-01-23 23:01 UTC)