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.
Upcoming SlideShare
Twitter4JとScalaと何か
Next

1

Share

Cleaner scala stack

Related Books

Free with a 30 day trial from Scribd

See all

Related Audiobooks

Free with a 30 day trial from Scribd

See all

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>
  • restartr

    Aug. 28, 2011

Views

Total views

2,552

On Slideshare

0

From embeds

0

Number of embeds

621

Actions

Downloads

0

Shares

0

Comments

0

Likes

1

×