top | item 32417208

Native-GUI distributed system in a tweet

44 points| mpweiher | 3 years ago |blog.metaobject.com

25 comments

order
[+] junon|3 years ago|reply
I don't agree with the assertion that "[Rust, C, etc.] are not general purpose languages but instead DSLs for algorithms". This is one of those "profound" statements that I simply find nonsensical, as if the semantics themselves somehow made a point.

Conversely, I see Objective-S as just a batteries-included, insanely high level declarative language. How is that any less of a DSL, per the creator's logic?

Plus, saying that your language is the "first [real] general purpose language" is a bit smug.

[+] westoncb|3 years ago|reply
I agree it's a bit smug, but I can see an argument why something like that (not familiar with Objective-S itself in anyway) might be considered more general purpose—though it's a bit of a stretch still imo:

To start, I think DSLs for algorithms is a bit off; it's more like DSLs for manual memory management. But I think the significant thing is that those languages are closer to a natural way of speaking about the "execution environment" of a computer vs that of human thought, which is essentially the gap or spectrum which programming languages attempt to span.

And it makes a certain kind of sense to talk about generality of languages in terms of the set of human thoughts which they are effectively applicable to realizing. But this is very much against intuition when speaking of the generality of abstract structures since there are common, specific meanings in connection within them, and in computing that's typically what's meant. But, if you do look at it in the other sense, something higher level is going to have higher generality than something lower level.

Just playing devil's advocate 'cause I was curious where they might be coming from with it (because it sounds like such nonsense at first).

[+] dan-robertson|3 years ago|reply
I don’t really consider rust/c to be general purpose fwiw. The term I’d use is ‘systems language’, though that’s also a bit I’ll-defined. Specifically, I think rust/c do a pretty poor job of the kind of programming people often do in languages like python where e.g. worrying a lot about memory allocations or data structures or whatever is not a great use of the programmer’s time. One can also see e.g. the ongoing efforts to figure out the nice way to do user interfaces in rust: it seems that the language isn’t yet particularly suitable for that.

I think Java better fits the conventional notion of a general purpose language but it still feels a bit too much work to do simple things in a lot of cases.

[+] xmonkee|3 years ago|reply
Also, even if you were to buy it's premise, the statement is still untrue. There is also stuff like Red and Wolfram language.
[+] ducktective|3 years ago|reply
>is a bit smug.

I choose unorthodox and provocative ideas over conservative bore of docile academic terms any day.

You call it being smug, I call it scientific confidence needed for progress.

[+] mpweiher|3 years ago|reply
> I don't agree with the assertion that "[Rust, C, etc.] are not general purpose languages but instead DSLs for algorithms".

The reasoning is given. How is the reasoning incorrect, other than colliding with beliefs and assumptions we make that are so implicit we don't even see them?

But very briefly: ALGOL.

> How is that any less of a DSL, per the creator's logic?

Very simple, from a software-architectural POV: it includes call/return as one of the architectural styles it supports. But it also supports other architectural styles, ideally including building your own, though that is still a bit thin. So n = 1, vs n > 1.

See also: https://blog.metaobject.com/2019/02/why-architecture-oriente...

[+] forgotpwd16|3 years ago|reply
Interesting though it appears to be a straightforward server/client application so not sure why it's called distributed. That said I'm confused about what Objective-S is even after reading the about page (http://objective.st/About).
[+] oceankid|3 years ago|reply
The language on the website seems to be targeted to an audience with knowledge of a subset of languages. Instead it would help if it talked about the problem it seems to solve for a regular "general purpose" programmer.

Doesn't help that the author comes off as super defensive.

[+] alexashka|3 years ago|reply
What is the difference between this and creating a GUI the good old fashioned way and having a textfield subclass that knows how to two-way bind its value to a remote value?

In other words, if we ignore syntax, what is the fundamentally new capability?

[+] mpweiher|3 years ago|reply
> what is the fundamentally new capability?

There hasn't been any fundamentally new capability since (pick your favourite):

1. the Turing Machine

2. the Lambda Calculus

3. the stored program computer

4. the NAND gate

No high level language has ever added any fundamentally new capability, everything it can do can be done in machine language. See also: compilers and interpreters.

High level languages are purely for human convenience, they exist in order to allow us to express what we want to accomplish in a straightforward manner. When the two don't match, we have an impedance mismatch, one of the most famous ones was using goto for control structures (https://homepages.cwi.nl/~storm/teaching/reader/Dijkstra68.p...), solved by the introduction of structured programming.

Today we also have such an impedance mismatch, because most of what we do is no longer procedural in nature, but our means for expressing this are essentially procedural.

My last long-form attempt at explaining this was here:

https://2020.programming-conference.org/details/salon-2020-p...

For the domain of GUIs (one area where the mismatch is particularly painful and obvious), Stéphane Chatty did a much better job of explaining the problem than I did:

https://dl.ifip.org/db/conf/ehci/ehci2007/Chatty07.pdf

So the "new capability" in Objective-S is having linguistic support for architectural abstractions, so you can directly express components and connectors and their connections. Rather than just implementing them with procedures.

And GUI bindings are a good example (which I also talk about in my "Tyranny" paper): we can implement in current programming languages, but we generally cannot express them in the language.

[+] Rodeoclash|3 years ago|reply
Developer productivity by the looks of it
[+] PoignardAzur|3 years ago|reply
> I hope this makes it clear, or at least strongly hints, that this is not the usual low-code/no-code trick of achieving compact code by creating super-specialised components and mechanisms that work well for a specific application, but immediately break down when pushed beyond the demo.

That's... not clear at all to me. This seems like the kind of code that is fun to write, annoying to read, infuriating to debug.

The dataflow part where text flows into an S3 file is interesting, but it feels like as you get into corner cases that need more complex transformations with more potential bugs, the "just bind this value to its destination" syntax would quickly become cumbersome, and you'd want something closer to RxJS.

[+] Shish2k|3 years ago|reply
> Objective-S script is actually not code golf, although it may appear as such

… this is not the compliment that you think it is