Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
bel lispの紹介
Search
Niyarin
July 29, 2021
Technology
0
550
bel lispの紹介
Niyarin
July 29, 2021
Tweet
Share
More Decks by Niyarin
See All by Niyarin
Scheme用nREPLの開発(エラー出力の改善)
niyarin
0
120
nanopass-compiler-frameworkを使ってみました
niyarin
0
330
Gorgos-parser-combinator-written-in-scheme
niyarin
0
300
outputting-beautiful-s-expression
niyarin
0
290
Serialisp
niyarin
1
610
Mongo DBとS式検索
niyarin
0
230
goodbye-python-repl
niyarin
0
260
SchemeのEphemeronとWeak Pairの説明
niyarin
0
760
red-paren-scheme-rev-macro.pdf
niyarin
0
330
Other Decks in Technology
See All in Technology
VS CodeでAWSを操作しよう
smt7174
8
1.7k
Kernel MemoryでAzure OpenAI Serviceとお手軽データソース連携
mitsuzono
1
260
require(ESM)とECMAScript仕様
uhyo
3
830
LayerXにおけるLLMプロダクト開発の今までとこれから
layerx
PRO
1
430
「スニダン」開発組織の構造に込めた意図 ~組織作りはパッションや政治ではない!~
rinchsan
3
570
One engineer company with Ruby on Rails
rstankov
2
160
いつか使うかも貯金してたらめちゃめちゃ機能が増えてた話
riyaamemiya
0
410
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
120
MapLibreとAmazon Location Service
dayjournal
1
160
よく聞くけど使ったことないソフトウェアNo.1 KafkaとSnowflake
foursue
4
370
Google Cloud Next '24 Recap(Cloud Run/k8s)
mokocm
0
250
現代CSSフレームワークの内部実装とその仕組み
poteboy
8
3.7k
Featured
See All Featured
Product Roadmaps are Hard
iamctodd
44
9.7k
Stop Working from a Prison Cell
hatefulcrawdad
266
19k
In The Pink: A Labor of Love
frogandcode
138
21k
The Cult of Friendly URLs
andyhume
74
5.7k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
227
16k
VelocityConf: Rendering Performance Case Studies
addyosmani
320
23k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
187
16k
How STYLIGHT went responsive
nonsquared
92
4.8k
Designing Experiences People Love
moore
136
23k
Docker and Python
trallard
34
2.7k
The World Runs on Bad Software
bkeepers
PRO
61
6.7k
The Brand Is Dead. Long Live the Brand.
mthomps
49
29k
Transcript
(いまさら) Belについて 簡単な紹介と処理系 Niyarin
Belとは Paul Graham氏のLisp系言語 データの種類が少ない ・Symbol, Pair, Char ,Stream ・他のありがちなデータもこれらで表現 コンパクトだが、継続やマクロがちゃんとある
・実装はたのしめると思う レキシカルスコープ、lisp-1 公式は処理系を出していない ・ただし、コアの部分さえ実装すれば動かせる ・残りの部分はbel.belとして提供されている
せっかくなのでArcについても (Wikipedia程度の情報) Paul Graham氏のLisp系言語 Belの前に開発されていた 実用的に使われた実績がある Hacker Newsのweb formとフィード (今はどうなのか不明)
Arcのフォーラム Racketで実装 コアが小さい (bel同様)
Belを読む (http://www.paulgraham.com/bel.html) bellanguage.txt belのコア言語の”カジュアル”な定義 bel.bel 拡張関数、マクロや数値の定義 belexamples.txt ちょっとの例
Belと既存のLispの慣習 ・ 空リストはnil。偽でもある。ただし、nilはシンボル ・非真性list有り ・ car, cdrはそのまま。 ペアの変更は、xar, xdr ・condがない
代わりに、 (if a1 a2 a3 a4 … an) ・ lisp1、レキシカルスコープ ・伝統的macro (風)
Belのデータ表現1 / 3 関数もリスト こんな表現 (lit clo ローカル環境 引数 本体)
・ closureを作る構文は、quasiquoteで書かれている ・ 例 ((lit clo nil (x) (+ x 1)) 100) → 101 ⚠ lit構文は、自身をそのまま返す
Belのデータ表現2 / 3 マクロもリスト 表現 (lit mac クロージャ) よくある、クロージャに式を渡して展開する やつ
(クロージャ 式) eval→ 展開結果 eval→ 実行結果
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
継続もある ・ ccc”構文”で作れる ・もちろん継続もリスト 表現の形式は実装者依存 niyarinは、 (lit cont コールスタック ローカル環境)
⚠ インタプリタのコールスタックを陽で持っておく ・dynamic-wind風の構文、afterもある 継続で外への脱出を検出し、その前に指定した処理を実行させ る
Belで実用的なコードを書けるのか? がんばればいける ・ (coin) 関数 ランダムで t , nil を出す
・ (sys <string>) 関数 <string>の内容をOSに実行させる ・ (thead x) 構文 xを評価する新しいスレッドを作る ・ IO streamデータがある。ただし、バイナリしか読めない
Belは処理系実装の題材としては良い 評価器はコンパクト 4種のデータと16個の関数と9個のsyntax quasiquote bel.belを実行するためのいくつかのsyntax-sugar 処理系実装が楽しめる要素 マクロ、継続、継続の捕捉、動的束縛、quasiquote 題材は良いが、テキストの抜けを自力で埋める必要がある
実装 ・ bel-sml (github.com/niyarin/bel-sml) niyarinの”未完成”の実装 Standard MLで書かれた素朴なインタプリタ 気合をいれればすぐできそうだが、さぼってました ・他の人の実装 ほとんどインタプリタ
(ぱっと見、それ以外は発見できず) luksamuk/believe (C), masak/bel (Perl), ajlopez/beljs (JS) cookrn/babybel(Ruby) ,
その他実装 IGJoshua/skitter (Clojure) bel-likeと謳っているが何が違うのだろう BranislavLazic/bell lが一個多かった。別言語だったよ (Lispだったけど)
おしまい まとめ Belはコンパクトで自己記述がおもしろい言語 継続とかあって実装は楽しい 公式の実装はないけど、実装はたくさんある