30
toyohi@CSNagoya 「 Ruby で作る奇妙なプログラミング言語の」紹介

Rubyで作る奇妙なプログラミング言語

  • Upload
    toyoshi

  • View
    3.563

  • Download
    0

Embed Size (px)

DESCRIPTION

Rubyで作る奇妙なプログラミング言語

Citation preview

Page 1: Rubyで作る奇妙なプログラミング言語

toyohi@CSNagoya

「 Ruby で作る奇妙なプログラミング言語の」紹介

Page 2: Rubyで作る奇妙なプログラミング言語

本書について●2008/12/20 発売●著者 原 悠( yhara) 氏●編集 usu-ya 氏●usu-ya 氏のほかの編集本

Page 3: Rubyで作る奇妙なプログラミング言語

内容●奇妙な言語 (Esoteric Language) を題材にプログラミング言語の作り方を解説

●紹介されている奇妙な言語の数 => 18●HQ9+●Brainf*ck●Whitespace●Grass● Taxi4●などなど

Page 4: Rubyで作る奇妙なプログラミング言語

忘れてはいけない本書の目的

プログラミング言語を作ること

Page 5: Rubyで作る奇妙なプログラミング言語

HQ9+

最初の言語

Page 6: Rubyで作る奇妙なプログラミング言語

最初につくるのは HQ9+• 命令は 'H' 、 'Q' 、 '9' 、 '+' の 4 つだけ• H… 文字列 "Hello, world!" を出力する。• Q… プログラムのソースコードを出力する• 9… 「 99 Bottles of Beer 」の全文を出力する• +…カウンタを 1 増やす

Page 7: Rubyで作る奇妙なプログラミング言語

H

HQ9+ での Hello world

Page 8: Rubyで作る奇妙なプログラミング言語

HQ9+ のここがすごい• 実装が簡単• 誰も「 Hello world! 」でつまずかない• +でインクリメントしても想像して楽しむしかない

この言語から学んだこと

こんなのでもプログラミング言語には違いない

Page 9: Rubyで作る奇妙なプログラミング言語

Brainf*ck

次の言語

Page 10: Rubyで作る奇妙なプログラミング言語

次につくるのは Brainf*ck

