Upgrade to Pro — share decks privately, control downloads, hide ads and more …

bel lispの紹介

Niyarin
July 29, 2021

bel lispの紹介

Niyarin

July 29, 2021
Tweet

More Decks by Niyarin

Other Decks in Technology

Transcript

  1. (いまさら) Belについて
    簡単な紹介と処理系
    Niyarin

    View Slide

  2. Belとは
    Paul Graham氏のLisp系言語
    データの種類が少ない
    ・Symbol, Pair, Char ,Stream
    ・他のありがちなデータもこれらで表現
    コンパクトだが、継続やマクロがちゃんとある
    ・実装はたのしめると思う
    レキシカルスコープ、lisp-1
    公式は処理系を出していない
    ・ただし、コアの部分さえ実装すれば動かせる
    ・残りの部分はbel.belとして提供されている

    View Slide

  3. せっかくなのでArcについても (Wikipedia程度の情報)
    Paul Graham氏のLisp系言語
    Belの前に開発されていた
    実用的に使われた実績がある
    Hacker Newsのweb formとフィード (今はどうなのか不明)
    Arcのフォーラム
    Racketで実装
    コアが小さい (bel同様)

    View Slide

  4. Belを読む (http://www.paulgraham.com/bel.html)
    bellanguage.txt
    belのコア言語の”カジュアル”な定義
    bel.bel
    拡張関数、マクロや数値の定義
    belexamples.txt
    ちょっとの例

    View Slide

  5. Belと既存のLispの慣習
    ・ 空リストはnil。偽でもある。ただし、nilはシンボル
    ・非真性list有り
    ・ car, cdrはそのまま。 ペアの変更は、xar, xdr
    ・condがない
    代わりに、 (if a1 a2 a3 a4 … an)
    ・ lisp1、レキシカルスコープ
    ・伝統的macro (風)

    View Slide

  6. Belのデータ表現1 / 3 関数もリスト
    こんな表現
    (lit clo ローカル環境 引数 本体)
    ・ closureを作る構文は、quasiquoteで書かれている
    ・ 例
    ((lit clo nil (x) (+ x 1)) 100) → 101
    ⚠ lit構文は、自身をそのまま返す

    View Slide

  7. Belのデータ表現2 / 3 マクロもリスト
    表現
    (lit mac クロージャ)
    よくある、クロージャに式を渡して展開する やつ
    (クロージャ 式) eval→ 展開結果  eval→ 実行結果

    View Slide

  8. Belのデータ表現3 / 3 その他
    数値もリスト 
    0,1,2,3,4 ...
    → nil, (t), (t t), (t t t), (t t t t) …
    文字列もリスト
    “abc” → (\a \b \c)
    空リストと”真”はシンボル
    nil t

    View Slide

  9. 継続もある
    ・ ccc”構文”で作れる
    ・もちろん継続もリスト
    表現の形式は実装者依存 
    niyarinは、
    (lit cont コールスタック ローカル環境)
    ⚠ インタプリタのコールスタックを陽で持っておく
    ・dynamic-wind風の構文、afterもある
    継続で外への脱出を検出し、その前に指定した処理を実行させ

    View Slide

  10. Belで実用的なコードを書けるのか?
    がんばればいける
    ・ (coin) 関数
    ランダムで t , nil を出す
    ・ (sys ) 関数
    の内容をOSに実行させる
    ・ (thead x) 構文
    xを評価する新しいスレッドを作る
    ・ IO
    streamデータがある。ただし、バイナリしか読めない

    View Slide

  11. Belは処理系実装の題材としては良い
    評価器はコンパクト
    4種のデータと16個の関数と9個のsyntax
    quasiquote
    bel.belを実行するためのいくつかのsyntax-sugar
    処理系実装が楽しめる要素
    マクロ、継続、継続の捕捉、動的束縛、quasiquote
    題材は良いが、テキストの抜けを自力で埋める必要がある

    View Slide

  12. 実装
    ・ bel-sml (github.com/niyarin/bel-sml)
    niyarinの”未完成”の実装
    Standard MLで書かれた素朴なインタプリタ
    気合をいれればすぐできそうだが、さぼってました
    ・他の人の実装
    ほとんどインタプリタ (ぱっと見、それ以外は発見できず) 
    luksamuk/believe (C), masak/bel (Perl), ajlopez/beljs (JS)
    cookrn/babybel(Ruby) ,

    View Slide

  13. その他実装
    IGJoshua/skitter (Clojure)
    bel-likeと謳っているが何が違うのだろう
    BranislavLazic/bell
    lが一個多かった。別言語だったよ (Lispだったけど)

    View Slide

  14. おしまい
    まとめ
    Belはコンパクトで自己記述がおもしろい言語
    継続とかあって実装は楽しい
    公式の実装はないけど、実装はたくさんある

    View Slide