ディスカッション (11件)
「Janet」という言語やプロジェクトがなぜ今注目されているのか、その背景と2023年時点での立ち位置についてまとめました。
この投稿は新鮮だね。AI以前のインターネットでの議論を思い出させる。新しい言語、新しい構文、そして何年もコードを書いてきた人たちとの激しい議論。AI禁止のオンラインコミュニティを誰か立ち上げるべきだと思う。
しかし、リテラル関数をクォート解除できるようにすることで、Janetは完全に参照透過なマクロを書くことを可能にしている。
Lisp使いの人たちって、こういう極めて抽象的な話ですぐ盛り上がるよね。普通の人にこんなこと言ったら、たぶん逃げ出されると思う。
HNで時々流れてくるJanet関連の投稿に惹かれて読んでみたんだけど、あちこちで絶賛されている「Janet for Mortals」が、全然「一般人(Mortals)」向けの内容じゃないことに気づいた。
Janetが注目されるのは嬉しいね。
最近の機能として「サンドボックス」を推しておきたい。
「機能セットを無効化して、インタプリタが特定のシステムリソースを使用できないようにする。一度無効化された機能は、二度と有効化できない。」
Fennelもあるよ。同じ開発者が以前作った言語で、Janetと似てるけど、Luaにコンパイルされて、完全にLua上で動作するもの。独自の標準ライブラリがないからJanetのパーサーライブラリみたいな便利なものはないけど、Luaを埋め込むような用途のスクリプトを書くのには最適。
作者はこれらをJanetで作ってる(以前HNでも話題になったね):
この2つの魅力的なアートツールのおかげで、少し前にJanetにすごくハマったんだ。
ある程度の長さがあるシステムスクリプトにおいて、Janetが僕の中ではsh、python、awkを完全に置き換えたよ!起動時間がめちゃくちゃ速い(僕の環境ではhyperfineで1.4ms、dashは1ms)し、sh-dslモジュールを使えば、($ cmda w x | cmdb y z) みたいにシェルコマンドをすごく綺麗に書ける。デバッグ用にイメージをロードできる機能も大きな助けになる。使い始めてまだ間もないけど、たぶん今一番のお気に入り言語だね。ちなみに他に使ったことあるLispはSICPで使ったMIT Schemeだけ。
SETQ is def
最初これを見て声に出して「え?」って言っちゃった。SETQはバインディングを作らず、既存のものを更新するだけだからね。で、ドキュメント(https://janet-lang.org/docs/bindings.html )を読んだら、やっぱり作者が間違ってた(「defで作られたバインディングは不変」だから)。たぶん「SETQ is set」と言いたかったんだろう。
JanetはGuile、Tcl、そしてCLの中間にあるような(SBCLの速度や成熟度は別として)いい立ち位置にあると思うから本当に好きになりたいんだけど、ラムダや制御フローの演算子に角括弧(つまりベクター)を使うのだけは生理的に受け付けないんだ。Clojureの時と同じで、どうしても馴染めない。頑張れば慣れるかな?
あと、LSPやSLIMEの現状はどう?最近はそこが本当に重要だから。
Janetには少し不満がある。主にパッケージ管理のバージョン管理がないことと、ライブラリ全体が不足していること(高度なHTTPルーティングとか)。
ただ、JPMを使ってバイナリやスクリプトが作れて、非常にポータブルな点は最高だね。昔、実証実験としてPlaydateっていうゲーム機にJanetを移植したこともあるよ。
Janetを書くのは実際に楽しいんだけど、書くたびに周りからは「お前が作ったのか」と思われる(違うんだけどね)。