[HN Gopher] The OK? Programming Language
       ___________________________________________________________________
        
       The OK? Programming Language
        
       Author : animal_spirits
       Score  : 67 points
       Date   : 2022-08-29 17:26 UTC (5 hours ago)
        
 (HTM) web link (github.com)
 (TXT) w3m dump (github.com)
        
       | padjo wrote:
       | Bravo! Subtle enough to begin with but but descends into
       | hilarious absurdity by the end.
        
       | pavlov wrote:
       | There's also the oK language, an APL family member implemented in
       | JavaScript:
       | 
       | https://aplwiki.com/wiki/OK
        
         | GuB-42 wrote:
         | And there is Ook!, a language for Orangutans.
         | 
         | It is a joke language that is equivalent to brainfuck, and
         | doesn't contain the word "monkey".
         | 
         | https://www.dangermouse.net/esoteric/ook.html
        
       | person22 wrote:
       | The lack of operators (which makes for some complicated code to
       | read) seems at odds with the statement of making a language easy
       | to read.
        
       | [deleted]
        
       | [deleted]
        
       | livinglist wrote:
       | This should be a serious programming language.
        
         | zeckalpha wrote:
         | https://go.dev/
        
           | cheriot wrote:
           | > Null values, famously dubbed the billion dollar mistake. I
           | want my money back Tony Hoare.
           | 
           | s/Tony Hoare/Robert Griesemer, Rob Pike, and Ken Thompson/
        
       | djhaskin987 wrote:
       | I don't know, I think maybe the merging of iteration and
       | concurrency is an interesting idea.
        
         | wgd wrote:
         | It reminds me a little of https://vorpus.org/blog/notes-on-
         | structured-concurrency-or-g... in how it forces concurrency to
         | take place synchronously within a larger thread of execution
         | and block until all sub-units are complete.
        
       | [deleted]
        
       | AdamH12113 wrote:
       | I made it to the comparison operators before convincing myself
       | that it really was a joke. The buildup on this is brilliant --
       | the crossover between clueless arrogance and absurdity is very
       | subtle.
        
         | function_seven wrote:
         | Same spot for me. Up to that point, I was 50/50 on whether this
         | was taking itself seriously or not. Then the "simplification"
         | of >= for everything made me smile. _OK?_
        
       | Tao3300 wrote:
       | > For extenuating circumstances, you can define a privacy
       | acknowledgement with the _pack_ keyword, allowing external code
       | to access a [notaclass 's] fields if they include the
       | acknowledgement in a comment, preceded by 'I acknowledge that'
       | 
       | Not going to lie, I want this in Java yesterday.
        
       | nemo1618 wrote:
       | I appreciate that the author implemented OK? in Go -- the
       | language which it is most obviously parodying. Lends a bit more
       | weight to the critique!
        
         | Quekid5 wrote:
         | It might actually be a meta-joke on the band name 'OK Go'.
        
       | robga wrote:
       | OK Computer. Fitter, healthier, more productive.
        
       | cheriot wrote:
       | > Null values, famously dubbed the billion dollar mistake. I want
       | my money back Tony Hoare.
       | 
       | A world with golang and no nil values would be a dream.
        
         | redbar0n wrote:
         | vlang.io seems like that language.
        
         | topicseed wrote:
         | It really would
        
       | wgd wrote:
       | Jokes aside the compiler-checked acknowledgements are kind of
       | clever. The example in the docs is deliberately confrontational,
       | but there's a kernel of a neat idea there. Imagine needing to
       | write:                 // I acknowledge that the internal
       | structure of this data is subject to change without notice
       | x = foo.state
       | 
       | Or perhaps:                 // I acknowledge that this data is a
       | complicated graph of pointers and is easy to break in subtle ways
       | foo.xyz[0].bar[1] = &foo.asdf[3]
       | 
       | Or perhaps:                 // I acknowledge that this data is
       | heavily cached and I need to call rebuild() before changes take
       | effect       x.something = "Hello"       x.rebuild()
        
         | miamibougie wrote:
         | Wouldn't these use-cases be better solved by public accessor
         | methods though? I really liked the idea at first blush too, but
         | the more I thought about it, the more I came around to the fact
         | that it's ultimately the class maintainer's responsibility to
         | ensure that the directives in those comments are followed
         | safely. In cases like your first example, it's dangerous not
         | just for the x reference of foo.state, but also any other
         | concurrent references to the object, to perform modifications
         | at all.
         | 
         | Maybe a read-only version, so you can grep state at a point in
         | time?
        
           | wgd wrote:
           | > it's ultimately the class maintainer's responsibility
           | 
           | It's ultimately the responsibility of the programmer who's
           | building a tool/product/etc, because everything is ultimately
           | their responsibility.
           | 
           | As programmers we ~always have the nuclear option available
           | to us of forking the code and implementing all the necessary
           | accessors ourselves, but sometimes that's really just a bunch
           | of pointless busywork and there's no reason we should have to
           | put up with it in those cases.
           | 
           | This can be a contentious subject because there's a lot of
           | nuance and the right answer is often context-dependent. But I
           | personally think that the Java style of "we must absolutely
           | protect the library user from themselves and childproof
           | everything" is waaaay too far in the wrong direction.
           | 
           | I would much rather that a language have mechanisms to
           | clearly communicate "don't touch this unless you have a good
           | reason, but if you need to here's how" rather than saying in
           | effect "you, the person using this library, are dumb and need
           | to be prevented from messing with the library maintainer's
           | perfect vision".
           | 
           | And so I think the "required acknowledgement" thing has the
           | glimmer of a really neat innovation in it (although if I were
           | to copy the idea for a language of my own I would probably
           | make it obligatory, such that every struct allows breakglass
           | access to private fields with a default acknowledgement, and
           | all the library author can do is change the acknowledgement
           | text).
        
       | topaz0 wrote:
       | The evolve idea is very cool.
        
       | SketchySeaBeast wrote:
       | This is just begging for a "Go" transpiler.
        
       | [deleted]
        
       | matthewfcarlson wrote:
       | At first I was confused why do we need another language. But then
       | I kept reading. Will I program in Ok? Probably not. But did I
       | enjoy reading the readme? Definitely. It just kept getting better
       | and better.
       | 
       | The idea of logical operators not applying to variables seemed
       | awesome. Though I do hate the lack of ==.
        
       | TeaDude wrote:
       | Hmm. This has some interesting bits even if it's ultimately a
       | joke. I'm feeling some "alternate universe lua" vibes with ideas
       | like using switch cases for everything.
       | 
       | Also, I really _REALLY_ like how nulls are NO!s instead of nils
       | or something similar. Getting flashbacks to a beloved TMBG album
       | (https://www.youtube.com/watch?v=hsoFghzIQ0s)
        
       | coldtea wrote:
       | It's OK I guess
        
       | phanimahesh wrote:
       | This is brilliant. It needs a webassembly compiler though.
        
         | tffcccdredf wrote:
        
       | pyrolistical wrote:
       | The null and error handling could have been unified. No need for
       | null if empty can be represented as empty array
        
       | blue_pants wrote:
       | I'm not sure how much of it is for jokes and how much is serious
        
         | MonkeyMalarky wrote:
         | I wasn't sure until the section on there only being one
         | comparison operator.
        
       | maxique wrote:
       | > You may disagree with this idiom, and that's okay, because it's
       | enforced by the compiler. You're welcome.
       | 
       | Brilliant
        
         | 082349872349872 wrote:
         | to be pedantic, in the days when this was generally true, it
         | was ultimately enforced by the linker...
         | 
         | (and sometimes the 36-bit machines would even limit identifiers
         | to 6 6-bit characters)
        
       | dqpb wrote:
       | I like the idea of only allowing one expression per switch case.
        
       ___________________________________________________________________
       (page generated 2022-08-29 23:00 UTC)