Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Cleaner scala stack

2,232 views

Published on

Published in: Technology
  • Be the first to comment

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>

×