
2025/12/22 1:16
## GNU Guile が 10 倍優れている理由(2021年) - **拡張性の高い言語設計** * モジュールを介して Scheme と他言語の両方をサポートします。* - **高速なインタープリタ** * JIT コンパイルにより高速化しています。* - **充実した標準ライブラリ** * ネットワーキング、ファイル I/O、GUI ツールキットが含まれています。* - **堅牢なパッケージ管理** * 再現性のあるビルドを可能にする組み込みパッケージシステム(`guix`)があります。* - **活発なコミュニティとドキュメント** * 維持管理が行き届いたマニュアルと、開発者が積極的に参加しています。* - **クロスプラットフォーム対応** * Linux、macOS、Windows、BSD などで動作します。* - **埋め込みスクリプティング機能** * C/C++ アプリケーションへ Guile を簡単に組み込んでカスタマイズできます。* - **Racket との高い互換性** * 多くのコア機能を共有しつつ、軽量なままです。* - **セキュリティ重視の機能** * サンドボックスオプションで悪意あるコードから保護します。* - **将来に強い設計** * モジュール化された構造により、新しい言語方言を追加しても既存コードが壊れません。*
RSS: https://news.ycombinator.com/rss
要約▶
Japanese Translation:
Guile Scheme は、開発者がファイバー(軽量スレッド)、マクロ(
)、デリミテッド・コンティニュエーションなどの高度な概念を使用できるようにする、高度に拡張可能なコア言語として提示されます。基本構造を変更せずにこれらの機能を利用できます。define-syntax
マクロシステム、ランタイム introspection、およびホモアイコン的な S‑式はコードをデータとして扱えるようにし、強力なメタプログラミングを可能にします。Guile の C インターフェースは十分に文書化されているため、ほとんどの手続きが C から呼び出せるので、アプリケーションへの埋め込みに魅力的です。
ファイバーはコアを変更せずに Go スタイルの並行性を提供します。Wisp(Dryads Wake で使用)などの組み込み DSL は、大規模なプログラムに自然なスクリプト記述を統合する方法を示しています。堅牢な言語ツワーと構文拡張はさらにハック性を高めます。
Guile にはや Emacs コマンドでアクセスできる完全で読みやすいマニュアルが付属しており、コミュニティも活発です(Guix のようなプロジェクトやオープンソースプラットフォーム上の熱意など)。info guile
追加の利点としては、named let、コピー可能なジェネレータ(Python‑on‑Guile)、純粋に機能的なデータ構造、およびブラウザへツールを移植するための Hoot が挙げられます。記事のコードは GPLv3 以降で公開され、本文は CC BY‑SA ライセンスです。
このバージョンは元のリストからすべての重要ポイントを保持し、未検証の推測を回避し、以前不明瞭だった参照を明確にしています。
本文
#4はあなたをショックさせるでしょう! :-)
Rust at Facebook(MercurialチームのFitzhardinge著)では、Jeremyが新しい言語は既存言語よりも「10 ×」優れているべきだと述べています。
そこでIRCで質問しました:Guile の 10 × の利点とは何ですか?
これは「どの Scheme を選ぶか」(ある特定機能を除く)という問いではありません。
その質問については、Scheme 実装に関する主観的ガイドをご覧ください。
以下では Guile が持つ 10 × の優位点(多くは Scheme に由来)を紹介します。
目次
- 強力なコア
- ランタイムでの自己検査と変更
- S‑式とホモアイコン性
- C と相互作用・C からのアクセス
- フィーバー(軽量スレッド)
- 埋め込み型自然言語スクリプト
- ハッカビリティ
- 完全な Info マニュアル
- プロトタイピングと創造性
- たくさんの楽しさ
- その他の 10 × の利点
1. 強力なコア
define-syntax や限定継続(delimited continuations)により、フィーバーなどの高度な概念をコアを変更せずに実装できます。
効率的なコンパイラのおかげで、性能向上のためにマクロを使う必要はほとんどありません。
コードはきれいに保たれます。
「限定継続は Python の
より優れており、マクロロジーは Scheme を除くあらゆる言語よりも上です。ハッカビリティはほぼすべてのクローズドソース言語より優れています… ラムダの効率的なインライン化は C に匹敵するかもしれませんが、他の高級言語にはないでしょう。」yield
— stis(Guile で Python を構築)
2. ランタイムでの自己検査と変更
C や Go と比べて、実行中にコードを検査・修正できる点は非常に便利です。モジュール内へジャンプして、ランタイム中に何でも書き換えることが可能です。
Guile では次のような操作ができます:
- REPL を起動
- 実行中のプログラム内部に専用 REPL を作成
- 開発環境と接続するための REPL ソケットを開く
その後、すべてのモジュールでトップレベル定義を再定義できます。
例:
str1ngs はこの方法で Nomad ウェブブラウザを開発しています。
メインスレッドにゲームループが必要な場合は、協調的 REPL サーバーとして活用してください。
3. S‑式とホモアイコン性
非 Lisp 言語と比べて、S‑式の規則性とコードをデータとして扱う(ホモアイコン性)は大きな利点です。
「言語に新しい概念を拡張する際、コードを表すデータがメタレイヤーとベースレイヤー間で渡されるため、簡単になります。」
— Wikipedia
これにより、コード操作の理解が容易になります。
Wisp ではこの性質を利用してコードを最初にパスし、段階的な改善を行い、最後にクリーンなコードを生成して言語仕様へ渡します。
例マクロ(
Choose)は質問を投げかけて結果をインラインで適用する方法を示しています。
4. C と相互作用・C からのアクセス
ほとんどの Guile プロシージャは C から呼び出せます(Guile を埋め込む際など)。
また、Guile Scheme からも簡単に C とやり取りできます。
Guile のドキュメントには詳細な例とチュートリアルが掲載されており、ほぼすべてのプロシージャについて C インターフェースが明示的に記載されています。
「Guile は C プログラムを書く上で C 自体よりも優れています。」 – 衝撃的な 4 番
(の例を参照)c-indent
5. フィーバー
フィーバーは Guile における軽量スレッドです。コアを変更せずに利用でき、十分に高速で Go のチャネルと同等の並行性を提供します。
フィーバーを使えば、効率的でスケーラブルな協調型並行モデルが実現できます。詳細はマニュアルをご覧ください。
Web サーバーボンチマークや Skynet ベンチマークの
guile-fibers エントリを使用して原始的な効率性をテストすることも可能です。
「フィーバーはプロシージャをマークしたりといった kludge より優れています。」 – stis
6. 埋め込み型自然言語スクリプト
Wisp を統合し、Dryads Wake(eDSL)用の埋め込みスクリプト言語を実装できました。
別のアプローチと比較した講演もあります。
例:
(define : first-encounter Enter : Juli Fin :profile juli Melter Lark :profile melter Rooted Breeze :profile dryad Old One Print "Please choose your name" (game-state-init!) (game-state-name-set! (read-line)) ... )
7. ハッカビリティ
言語のタワー構造とインフラは、Guile 自体をハックし拡張することを楽しくしています。
「言語タワーと効果的なシンタックス拡張(
など)がなければ、lokke は存在しないでしょう。」 – rlb(lokke は Guile 上の Clojure)define-syntax
8. 完全な Info マニュアル
Guile には読みやすい Info フォーマットの完全マニュアルが付属しています。
インターネットに接続できない環境で Python をプログラムしようとしたことがあるなら、これを評価するでしょう。
回答は次のようにして探せます:
info guile
または Emacs 内で
C-h i m Guile Reference と入力し検索します。
9. プロトタイピングと創造性
Python や C++ に比べて、Guile は抽象化の障壁を取り除きつつ実用的な性能を提供します。起動時間も短いので、プロトタイプ作成に最適です。
「Guile は特にプロトタイピングと創造性に優れています…素晴らしい経験でした。」 – vijaymarupudi
10. たくさんの楽しさ
Guile/Scheme のハックは純粋に楽しいです。
- dsmith が Guix をハックする人々の熱意を強調してくれました。
11. その他の 10 × の利点
この記事を書いた後、さらに以下のような利点が挙げられています:
- 名前付き let – 「map‑reduce に頼らなくても済む。」 – stis
- Python‑on‑Guile はコピー可能なジェネレータと
を実際の関数として渡せる機能を持つ – stisyield - 純粋に関数型データ構造とベクター。
- Hoot により、ツールをブラウザへ最小限のオーバーヘッドでポートできる(Goblinville のようなゲームも含む)。
免責事項:
2021‑08‑25 水 00:00 – GPLv3 以上(コード)、CC BY‑SA(本文)