Enviar búsqueda
Cargar
Scala lang evolution
•
13 recomendaciones
•
2,547 vistas
Akira Takahashi
Seguir
Scala勉強会第9回 in 渋谷( http://atnd.org/events/9104 )で発表した「Scalaがもたらす言語の進化」
Leer menos
Leer más
Tecnología
Noticias y política
Vista de diapositivas
Denunciar
Compartir
Vista de diapositivas
Denunciar
Compartir
1 de 21
Descargar ahora
Descargar para leer sin conexión
Recomendados
Scala勉強会 in 渋谷 2010→2011(鹿島)
Scala勉強会 in 渋谷 2010→2011(鹿島)
k4200
Lifthub (rpscala #31)
Lifthub (rpscala #31)
k4200
Lifthub (#rpscala 26)
Lifthub (#rpscala 26)
k4200
Real-Time 3D Programming in Scala
Real-Time 3D Programming in Scala
Hideyuki Takeuchi
sbt 0.10 for beginners?
sbt 0.10 for beginners?
k4200
私とScalaと2010 @hito_asa
私とScalaと2010 @hito_asa
Hitoshi Asai
20120718 scalaで転職
20120718 scalaで転職
大翼 福田
Sns suite presentation
Sns suite presentation
Jason Namkung
Recomendados
Scala勉強会 in 渋谷 2010→2011(鹿島)
Scala勉強会 in 渋谷 2010→2011(鹿島)
k4200
Lifthub (rpscala #31)
Lifthub (rpscala #31)
k4200
Lifthub (#rpscala 26)
Lifthub (#rpscala 26)
k4200
Real-Time 3D Programming in Scala
Real-Time 3D Programming in Scala
Hideyuki Takeuchi
sbt 0.10 for beginners?
sbt 0.10 for beginners?
k4200
私とScalaと2010 @hito_asa
私とScalaと2010 @hito_asa
Hitoshi Asai
20120718 scalaで転職
20120718 scalaで転職
大翼 福田
Sns suite presentation
Sns suite presentation
Jason Namkung
Rpscala18th
Rpscala18th
nanjakkun
Rpscala2011 0601
Rpscala2011 0601
Hajime Yanagawa
Scala repl
Scala repl
Kenji Yoshida
rpscala35-scala2.9.0
rpscala35-scala2.9.0
Kenji Yoshida
Scala design pattern
Scala design pattern
Kenji Yoshida
scala-kaigi1-sbt
scala-kaigi1-sbt
Kenji Yoshida
Grass
Grass
k4200
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
Shoken Fujisaki
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
You&I
Boost container feature
Boost container feature
Akira Takahashi
Cppmix 01
Cppmix 01
Akira Takahashi
S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01
Takeshi Akutsu
RustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使う
Satoshi Yoshikawa
ローカルストレージでの永続化キューの方式を本気で比較してみた
ローカルストレージでの永続化キューの方式を本気で比較してみた
Study Group by SciencePark Corp.
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
Yuta Kashino
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
Katsunori Kanda
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
Hideki Takase
gRPCをちょこっと調べた話
gRPCをちょこっと調べた話
Shuzo Kashihara
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014
Yoshiki Shibukawa
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
研究生のためのC++ no.6
研究生のためのC++ no.6
Tomohiro Namba
Recommend scala
Recommend scala
Yuto Suzuki
Más contenido relacionado
Destacado
Rpscala18th
Rpscala18th
nanjakkun
Rpscala2011 0601
Rpscala2011 0601
Hajime Yanagawa
Scala repl
Scala repl
Kenji Yoshida
rpscala35-scala2.9.0
rpscala35-scala2.9.0
Kenji Yoshida
Scala design pattern
Scala design pattern
Kenji Yoshida
scala-kaigi1-sbt
scala-kaigi1-sbt
Kenji Yoshida
Grass
Grass
k4200
Destacado
(7)
Rpscala18th
Rpscala18th
Rpscala2011 0601
Rpscala2011 0601
Scala repl
Scala repl
rpscala35-scala2.9.0
rpscala35-scala2.9.0
Scala design pattern
Scala design pattern
scala-kaigi1-sbt
scala-kaigi1-sbt
Grass
Grass
Similar a Scala lang evolution
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
Shoken Fujisaki
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
You&I
Boost container feature
Boost container feature
Akira Takahashi
Cppmix 01
Cppmix 01
Akira Takahashi
S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01
Takeshi Akutsu
RustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使う
Satoshi Yoshikawa
ローカルストレージでの永続化キューの方式を本気で比較してみた
ローカルストレージでの永続化キューの方式を本気で比較してみた
Study Group by SciencePark Corp.
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
Yuta Kashino
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
Katsunori Kanda
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
Hideki Takase
gRPCをちょこっと調べた話
gRPCをちょこっと調べた話
Shuzo Kashihara
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014
Yoshiki Shibukawa
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
Hironobu Saitoh
研究生のためのC++ no.6
研究生のためのC++ no.6
Tomohiro Namba
Recommend scala
Recommend scala
Yuto Suzuki
実際、東京と福岡の Shop チームは仲がよいのかどうかについて
実際、東京と福岡の Shop チームは仲がよいのかどうかについて
LINE Corporation
Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
Swiftで外部ライブラリを使ってみよう
Swiftで外部ライブラリを使ってみよう
Kanako Kobayashi
WikiWikiアジャイル
WikiWikiアジャイル
Fumio Kawakami
Sphinx/reST
Sphinx/reST
Ryo Maruyama
Similar a Scala lang evolution
(20)
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
LLプログラマ向けSwift ExtensionsとテストライブラリQuickの紹介
今時のオンプレなgithubクローン環境構築
今時のオンプレなgithubクローン環境構築
Boost container feature
Boost container feature
Cppmix 01
Cppmix 01
S01 t1 tsuji_pylearn_ut_01
S01 t1 tsuji_pylearn_ut_01
RustでWebSocketな自社APIを使う
RustでWebSocketな自社APIを使う
ローカルストレージでの永続化キューの方式を本気で比較してみた
ローカルストレージでの永続化キューの方式を本気で比較してみた
深層学習ライブラリのプログラミングモデル
深層学習ライブラリのプログラミングモデル
20150207 何故scalaを選んだのか
20150207 何故scalaを選んだのか
関数型言語ElixirのIoTシステム開発への展開
関数型言語ElixirのIoTシステム開発への展開
gRPCをちょこっと調べた話
gRPCをちょこっと調べた話
Oktavia全文検索エンジン - SphinxCon JP 2014
Oktavia全文検索エンジン - SphinxCon JP 2014
PHPで並列処理する ライブラリを作った
PHPで並列処理する ライブラリを作った
研究生のためのC++ no.6
研究生のためのC++ no.6
Recommend scala
Recommend scala
実際、東京と福岡の Shop チームは仲がよいのかどうかについて
実際、東京と福岡の Shop チームは仲がよいのかどうかについて
Scalaでのプログラム開発
Scalaでのプログラム開発
Swiftで外部ライブラリを使ってみよう
Swiftで外部ライブラリを使ってみよう
WikiWikiアジャイル
WikiWikiアジャイル
Sphinx/reST
Sphinx/reST
Más de Akira Takahashi
Cpp20 overview language features
Cpp20 overview language features
Akira Takahashi
Cppmix 02
Cppmix 02
Akira Takahashi
Modern C++ Learning
Modern C++ Learning
Akira Takahashi
cpprefjp documentation
cpprefjp documentation
Akira Takahashi
C++1z draft
C++1z draft
Akira Takahashi
Boost tour 1_61_0 merge
Boost tour 1_61_0 merge
Akira Takahashi
Boost tour 1_61_0
Boost tour 1_61_0
Akira Takahashi
error handling using expected
error handling using expected
Akira Takahashi
Boost tour 1.60.0 merge
Boost tour 1.60.0 merge
Akira Takahashi
Boost tour 1.60.0
Boost tour 1.60.0
Akira Takahashi
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
Akira Takahashi
Boost Tour 1_58_0
Boost Tour 1_58_0
Akira Takahashi
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
Akira Takahashi
C++14 enum hash
C++14 enum hash
Akira Takahashi
Multi paradigm design
Multi paradigm design
Akira Takahashi
Start Concurrent
Start Concurrent
Akira Takahashi
Programmer mind
Programmer mind
Akira Takahashi
Boost.Study 14 Opening
Boost.Study 14 Opening
Akira Takahashi
Executors and schedulers
Executors and schedulers
Akira Takahashi
Improvement future api
Improvement future api
Akira Takahashi
Más de Akira Takahashi
(20)
Cpp20 overview language features
Cpp20 overview language features
Cppmix 02
Cppmix 02
Modern C++ Learning
Modern C++ Learning
cpprefjp documentation
cpprefjp documentation
C++1z draft
C++1z draft
Boost tour 1_61_0 merge
Boost tour 1_61_0 merge
Boost tour 1_61_0
Boost tour 1_61_0
error handling using expected
error handling using expected
Boost tour 1.60.0 merge
Boost tour 1.60.0 merge
Boost tour 1.60.0
Boost tour 1.60.0
Boost Tour 1_58_0 merge
Boost Tour 1_58_0 merge
Boost Tour 1_58_0
Boost Tour 1_58_0
C++14 solve explicit_default_constructor
C++14 solve explicit_default_constructor
C++14 enum hash
C++14 enum hash
Multi paradigm design
Multi paradigm design
Start Concurrent
Start Concurrent
Programmer mind
Programmer mind
Boost.Study 14 Opening
Boost.Study 14 Opening
Executors and schedulers
Executors and schedulers
Improvement future api
Improvement future api
Último
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
Toru Tamaki
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Toru Tamaki
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Yuma Ohgami
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
sugiuralab
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
iPride Co., Ltd.
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
taisei2219
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
Toru Tamaki
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
Ryo Sasaki
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Hiroki Ichikura
Último
(9)
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Content-Aware Token Sharing for Efficient Semantic Segmentation With Vis...
論文紹介:Automated Classification of Model Errors on ImageNet
論文紹介:Automated Classification of Model Errors on ImageNet
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
Open Source UN-Conference 2024 Kawagoe - 独自OS「DaisyOS GB」の紹介
スマートフォンを用いた新生児あやし動作の教示システム
スマートフォンを用いた新生児あやし動作の教示システム
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
TSAL operation mechanism and circuit diagram.pdf
TSAL operation mechanism and circuit diagram.pdf
論文紹介:Semantic segmentation using Vision Transformers: A survey
論文紹介:Semantic segmentation using Vision Transformers: A survey
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
[DevOpsDays Tokyo 2024] 〜デジタルとアナログのはざまに〜 スマートビルディング爆速開発を支える 自動化テスト戦略
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
Scala lang evolution
1.
Scalaがもたらす 言語の進化 高橋晶(Akira Takahashi) はてな :
id:faith_and_brave Twitter : @cpp_akira 1/21
2.
自己紹介 1/2 • C++標準化委員会のひと •
言語好き (言語を学び、 おもしろい機能をC++で実現する) • 魔導書作ってます (そろそろvol.2はじめます) 株式会社ロングゲート – 製品案内 http://longgate.co.jp/products.html 2/21
3.
自己紹介 2/2 • ないと生きていけないライブラリ ・Boost.Fusion
– スーパーウルトラハイパータプル ・Boost.Spirit.Qi – Fusionを基礎とする構文解析器 ・Boost.MultiIndex – 複数のインデックスを持てるコレクション Scalaにもほしいですね! • P-Stade C++ LibrariesのOven Range Libraryのメン テもしてます。 http://p-stade.sourceforge.net/ http://sourceforge.net/projects/p-stade/ 3/21
4.
やりたかった内容 • 言語の設計思想 • どの言語からどの機能を取り入れてきたのか •
言語拡張の際の互換性のポリシー 4/21
5.
やりたかった内容 • 言語の設計思想 • どの言語からどの機能を取り入れてきたのか •
言語拡張の際の互換性のポリシー → Oderskyさんがこのへんについてほとんど何も書いてない。 「JavaやC#と対話しやすいようにした」くらい。 推測で書けるけどあまりおもしろくないのでやめました。 5/21
6.
今日やる内容 • Scalaの設計と特徴的な機能 • それによって今後の言語にどのような影響を 与えるか 6/21
7.
Scalaとはどんな言語か • オブジェクト指向と関数型のハイブリット言語 → マルチパラダイム言語 •
Java VM上に実装されていて、Javaのライブラリをそ のまま使える • .NET版は(おそらく人手不足で)開発が停滞中 7/21
8.
Scalaは 言語の進化を促進させるための言語 • 私にとって、Scala自体は理想的な言語ではない • Scalaは、理想の言語を生み出すため、 オブジェクト指向から関数型へのパラダイムシフトを促し、 マルチパラダイム
+ DSLという今後のプログラミング言語の 在り方、方向性を広めるための言語だと考えている 8/21
9.
マルチパラダイムの重要性 1/3 • Javaは、1.5でGenericsが入る前までは 純粋なオブジェクト指向言語だった。 これは、プログラミング初心者に(もしくはどんなバカにでも) オブジェクト指向プログラミングを強制させるのに役立った。 •
Haskellも純粋な関数型言語という意味ではJavaと同じ。 その言語らしいプログラミングを強制させることができた。 • しかし、これらが十分に浸透した今、プログラミングスタイル を縛るだけではなく、より強力な表現力が求められる。 9/21
10.
マルチパラダイムの重要性 2/3 オブジェクト指向と関数型、 他のパラダイムは互いに相容れないものではない。 互いを組み合わせることにより、互いが苦手とする 分野を補完し合い、さらにより良く強力な プログラミングが可能となる。 マルチパラダイムは、複数の考えの組み合わせによって プログラミングに無限の可能性を与えうるものである。 これはC++が言語拡張なしにライブラリだけで今日でも 成長し続けていることが証明していると言える。 「アイデアというものは、無数の小さなアイデアの 組み合わせによってのみ生み出される」 10/21
11.
マルチパラダイムの重要性 3/3 「科学的基盤を導入しようと色々努力しても、プログラミン グはまず間違いなく、小手先仕事として教えられることに なる。普通、1つ(か、ほんの少し)のプログラミング言語(例 えば、Javaとそれを補うHaskell、Scheme、またはProlog)の 枠の中で教えられる。… ツールと概念がごちゃごちゃになっている。それに輪をか けて、オブジェクト指向、論理型、関数型等の「パラダイム (paradigm)」と呼ばれる、プログラミングの異なる見方に基 づく、考え方の異なる流派がはびこっている。流派それぞ れが独自の科学を持つ。1つの学問としてのプログラミン グの統一性は失われた。…」 マルチパラダイムは、プログラミングを体系的に学ぶ のにも役立つ。 教育の場において、オブジェクト指向プログラミングを 教えるのにはJavaを使い、関数型プログラミングを教え るのにはHaskellを使う、というような方法では学生を混 乱させるだけで、本質的なことに集中して教育すること ができない。 11/21
12.
言語の進化としてのScalaの功績 1/5 1. オブジェクト指向と関数型をうまく融合させた ・immutable 不変の式を表現できるようになったことで、ユーザーが副作用について意識する ようになった。 また、Concurrent/Parallelなプログラミングが必須となる時代にうまく適合した。 言語(Odersky)がvarよりもval,
mutableコレクションよりimmutableコレクションを推 奨していることも重要。 immutableは、Concurrentプログラムの最適化の可能性、プログラムをTestableに しやすい等々利点がいっぱい。 ・パターンマッチ 手続き的言語ベースの構文の中でパターンマッチをうまく表現した。 case classのアイデアは、さらに改良されて他の言語にも今後取り入れられるだろう。 パターンマッチがなかったころは、形式チェックと値取り出し、変数定義と分解を分け て行わなければならなかったため、間にバグが入り込みやすかった。 12/21
13.
言語の進化としてのScalaの功績 2/5 2. Concurrentプログラムの抽象化 ・アクターモデルの採用 生のスレッドを使う時代はFree
Lunch(*)とともに終わった。 共有メモリにアクセスするためにlock/unlockを書くような危険な行為は、ユーザー にさせてはいけない。 Scalaはアクターモデルを採用することで、Concurrentプログラムにおける 「安全地帯」を生み出した。 13/21 * 昔々、プログラムもコンピュータも遅かったころ、プログラムの改良をせずに ムーアの法則でコンピュータが速くなるのを待ってるだけでよかった時代があった。 シングルコアの改良に限界がきてマルチコアの時代が訪れたとき 「Free Lunch Is Over(タダ飯の時間は終わりだ)」という宣言がなされ、 並列プログラミングの時代がはじまった。
14.
言語の進化としてのScalaの功績 3/5 3. Genericsの進化 ・Structual
Subtypingの採用 Scalaでは、「Tという型はfooというメソッドを持っていれば継承関係になくていい」と いうのを表現できるようになったため、インタフェースの定義/実装にとらわれずに よくなった。 // ※継承関係にない class Rectangle { def draw = println(“Rectangle”) } class Circle { def draw = println(“Circle”) } // drawというメソッドを持っていればいい type Drawable = { def draw: Unit } // 同じリストに入れる val ls = List[Drawable](new Rectangle, new Circle) ls foreach(_.draw) 14/21
15.
言語の進化としてのScalaの功績 4/5 4. 例外を必要としないエラーハンドリング ・さよならtry/catch try/catchはプログラムを冗長にした。 Scalaでは、 ・パターンマッチ ・Option(無効/エラー値と正常値を表現) ・Either(エラー情報付きOption。なぜかあまり使われていない) を標準で採用することで、しばしば冗長になるtry/catchを事実上不要にした。 ここで重要なのは、例外が必須(デフォルト)ではなくなったことにより、例外が真に 必要なケースを議論できるようになったこと。 15/21
16.
言語の進化としてのScalaの功績 5/5 5. 言語内DSLを作りやすい設計 ・復活の演算子オーバーロード、ようこそユーザー定義演算子 ユーザー定義型は組み込み型と同じように振る舞えるようにできるという思想の 元にC++で採用された演算子オーバーロード。 デバッグしにくいという理由でJavaは不採用とし、「演算子オーバーロードは悪」と いう文化を産み出してしまった。 Scalaでは、C++(演算子オーバーロード)やHaskell(ユーザー定義演算子)の思想を 正しく引き継ぎ[要出典(*)]、これらを採用した。 これにより、ベクトルや行列といったクラスを設計する際に演算子が使用できるよ うになり、言語内DSLのためにユーザーが好きに意味を持たせることのできる演算 子を定義できるようになった。 *
Odersky先生がこのへん何も書いてない・・・ 16/21
17.
言語の普及のさせ方 • Scalaは、Java/C#と対話しやすい言語を目指し、これら の言語からユーザーを獲得しようと目論んでいる。 • これはC++がCに対して行った戦略と酷似している。 •
C++はこの方法によりたしかに普及したが、 多くのレガシーコードを産み出してしまった。 • Scalaコミュニティはこの過去から学ばないといけない。 17/21
18.
Scalaへの不満/今後に向けて 1/3 1. 可変長型引数がない。 それを表現するためのコードジェネレート(マクロ)機能が言語に備わっていない。 メタプログラミング周りのサポートが弱い。 これを実現している言語は現状、私が知る限りC++とDしかない。Scalaでは可変 長型引数がないため、コピペコードが標準ライブラリ内でも量産されている。 18/21
19.
Scalaへの不満/今後に向けて 2/3 2. ScalaのGenericsはそれでもテンプレートに勝てない(まだ発展 途上)。 C++で言うところの部分特殊化、パラメータ化継承を表現でき ない等、型引数に対する操作が制限されている。 パラメータ化継承は、いまのErasureベースのGenericsではム リらしい(みずしまさん談) 19/21 テンプレートは、不明瞭なコンパイラメッセージの欠陥が あるにも関わらず、いまだgenericity
hillのkingである。 - Herb Sutter
20.
Scalaへの不満/今後に向けて 3/3 3. 定数式が弱い。 静的型付け言語の特徴として、コンパイル時にできる限りの エラーをとる、というものがあるが、コンパイル時に可能な限 りの計算を行えるのもまた静的型付け言語ならでは。Scalaは それを生かしきれていない。 Javaは携帯ゲームの開発といったパフォーマンス、サイズ制 限の厳しい環境でも使われているため、Scalaが定数式の強 力なサポートを導入すればJavaを置き換える理由になりえる。 コンパイル時計算はD言語が強力で、文字列操作、数値計 算、関数呼び出し、if、foreach等、かなりのことをコンパイル 時に解決する。コンパイルタイムデバッガまである。 20/21
21.
まとめ これは私の個人的な見解をまとめたに過ぎません。 マルチパラダイムや言語の進化について考えるには より多くの意見が必要です。 ぜひみなさんの意見も聞かせてください。 21/21
Descargar ahora