6 ms·
Jai Language Primer (2017)
- warkanlock 6y agoI've been waiting for this moment for such a long time. A lot time spent watching Blow's streamings
- RobotCaleb 6y agoWhich 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 6y agoIt’s not public yet, still in close beta
- 6gvONxR4sf7o 6y ago> 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 6y agoI'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 6y agoFunny 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/scripting/gdscript/static_typing.html https://docs.godotengine.org/en/stable/getting_started/scrip...
- thechao 6y agoThat's nice! Is is gradually typed or just untyped?
- trynewideas 6y ago(2017)
- dang 6y agoYear added above. Thanks!
- dmit 6y ago(2017) The language has come a long way since this writeup.
- dang 6y agoYear added above. Thanks!
- mariusor 6y agoJust 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=PLmV5I2fxaiCKfxMBrNsU1kgKJXD3PkyxO https://www.youtube.com/playlist?list=PLmV5I2fxaiCKfxMBrNsU1... However it has a lot of content.
- hardwaregeek 6y agoI'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 6y agojai isn't publicly available yet. (It's currently in a private beta.)
- john4532452 6y agoIt took me a long time to find this out. It never occured to me the source code is private when an author is posting so many videos and discussing about the design of language.
- mariusor 6y agoI 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 6y agoFrom 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.
- dang 6y agoIf curious see also 2018 (a bit) https://news.ycombinator.com/item?id=16596282 https://news.ycombinator.com/item?id=16596282 2016 https://news.ycombinator.com/item?id=11086708 https://news.ycombinator.com/item?id=11086708 2015 https://news.ycombinator.com/item?id=10346985 https://news.ycombinator.com/item?id=10346985
- OneGuy123 6y agoWhy 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.
- aarpmcgee 6y agoYou might very well be fighting against a force of nature, i.e. shouting at the wind.
- dmit 6y agoWell, 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 6y agoMost 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.
- Rickasaurus 6y agoThis AoS -> SoA feature is really cool
- iherbig 6y agoIt is no longer in the language. Much of this document is extremely out of date.
- generichuman 6y agoIt is available as a metaprogram in the standard library, afaik. Someone asked about it on one of his streams before.
- viktorcode 6y agoJai 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 https://www.youtube.com/watch?v=i1vbvikDiI8 (first video in the series)
- Rickasaurus 6y agoAhh, I wish they could do concise text updates like this article, videos are so time consuming.
- cassepipe 6y agoI really like that the arrays are a full type that pack their size information. C has always frustrated me on this particular point. One question though : Is the array types passed as a pointer and an int or copied locally ? I guess 1. because 2. would not make much sense (although this the C behaviour for structs in C... I wonder why...)