JANETTTTTTTTTT - Jack Tripper Area 51 / Groom lake is busy. 4 Janet Airlines aircraft in the air right now. Shots Departing Palmdale April 2021 and taxing at McCarran, Las Vegas February 2021 #AvGeek #area51 #Groomlake #janet #JanetAirlines #3sCompany

https://globe.adsbexchange.com/?icao=a4207f,a2ec0c,a2b320,ac96df

for those curious here are the design decisions that I find confusing or just bad:

the (frequencies) form (which is meant to count the number of occurrences of each element in a list) completely ignores all nil values, and this isn’t documented anywhere

#Janet has a really cool concept where there are separate types for mutable or immutable data structures. for example "asdf" is an immutable string, but @"asdf" is a mutable string. but the problem is that for some reason, @"asdf" != "asdf" and also @"asdf" != @"asdf" - even if you do a deep/recursive equality check? and this is true for all data structure types

since the above means that the difference between mutable and immutable is very important if you want to compare things, you would think that all of Janet’s forms would be very clear about whether they return a mutable or immutable data structure, right? nope! there is no documentation of this whatsoever, which means that every time you want to compare two data structures you have to manually convert both of them - recursively - to immutable structures, just in case

the (complement) macro is meant to take a function and return its complement (a function that returns true when the original function would return false and vice-versa) but I think it’s just straight-up broken if you run it on a function with an arity of more than 1, and this is not documented anywhere

Janet’s random number generation is deterministic by default because the random seed defaults to the same number every time. you have to manually set the random seed yourself if you want to fix this. this isn’t documented either btw

Janet has a built-in error system using fibers (this is really cool!) but almost none of its forms actually throw errors when they should. instead they return values like nil or false and expect you to check this every time (even when this isn’t a documented behavior)

Janet’s docstrings use terms like “strictly equal”, “strictly less than”, etc. but the documentation calls this “primitive comparison” instead and never uses the word “strict”

in general there’s a pretty big disconnect between the language that Janet’s docstrings use, and the language used in the documentation. it feels like they were written by separate people who didn’t communicate very much

a lot of Janet’s docstrings say that they only take an indexable type but this seems to never be true - they can take any data structure type just fine, including strings

also, Janet either has no documentation for, or extremely limited documentation for:

  • any basic file operations
  • the existence of Lua-style metamethods which apparently this language has?
  • how to get a list of an object’s methods (you need to use (keys «object») in the REPL, even though a lot of objects are a bespoke type imported from C so there’s no indication that they might have methods or keys at all)
  • which features are supported by its regex implementation and how to use them (for example: if I regex/replace, is there any way that I can access the text of the capture group in my replacement?)

Me: If I want to get paid for dev again—and I do—I should probably spend less time hand-writing code in niche languages and messing about with niche applications. Maybe spend some time with LLMs generating React applications instead.

Also me: (spends the first part of the morning writing #Janet code to explore API functionality in #Logseq)

@iacore @jayalane @screwlisp

Thanks

I'm not trying to learn an easy to learn language. I'm trying to learn lisp. (Which doesn't seem all that hard.)

I'm a retired computer consultant with 40 years of database programming experience who now codes for a hobby, mostly plain text programming.

@screwlisp has got me interested in lisp again which I explored in the eighties while in school.

And I'm still in school but now I'm taking jazz improv not computer science.

#lisp #janet #programming

FAO UK #Academic peeps on here.

The #Snowflake browser extension (which you should be able to install however locked down your device is) works fine over #Eduroam and #Janet - so do it now and make your neo-liberal management unwittingly support #Tor and anti-censorship (in the UK as well as more openly authoritarian countries).

科學家偵測到太空神秘「鐵條」,可能揭示地球未來

BBC News 中文 2026-01-25 16:00:00 CST天文學家於環形星雲中發現巨大鐵條。此結構來源未明,但若為遭摧毀的行星殘骸,可能預示著數十億年後太陽膨脹時,地球將面臨的相似命運。
https://www.thenewslens.com/article/263780
#白矮星 #太空等離子體 #科學 #WHT增強區域速度探索器 #地球 #Roger Wesson #科學家 #Weave #太陽 #環形星雲 #Janet Drew

科學家偵測到太空神秘「鐵條」,可能揭示地球未來 - TNL The News Lens 關鍵評論網

天文學家於環形星雲中發現巨大鐵條。此結構來源未明,但若為遭摧毀的行星殘骸,可能預示著數十億年後太陽膨脹時,地球將面臨的相似命運。

TNL The News Lens 關鍵評論網

I'm solving #AdventOfCode this year in #Janet #Lisp. See my solutions for the days 5–8: https://abhinavsarkar.net/notes/2025-aoc-2/

#blogging #programming

Solving Advent of Code 2025 in Janet: Days 5–8

Solving Advent of Code 2025 in Janet: Days 5–8

abhinavsarkar.net

Solved #AdventOfCode day 6 part 2 in #Janet with this consice PEG parser and some math. #programming

```janet
{:main (sequence :num-rows :op-row -1)
:num-rows (group (some :num-row))
:num-row (group (sequence (some :num-entry) "\n"))
:num-entry (sequence :blank (some (number :d)) :blank)))
:blank (any (replace " " 0))
:op-row (group (some (sequence :op (opt (some :s)))))
:op (choice (replace "*" :mult) (replace "+" :add))}
```

I'm solving #AdventOfCode this year in #Janet #Lisp. See my solutions for the first four days: https://abhinavsarkar.net/notes/2025-aoc-1/.

#programming #Blogging

Advent of Code 2025: Day 1–4

Advent of Code 2025: Day 1–4

abhinavsarkar.net

This time I'm solving #AdventOfCode in #Janet (I'll write about my solutions in my blog in batches) and I'm really pleased by the built-in #PEG parsers. This is how the grammar looks for day 2:

```janet
{:main (sequence :ranges -1)
:ranges (some :range)
:range (group (sequence (number :num) "-" (number :num) (opt ",")))
:num (some :d)}
```

#programming #parsing