Enviar pesquisa
Carregar
Scalaの限定継続の応用と基本(改訂版)
•
3 gostaram
•
897 visualizações
Kota Mizushima
Seguir
Scalaの限定継続の応用と基本について、高橋メソッド風味で説明したスライドの改訂版です。元のスライドの修正が反映されないため、新しいスライドとした上げ直しました。
Leia menos
Leia mais
Denunciar
Compartilhar
Denunciar
Compartilhar
1 de 96
Baixar agora
Baixar para ler offline
Recomendados
コルーチンの使い方
コルーチンの使い方
Naohiro Yoshikawa
コルーチンを使おう
コルーチンを使おう
amusementcreators
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!
amusementcreators
Effective modern-c++#9
Effective modern-c++#9
Tatsuki SHIMIZU
effective modern c++ chapeter36
effective modern c++ chapeter36
Tatsuki SHIMIZU
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
Map
Map
kikairoya
Recomendados
コルーチンの使い方
コルーチンの使い方
Naohiro Yoshikawa
コルーチンを使おう
コルーチンを使おう
amusementcreators
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!
amusementcreators
Effective modern-c++#9
Effective modern-c++#9
Tatsuki SHIMIZU
effective modern c++ chapeter36
effective modern c++ chapeter36
Tatsuki SHIMIZU
C++でHello worldを書いてみた
C++でHello worldを書いてみた
firewood
Effective Modern C++ 読書会 Item 35
Effective Modern C++ 読書会 Item 35
Keisuke Fukuda
Map
Map
kikairoya
emc++ chapter32
emc++ chapter32
Tatsuki SHIMIZU
Boost.Coroutine
Boost.Coroutine
melpon
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
MITSUNARI Shigeo
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
llvm入門
llvm入門
MITSUNARI Shigeo
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
MITSUNARI Shigeo
Continuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
Goの文法の実例と解説
Goの文法の実例と解説
Ryuji Iwata
Prosym2012
Prosym2012
MITSUNARI Shigeo
emcjp Item 42
emcjp Item 42
MITSUNARI Shigeo
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
モナドハンズオン前座
モナドハンズオン前座
bleis tift
Emcjp item21
Emcjp item21
MITSUNARI Shigeo
C++14 Overview
C++14 Overview
Akira Takahashi
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
新しい並列for構文のご提案
新しい並列for構文のご提案
yohhoy
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
テーマ「最適化 その2」
テーマ「最適化 その2」
technocat
โบรชัวร์ Samsung big surprise 2012
โบรชัวร์ Samsung big surprise 2012
โปรโมชั่นทูยู
โบรชัวร์ Promotion sports world expo mar.2012
โบรชัวร์ Promotion sports world expo mar.2012
โปรโมชั่นทูยู
Mais conteúdo relacionado
Mais procurados
emc++ chapter32
emc++ chapter32
Tatsuki SHIMIZU
Boost.Coroutine
Boost.Coroutine
melpon
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
MITSUNARI Shigeo
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
MITSUNARI Shigeo
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
MITSUNARI Shigeo
llvm入門
llvm入門
MITSUNARI Shigeo
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
MITSUNARI Shigeo
Continuation with Boost.Context
Continuation with Boost.Context
Akira Takahashi
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
Goの文法の実例と解説
Goの文法の実例と解説
Ryuji Iwata
Prosym2012
Prosym2012
MITSUNARI Shigeo
emcjp Item 42
emcjp Item 42
MITSUNARI Shigeo
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
Yuki Miyatake
モナドハンズオン前座
モナドハンズオン前座
bleis tift
Emcjp item21
Emcjp item21
MITSUNARI Shigeo
C++14 Overview
C++14 Overview
Akira Takahashi
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
yohhoy
新しい並列for構文のご提案
新しい並列for構文のご提案
yohhoy
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
Ryo Suzuki
テーマ「最適化 その2」
テーマ「最適化 その2」
technocat
Mais procurados
(20)
emc++ chapter32
emc++ chapter32
Boost.Coroutine
Boost.Coroutine
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
Xeon PhiとN体計算コーディング x86/x64最適化勉強会6(@k_nitadoriさんの代理アップ)
SSE4.2の文字列処理命令の紹介
SSE4.2の文字列処理命令の紹介
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
llvm入門
llvm入門
Haswellサーベイと有限体クラスの紹介
Haswellサーベイと有限体クラスの紹介
Continuation with Boost.Context
Continuation with Boost.Context
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
Goの文法の実例と解説
Goの文法の実例と解説
Prosym2012
Prosym2012
emcjp Item 42
emcjp Item 42
BoostAsioで可読性を求めるのは間違っているだろうか
BoostAsioで可読性を求めるのは間違っているだろうか
モナドハンズオン前座
モナドハンズオン前座
Emcjp item21
Emcjp item21
C++14 Overview
C++14 Overview
20分くらいでわかった気分になれるC++20コルーチン
20分くらいでわかった気分になれるC++20コルーチン
新しい並列for構文のご提案
新しい並列for構文のご提案
ゲーム開発者のための C++11/C++14
ゲーム開発者のための C++11/C++14
テーマ「最適化 その2」
テーマ「最適化 その2」
Destaque
โบรชัวร์ Samsung big surprise 2012
โบรชัวร์ Samsung big surprise 2012
โปรโมชั่นทูยู
โบรชัวร์ Promotion sports world expo mar.2012
โบรชัวร์ Promotion sports world expo mar.2012
โปรโมชั่นทูยู
โบรชัวร์โปรโมชั่นโลตัส Hypermarket รายปักษ์ วันที่ 15 28มีค.55
โบรชัวร์โปรโมชั่นโลตัส Hypermarket รายปักษ์ วันที่ 15 28มีค.55
โปรโมชั่นทูยู
โบรชัวร์โปรโมชั่นโลตัส Hypermarket อาหารสด รายปักษ์ วันที่ 15 21มีค.55
โบรชัวร์โปรโมชั่นโลตัส Hypermarket อาหารสด รายปักษ์ วันที่ 15 21มีค.55
โปรโมชั่นทูยู
โบรชัวร์โปรโมชั่นโลตัสร้านคุ้มค่า รายปักษ์ วันที่ 15 21มีค.55
โบรชัวร์โปรโมชั่นโลตัสร้านคุ้มค่า รายปักษ์ วันที่ 15 21มีค.55
โปรโมชั่นทูยู
ElasticMQ: a fully asynchronous, Akka-based SQS server
ElasticMQ: a fully asynchronous, Akka-based SQS server
Adam Warski
โบรชัวร์โปรโมชั่น Makro mail beautiful summer
โบรชัวร์โปรโมชั่น Makro mail beautiful summer
โปรโมชั่นทูยู
โบรชัวร์โปรโมชั่นโลตัส ครื่องใช้ไฟฟ้าลดร้อนแรง รายปักษ์ วันที่ 15 28มีค.55
โบรชัวร์โปรโมชั่นโลตัส ครื่องใช้ไฟฟ้าลดร้อนแรง รายปักษ์ วันที่ 15 28มีค.55
โปรโมชั่นทูยู
โบรชัวร์โปรโมชั่น Big c aloha summer ระหว่างวันที่ 9 มี.ค.-30 เม.ย.55
โบรชัวร์โปรโมชั่น Big c aloha summer ระหว่างวันที่ 9 มี.ค.-30 เม.ย.55
โปรโมชั่นทูยู
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Yoshimura Soichiro
Destaque
(10)
โบรชัวร์ Samsung big surprise 2012
โบรชัวร์ Samsung big surprise 2012
โบรชัวร์ Promotion sports world expo mar.2012
โบรชัวร์ Promotion sports world expo mar.2012
โบรชัวร์โปรโมชั่นโลตัส Hypermarket รายปักษ์ วันที่ 15 28มีค.55
โบรชัวร์โปรโมชั่นโลตัส Hypermarket รายปักษ์ วันที่ 15 28มีค.55
โบรชัวร์โปรโมชั่นโลตัส Hypermarket อาหารสด รายปักษ์ วันที่ 15 21มีค.55
โบรชัวร์โปรโมชั่นโลตัส Hypermarket อาหารสด รายปักษ์ วันที่ 15 21มีค.55
โบรชัวร์โปรโมชั่นโลตัสร้านคุ้มค่า รายปักษ์ วันที่ 15 21มีค.55
โบรชัวร์โปรโมชั่นโลตัสร้านคุ้มค่า รายปักษ์ วันที่ 15 21มีค.55
ElasticMQ: a fully asynchronous, Akka-based SQS server
ElasticMQ: a fully asynchronous, Akka-based SQS server
โบรชัวร์โปรโมชั่น Makro mail beautiful summer
โบรชัวร์โปรโมชั่น Makro mail beautiful summer
โบรชัวร์โปรโมชั่นโลตัส ครื่องใช้ไฟฟ้าลดร้อนแรง รายปักษ์ วันที่ 15 28มีค.55
โบรชัวร์โปรโมชั่นโลตัส ครื่องใช้ไฟฟ้าลดร้อนแรง รายปักษ์ วันที่ 15 28มีค.55
โบรชัวร์โปรโมชั่น Big c aloha summer ระหว่างวันที่ 9 มี.ค.-30 เม.ย.55
โบรชัวร์โปรโมชั่น Big c aloha summer ระหว่างวันที่ 9 มี.ค.-30 เม.ย.55
並行処理初心者のためのAkka入門
並行処理初心者のためのAkka入門
Semelhante a Scalaの限定継続の応用と基本(改訂版)
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
natrium11321
Async design with Unity3D
Async design with Unity3D
Kouji Hosoda
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Preferred Networks
Actor&stm
Actor&stm
潤一 加藤
X hago2 shortcoding 20110827
X hago2 shortcoding 20110827
uskey512
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
SatoYu1ro
Boost9 session
Boost9 session
freedom404
Brief introduction of Boost.ICL
Brief introduction of Boost.ICL
yak1ex
Java Puzzlers JJUG CCC 2016
Java Puzzlers JJUG CCC 2016
Yoshio Terada
モナドをつくろう
モナドをつくろう
dico_leque
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
Atsushi Tadokoro
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
hecomi
Clojure programming-chapter-2
Clojure programming-chapter-2
Masao Kato
ぱっと見でわかるC++11
ぱっと見でわかるC++11
えぴ 福田
オブジェクト指向できていますか?
オブジェクト指向できていますか?
Moriharu Ohzu
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
bitter_fox
x86とコンテキストスイッチ
x86とコンテキストスイッチ
Masami Ichikawa
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
JavaScript 講習会 #1
JavaScript 講習会 #1
Susisu
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Takaaki Suzuki
Semelhante a Scalaの限定継続の応用と基本(改訂版)
(20)
競技プログラミングのためのC++入門
競技プログラミングのためのC++入門
Async design with Unity3D
Async design with Unity3D
Pfi Seminar 2010 1 7
Pfi Seminar 2010 1 7
Actor&stm
Actor&stm
X hago2 shortcoding 20110827
X hago2 shortcoding 20110827
15分でざっくり分かるScala入門
15分でざっくり分かるScala入門
Boost9 session
Boost9 session
Brief introduction of Boost.ICL
Brief introduction of Boost.ICL
Java Puzzlers JJUG CCC 2016
Java Puzzlers JJUG CCC 2016
モナドをつくろう
モナドをつくろう
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
デジタルアートセミナー#2 openFrameworksで学ぶ、 クリエイティブ・コーディング Session 2: 構造をつくる
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
Node.js × 音声認識 - 東京Node学園 2012 LT枠 6番目
Clojure programming-chapter-2
Clojure programming-chapter-2
ぱっと見でわかるC++11
ぱっと見でわかるC++11
オブジェクト指向できていますか?
オブジェクト指向できていますか?
10のJava9で変わるJava8の嫌なとこ!
10のJava9で変わるJava8の嫌なとこ!
x86とコンテキストスイッチ
x86とコンテキストスイッチ
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
JavaScript 講習会 #1
JavaScript 講習会 #1
今日からできる!簡単 .NET 高速化 Tips
今日からできる!簡単 .NET 高速化 Tips
Mais de Kota Mizushima
ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修について
Kota Mizushima
kollectionの紹介
kollectionの紹介
Kota Mizushima
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状
Kota Mizushima
Macros in nemerle
Macros in nemerle
Kota Mizushima
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
Kota Mizushima
Introduction to PEG
Introduction to PEG
Kota Mizushima
Scalaの現状と今後
Scalaの現状と今後
Kota Mizushima
Power of Scala
Power of Scala
Kota Mizushima
Scala Performance Tuning Tips
Scala Performance Tuning Tips
Kota Mizushima
こわくない型クラス
こわくない型クラス
Kota Mizushima
こわくないScala
こわくないScala
Kota Mizushima
Scala is-unscared
Scala is-unscared
Kota Mizushima
About Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and Borrowing
Kota Mizushima
Scala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful libraries
Kota Mizushima
Scala + Finagleの魅力
Scala + Finagleの魅力
Kota Mizushima
Scalaの現状と課題
Scalaの現状と課題
Kota Mizushima
Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足
Kota Mizushima
Implicit Implicit Scala
Implicit Implicit Scala
Kota Mizushima
Implicit Explicit Scala
Implicit Explicit Scala
Kota Mizushima
Mais de Kota Mizushima
(20)
ドワンゴにおける新卒エンジニア向けScala研修について
ドワンゴにおける新卒エンジニア向けScala研修について
kollectionの紹介
kollectionの紹介
株式会社ドワンゴにおけるScala教育の現状
株式会社ドワンゴにおけるScala教育の現状
Macros in nemerle
Macros in nemerle
Scala Daysに行ってみて - あるいはスイス旅行記 -
Scala Daysに行ってみて - あるいはスイス旅行記 -
Introduction to PEG
Introduction to PEG
Scalaの現状と今後
Scalaの現状と今後
Power of Scala
Power of Scala
Scala Performance Tuning Tips
Scala Performance Tuning Tips
こわくない型クラス
こわくない型クラス
こわくないScala
こわくないScala
Scala is-unscared
Scala is-unscared
About Capabilities for Uniqueness and Borrowing
About Capabilities for Uniqueness and Borrowing
Scala Macros makes it easy to provide useful libraries
Scala Macros makes it easy to provide useful libraries
Scala + Finagleの魅力
Scala + Finagleの魅力
Scalaの現状と課題
Scalaの現状と課題
Scalaでのプログラム開発
Scalaでのプログラム開発
日本Scalaユーザーズグループ発足
日本Scalaユーザーズグループ発足
Implicit Implicit Scala
Implicit Implicit Scala
Implicit Explicit Scala
Implicit Explicit Scala
Scalaの限定継続の応用と基本(改訂版)
1.
Scalaの限定継続の応用と基本
in 高橋メソッド 水島 宏太 (@kmizu)
2.
限定継続について話します
3.
その前に
4.
継続って何?
5.
「これから行われる残りの計算 をパッケージ化したもの」
6.
抽象的
7.
わからない
8.
必要なのは具体例
9.
call/cc
10.
説明しづらい
11.
「ファーストクラスreturn」
12.
void foo() {
Continuation<Void> c =`return`; bar(c); println("foo end"); } void bar(Continuation<Void> c) { for(int i = 0; i <= 10; i ++ ) { if(i >= 5) { println("break!"); c.invoke(null); } } } foo() "break!"
13.
"foo end"はどこにいった?
14.
void foo() {
Continuation<Void> c =`return`; bar(c); println("foo end"); } void bar(Continuation<Void> c) { for(int i = 0; i <= 10; i ++ ) { if(i >= 5) { println("break!"); c.invoke(null); } } } foo() "break!"
15.
foo()の呼び出し元まで吹っ飛ぶ
16.
例外みたい?
17.
だいぶ違う
18.
static Continuation<Integer> continuation; void
main(String[] args) { Integer result = hoge(); println("result = " + result); continuation.invoke(200); } Integer hoge() { println("hoge started"); foo(`return`); println("hoge finished"); } Integer foo(Continuation<Integer> escape) { continuation = escape; continuation.invoke(300);return -1; }
19.
どうなる?
20.
300 200 200 200 200 200 200 200 200 ...
21.
無限ループ
22.
なぜ?
23.
static Continuation<Integer> continuation; void
main(String[] args) { Integer result = hoge(); println("result = " + result); continuation.invoke(200); } Integer hoge() { println("hoge started"); foo(`return`); println("hoge finished"); } Integer foo(Continuation<Integer> escape) { continuation = escape; continuation.invoke(300); return -1; }
24.
一度抜けたメソッドに戻れる
25.
タイムマシーンみたいな
26.
一度呼び出したら返ってこない
27.
これが普通の継続
28.
限定継続
29.
の前に応用例
30.
の前に応用例
31.
何の役に立つ?
32.
がわからないとやる気がでない
33.
というわけで応用例
34.
ふつうの継続と同じ分野
35.
利用側のコードだけ説明
36.
実装の説明は難しい
37.
Generator
38.
C#のyieldとか
39.
Pythonのジェネレータ
40.
val x1: Iterator[Int]
= make[Int]{yields => yields(1) println("X") yields(2) println("Y") yields(3) } while(x1.hasNext) { println("----") println(x1.next) }
41.
---- 1 X ---- 2 Y ---- 3
42.
yieldでStop the world
43.
nextで再開
44.
使う方は難しくない
45.
Amb
46.
非決定計算
47.
実際にはただの総当り
48.
block {
val x = amb(1, 2, 3) val y = amb(4, 5) printf("(%d, %d)%n", x, y) }
49.
(1, 4) (1, 5) (2,
4) (2, 5) (3, 4) (3, 5)
50.
Goto
51.
継続は元々はgotoの形式化
52.
reset { var
sum = 0; var i = 0 val LOOP = label // gotoのためのラベルを作成 sum += i i += 1 if(i <= 100) goto(LOOP) // gotoでジャンプ println("1から100までの合計値:" + sum) }
53.
他にも色々
54.
話を戻して限定継続
55.
色々方式がある
56.
shift/reset
57.
control/prompt
58.
Scalaはshift/resetを採用
59.
普通の継続との違いは?
60.
戻れる範囲を制限
61.
呼び出したら「返って来る」
62.
これだけだとよくわからない
63.
コード例
64.
val answer =
reset { val x = shift { k: (Int => Int) => println("A") println("k(10) = " + k(10)) println("B") 8 } println("x = " + x);x * 2 } println("answer = " + answer)
65.
A x = 10 k(10)
= 20 B answer = 8
66.
何故こうなる?
67.
resetは継続の範囲を制限
68.
shiftは少しめんどう
69.
val x =
shift { k: (Int => Int) => println("A") println("k(10) = " + k(10)) println("B") 8 }
70.
kが継続
71.
型はInt => Int
72.
Intを渡すとIntが「返って来る」
73.
println("A") println("k(10) = "
+ k(10)) println("B") 8 が評価される
74.
その後が問題
75.
shiftの呼び出し元に「返らない」
76.
resetの呼び出し元に「返る」
77.
ここがわかりにくい点
78.
ところで
79.
println("k(10) = "
+ k(10))
80.
k(10)で何が起こってる?
81.
shiftの呼び出し元に「返る」
82.
println("x = "
+ x) x*2
83.
resetを抜けるまでが評価される
84.
最後にkの呼び出し元に「返る」
85.
kの呼び出しの続きが評価される
86.
何度でもkを呼び出せる
87.
非常にややこしい
88.
普通の人にshift/resetは…
89.
中の人が知っていればいい話
90.
でも面白い
91.
宣伝
92.
『オープンソース徹底活用 Scala実践プログラミング』
秀和システム
93.
共著で書きました
94.
限定継続の話もあります
95.
わかりにくければdisってください
96.
質問タイム?
Baixar agora