SlideShare a Scribd company logo
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 増やす
HQ9+ での Hello world




             H
HQ9+ のここがすごい

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




この言語から学んだこと


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




 Brainf*ck
次につくるのは Brainf*ck

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

        0 1 0 12 0 0
•   命令は 8 個もある。 HQ9+ の 2 倍!
    •   + … 現在のポインタの値を 1 増やす
    •   - … 現在のポインタの値を 1 減らす
    •   >… ポインタを 1 つ右に動かす
    •   <… ポインタを 1 つ左に動かす
    •   .… 現在のポインタの値をアスキーコードとして出力する
    •   ,… 標準入力から 1 文字読み込み、現在のポインタに書き込む
    •   [… ポインタの値が 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 たったひ
ザ・ワールドッッ                             とつの単純(シンプル)な答えだ・・・ 『てめーは おれを
                                     怒らせた』
ご清聴有難う御座いました。

More Related Content

Viewers also liked

「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
kirin_nico
 
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
京大 マイコンクラブ
 
BFmeta
BFmetaBFmeta
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
京大 マイコンクラブ
 
ライフゲームでプログラミング
ライフゲームでプログラミングライフゲームでプログラミング
ライフゲームでプログラミング
Shinya Miyazaki
 
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
SECCON Beginners
 

Viewers also liked (6)

「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
「魔法少女志向プログラミングのススメ」 プロ生勉強会 第10回@品川
 
実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編実用Brainf*ckプログラミング入門編
実用Brainf*ckプログラミング入門編
 
BFmeta
BFmetaBFmeta
BFmeta
 
実用Brainf*ckプログラミング
実用Brainf*ckプログラミング実用Brainf*ckプログラミング
実用Brainf*ckプログラミング
 
ライフゲームでプログラミング
ライフゲームでプログラミングライフゲームでプログラミング
ライフゲームでプログラミング
 
CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料CTF for ビギナーズ ネットワーク講習資料
CTF for ビギナーズ ネットワーク講習資料
 

More from toyoshi

猫でもできるRailsデプロイ
猫でもできるRailsデプロイ猫でもできるRailsデプロイ
猫でもできるRailsデプロイ
toyoshi
 
Capistranoで自動デプロイ
Capistranoで自動デプロイCapistranoで自動デプロイ
Capistranoで自動デプロイ
toyoshi
 
Rubyで作る奇妙なプログラミング言語
Rubyで作る奇妙なプログラミング言語Rubyで作る奇妙なプログラミング言語
Rubyで作る奇妙なプログラミング言語
toyoshi
 
Start physical computing with Ruby + Arduino
Start physical computing with Ruby + ArduinoStart physical computing with Ruby + Arduino
Start physical computing with Ruby + Arduino
toyoshi
 
dRuby
dRubydRuby
dRuby
toyoshi
 
コンクリートブロックのキツジブロック カタログ2008
コンクリートブロックのキツジブロック カタログ2008コンクリートブロックのキツジブロック カタログ2008
コンクリートブロックのキツジブロック カタログ2008
toyoshi
 
Style Share
Style ShareStyle Share
Style Sharetoyoshi
 
サーバ/インフラ構築入門(1)
サーバ/インフラ構築入門(1)サーバ/インフラ構築入門(1)
サーバ/インフラ構築入門(1)toyoshi
 
CSNagoya コンパイラを作ろう
CSNagoya コンパイラを作ろうCSNagoya コンパイラを作ろう
CSNagoya コンパイラを作ろう
toyoshi
 
GainerとRubyで行うサーバ監視
GainerとRubyで行うサーバ監視GainerとRubyで行うサーバ監視
GainerとRubyで行うサーバ監視
toyoshi
 
FlashMediaServer3開発環境の準備
FlashMediaServer3開発環境の準備FlashMediaServer3開発環境の準備
FlashMediaServer3開発環境の準備toyoshi
 

More from toyoshi (11)

猫でもできるRailsデプロイ
猫でもできるRailsデプロイ猫でもできるRailsデプロイ
猫でもできるRailsデプロイ
 
Capistranoで自動デプロイ
Capistranoで自動デプロイCapistranoで自動デプロイ
Capistranoで自動デプロイ
 
Rubyで作る奇妙なプログラミング言語
Rubyで作る奇妙なプログラミング言語Rubyで作る奇妙なプログラミング言語
Rubyで作る奇妙なプログラミング言語
 
Start physical computing with Ruby + Arduino
Start physical computing with Ruby + ArduinoStart physical computing with Ruby + Arduino
Start physical computing with Ruby + Arduino
 
dRuby
dRubydRuby
dRuby
 
コンクリートブロックのキツジブロック カタログ2008
コンクリートブロックのキツジブロック カタログ2008コンクリートブロックのキツジブロック カタログ2008
コンクリートブロックのキツジブロック カタログ2008
 
Style Share
Style ShareStyle Share
Style Share
 
サーバ/インフラ構築入門(1)
サーバ/インフラ構築入門(1)サーバ/インフラ構築入門(1)
サーバ/インフラ構築入門(1)
 
CSNagoya コンパイラを作ろう
CSNagoya コンパイラを作ろうCSNagoya コンパイラを作ろう
CSNagoya コンパイラを作ろう
 
GainerとRubyで行うサーバ監視
GainerとRubyで行うサーバ監視GainerとRubyで行うサーバ監視
GainerとRubyで行うサーバ監視
 
FlashMediaServer3開発環境の準備
FlashMediaServer3開発環境の準備FlashMediaServer3開発環境の準備
FlashMediaServer3開発環境の準備
 

Recently uploaded

FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
Yuuitirou528 default
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
0207sukipio
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
Toru Tamaki
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
Fukuoka Institute of Technology
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
harmonylab
 

Recently uploaded (14)

FIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdfFIDO Alliance Osaka Seminar: CloudGate.pdf
FIDO Alliance Osaka Seminar: CloudGate.pdf
 
This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料CS集会#13_なるほどわからん通信技術 発表資料
CS集会#13_なるほどわからん通信技術 発表資料
 
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさJSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
JSAI_類似画像マッチングによる器への印象付与手法の妥当性検証_ver.3_高橋りさ
 
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
論文紹介:When Visual Prompt Tuning Meets Source-Free Domain Adaptive Semantic Seg...
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdfFIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
FIDO Alliance Osaka Seminar: LY-DOCOMO-KDDI-Mercari Panel.pdf
 
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
TaketoFujikawa_物語のコンセプトに基づく情報アクセス手法の基礎検討_JSAI2024
 
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdfFIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
FIDO Alliance Osaka Seminar: NEC & Yubico Panel.pdf
 
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdfFIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
FIDO Alliance Osaka Seminar: PlayStation Passkey Deployment Case Study.pdf
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdfFIDO Alliance Osaka Seminar: Welcome Slides.pdf
FIDO Alliance Osaka Seminar: Welcome Slides.pdf
 
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
単腕マニピュレータによる 複数物体の同時組み立ての 基礎的考察 / Basic Approach to Robotic Assembly of Multi...
 
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
【DLゼミ】XFeat: Accelerated Features for Lightweight Image Matching
 

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

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