Java Was Strongly Influenced by Objective-C
cs.gmu.edu
cs.gmu.edu
NewtonScript does the symbol lookup first (same as for any member lookup) and retrieves a function/closure object, then executes that function with an implicit “this” argument. Closer to the way JavaScript, Python, Go, or C++ do it.
In Pharo (a Smalltalk descendant) one needs to override the doesNotUnderstand method.
The thing is: the whole DSL that I made (with if/else/elif) is its own method call. It's exactly one method call. So if you write "code" like that, then you'll always have a variable length type of method call that Pharo won't understand. By overwriting it and checking for the right symbols (If, Else and Elif) one can group them together and mimic if-statement type of behavior.
I think it's really wild, awesome and fun.
AKA Method Swizzling. ObjC developers took advantage of this feature and it was a wild frontier (but illegal in Apple’s eyes).
There really isn't any good way of messing with the underlying message dispatch mechanism, objc_msgSend() unless you do DYLD interposing or some such hackery.
However, objc_msgSend() has enough hooks to allow you to do custom dispatching, but only after the normal lookup has failed.
Initially there was -forward:: which essentially gave you a pointer to a stack frame. Later, -forwardInvocation: gave you an NSInvocation, which was the message wrapped in an object. Nice, but slow. Since a lot of time the idea was just to forward the exact same message to another object, we later got a new intercession point that allowed you to return that other object.
But again, all these only got activated once ordinary lookup failed, hence NSProxy and friends (objects with very few methods implemented).
Oh, and there was the nil class hook: objc_msgSend() short-circuits when the receiver is nil, but for a while you could theoretically set a class to which the messages to nil would be dispatched. I tried it out a couple of times and it worked, but it was never really used, mostly undocumented and has since been removed, AFAICT.
Part of the super-deprecated Distributed Objects precursor to XPC. [1]
[1] https://developer.apple.com/library/archive/documentation/Co...
https://en.wikipedia.org/wiki/Portable_Distributed_Objects
Loong long ago…
I'm reminded of Larry Wall's quote: "languages differ not in what they make possible, but in what they make easy."
Smalltalk and ObjC made proxy objects easy.
I’d say that there’s a big difference between Python/Go and JS/C++.
In Python, obj.method returns a bound method call—basically, a function that saves obj and passes it in as the first argument, and obj.method() has exactly the same semantics as x=obj.method;x(). In JS, obj.method returns an unbound method, and the equivalent to obj.method() is x=obj.method;x.call(obj).
Objective-C has some nice semantics and a little bit of typing to help you out here.
This was back in the day when Apple's preferred adjective was "beleaguered" and every 6 months there was a rumor that Sun would buy up Apple (while we're at it, Apple sold Mac Execution Environment that was a MacOS emulator for Solaris), so in a slightly different universe, Sun bought Apple and OS X happened 5 years ahead of schedule.
(others say it’s simply NeXTSTEP, however considering that those classes had a NX prefix initially, the NeXT/Sun bit might actually be closer to truth)
I thought "Beleaguered Apple Computer" was the official name of the company...
"James Gosling, being much older than I was, he had lots of experience with SmallTalk and Simula68, which we also borrowed from liberally."
The "objective" part of Obj-C is itself obviously a calque of Smalltalk, so we can pretty much reduce it to these two. And then if you look at them and compare either to Java, it's obvious that it is much more of a Simula descendant. As is C++, by the way, so while Java may not descend from C++ other than syntactically, they're still siblings.
My initial impression was "Huh, so I could take the syntax definition for SmallTalk and add it to the syntax definition for C and there would be almost no collisions. Cool!" At the time I was playing with parsers in connection with automating law form filling, e.g. Westlaw form books.
I agree with another poster's impression that it's more Simula-like. As an undergrad I played with M4 macros to make C more object-ish.
So now he's a "gentleman" huh??!
That must have been written before Sept. 14, 1999.
https://en.wikipedia.org/wiki/Patrick_Naughton#Sex_crime_arr...
https://www.zdnet.com/article/the-rise-and-fall-of-patrick-n...
>Sigh... we sure knew how to have fun in those days...
Zoinks! That didn't age well.
Simula67. It was an almost superset of Algol60 & had nothing to do with Algol68. Smalltalk was also influenced by Simula67.
Python/Ruby only became popular because of Oracle licensing fees (now a non-issue thanks to alternative JVM implementations), and stayed popular because of science (you really can't beat the simplicity of Python for the sciences, people don't really want to have to fight with syntax in the science fields).
I think the only areas where Java isn't good are when you need deterministic latency (such as in a 3d renderer), or when you need a simplistic syntax that non-programmers can use.
Unless you have the same experience, you can't imagine how difficult it is to get your head around native ios development with this kitchen-sink, highly-opinionated library layered on top. I had no frame of reference for understanding ios, or three20, or even development in general really (I had done some webapps and api servers...). That was the most difficult phase of "this seems like it should be incredibly simple but I'm now a week into trying to figure it out". So frustrating.
I made it out the other end, ultimately by just throwing my hands up and asking for help, then really digging into native ios first so I had a solid frame of reference of what the system was intended/designed to do, and what three20 was doing for/against you.
I had a similar experience with Ruby/Rails actually (not understanding what rails did vs just ruby), and now I recognize I'm falling into that trap immediately when getting into new ecosystems. Now I try to make sure to start from the basics, and layer the complexity on only after I have a frame of reference for understanding the platform.
(cue, GnR song 14 years...)
Also props to https://github.com/joehewitt/ it was amazing at the time.
Which Microsoft support page are you looking at? The one I copied the below commands from[1] literally just lists these commands. On occasion, an additional repository and Microsoft keys need to be added, but everything else just works™.
sudo pacman -S dotnet-sdk
sudo apt install dotnet-sdk-7.0
sudo dnf install dotnet-sdk-7.0
sudo yum install dotnet-sdk-7.0
sudo zypper install dotnet-sdk-7.0
And for lolz: winget install Microsoft.DotNet.SDK.7
All work on their respective distros/OSes. Once installed: dotnet new console
to create a new console app. Fire up any editor (doesn't need to be Visual Studio Enterprise 2022) and start coding.The only place where installing the .NET SDK is complicated is macOS, but that goes for anything there, honestly. Even getting non-Apple Clang + LLVM on macOS is a pain.
[1]: https://learn.microsoft.com/en-us/dotnet/core/install/linux
https://learn.microsoft.com/en-us/dotnet/core/install/linux-...
I just tried installing your way on Fedora and it worked a treat. Very nice! Thanks for the info. I haven't really kept up since the Mono days.
That's not exactly Microsoft's unique flavour, lots of open-source projects don't end up in the centrally maintained and approved repositories of your distro of choice and are instead distributed in all kinds of god-forsaken ways. Have you ever tried to install Conda on Linux? Just go and look at its installer, now that is gross.
How's any better that it's owned by Microsoft? Furthermore, all of Java is open source. Cannot say the same about dot net, where parts still remain closed source.
Screw them both. Use Rust.
It was owned by MS, but the entire .NET ecosystem has since been open-sourced and released with a permissive MIT licence. It is managed by the .NET Foundation[1].
also, that doesn't make this code or the license worth nothing.
Rust is great for code that you would have to write in C or C++, but if you can write it in Java, you probably want something else.
MS worse than Oracle, really?