Upload
toyoshi
View
3.563
Download
0
Embed Size (px)
DESCRIPTION
Rubyで作る奇妙なプログラミング言語
Citation preview
toyohi@CSNagoya
「 Ruby で作る奇妙なプログラミング言語の」紹介
本書について●2008/12/20 発売●著者 原 悠( yhara) 氏●編集 usu-ya 氏●usu-ya 氏のほかの編集本
内容●奇妙な言語 (Esoteric Language) を題材にプログラミング言語の作り方を解説
●紹介されている奇妙な言語の数 => 18●HQ9+●Brainf*ck●Whitespace●Grass● Taxi4●などなど
忘れてはいけない本書の目的
プログラミング言語を作ること
HQ9+
最初の言語
最初につくるのは HQ9+• 命令は 'H' 、 'Q' 、 '9' 、 '+' の 4 つだけ• H… 文字列 "Hello, world!" を出力する。• Q… プログラムのソースコードを出力する• 9… 「 99 Bottles of Beer 」の全文を出力する• +…カウンタを 1 増やす
H
HQ9+ での Hello world
HQ9+ のここがすごい• 実装が簡単• 誰も「 Hello world! 」でつまずかない• +でインクリメントしても想像して楽しむしかない
この言語から学んだこと
こんなのでもプログラミング言語には違いない
Brainf*ck
次の言語
次につくるのは Brainf*ck
• 命令は 8 個もある。 HQ9+ の 2 倍!• + … 現在のポインタの値を 1 増やす• - … 現在のポインタの値を 1 減らす• >… ポインタを 1 つ右に動かす• <… ポインタを 1 つ左に動かす• .… 現在のポインタの値をアスキーコードとして出力する• ,… 標準入力から 1 文字読み込み、現在のポインタに書き込む• [… ポインタの値が 0 なら、対応する ] までジャンプ• ]… ポインタの値が 0 以外なら、対応する [ までジャンプ
• テープと呼ばれる配列を操作するだけの言語
0 1 0 12 0 0
+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.
------------.<++++++++.--------.+++.------.--------.>+.
Brainf*ck での Hello world
Brainf*ck のここがすごい• チューリング完全• コードを書くより言語自体を実装するほうが簡単
この言語から学んだこと
これでも " 本物の " プログラミング言語
Whitespace
次の言語
次につくるのは Whitespace
• スタックとヒープを扱う• ジャンプ命令、サブルーチンがある• 命令はスペース、タブ、改行で構成される• [Space][Space](n) 数値 n をスタックに積む• [Space][LF][LF] スタックの一番上の値を取り除く• [Tab][Space][Space][Space] 足し算• [Tab][Space][Space][Tab] 引き算• [Tab][Tab][Space] ヒープへの書き込み• [Tab][LF][Space][Space] 文字列出力• などなど 20 種類ぐらい
• 無視されてきた空白との公平性のための言語
Whitespace での Hello world
Whitespace のここがすごい• 印刷できない
この言語から学んだこと
すべてプログラミング言語がプログラマのために設計されているとは限らない
その他に紹介される奇妙な言語• コードが 2 次元に広がる言語「 Wired 」• シェイクスピアを暗記していないとかけない言語「 Shakespeare 」
• wvW だけの関数型言語「 Grass 」• 処理系が作れない言語「 NULL 」• などなど
忘れてはいけない本書の目的
プログラミング言語を作ること
この本のすばらしいところ
• HQ9+ => 言語ってこんなに簡単だ YO!• Brainf*ck => インタプリタ• Whitespace => 中間言語+ VM 方式• Starry => スタック型• Bolic => パーサの実装• Unlamda => λ の偉大さ( < これは紹介のみ
本書を読み進めていくと…
知らず知らずのうちに、一通り学んでしまっている!
まとめ• 奇妙な言語は、暇をもてあました神々の遊び• 奇妙なだけで終らない奥の深さがある• プログラミング言語に対する先入観が壊れた• 変な言語を作っているうちに、Ruby と言語の実装の基礎を学べる本書はお得
僕も言語を作ってみたい・・・・
作ってみた
その名も
ジョジョ言語
ジョジョ言語
みなさん、ご一緒に!
やれやれだぜ!
• バトル風言語• 日本語でプログラミング可能• バージョン3
特徴
ジョジョ言語• 命令は 8 個• オラ … 現在のポインタの値を 1 増やす• 無駄 …現在のポインタの値を 1 減らす• スターフィンガー ! 、やれやれだぜ…ポインタを 1 つ右に動かす• ロードローラーだ!、貧弱ゥ…ポインタを 1 つ左に動かす• ハーミットパープル…現在のポインタの値をアスキーコードとして出力する• 新手のスタンド使いか!…標準入力から 1 文字読み込み、現在のポインタに
書き込む• あ…ありのまま 今 起こった事を話すぜ!…ポインタの値が 0 なら、対応
するザ・ワールド ! までジャンプ• ザ・ワールド !… ポインタの値が 0 以外なら、対応するあ…ありのまま 今
起こった事を話すぜ!までジャンプ
ジョジョ言語で Hello worldオラオラオラオラオラオラオラオラオラッ!!
「あ・・・ありのまま今起こったことを話すぜ俺は奴の前で階段を登っていたと思ったら、いつの間にか降りていたな…何を言っているのかわからねーと思うが、俺も何をされたのかわからなかった…頭がどうにかなりそうだった…催眠術だとか超スピードだとか、そんなチャチなもんじゃあ断じてねえ。もっと恐ろしいものの片鱗を味わったぜ…」
スターフィンガー!オラオララララ!オラッ!オラオラララララオラオラオラァ!!!スターフィンガー!!!オラァオラオラオラオラオラオラッオラ!!オラオラァァァァァオララララララララララ!スターフィンガー!
オラオラオラオラオラ! つけの領収書だぜ!
力比べというわけか!知るがいい…!『ザ・ ワールド』の真の能力は…まさに!『世界を支
配する』能力だと言うことを!
「ロードローラだ!ロードローラだ!ロードローラだ!」無駄ッッッ!
ザ・ワールドッッ
スターフィンガー!「ハーミットパープル」スターフィンガーオラオラ!
「ハーミットパープル」
オラオラオラオラオラオラオラハーミットパープル!ハーミットパープル!
オラオラオラ
ハーミットパープル!スターフィンガー!
無駄ァ!ハーミットパープル
無駄!無駄!無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄WRYYYYYYYYYYYYYY!“ジョースター・エジプト・ツアー御一行様”は貴様にとどめを刺
して全滅の最後というわけだな
ーーーーー中略ーーーーーーーーーーーーー
てめーの敗因は・・・たったひとつだぜ・・・DIO たったひとつの単純(シンプル)な答えだ・・・ 『てめーは おれを怒らせた』
ご清聴有難う御座いました。