Cleaner Scala Stack (会社ブログ用)

705 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
705
On SlideShare
0
From Embeds
0
Number of Embeds
9
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

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

    ×