[HN Gopher] Jai Language Primer (2017)
___________________________________________________________________
Jai Language Primer (2017)
Author : begoon
Score : 32 points
Date : 2021-01-20 19:48 UTC (3 hours ago)
(HTM) web link (github.com)
(TXT) w3m dump (github.com)
| 6gvONxR4sf7o wrote:
| > It is still in development and as of yet is unavailable to the
| general public.
|
| Damn. I was hoping that had changed. I'm curious to see the hype,
| but I'm not into PL stuff enough to dig into a language I can't
| play with.
| thechao wrote:
| I'm into PL(T) stuff and I've gotten tired about hearing about
| Jai. One thing I like is Jai adopting the SPAD X-form (Chi-
| form); he (mis)attributes it to Sean Barret:
| The syntax name: type = value; specifies that a variable named
| name is of the type type and is to receive the value value
|
| Where the inferred/imperative-assignment form is a visual
| reduction: name : type = expr name :=
| expr
|
| It has the lovely property that if you elide the type
| expression the variable gets an inferred type. If you keep the
| type expression, then the language has both a type-expression
| for type-checking and type of the value-expression for type-
| inference; then, the PL can be designed in one of a few ways:
|
| 1. If the type expression mismatches the type of the value-
| expression, fail;
|
| 2. If the type expression can be unified with the type of
| value-expression, keep the unified; or,
|
| 3. If the value expression can be coerced to the type
| expression, keep the type expression.
|
| SPAD used the second behavior and it was the bees-knees. This
| was especially true since SPAD supported refinement (quotient)
| types, so you could do things like this: name
| : int(-2 < n and n <= 10) = ... complex expression that we
| can't prove is in the range (-2, 10] ...;
|
| ... and this would fail to compile.
| cardanome wrote:
| Funny enough GDScript, the internal scripting language of the
| Godot engine, is using a similar form for (optional) type
| declarations. var damage: float = 10.5
| var damage := 10.5 var dynamic_typed_damage = 10.5
|
| If you use the colon you get a static typing, without it you
| get dynamic typing.
|
| https://docs.godotengine.org/en/stable/getting_started/scrip.
| ..
| thechao wrote:
| That's nice! Is is gradually typed or just untyped?
| trynewideas wrote:
| (2017)
| dang wrote:
| Year added above. Thanks!
| dmit wrote:
| (2017)
|
| The language has come a long way since this writeup.
| dang wrote:
| Year added above. Thanks!
| mariusor wrote:
| Just a warning, this document doesn't reflect very well where Jai
| is at in 2021.
|
| The best place to get information about the language is this
| youtube playlist:
| https://www.youtube.com/playlist?list=PLmV5I2fxaiCKfxMBrNsU1...
|
| However it has a lot of content.
| hardwaregeek wrote:
| I'm not super eager at having to watch a few 1-2 hours videos
| to even understand why I should use Jai.
|
| jblow seems like a really talented developer. I loved Braid and
| there's clearly some great work being put into Jai. But if (and
| this is a big if) he wants to make Jai into a language people
| use, he should seriously consider putting more effort into the
| documentation and distribution side.
| indy wrote:
| jai isn't publicly available yet. (It's currently in a
| private beta.)
| iherbig wrote:
| >...he should seriously consider putting more effort into the
| documentation and distribution side.
|
| In addition to what other people have said, Blow is
| explicitly working on documentation over time and closed beta
| users have access to a fair number of documents detailing
| both language features and the philosophy behind the
| language.
|
| One huge reason why the language IS still in closed beta is
| because Blow believes heavily in not releasing half-assed
| work. Documentation is a part of that.
| mariusor wrote:
| I know. Anyway the playlist is not about why _you_ should use
| the language but more about why he started developing it and
| some of the more important steps along the way (2014 - 2021).
|
| The compiler is not out yet, it's in a closed beta to a small
| number of developers with plans to release later this year
| (to the best of my knowledge).
| 0xffff2 wrote:
| From watching some of his Twitch streams, I get the general
| impression that he really doesn't care if Jai is a language
| that "people" use. He seems to be developing it basically
| entirely as a language that _he_ wants to use and whether
| anyone else outside of his company uses it is almost
| irrelevant.
| userulluipeste wrote:
| Languages are subjects to network effect and in the long
| term that is what will make or break them. Now, when one
| has to eventually deal with the wider public (just like
| when developing any given product addressed at public), it
| pays to consider its feedback. I understand that he is
| experienced and that most likely he knows better than what
| he might get from such feedback. We'll see how this turns
| out.
| ivanech wrote:
| he had a recent interview where he addressed this directly:
| his philosophy is that there's too much crappy stuff out
| there that's heavily promoted and branded, and so he's trying
| to get the language to a place where it's stable and worth
| using before he does a general release / chooses an actual
| name. It's in closed beta now.
| da_big_ghey wrote:
| Well, he's not releasing it generally yet, so it's not fair
| to criticize not releasing documentation. This was created by
| someone else. He mentioned that when he open-sources it or
| soon after, he's planning on releasing the engine from the
| game Thekla is currently working on, which will provide a
| good sample of "idiomatic Jai". I'm hoping that good
| documentation will come with it.
| lhorie wrote:
| The page says "Jai could be described as a modern replacement
| for C"
|
| Rust and Zig are other languages that more or less try to be
| replacements for C. Without having looked too deeply, it feels
| like Jai could more or less be described as similar to D (with
| the -betterC flag, perhaps). Does that seem like a reasonable
| characterization? Is there something specific that Jai brings
| to the table that those other languages don't?
| failrate wrote:
| The one thing I remember surprising me was that the build
| scripts were also jai.
| warkanlock wrote:
| I've been waiting for this moment for such a long time. A lot
| time spent watching Blow's streamings
| RobotCaleb wrote:
| Which moment have you been waiting for? I have also spent a lot
| of time watching his streams, but I don't believe Jai is a
| thing anybody can use yet, is it?
| dgellow wrote:
| It's not public yet, still in close beta
| Rickasaurus wrote:
| This AoS -> SoA feature is really cool
| iherbig wrote:
| It is no longer in the language. Much of this document is
| extremely out of date.
| generichuman wrote:
| It is available as a metaprogram in the standard library,
| afaik. Someone asked about it on one of his streams before.
| viktorcode wrote:
| Jai changed quite a bit since then.
|
| For more current info check out beta user's impressions (and the
| language primer) here:
| https://www.youtube.com/watch?v=i1vbvikDiI8 (first video in the
| series)
| Rickasaurus wrote:
| Ahh, I wish they could do concise text updates like this
| article, videos are so time consuming.
| dang wrote:
| If curious see also
|
| 2018 (a bit) https://news.ycombinator.com/item?id=16596282
|
| 2016 https://news.ycombinator.com/item?id=11086708
|
| 2015 https://news.ycombinator.com/item?id=10346985
| OneGuy123 wrote:
| Why must every new language use a completely unique syntax?
|
| This is so tiring...why can't they just stick to syntax that
| everyone knows...each one has to reinvent random new syntax and
| destroy old conventions that people already know thus needlesly
| creating friction.
| dmit wrote:
| Well, if you split "language" into 1) syntax, 2) semantics, 3)
| standard library, then why would you think that #1 (syntax) is
| the only part that can't be improved upon?
| Jtsummers wrote:
| Most of it doesn't seem terribly new. It's like a hybrid of
| some classic-Algol-style, C-style, and Haskell-style
| (particularly at the function/struct declarations), but mostly
| C-style.
|
| That he seems to have thought deliberately about stepwise
| refactoring is actually pretty nice. This is hard to do in many
| languages (where refactoring-to-function/method is often a
| wholesale endeavor). Doing it stepwise means you can iterate
| and test more deliberately throughout the process, and is nicer
| if you're not using a refactoring tool beyond your text editor.
|
| In the end, reading the example code caused me no headaches, it
| was as clear as any other C/Algol-derived language.
| aarpmcgee wrote:
| You might very well be fighting against a force of nature, i.e.
| shouting at the wind.
___________________________________________________________________
(page generated 2021-01-20 23:01 UTC)