Quick Upload

Loading...
Flash Player 9 (or above) is needed to view slideshows. We have detected that you do not have it on your computer.To install it, go here
Post to Twitter Post to Twitter
Share on Facebook
Myspace Hi5 Friendster Xanga LiveJournal Facebook Blogger Tagged Typepad Freewebs BlackPlanet gigya icons
« Prev Comments 1 - 1 of 1 Next »
  • guest0a9bc9
    guest0a9bc9 said 9 months Edit Delete

    発想にうけた。JavascriptでScheme 処理系を実装している人が

    いるんだってはじめてしりま た。すごい。

Add a comment If you have a SlideShare account, login to comment; otherwise comment as a guest.

    Javascriptで無限ループを実現する5つの方法

    from yhara, 10 months ago Add as contact

    5249 views | 1 comments | 2 favorites | 1 embeds (Stats)

    Desc: LightningTalk at Kanasan.JS, Japanese Javascript Users Group Meeting

    http://groups.google.co.jp/group/kanasanjs/web/kanasan-js-javascript52-lightning-talk

    Embed customize close
     

    Categories

    Technology

    Groups/Events

    More Info

    This slideshow is Public

    Views: 5249 Comments: 1 Favorites: 2 Downloads: 11

    View Details: 5236 on Slideshare 13 from embeds
    Most viewed embeds (Top 5): More
    All Embeds: Less
    Flagged as inappropriate Flag as inappropriate

    Flag as inappropriate

    Select your reason for flagging this slideshow as inappropriate.

    If needed, use the feedback form to let us know more details.

    Slideshow Transcript

    1. Slide 1: Javascript で無限ルー プ を実現する5つの方法 yhara @京大マイコンクラブ
    2. Slide 2: 自己紹介 琵琶湖の方から来ました   Javascript 暦は 2 年ちょっと  普段は Ruby 、ほかいろいろ ( 言語マニア )  学生をしています
    3. Slide 3: 京都にはサイ本売ってない説
    4. Slide 4: ヨドバシ++
    5. Slide 5: (1) 普通に無限ループを書く for(;;){ while(true){ } } ブラウザが固まります(><) 
    6. Slide 6: 予想される反論 無限ループなんてつかわねーよwww  無限でなくても、時間のかかる処理をループさ  せるとやっぱりブラウザが固まってしまう while( 条件 ){ // 時間のかかる処理 }
    7. Slide 7: (2) setTimeout を使う setTimeout( 関数 , ミリ秒 )   指定した時間後に指定した関数を実行してくれ る var f = function(){ // 時間のかかる処理 if( 条件 ) setTimeout(f, 0); }
    8. Slide 8: でも…、 setTimeout はめんどい   同期処理がしたいのに、非同期にしないといけ ない 理想 : ( 同期 ) 現実: ( 非同期 ) while( 条件 ){ var f = function(){ // 時間のかかる処理 // 時間のかかる処理 } if( 条件 ) setTimeout(f, 0); }
    9. Slide 9: 同様に Ajax もめんどい   同期処理がしたい時も、非同期にしないといけ ない 現実: ( 非同期 ) 理想 : ( 同期 ) Ajax.get(path, function(data){ data = Ajax.get(path); alert(data); alert(data); } じゃあどうしたらいい・・・? 
    10. Slide 10: (3) jsThread 別名 Thread.Concurrent  http://jsthread.sourceforge.net/cgi-bin/wiki/wiki.cgi  JavaScript のみでスレッドシステムを実装!  // ↓ ブラウザなぜか固まらない Concurrent.Thread.create(function(){ while( 条件 ){ // 時間のかかる処理 } });
    11. Slide 11: 仕組み Javascript で書かれた Javascript パーザ内蔵   指定した関数のソースコードを解析し、自動的 に setTimeout を挟んでくれる toSource() でソースが取れる javascript ならでは!  15,119 行の Javascript (1/8 現在 )   無茶しやがってwww その他、サイトに解説あり  http://jsthread.sourceforge.net/cgi-bin/wiki/wiki.cgi 
    12. Slide 12: (4) JSDeffered 関数合成を駆使して、同期処理をそれっぽく書  ける http://coderepos.org/share/wiki/JSDeferred  // loop の例: // next の例: loop(ary, function (n) { loop(5, function (i, o) { // 時間のかかる処理 // ループ処理 return wait(0.1); return o.last? i : wait(1); }); }). next(function (e) { // ループが終わったらする処理 print(\"end [\"+e+\"]\"); })
    13. Slide 13: 注意点 つづりが むずかしいです (^o^)  × Deffered 〇 Deferred Defer ( 延期する ) + r + ed とおぼえよう! 
    14. Slide 14: JSDeffered = DSL JavaScript を拡張した新しい言語みたいな感じ  parallel() : 並列実行  wait() : 待つ、中断  next() : 順次実行  loop() : 繰り返し  error() : エラー時  言語内言語? 
    15. Slide 15: (5) Javascript で別の言語を実装 例えば Scheme  http://mono.kmc.gr.jp/~yhara/w/?BiwaScheme 
    16. Slide 16: BiwaScheme Javascript で書かれた Scheme 処理系  http://mono.kmc.gr.jp/~yhara/w/?BiwaScheme  R6RS 準拠を目標に開発中です (><)  (lambda (f) (let1 s (http-request (path)) ;; 時間のかかる処理 (print s)) (sleep 0) (if 条件 (f) 返り値 )) (sleep 0) のところでインタプリタの状態を保存  setTimeout で指定した時間後にインタプリタを再開 
    17. Slide 17: JSRuby Javascript で書かれた Ruby 処理系 ( ! )  http://coderepos.org/share/wiki/JSRuby  FizzBuzz を動かす程度の能力  sleep はまだなさそうだけど、原理的にはできるはず  cf. HotRuby (YARV の中間コードを js で実行 )  http://d.hatena.ne.jp/yukoba/20071231/p1 
    18. Slide 18: まとめ さよなら setTimeout  とにかくわかりやすく書きたい→ jsThread   とにかく軽い方がいい→ JSDeffered  ( どちらでもない )→BiwaScheme
    19. Slide 19: おまけ (Reposh) Reposh – Repository Shell  http://mono.kmc.gr.jp/~yhara/w/?Reposh  Reposh なし : Reposh あり : $ svn st > [Enter] $ svn di foo.rb > di foo.rb $ svn ci –m “foo” > ci –m “foo” svn, svk, hg, darcs に対応 ( ディレクトリ構成から自動判定 ) 