SlideShare a Scribd company logo
Whitespcae 入門
ひげ
2016.5.5
今日の内容
三大変態言語の一つ Whitespace について
処理系を作って遊んでみたので話します
ちなみにHaskellで作った
(ところで三大変態言語ってBFとWSと後なんでしょうねw)
What is Whitespace ?
Durham大学のEdwin BradyとChris Morrisが作った言語
使うのは スペースとタブと改行だけ
他の文字はコメントとして扱われる
2003 年 4 月 1 日にリリース
要するにエイプリルフールのジョーク
しかし、通常無視されがちな空白に対する「不公平を是正す
る」ために生まれたらしい
あとは 参照ココ
Hello World !
仕組み
基本的にはスタックベース
スタックとはLIFOなデータ構造のこと
入るときは 1 2 3, 出るときは 3 2 1
入れる命令をプッシュ です命令をポップという
演算(足し算など)の引数をスタックからとってくる
Hello world を読む ステップ1
スペースをS タブをT にした
Hello world を読む ステップ2
命令は [IMP] [コマンド] [パラメータ] で構成
IMP の例
[Space] は スタック命令
[Tab] [NewLine] は IO命令 など
この形に揃えると… (実はワンパターン)
Hello world を読む ステップ3
アセンブリっぽく変換すると
ただのスタックマシーンなら...
よかったが以外に高性能な処理系
1. ヒープを持っている
StoreとRetrieve
2. ラベルジャンプが行える
しかも後の命令で定義したラベルに飛べる
3. サブルーチン呼び出しができる
コールスタックは別に用意する必要がある
ヒープ操作
スタックにヒープアドレスを積む
Store:アドレスの上にヒープに保存する値を積んどく
Retrieve:アドレスの値をスタックトップへ
今回は連想配列で実装
連想配列:インデックスが任意の型の配列
あらゆる操作が O(1)
しかし Haskell はイミュータブルなデータ構造は扱えない
HaskellではData.Map(平衡二分木)を使う
ラベルジャンプ
コイツのせいで2回コードを走らないとダメに
せっかくなので中間コードを吐き出す仕様に
要するに 仮想マシン と同じ
サブルーチン呼び出し
コールスタックを別に用意する必要がある
コールスタックとは戻り値を格納するスタック
Call:コールスタックに次のPCを格納してラベルジャンプ
RETURN:コールスタックのトップのPCへジャンプ
公式サイトのサンプルs を実行
おしまい

More Related Content

PPTX
Hostsの活用
PDF
ファイルの隠し方
PPTX
Hash functions
PPTX
本当は怖いデータ復元
PDF
勉強会資料 LT会 zfsで遊んでみた_公開版
PDF
Match
PDF
PDF
Netex learningMaker | Authoring tool for HTML5 e-learning content [EN]
Hostsの活用
ファイルの隠し方
Hash functions
本当は怖いデータ復元
勉強会資料 LT会 zfsで遊んでみた_公開版
Match
Netex learningMaker | Authoring tool for HTML5 e-learning content [EN]

Viewers also liked (6)

PDF
入門 超絶技巧プログラミング !
PDF
Marp colors
PDF
Marp使ってみた
PDF
PPTX
html5.ppt
PDF
reveal.js 3.0.0
入門 超絶技巧プログラミング !
Marp colors
Marp使ってみた
html5.ppt
reveal.js 3.0.0
Ad

More from Nobutada Matsubara (20)

PDF
Haskell で作る競技型イベントの裏側
PDF
Marp Next Theme: Colors
PDF
Marp Next Tips !
PDF
Haskell で CLI
PDF
貧者のための「cron」
PDF
Build Dockferile with Haskell
PDF
Elixir Programming with Type checking
PDF
MixML 作ってみる
PDF
Elm でなんかつくる
PDF
Haskell と Elm と JSON の話
PDF
ADVENTAR の Bot を作る with Haskell
PDF
Haskell Backpack 事始め
PDF
GitHub での Haskell の色が変わったんで
PDF
日記って続かないよね...
PDF
「7つの言語、7つの世界」を読む
PDF
Lisper はじめました (再)
PDF
Haskell で LINE Bot を作ってみた
PDF
SKIコンビネーターによる処理系の作成
PDF
PDF
Lisper はじめました(大嘘)
Haskell で作る競技型イベントの裏側
Marp Next Theme: Colors
Marp Next Tips !
Haskell で CLI
貧者のための「cron」
Build Dockferile with Haskell
Elixir Programming with Type checking
MixML 作ってみる
Elm でなんかつくる
Haskell と Elm と JSON の話
ADVENTAR の Bot を作る with Haskell
Haskell Backpack 事始め
GitHub での Haskell の色が変わったんで
日記って続かないよね...
「7つの言語、7つの世界」を読む
Lisper はじめました (再)
Haskell で LINE Bot を作ってみた
SKIコンビネーターによる処理系の作成
Lisper はじめました(大嘘)
Ad

Whitespcae 入門