• 命令は 8 個もある。 HQ9+ の 2 倍!• + … 現在のポインタの値を 1 増やす• - … 現在のポインタの値を 1 減らす• >… ポインタを 1 つ右に動かす• <… ポインタを 1 つ左に動かす• .… 現在のポインタの値をアスキーコードとして出力する• ,… 標準入力から 1 文字読み込み、現在のポインタに書き込む• [… ポインタの値が 0 なら、対応する ] までジャンプ• ]… ポインタの値が 0 以外なら、対応する [ までジャンプ

• テープと呼ばれる配列を操作するだけの言語

0 1 0 12 0 0

Page 11: Rubyで作る奇妙なプログラミング言語

+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.

------------.<++++++++.--------.+++.------.--------.>+.

Brainf*ck での Hello world

Page 12: Rubyで作る奇妙なプログラミング言語

Brainf*ck のここがすごい• チューリング完全• コードを書くより言語自体を実装するほうが簡単

この言語から学んだこと

これでも " 本物の " プログラミング言語

Page 13: Rubyで作る奇妙なプログラミング言語

Whitespace

次の言語

Page 14: Rubyで作る奇妙なプログラミング言語

次につくるのは Whitespace

• スタックとヒープを扱う• ジャンプ命令、サブルーチンがある• 命令はスペース、タブ、改行で構成される• [Space][Space](n) 数値 n をスタックに積む• [Space][LF][LF] スタックの一番上の値を取り除く• [Tab][Space][Space][Space] 足し算• [Tab][Space][Space][Tab] 引き算• [Tab][Tab][Space] ヒープへの書き込み• [Tab][LF][Space][Space] 文字列出力• などなど 20 種類ぐらい

• 無視されてきた空白との公平性のための言語

Page 15: Rubyで作る奇妙なプログラミング言語

Whitespace での Hello world

Page 16: Rubyで作る奇妙なプログラミング言語

Whitespace のここがすごい• 印刷できない

この言語から学んだこと

すべてプログラミング言語がプログラマのために設計されているとは限らない

Page 17: Rubyで作る奇妙なプログラミング言語

その他に紹介される奇妙な言語• コードが 2 次元に広がる言語「 Wired 」• シェイクスピアを暗記していないとかけない言語「 Shakespeare 」

• wvW だけの関数型言語「 Grass 」• 処理系が作れない言語「 NULL 」• などなど

Page 18: Rubyで作る奇妙なプログラミング言語

忘れてはいけない本書の目的

プログラミング言語を作ること

Page 19: Rubyで作る奇妙なプログラミング言語

この本のすばらしいところ

• HQ9+ => 言語ってこんなに簡単だ YO!• Brainf*ck => インタプリタ• Whitespace => 中間言語+ VM 方式• Starry => スタック型• Bolic => パーサの実装• Unlamda => λ の偉大さ( < これは紹介のみ

本書を読み進めていくと…

知らず知らずのうちに、一通り学んでしまっている!

Page 20: Rubyで作る奇妙なプログラミング言語

まとめ• 奇妙な言語は、暇をもてあました神々の遊び• 奇妙なだけで終らない奥の深さがある• プログラミング言語に対する先入観が壊れた• 変な言語を作っているうちに、Ruby と言語の実装の基礎を学べる本書はお得

僕も言語を作ってみたい・・・・

Page 21: Rubyで作る奇妙なプログラミング言語

作ってみた

Page 22: Rubyで作る奇妙なプログラミング言語

その名も

Page 23: Rubyで作る奇妙なプログラミング言語

ジョジョ言語

Page 24: Rubyで作る奇妙なプログラミング言語

ジョジョ言語

Page 25: Rubyで作る奇妙なプログラミング言語

みなさん、ご一緒に!

Page 26: Rubyで作る奇妙なプログラミング言語

やれやれだぜ!

Page 27: Rubyで作る奇妙なプログラミング言語

• バトル風言語• 日本語でプログラミング可能• バージョン3

特徴

Page 28: Rubyで作る奇妙なプログラミング言語

ジョジョ言語• 命令は 8 個• オラ … 現在のポインタの値を 1 増やす• 無駄 …現在のポインタの値を 1 減らす• スターフィンガー ! 、やれやれだぜ…ポインタを 1 つ右に動かす• ロードローラーだ!、貧弱ゥ…ポインタを 1 つ左に動かす• ハーミットパープル…現在のポインタの値をアスキーコードとして出力する• 新手のスタンド使いか!…標準入力から 1 文字読み込み、現在のポインタに

書き込む• あ…ありのまま 今 起こった事を話すぜ!…ポインタの値が 0 なら、対応

するザ・ワールド ! までジャンプ• ザ・ワールド !… ポインタの値が 0 以外なら、対応するあ…ありのまま 今

 起こった事を話すぜ!までジャンプ

Page 29: Rubyで作る奇妙なプログラミング言語

ジョジョ言語で Hello worldオラオラオラオラオラオラオラオラオラッ!!

「あ・・・ありのまま今起こったことを話すぜ俺は奴の前で階段を登っていたと思ったら、いつの間にか降りていたな…何を言っているのかわからねーと思うが、俺も何をされたのかわからなかった…頭がどうにかなりそうだった…催眠術だとか超スピードだとか、そんなチャチなもんじゃあ断じてねえ。もっと恐ろしいものの片鱗を味わったぜ…」

スターフィンガー!オラオララララ!オラッ!オラオラララララオラオラオラァ!!!スターフィンガー!!!オラァオラオラオラオラオラオラッオラ!!オラオラァァァァァオララララララララララ!スターフィンガー!

オラオラオラオラオラ! つけの領収書だぜ!

力比べというわけか!知るがいい…!『ザ・ ワールド』の真の能力は…まさに!『世界を支

配する』能力だと言うことを!

「ロードローラだ!ロードローラだ!ロードローラだ!」無駄ッッッ!

ザ・ワールドッッ

スターフィンガー!「ハーミットパープル」スターフィンガーオラオラ!

「ハーミットパープル」

オラオラオラオラオラオラオラハーミットパープル!ハーミットパープル!

オラオラオラ

ハーミットパープル!スターフィンガー!

無駄ァ!ハーミットパープル

無駄!無駄!無駄無駄無駄無駄無駄無駄無駄無駄無駄無駄WRYYYYYYYYYYYYYY!“ジョースター・エジプト・ツアー御一行様”は貴様にとどめを刺

して全滅の最後というわけだな

ーーーーー中略ーーーーーーーーーーーーー

てめーの敗因は・・・たったひとつだぜ・・・DIO たったひとつの単純(シンプル)な答えだ・・・ 『てめーは おれを怒らせた』

Page 30: Rubyで作る奇妙なプログラミング言語

ご清聴有難う御座いました。