Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
EN
MU
Uploaded by
Masashi Umezawa
PDF, PPTX
175 views
TruffleSqueakの紹介
インタラクティブなPolyglotプログラミングを可能にする、TruffleSqueakの紹介です
Software
◦
Read more
0
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 36
2
/ 36
3
/ 36
4
/ 36
5
/ 36
6
/ 36
7
/ 36
8
/ 36
9
/ 36
10
/ 36
11
/ 36
12
/ 36
13
/ 36
14
/ 36
15
/ 36
16
/ 36
17
/ 36
18
/ 36
19
/ 36
20
/ 36
21
/ 36
22
/ 36
23
/ 36
24
/ 36
25
/ 36
26
/ 36
27
/ 36
28
/ 36
29
/ 36
30
/ 36
31
/ 36
32
/ 36
33
/ 36
34
/ 36
35
/ 36
36
/ 36
More Related Content
PDF
SmalltalkBoltでUFFI入門
by
Masashi Umezawa
PDF
今日から使おうSmalltalk
by
Sho Yoshida
PDF
griffon plugin を 実際に作ってみよう #jggug
by
kimukou_26 Kimukou
PDF
何が変わった? VisualWorks 8.0
by
Masashi Umezawa
PDF
ZynqMPのQEMU
by
Mr. Vengineer
PDF
Groovy Shell Scripting 2015
by
Uehara Junji
PDF
MoteMote Compiler Plugin
by
yoshiaki iwanaga
PDF
20210515 cae linux_install_vb
by
YohichiShiina
SmalltalkBoltでUFFI入門
by
Masashi Umezawa
今日から使おうSmalltalk
by
Sho Yoshida
griffon plugin を 実際に作ってみよう #jggug
by
kimukou_26 Kimukou
何が変わった? VisualWorks 8.0
by
Masashi Umezawa
ZynqMPのQEMU
by
Mr. Vengineer
Groovy Shell Scripting 2015
by
Uehara Junji
MoteMote Compiler Plugin
by
yoshiaki iwanaga
20210515 cae linux_install_vb
by
YohichiShiina
What's hot
PDF
Groovy Bootcamp 2015 by JGGUG
by
Uehara Junji
PDF
TypeScript 言語処理系ことはじめ
by
Yu Nobuoka
PDF
ClassLoader Leak Patterns
by
nekop
PDF
Java開発の強力な相棒として今すぐ使えるGroovy
by
Yasuharu Nakano
ODP
スレッドダンプの読み方
by
Funato Takashi
PDF
C#次世代非同期処理概観 - Task vs Reactive Extensions
by
Yoshifumi Kawai
PDF
Free cad 0.19.2 and cfdof (Japanese Ver.)
by
YohichiShiina
PPTX
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
by
YujiSoftware
PDF
Node-v0.12のTLSを256倍使いこなす方法
by
shigeki_ohtsu
PDF
20210515 of4 wi&paraview 5.9.0_motorbike
by
YohichiShiina
PDF
クラスローダーについて
by
Suguru ARAKAWA
PDF
Reactive Extensions v2.0
by
Yoshifumi Kawai
PPTX
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
by
Takashi Someda
PPTX
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
PDF
FlexUnit4とMockitoFlex
by
Yasuhiro Morikawa
PDF
Reactive Extensionsで非同期処理を簡単に
by
Yoshifumi Kawai
PPT
Javaでトランザクショナルメモリを使う
by
Kenji Kazumura
PDF
Groovyの紹介20130323
by
Yasuharu Hayami
PDF
node-handlersocket
by
koichik
PDF
Decsx launcherv 2.5
by
Etsuji Nomura
Groovy Bootcamp 2015 by JGGUG
by
Uehara Junji
TypeScript 言語処理系ことはじめ
by
Yu Nobuoka
ClassLoader Leak Patterns
by
nekop
Java開発の強力な相棒として今すぐ使えるGroovy
by
Yasuharu Nakano
スレッドダンプの読み方
by
Funato Takashi
C#次世代非同期処理概観 - Task vs Reactive Extensions
by
Yoshifumi Kawai
Free cad 0.19.2 and cfdof (Japanese Ver.)
by
YohichiShiina
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
by
YujiSoftware
Node-v0.12のTLSを256倍使いこなす方法
by
shigeki_ohtsu
20210515 of4 wi&paraview 5.9.0_motorbike
by
YohichiShiina
クラスローダーについて
by
Suguru ARAKAWA
Reactive Extensions v2.0
by
Yoshifumi Kawai
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
by
Takashi Someda
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
FlexUnit4とMockitoFlex
by
Yasuhiro Morikawa
Reactive Extensionsで非同期処理を簡単に
by
Yoshifumi Kawai
Javaでトランザクショナルメモリを使う
by
Kenji Kazumura
Groovyの紹介20130323
by
Yasuharu Hayami
node-handlersocket
by
koichik
Decsx launcherv 2.5
by
Etsuji Nomura
Similar to TruffleSqueakの紹介
KEY
Clojureの発表など
by
Kikuta Go
PDF
Squirrel
by
melpon
PPT
G*workshop sendai 20100424(v2)
by
Nobuhiro Sue
PDF
Protocol Buffers 入門
by
Yuichi Ito
PDF
第三回ありえる社内勉強会 「いわががのLombok」
by
yoshiaki iwanaga
PDF
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
by
Masashi Umezawa
PDF
Scala + Finagleの魅力
by
Kota Mizushima
PPTX
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
by
NTT DATA Technology & Innovation
Clojureの発表など
by
Kikuta Go
Squirrel
by
melpon
G*workshop sendai 20100424(v2)
by
Nobuhiro Sue
Protocol Buffers 入門
by
Yuichi Ito
第三回ありえる社内勉強会 「いわががのLombok」
by
yoshiaki iwanaga
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
by
Masashi Umezawa
Scala + Finagleの魅力
by
Kota Mizushima
GraalVMの多言語実行機能が凄そうだったので試しにApache Sparkに組み込んで動かしてみたけどちょっとまだ早かったかもしれない(Open So...
by
NTT DATA Technology & Innovation
More from Masashi Umezawa
PDF
FileManで楽々ファイル操作
by
Masashi Umezawa
PDF
TaskItの紹介
by
Masashi Umezawa
PDF
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
by
Masashi Umezawa
PPTX
Revealing ALLSTOCKER
by
Masashi Umezawa
PDF
TarandocでJSONを永続化
by
Masashi Umezawa
PPTX
Dockerizing pharo
by
Masashi Umezawa
PDF
今からでも遅くないSmalltalk入門
by
Masashi Umezawa
PDF
Tarantubeでメッセージキューを使い倒す
by
Masashi Umezawa
PDF
VerStixの紹介
by
Masashi Umezawa
PDF
Oldtalk - あのころの処理系は今
by
Masashi Umezawa
PDF
Pyonkeeを鳴らす
by
Masashi Umezawa
PDF
Smalltalk勉強会 - 過去、現在、そして未来へ
by
Masashi Umezawa
PDF
Tarantalk
by
Masashi Umezawa
PDF
Smalltalkと型について
by
Masashi Umezawa
PDF
Introduction of Pharo 5.0
by
Masashi Umezawa
PDF
Why!? Smalltalk
by
Masashi Umezawa
PDF
Pillarの紹介
by
Masashi Umezawa
PPT
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
by
Masashi Umezawa
PDF
NanoStrand
by
Masashi Umezawa
PDF
Pyonkeeの皮をはぐ
by
Masashi Umezawa
FileManで楽々ファイル操作
by
Masashi Umezawa
TaskItの紹介
by
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
by
Masashi Umezawa
Revealing ALLSTOCKER
by
Masashi Umezawa
TarandocでJSONを永続化
by
Masashi Umezawa
Dockerizing pharo
by
Masashi Umezawa
今からでも遅くないSmalltalk入門
by
Masashi Umezawa
Tarantubeでメッセージキューを使い倒す
by
Masashi Umezawa
VerStixの紹介
by
Masashi Umezawa
Oldtalk - あのころの処理系は今
by
Masashi Umezawa
Pyonkeeを鳴らす
by
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ
by
Masashi Umezawa
Tarantalk
by
Masashi Umezawa
Smalltalkと型について
by
Masashi Umezawa
Introduction of Pharo 5.0
by
Masashi Umezawa
Why!? Smalltalk
by
Masashi Umezawa
Pillarの紹介
by
Masashi Umezawa
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
by
Masashi Umezawa
NanoStrand
by
Masashi Umezawa
Pyonkeeの皮をはぐ
by
Masashi Umezawa
TruffleSqueakの紹介
1.
TruffleSqueakの 紹介 ライブなPolyglotプログラミング環境を存分に楽しむ 第135回Smalltalk勉強会 合同会社ソフトウメヤ 梅澤真史
2.
TruffleSqueakとは? ● GraalVM上で動くSqueak ○ GraalSqueakという名前の時もあった ○
Polyglotプログラミングが出来るSqueak ● GraalVMとは? ○ https://www.graalvm.org ○ Polyglotプログラミング用JVM ■ 複数言語が同一のランタイムで動作 ■ 相互のやりとりも可能 ○ OSS版と商用版(Oracle Cloud)が存在 ○ AOTコンパイルでネイティブ実行イメージも作成可
3.
Truffle Frameworkとは? ● GraalVMで提供される言語実装フレームワーク ○
https://www.graalvm.org/graalvm-as-a-platform/language-implementation-framework/ ○ JavaScript, Ruby, Python, R などをサポート ○ LLVM IR, WebAssemblyもサポート ■ C, C++, Rust, Go ○ ASTインタプリタ ■ 実行時情報を基にツリーを最適化 ■ JITコンパイルされる ○ Polyglot APIを提供 Context context = Context.create(); context.eval("js","print('Hello, JavaScript!');"); java
4.
GraalVMのインストール ● Community Editionを入手 ○
現在Java 11ベースのものが安定版 ○ GitHubのreleasesから ■ https://github.com/graalvm/graalvm-ce-builds/releases/tag/vm-21.1.0 ○ アーカイブを適当なディレクトリに展開 ○ 環境変数 GRAALVM_HOME を設定 ○ $GRAALVM_HOME/bin以下にPATHを通す ● gu (GraalVM Updater) コマンドが使えるようになる
5.
GraalVMインストールのTips ● Windowsの場合 ○ サポート言語が少ない(Java,JS,WebAssemblyのみ) ○
WSL2でUbuntuに入れると良い ● Macの場合 ○ /Libraryに入れるための設定が面倒 ○ 軽く試すのであればSDKMAN!経由が楽 $ sdk install java 21.1.0.r11-grl $ sdk current Using: java: 11.0.11.hs-adpt
6.
TruffleSqueakのインストール (1) ● GitHubから各プラットフォーム用のjarを取得 ○
https://github.com/hpi-swa/trufflesqueak/releases ○ GraalVMとバージョンを合わせること ● JDK11ベースの場合 ○ Linux ■ trufflesqueak-installable-java11-linux-amd64-21.1.0.jar ○ Mac ■ trufflesqueak-installable-java11-darwin-amd64-21.1.0.jar ○ Windows ■ trufflesqueak-installable-java11-windows-amd64-21.1.0.jar
7.
TruffleSqueakのインストール (2) ● guコマンドでインストール $
gu install -L trufflesqueak-installable-java11-linux-amd64-21.1.0.jar ● gu list で確認 ComponentId Version Component name Stability Origin --------------------------------------------------------------------------------------------------------------------------------- graalvm 21.1.0 GraalVM Core - js 21.1.0 Graal.js Supported smalltalk 21.1.0 TruffleSqueak Experimental
8.
その他の言語も追加 ● Polyglotプログラミング用に他の言語も追加 $ gu
install python $ gu install ruby $ gu install R
9.
TruffleSqueakの起動 ● trufflesqueak でTruffleSqueak の画面が立ち上がる ○
Squeak 5.2ベース
10.
PolyglotWorkspaceを開く ● 左上の”PolyglotWorkspace open”のボタンを押下 PolyglotWorkspace
open. "do it" ● 右上のメニューボタン(青ボタン)で言語の選択が可能
11.
JavaScriptの実行 ● JavaScriptに言語を切り替えて”print it” ○
関数を定義して選択、実行できる function createDate() { return new Date(); } createDate().toString() //=> 'Fri May 28 2021 22:24:40 GMT+0900 (JST)' JavaScript
12.
ForeignObject ● 今度はPythonに切り替えlistを”explore it”(Ctrl+Shift+i) ●
他言語の要素はForeignObjectとなる ○ 各種メタ情報を参照できる ○ 下部ペインからメッセージも送ることができる
13.
evalの利用 ● 言語を切り替えなくともevalで各言語の実行が可能 Polyglot eval:
'js' string: 'Math.random()'. "=> 0.06826435251134522" Polyglot eval: 'ruby' string: 'Random.new.rand'. "=> 0.6788512960113738" Polyglot.eval('smalltalk', 'Random new next'); //=> 0.5022477628512514 Polyglot.eval('smalltalk', 'Random new next') #=> 0.8651843420677447 ● 他言語からSmalltalkの実行も可能 ○ JavaScript workspaceで ○ Ruby workspaceで
14.
Polyglot Proxy ● evalの結果返ってくるForeignObjectにさらに メッセージ送信できる ●
引数も渡せる (Polyglot eval: 'js' string: 'Math') random. (Polyglot eval: 'ruby' string: 'Random') new rand. Smalltalk (Polyglot eval: 'js' string: '[1,2,3]') join: '-'. "=> '1-2-3'" (Polyglot eval: 'js' string: 'Math') max: (1+2*3) and: (Polyglot eval: 'js' string: '1+2*3'). "=> 9" ((Polyglot eval: 'js' string: '[1,2,3]') concat: (Polyglot eval: 'ruby' string: '[4,5]')) asArray. "=> #(1 2 3 4 5)" Smalltalk
15.
exportとimport ● Polyglot>>import:で他言語の変数をインポート ● Polyglot>>export:で他言語へ変数をエクスポート Polyglot
export: 'morph' value: Morph new. Smalltalk Polyglot.import("morph").openInHand(); JavaScript
16.
Dictionaryをやりとりしてみる Polyglot export: 'stDict'
value: {'Smalltalk'->1. 'JS'->2} asDictionary. Smalltalk (Polyglot import: 'jsObj') inspect. let stDict = Polyglot.import("stDict"); stDict.size(); //2 stDict.values(); //#(1 2) let jsObj = {}; stDict.keysAndValuesDo((key, value)=>{ jsObj[key] = value**2; }) JSON.stringify(jsObj); //'{"Smalltalk":1,"JS":4}' Polyglot.export("jsObj", jsObj); stDict.inspect(); JavaScript Smalltalk
17.
Javaを使う ((Java type: 'java.awt.Frame')
getFrames at: 1) inspect. Smalltalk ● Javaとのやりとり用にJavaクラスが用意されている self setTitle: 'hello' Smalltalk ● Inspectorから...
18.
Interopクラスの利用 ● Proxyを使う通常の書き方 (Java type:
'java.lang.System') out println: 'Hello from Squeak' Smalltalk ● Interopクラスから低レベルなPolyglot APIの呼び出しが可能 (Polyglot primitiveGetScope: 'java') inspect. Smalltalk (Interop readMember: self member: 'java.lang.System') inspect. Smalltalk Interop invokeMember: self out member: 'println/(Ljava/lang/String;)V' arguments: #('Hello from TruffleSqueak!') Smalltalk ● Inspectorから... ● Inspectorから...
19.
PolyglotNotebookを開く ● 左上の”PolyglotNotebook open”のボタンを押下 PolyglotNotebook
open. "do it" ● "Add cell"で各言語実行用のセルを追加できる ○ タイトルバーのクリックで言語切り替え可能
20.
Rubyを追加した場合は... ● TruffleRuby についてはgemでrougeを入れておく ○
シンタックスハイライトでPolyglotNotebookが利用 $ gem install rouge -v 3.2.0 $ ruby --version truffleruby 21.1.0, like ruby 2.7.2, GraalVM CE Native [x86_64-linux]
21.
bindingsを通じてのやりとり ● 各言語からbindings辞書の読み書きが可能 ● 右側のexplorerペインから観察できる
22.
Cellの実行 ● タイトルバーメニューで"run cell..." ○
実行結果がすぐ下に展開される
23.
1: Pythonでrangeからlistの生成 bindings["pyRange"] =
range(0, 10) bindings["pyList"] = list(bindings["pyRange"]) Python ● bindingsに値を格納すると ForeignObjectとして 他言語から参照可能になる
24.
2: Rubyでlistを配列にしてmap bindings["rbArray"] = Truffle::Interop.to_array(bindings["pyList"]) bindings["rbAdded"]
= (bindings["rbArray"].map{|e| e + 65 }) Ruby ● Interopを使うとPythonの list(ForeignObject)をRuby のArrayに変換可能
25.
3: Smalltalkで文字列に変換 bindings at:
'stArray' put: (bindings at:'rbAdded') asArray. bindings at: 'stString' put: (bindings at: 'stArray') asByteArray asString. "=>'ABCDEFGHIJ'" Smalltalk ● asCollectionでRubyのArrayを Smalltalkの配列に変換している ● #[65 66 67 68 69 70 71 72 73 74 75] が文字列となって 'ABCDEFGHIJ'
26.
PolyglotNotebookのより高度な例 ● "Some Smalltalk
with Fabio Niephaus - Fun with TruffleSqueak on GraalVM" ○ https://www.youtube.com/watch?v=MVblV_ruG28 ○ https://gist.github.com/fniephaus/311155612be669061382685bf51b0b68 ● 上記Gistに載っているNotebookのサンプルコードを実行してみる ○ conference-contributors-v3-no-text.ipynbをload
27.
1: nokogiriでスクレイピング require "nokogiri";
require "open-uri" url = "https://2021.programming-conference.org/people-index" doc = Nokogiri::HTML(URI.open(url)) bindings["rows"] = doc.css("#results-table .row").map{ | row | row.css(".pers-affiliation,.pers-country").map(&:content)} bindings["rows"].size Ruby
28.
2: pycountryの国データで集計 import pycountry bindings["countries"]
= [c.name for c in pycountry.countries for row in bindings["rows"] if c.name in str(row[1])] len(bindings["countries"]) Python
29.
3: ggplot2で視覚化 %ggplot2 values <-
data.frame(contributors = bindings["countries"]) data <- aggregate(x = values, by = list(countries = values$contributors), FUN = length) print(ggplot(data, aes(x = reorder(countries, +contributors), contributors)) + geom_bar(stat = "identity") + xlab("") + ylab("") + coord_flip() + geom_hline(aes(yintercept = mean(contributors)))) R
30.
サンプルの実行結果
31.
注: 依存パッケージは入れておく $ gem
install rouge nokogiri $ R -e 'install.packages("ggplot2")' $ $GRAALVM_HOME/languages/python/lib-python/ $ curl -s -L https://bit.ly/38Ru3Fk | tar xzv $ mv pycountry-20.7.3/src/pycountry ./3/ $ rm -r pycountry-20.7.3/
32.
その他デモ
33.
CallTargetBrowser ● メソッドが呼ばれている頻度が一目瞭然 CallTargetBrowser fullOnClass:Tetris. Tetris
new openInHand.
34.
RPlotMorph ● SqueakのFormからJavaのGraphics2Dを生成し、 Rにexportして描画させている RPlotMorph example $
R -e 'install.packages("ggplot2")'
35.
Benchmark ● 動的に最適化されて速くなっていく!! Preferences setFlag:
#higherPerformance toValue: true. TruffleSqueakUtilities setUpUIBenchmark.
36.
まとめ ● TruffleSqueakはGraalVM上で動作するSqueak ● Polyglotプログラミングを強力にサポート ○
PolyglotWorkspace ○ PolyglotNotebook ● 高速なSmalltalkの処理系としても面白い ○ GraalVMの動的な最適化 ○ native-image化できるとより楽しそう
Download