概要
Janet はシステムスクリプトや他プログラムへの組み込みに適した動的言語。 C99準拠 で実装され、主要OSで動作し、移植性が高い。 スレッド・ネットワーク・イベントループ 内蔵など、他の埋め込み言語より多機能。 REPLやビルドツール、豊富な標準ライブラリを提供。 エディタや外部ライブラリ連携 も充実し、学習や導入が容易。
Janetの主な用途
- システムスクリプト言語 としての利用
- 他プログラムへの組み込み 用途
- プロトタイピングや動的システム開発 での活用
- C99 で実装されており、 Windows・Linux・macOS で動作
- 標準Cでない機能(動的ライブラリロード等)は 単純実装、移植性重視
- 埋め込みやすさ と 多機能性 の両立
- スレッド、ネットワーク、イベントループ、サブプロセス管理、PEG(正規表現ライク)など内蔵
Janetの特徴
- 最小構成 :1バイナリのみで即利用可能
- スレッド・ネットワーク・イベントループ の標準サポート
- クロージャ・ガーベジコレクション 対応
- グリーンスレッド(継続) のファーストクラスサポート
- 配列/タプル・ハッシュテーブル・文字列 の可変/不変両対応
- マクロ・末尾再帰最適化 サポート
- Cとの直接連携 (抽象型・C関数呼び出し)
- 動的Cライブラリロード
- 字句スコープ・REPL・インタラクティブデバッガ
- PEG(Parsing Expression Grammars) を標準搭載
- 500以上の関数・マクロ がコアライブラリに収録
- jpm によるスタンドアロン実行ファイル生成
- janet.c/janet.h をプロジェクトに追加するだけで導入可能
コード例
(defn sum3 "Solve the 3SUM problem in O(n^2) time."
[s]
(def tab @{})
(def solutions @{})
(def len (length s))
(for k 0 len (put tab (s k) k))
(for i 0 len
(for j 0 len
(def k (get tab (- 0 (s i) (s j))))
(when (and k (not= k i) (not= k j) (not= i j))
(put solutions {i true j true k true} true))))
(map keys (keys solutions)))
(let [arr @[2 4 1 3 8 7 -3 -1 12 -5 -8]]
(printf "3sum of %j: " arr)
(printf "%j" (sum3 arr)))
- 簡単なHello World 例もサポート
(print "hello, world!")
Janetの使い方
- REPL起動 :janetバイナリを引数なしで実行
- ヘルプ表示 :
-hフラグ指定 - スクリプト実行 :
janet myscript.janet - REPLでドキュメント表示 :
(doc)コマンド - コマンド例
(+ 1 2 3)→6(print "Hello, World!")→Hello, World!(os/exit)→ REPL終了
主なコマンドラインオプション
-h:ヘルプ表示-v:バージョン表示-e code:Janetコードを直接実行-l lib:モジュールを事前にインポート-c source output:ソースをイメージにコンパイル- その他、デバッグ・警告・エラー制御など多数
モジュール・ライブラリ
- GitHubに多数の補助プロジェクト
- jpm install で簡単インストール
- Circlet:HTTPサーバ
- Joy Web Framework:Web開発用フレームワーク
- JSON:JSONパーサ・エンコーダ
- SQLite3:データベースバインディング
- WebView:HTML+CSS UIの生成
- Jaylib:Raylibバインディング(2D/3Dゲーム開発)
- JHydro:暗号化ライブラリ
- JanetUI:libuiバインディング
エディタサポート
- Neovim・Vim・VSCode・Emacs・Sublime Text・Kakoune・TIC-80・Helix など主要エディタ対応
- Zulip でエディタ・ツール議論エリアあり
コミュニティ・ドキュメント
- Zulip Instance (https://janet.zulipchat.com)で活発な議論
- GitHub Discussions もサポート(Zulipの方が機能豊富)
- Janet Docs で公式ドキュメント&ユーザー事例を共有
- 誰でも事例追加可能、学習支援
Janet は、 埋め込みやすさ と 高機能性 を両立した動的言語。 主要OS対応・導入容易・豊富な標準機能・活発なコミュニティ で、 スクリプト・組み込み・プロトタイピング など幅広い用途に最適。