Cleaner scala stack

2,143 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,143
On SlideShare
0
From Embeds
0
Number of Embeds
607
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
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><li>id:oskimura </li></ul><ul><li>アルゴリズム勉強会 ( たぶん ) 主催 </li></ul><ul><li>スタート Clean 主催 </li></ul><ul><li>真実を述べる会 </li></ul>
    3. 3. Clean ってなに <ul><li>スタート Clean </li></ul><ul><li>    ( 参考ページ ) </li></ul><ul><li>    ( http://qiita.com/questions/72 ) </li></ul><ul><li>( 第二回 ) </li></ul><ul><li>   スライド </li></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. 頭の中に JVM が ! <ul><li>お菓子好きかい? </li></ul>
    8. 8. 設計方針 <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>
    9. 9. 設計 1 <ul><li>  </li></ul>
    10. 10. 設計 2 <ul><li>  </li></ul>
    11. 11. 設計 3(REPL) <ul><li>  </li></ul>
    12. 12. 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>
    13. 13. Factorial <ul><li>/ fact { dup 1 eq  { dup 1 sub  / fact dynamic   exec mul } { pop 1 } ifelse }   def  </li></ul><ul><li>10 / fact dynamic exec </li></ul>
    14. 14.   <ul><li>デモ </li></ul>
    15. 15. 立ちはだかった <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>
    16. 16. 解決法 ( ライフハック ) <ul><li>Scala を </li></ul><ul><li>dis っぽくにいえば </li></ul><ul><li>水嶋さんが </li></ul><ul><li>教えてくれる </li></ul>
    17. 17.   <ul><li>https://gist.github.com/1103812 </li></ul>
    18. 18.   <ul><li>  _        ____     |  \      / _ _∧_∧ _\       |─   |========= ( ゚ д ゚ )  ̄ <桂ぁっ!今何キロ!?       ̄ ̄      □( ヽ┐ U                   ◎- >┘◎  キコキコ  ~~~~~~~~~~~~~~~~~~~~~~~~~~  </li></ul>
    19. 19.   <ul><li>  </li></ul>

    ×