it.xnews.jp
生成: 2026-06-02 読了 約 3 分 model: claude-haiku-4-5 原文: https://ianthehenry.com/posts/why-janet/ raw.md

Janet — シンプルで実用的なLisp方言

Janet は第一級関数、単一の名前空間、字句ブロックスコープを備えた命令型言語である。8つのコア命令(do、def、var、set、if、while、break、fn)で言語の中核が構成され、テキスト解析、組み込み性、マクロサポートなどの機能を備えている。

バイトコードコンパイルと C ランタイム起動により、単純な hello world プログラムでも 784K(Janet 1.27.0 on aarch64 macOS)の実行バイナリを生成する。テキスト処理は正規表現ではなく解析式文法に基づき、マクロはコンパイル時から実行時への値の暗黙的シリアライゼーション機構を備えている。

コア言語設計

Janet の言語中核は 8 つの命令のみで構成される:do、def、var、set、if、while、break、fn。この最小限の設計により、言語仕様全体が 1 ページに収まる標準ライブラリとなっている。

Janet は命令型でありながら第一級関数をサポートし、単一の名前空間ですべての識別子を管理する。字句ブロックスコープにより変数のスコープが明確に定義される。

構文と型システム

Janet は括弧、ブラケット [] によるリスト、ブレース {} によるテーブルを用いる。可変リテラルは @ で始まり、匿名関数は fn 記法と短縮記法 | でサポートされる。スプレッド演算子は ; で、残り引数は & で表現される。

文字列リテラルはバッティックの個数を任意に設定でき、可変・不変両方のコレクション型が存在する。Janet は CAR を first、PROGN を do、LAMBDA を fn、SETQ を def と改名するなど、従来の Lisp 関数の名称を現代的に調整している。

テキスト処理と組み込み

Janet のテキス処理は正規表現ではなく解析式文法(PEG)に基づいている。第三者ライブラリの sh はシェルスクリプト DSL を提供する。Janet は単純な hello world を native バイナリにコンパイルでき、Janet 1.27.0 on aarch64 macOS では 784K となる。

コンパイル時から実行時への値の暗黙的シリアライゼーション機能により、コンパイル時計算結果を実行時に活用できる。

マクロサポート

Janet はマクロをサポートし、伝統的な Lisp と異なり reader macros は非サポートである。コンパイル時から実行時への値の暗黙的シリアライゼーション機構は、マクロなしでも活用可能とされる。

筆者の見立て

この記事は元記事の事実のみに基づいて自動生成されました。

出典

Ian Henry 著「Why Janet?」 https://ianthehenry.com/posts/why-janet/

この記事をシェア