Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
最近個人的に気になるプログラミング言語おさらい Ruby, Python, Go, Rust,...
Search
Kei Shiratsuchi
PRO
August 30, 2017
Technology
1.1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
最近個人的に気になるプログラミング言語おさらい Ruby, Python, Go, Rust, Julia
レトリバセミナー 2017/03/15
Movie:
https://www.youtube.com/watch?v=okwJ_Mppl74
Kei Shiratsuchi
PRO
August 30, 2017
More Decks by Kei Shiratsuchi
See All by Kei Shiratsuchi
モノリスとマイクロサービスの橋渡し - ベターからモアベターへ
kei_s
PRO
0
130
なぜ リアーキテクティング専任チームを作ったのか
kei_s
PRO
2
1.7k
実践 Rails アソシエーションリファクタリング / Rails association refactoring in practice
kei_s
PRO
8
9.9k
「Go言語でつくるインタプリタ」を Rust で移植してみた / "Write An Interpreter In Go" In Rust
kei_s
PRO
1
2.1k
Rust言語で作るインタプリタ / Write An Interpreter In Rust
kei_s
PRO
2
810
育児休業のご報告と、育児グッズとしてのスマートスピーカー / Parental Leave and SmartSpeaker
kei_s
PRO
0
900
「深層学習による自然言語処理」読書会 第6章2.7
kei_s
PRO
0
490
「深層学習による自然言語処理」読書会 第5章5.1
kei_s
PRO
0
500
「深層学習による自然言語処理」読書会 第2章2.1~2.5
kei_s
PRO
0
500
Other Decks in Technology
See All in Technology
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
190
LLMやAIエージェントをソフトウェアに組み込むプラクティス
shibuiwilliam
1
360
「ちゃんとやっている」は独りよがりだった ― 不安に寄り添うインシデント対応へ / Towards incident response that addresses anxieties
chmikata
1
5.1k
インフラと開発の垣根を超えていき!〜元AWSインフラエンジニアがAWS開発で奮闘している話〜
hatahata021
2
180
脱金融のフューチャー・デザイン / Future Design Beyond Finance
ks91
PRO
0
150
インフラ寄りSREでも 開発に踏み出せる〜境界を越えてユーザー体験に向き合いたい〜
sansantech
PRO
2
3.8k
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
630
Foxgloveについて 実際にExtensionを開発して公開するまでの話 / About Foxglove: The Story of Developing and Releasing an Extension
ry0_ka
0
210
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
0
180
技術イベント終了後、運営の 事後タスクは丁寧に (心がけています)/ #tamagawadev
nishiuma
1
100
GuardrailからGovernanceへ~AIエージェント運用の次の課題~
sbspsy
2
270
AICoEでAIネイティブ組織への進化
yukiogawa
0
170
Featured
See All Featured
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
1
370
Context Engineering - Making Every Token Count
addyosmani
9
1k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.9k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
2
320
How to train your dragon (web standard)
notwaldorf
97
6.7k
Unsuck your backbone
ammeep
672
58k
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
230
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
630
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
190
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.1k
Transcript
࠷ۙݸਓతʹؾʹͳΔ ϓϩάϥϛϯάݴޠ͓͞Β͍ 3VCZ 1ZUIPO (P 3VTU +VMJB 株式会社レトリバ © 2017
Retrieva, Inc.
ࣗݾհ • ⽩⼟慧(シラツチ ケイ) • 株式会社レトリバ • 2016年4⽉⼊社 • Ruby
on Rails / JavaScript • フロントエンド側の⼈間 • ⼤学時代は複雑ネットワーク科学の研究 © 2017 Retrieva, Inc. 2
<એ> • WEB+DB PRESS Vol.100 に、弊社 のメンバーが特集記事を書きまし た。 • 特集1
作って学ぶ⼈⼯知能 • 第1章 ⼈⼯知能とはどんな技術なの か? • 第2章 ⾃然⾔語処理 • 第3章 機械学習 • 第4章 深層学習とニューラルネット ワーク • 発売中! © 2017 Retrieva, Inc. 3
ຊͷϝχϡʔ • 最新事情調査 • Ruby • Python • 弊社でまだ使っていない⾔語紹介 •
Go • Rust • Julia © 2017 Retrieva, Inc. 4
3VCZ • 弊社では製品のWebフレームワークとして、Ruby on Railsを利 ⽤ • 作者が⽇本⼈ • まつもとゆきひろ
(matz) • 開発者にも⽇本⼈が多い(ので、⽇本語の情報が多い) © 2017 Retrieva, Inc. 5
3VCZɿ࠷৽όʔδϣϯ • 最新バージョンは 2.4.1 • 2.4 でのアップデート • ハッシュテーブルの実装が双⽅向連結リスト+チェイン法から、オー プンアドレス法に変更され⾼速化
• binding.pry のような、binding.irb を標準搭載 • Fixnum/Bignum を Integer に統合 • String.upcase などがASCIIだけでなくUnicodeに対応 • 'Türkiye'.upcase => "TÜRKIYE" © 2017 Retrieva, Inc. 6
3VCZɿࠓޙͷಈ • バージョン3は、2.0から3倍⾼速化することを⽬指す • Ruby 3x3 プロジェクト • 東京オリンピックの前の年までに実現を⽬指す(って⾔ってた はず)
© 2017 Retrieva, Inc. 7
3VCZɿࢀߟ63- • "Ruby 2.4.0 リリース” • https://www.ruby-lang.org/ja/news/2016/12/25/ruby-2-4-0- released/ • "Ruby
3x3: Matz, Koichi, and Tenderlove on the future of Ruby Performance | Heroku” • https://blog.heroku.com/ruby-3-by-3 © 2017 Retrieva, Inc. 8
1ZUIPO • 弊社では深層学習、数値計算系のライブラリ群を利⽤ • Chainer、gensim • ⾔語特性としては Ruby と似ている(動的、インタプリタ、オ ブジェクト指向)
• 数値計算ライブラリ NumPy を中⼼に、機械学習や計算系のラ イブラリが充実している © 2017 Retrieva, Inc. 9
1ZUIPOɿ࠷৽όʔδϣϯ • 最新バージョンは 3.6.2 • 3.6 でのアップデート • フォーマット済み⽂字列リテラルの導⼊ •
f"He said his name is {name}." • ⾮同期ジェネレータ • 3.5で導⼊された async/await を yield と⼀緒に使えるように • ⾮同期内包表記 • result = [i async for i in aiter() if i % 2] • キーワード引数の順番の保持 © 2017 Retrieva, Inc. 10
1ZUIPOɿࢀߟ63- • "Whatʼs New In Python 3.6 ̶ Python 3.6.1
ドキュメント” • https://docs.python.jp/3/whatsnew/3.6.html © 2017 Retrieva, Inc. 11
(P • Google が開発を主導している⾔語 • ロブ・パイク、ケン・トンプソンといった重鎮が開発 • Ruby, Python と違い、静的型付けコンパイル⾔語
• Linux, Mac OS, FreeBSD, Windows 向けにコンパイルができる • Linux と Windows で同様に動く実⾏ファイルが作成できる • Ruby/Python は(ライブラリによっては)Windowsでの動作が⾯倒 • 並⾏処理が軽量に扱える © 2017 Retrieva, Inc. 12
(Pɿฒߦॲཧ • go f(x) で、f を軽量スレッ ド(goroutine)で動作させる • チャンネルに対して <-
で送 信、受信ができ、同期をと れる © 2017 Retrieva, Inc. 13 func main() { go say("world") say("hello") } func sum(s []int, c chan int) { ... c <- sum // send sum to c } func main() { s := []int{7, 2, 8, -9, 4, 0} c := make(chan int) go sum(s[:len(s)/2], c) go sum(s[len(s)/2:], c) x, y := <-c, <-c // receive from c fmt.Println(x, y, x+y) }
(PɿنͬΆ͍ͷ • 癖が強い(?)仕様が多い • エラー処理。try/catch ではなく、err != nil チェックを噛ませる •
構造体はクラスではないので、継承を使わない • インデント数や改⾏位置のフォーマット(gofmt コマンド) • プロジェクト、ライブラリのディレクトリ構造 • 誰が書いても同じようになる • 慣れると気にならない。他の⼈のコードも読みやすい • 「Goに⼊ってはGoに従え」 © 2017 Retrieva, Inc. 14
(Pɿࢀߟ63- • "ドキュメント - The Go Programming Language” • http://golang-jp.org/doc/
• "A Tour of Go” • https://go-tour-jp.appspot.com/ • "Goに⼊ってはGoに従え” • https://ukai-go-talks.appspot.com/2014/gocon.slide • "Goby Sample Web App” • https://sample.goby-lang.org/ © 2017 Retrieva, Inc. 15
3VTU • Mozilla が開発を主導 • ベターCを⽬指すっぽい(分野としてC++と競合しそう) • 安全性、速度、並⾏性の3つのゴールにフォーカス • ガーベジコレクタなしにこれらのゴールを実現
• 他の⾔語への埋め込み、要求された空間や時間内での動作、 デバイス ドライバやオペレーティングシステムのような低レベルなコードを得 意とする • 全てのデータ競合を排除しつつも実⾏時オーバーヘッドのないコンパ イル時の安全性検査を多数持つ © 2017 Retrieva, Inc. 16
3VTU • 例 • https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/guessing-game.html • https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/dining-philosophers.html • io::Result.expect() でエラーハンドリング
• .expect() をつけないと、Result を使っていないという警告が出る • パターンマッチ(Ok, Err のあたり) • struct, impl でオブジェクト定義 © 2017 Retrieva, Inc. 17
3VTUͷಛɿॴ༗ݖͱआ༻ • 変数の「所有権」をやり取りすることで、メモリ安全性を確保する • 違反する場合、コンパイル時にエラーにする • これにより、マルチスレッドでのデータ競合などを未然に防ぐ • 「しかし、このシステムはあるコストを持ちます。それは学習曲線です。 多くの新しいRustのユーザは「借⽤チェッカとの戦い」と好んで呼ばれる
ものを経験します。 … … … しかし、よいニュースがあります。… … …⼀度彼らが所有権システムの ルールとともにしばらく仕事をすれば、彼らが借⽤チェッカと戦うことは 少なくなっていくということです。」 © 2017 Retrieva, Inc. 18
3VTUɿॴ༗ݖ • リソース v に対する所有権は「1つ」しかない • 下記は println! のところで「コンパイル時に」エラーになる •
error[E0382]: use of moved value: `v` © 2017 Retrieva, Inc. 19 fn main() { let v = vec![1, 2, 3]; let v2 = v; println!("v[0] is: {}", v[0]); } fn take(v: Vec<i32>) { println!(”v{}", v[0]); } fn main() { let v = vec![1, 2, 3]; take(v); println!("v[0] is: {}", v[0]); }
3VTUɿࢀরͱआ༻ • v を渡す代わりに、&v を渡す。引数にも &Vec<i32> を使う。 • &T, &mut
T は参照。所有権を「借⽤」する。 © 2017 Retrieva, Inc. 20 fn take(v: &Vec<i32>) { println!("{}", v[0]); } fn main() { let v = vec![1, 2, 3]; take(&v); println!("v[0] is: {}", v[0]); } fn plus(y: &mut i32) { *y += 1; } fn main() { let mut x = 5; plus(&mut x); println!("{}", x); }
3VTUɿॴ༗ݖͱआ༻ • 所有者の権限 1. リソースがいつ解放されるかを制御出来る。 2. リソースを immutable な形で多くの borrower
に貸し与えることが出来る。 3. リソースを mutable な形で1つの borrower に貸し与えることが出来る。 • 所有者の制約 1. 既に誰かに貸し与えたリソースを変更したり、mutable な形で別の誰かに 貸し与えたりする事は出来ない。 2. 既に誰かに mutable な形で貸し与えたリソースは、アクセスすることが出 来ない。 © 2017 Retrieva, Inc. 21
3VTUɿࢀߟ63- • "プログラミング⾔語Rust" • https://rust-lang-ja.github.io/the-rust-programming-language- ja/1.6/book/ • "Rustは何が新しいのか(基本的な⾔語機能の紹介) - いもす
研 (imos laboratory)" • https://imoz.jp/note/rust-functions.html • "RustにおけるOwnershipの仕組み - Nao Minami's Blog” • http://south37.hatenablog.com/entry/2014/12/14/Rustにおける Borrowingの仕組み © 2017 Retrieva, Inc. 22
+VMJB • 科学技術計算を得意とするプログラミング⾔語 • 数値計算、⾏列演算を⾼速にやりたい(RやNumpyに競合) • コンパイル⾔語に⽐肩する実⾏速度 • シンプルな⾔語機能と豊富な標準ライブラリ •
引数の型により実⾏される関数が決まる動的ディスパッチ • Lispのような強⼒なマクロ機能 © 2017 Retrieva, Inc. 23
+VMJB • 例 • Jupyter Notebook 連携(グラフプロット) • ベクトル、⾏列計算 ©
2017 Retrieva, Inc. 24
+VMJBɿߴͳ GPSϧʔϓ • 素数出⼒プログラム • ⼆重ループでゴリ押し • Python 2:43.6秒 •
Python 3:20.7秒 • Julia:1.2秒 • 適当に書いても速度が出る © 2017 Retrieva, Inc. 25 # Julia for i = 1000000:1001000 for j = 2:i i % j == 0 && break j == i - 1 && println( i ) end end # Python for i in range(1000000, 1001001): for j in range(2, i): if i % j == 0: break if j == i - 1: print( i )
+VMJBɿߴͳ GPSϧʔϓ • ⾏列に対する、組み込みの x+y と、全要素の⾜し合わせ add(x,y) の速度⽐較 • 遜⾊ない速度が出る
© 2017 Retrieva, Inc. 26 function add(x, y) output = similar(x) @inbounds for i in 1:endof(x) output[i] = x[i] + y[i] end return output end x = randn(100_000) y = randn(100_000) println("x + y") x + y for _ in 1:5 @time x + y end println("add(x, y)") add(x, y) for _ in 1:5 @time add(x, y) end x + y 0.000578 seconds 0.000688 seconds ... add(x, y) 0.000501 seconds 0.000456 seconds ...
+VMJBɿͷཧ༝ • Juliaコードを、型推論によって型付きJuliaコードに変換 • 実⾏時の曖昧性を排除 • LLVMによってネイティブコードに変換 • Python などのような
VM を使う⾔語より⾼速 • 例 © 2017 Retrieva, Inc. 27
+VMJBɿ1ZUIPOͱͷ࿈ܞ • PyCall というライブラリにより、Python で計算させた結果を Julia で利⽤できる • 例:Julia で前処理して、scikit-learn
などに渡して計算させる • 注意:そのまま Pkg.add(ʻPyCallʼ) でインストールすると、Conda を 新たにインストールしようとする © 2017 Retrieva, Inc. 28
+VMJBɿࢀߟ63- • "Getting Started · The Julia Language” • https://docs.julialang.org/en/stable/manual/getting-started/
• "Julia-Tutorial / Julia⾼速チュートリアル.ipynb" • https://nbviewer.jupyter.org/github/bicycle1885/Julia- Tutorial/blob/master/Julia%E9%AB%98%E9%80%9F%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%8 3%AB.ipynb • "JuliaTokyo7/最新Juliaチュートリアル.ipynb at master · bicycle1885/JuliaTokyo7” • https://github.com/bicycle1885/JuliaTokyo7/blob/master/%E6%9C%80%E6%96%B0Julia%E3%83%81%E3%83%A5%E3%83%BC%E3%83 %88%E3%83%AA%E3%82%A2%E3%83%AB.ipynb • "JupyterでJuliaを動かして回帰分析をやってみる。 - Qiita” • http://qiita.com/kenmatsu4/items/b77ecec75418cbaa2212 • "Python使いをJuliaに引き込むサンプル集 | mwSoft” • http://www.mwsoft.jp/programming/julia/python_to_julia.html © 2017 Retrieva, Inc. 29
© 2017 Retrieva, Inc.