Successfully reported this slideshow.
Your SlideShare is downloading. ×

Cleaner Scala Stack (会社ブログ用)

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Upcoming SlideShare
Cleaner scala stack
Cleaner scala stack
Loading in …3
×

Check these out next

1 of 16 Ad

More Related Content

Similar to Cleaner Scala Stack (会社ブログ用) (20)

Advertisement

Cleaner Scala Stack (会社ブログ用)

  1. 1. Cleaner が Scala で Stack 言語 を 書いてみて
  2. 2. 自己紹介 <ul><ul><li>id:oskimura </li></ul></ul><ul><ul><li>アルゴリズム勉強会 主催 </li></ul></ul><ul><ul><li>スタート Clean 主催 </li></ul></ul>
  3. 3. Clean ってなに <ul><li>スタート Clean </li></ul><ul><ul><li>参考ページ </li></ul></ul><ul><ul><li>http://qiita.com/questions/72 </li></ul></ul><ul><ul><li>第二回 </li></ul></ul><ul><ul><li>スライド </li></ul></ul>
  4. 4. 動機 <ul><li>Scala を勉強したかった </li></ul><ul><li>⇓ </li></ul><ul><li>Stack 言語でも書こう </li></ul>
  5. 5. Stack 言語について <ul><li>PostScript を参考 </li></ul><ul><li>3つのスタック </li></ul><ul><ul><li>オペランドスタック </li></ul></ul><ul><ul><li>ディクショナリスタック </li></ul></ul><ul><ul><li>エグゼキュートスタック </li></ul></ul><ul><li>Factorial を動かす事を目標 </li></ul>
  6. 6.   <ul><li>みなさん </li></ul><ul><li>脳内 JVM が </li></ul><ul><li>あるので </li></ul><ul><li>スタックマシンの </li></ul><ul><li>説明は </li></ul><ul><li>なし </li></ul>
  7. 7. 設計方針 <ul><li>Clean っぽく書きたい </li></ul><ul><ul><ul><li>代数的データ構造で命令を書きたい </li></ul></ul></ul><ul><ul><li>パーサは Parsec 使いたい </li></ul></ul><ul><ul><li>  命令の実行は状態遷移マシンっぽくかきたい </li></ul></ul>
  8. 8. 設計 1 <ul><li>  </li></ul>
  9. 9. 設計 2 <ul><li>  </li></ul>
  10. 10. 設計 3(REPL) <ul><li>  </li></ul>
  11. 11. Instr( 命令 ) <ul><li>abstract  class Instr  </li></ul><ul><li>// オペランドスタック </li></ul><ul><li>case object Pop               extends Instr </li></ul><ul><li>case class Push(v:StackVal)   extends Instr </li></ul><ul><li>// 実行スタック </li></ul><ul><li>case object If                extends Instr </li></ul><ul><li>// 辞書スタック </li></ul><ul><li>case object Def               extends Instr </li></ul>
  12. 12. Factorial <ul><li>/ fact  </li></ul><ul><li>{ dup 1 eq   </li></ul><ul><li>{ dup 1 sub  / fact dynamic   exec mul } </li></ul><ul><li>{ pop 1 } ifelse }   </li></ul><ul><li>def </li></ul><ul><li>  </li></ul><ul><li>10 / fact dynamic exec </li></ul>
  13. 13.   <ul><li>デモ </li></ul>
  14. 14. 立ちはだかった <ul><ul><li>case クラスって… </li></ul></ul><ul><ul><li>Parsec のインターフェイスが独特 </li></ul></ul><ul><ul><li>共変、反変がよく分からない </li></ul></ul><ul><ul><li>emacs の flymake があんまり教えてくれない </li></ul></ul><ul><ul><li>コンパイルが遅い </li></ul></ul><ul><ul><li>トップレベルでの repl で前方参照してくれない (  相互再帰ェ ) </li></ul></ul>
  15. 15. 解決法 ( ライフハック ) <ul><li>Scala を </li></ul><ul><li>dis っぽくにいえば </li></ul><ul><li>水嶋さんが </li></ul><ul><li>教えてくれる </li></ul>
  16. 16.   <ul><li>https://gist.github.com/1103812 </li></ul>

Editor's Notes

  • というよくある理由
  • 因みに再帰で実装しました。
  • eval は環境を受け取って返す
  • 1. エグゼキュートスタックから Intr を Pop する 2.StackVal だったらオペランドスタックにプッシュ 3.def 命令だったら辞書スタックに積む 4.exec などの命令だったら

×