Soumettre la recherche
Mettre en ligne
TruffleSqueakの紹介
•
0 j'aime
•
151 vues
M
Masashi Umezawa
Suivre
インタラクティブなPolyglotプログラミングを可能にする、TruffleSqueakの紹介です
Lire moins
Lire la suite
Logiciels
Signaler
Partager
Signaler
Partager
1 sur 36
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
Masashi Umezawa
今日から使おうSmalltalk
今日から使おうSmalltalk
Sho Yoshida
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
Masashi Umezawa
ZynqMPのQEMU
ZynqMPのQEMU
Mr. Vengineer
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
Uehara Junji
MoteMote Compiler Plugin
MoteMote Compiler Plugin
yoshiaki iwanaga
20210515 cae linux_install_vb
20210515 cae linux_install_vb
YohichiShiina
Recommandé
SmalltalkBoltでUFFI入門
SmalltalkBoltでUFFI入門
Masashi Umezawa
今日から使おうSmalltalk
今日から使おうSmalltalk
Sho Yoshida
griffon plugin を 実際に作ってみよう #jggug
griffon plugin を 実際に作ってみよう #jggug
kimukou_26 Kimukou
何が変わった? VisualWorks 8.0
何が変わった? VisualWorks 8.0
Masashi Umezawa
ZynqMPのQEMU
ZynqMPのQEMU
Mr. Vengineer
Groovy Shell Scripting 2015
Groovy Shell Scripting 2015
Uehara Junji
MoteMote Compiler Plugin
MoteMote Compiler Plugin
yoshiaki iwanaga
20210515 cae linux_install_vb
20210515 cae linux_install_vb
YohichiShiina
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
ClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
スレッドダンプの読み方
スレッドダンプの読み方
Funato Takashi
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
Free cad 0.19.2 and cfdof (Japanese Ver.)
Free cad 0.19.2 and cfdof (Japanese Ver.)
YohichiShiina
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法
shigeki_ohtsu
20210515 of4 wi&paraview 5.9.0_motorbike
20210515 of4 wi&paraview 5.9.0_motorbike
YohichiShiina
クラスローダーについて
クラスローダーについて
Suguru ARAKAWA
Reactive Extensions v2.0
Reactive Extensions v2.0
Yoshifumi Kawai
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
Takashi Someda
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Norito Agetsuma
FlexUnit4とMockitoFlex
FlexUnit4とMockitoFlex
Yasuhiro Morikawa
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
Javaでトランザクショナルメモリを使う
Javaでトランザクショナルメモリを使う
Kenji Kazumura
Groovyの紹介20130323
Groovyの紹介20130323
Yasuharu Hayami
node-handlersocket
node-handlersocket
koichik
Decsx launcherv 2.5
Decsx launcherv 2.5
Etsuji Nomura
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Koichi Sakata
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
tamtam180
Contenu connexe
Tendances
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
Uehara Junji
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
Yu Nobuoka
ClassLoader Leak Patterns
ClassLoader Leak Patterns
nekop
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
Yasuharu Nakano
スレッドダンプの読み方
スレッドダンプの読み方
Funato Takashi
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Yoshifumi Kawai
Free cad 0.19.2 and cfdof (Japanese Ver.)
Free cad 0.19.2 and cfdof (Japanese Ver.)
YohichiShiina
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
YujiSoftware
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法
shigeki_ohtsu
20210515 of4 wi&paraview 5.9.0_motorbike
20210515 of4 wi&paraview 5.9.0_motorbike
YohichiShiina
クラスローダーについて
クラスローダーについて
Suguru ARAKAWA
Reactive Extensions v2.0
Reactive Extensions v2.0
Yoshifumi Kawai
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
Takashi Someda
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Norito Agetsuma
FlexUnit4とMockitoFlex
FlexUnit4とMockitoFlex
Yasuhiro Morikawa
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
Yoshifumi Kawai
Javaでトランザクショナルメモリを使う
Javaでトランザクショナルメモリを使う
Kenji Kazumura
Groovyの紹介20130323
Groovyの紹介20130323
Yasuharu Hayami
node-handlersocket
node-handlersocket
koichik
Decsx launcherv 2.5
Decsx launcherv 2.5
Etsuji Nomura
Tendances
(20)
Groovy Bootcamp 2015 by JGGUG
Groovy Bootcamp 2015 by JGGUG
TypeScript 言語処理系ことはじめ
TypeScript 言語処理系ことはじめ
ClassLoader Leak Patterns
ClassLoader Leak Patterns
Java開発の強力な相棒として今すぐ使えるGroovy
Java開発の強力な相棒として今すぐ使えるGroovy
スレッドダンプの読み方
スレッドダンプの読み方
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
Free cad 0.19.2 and cfdof (Japanese Ver.)
Free cad 0.19.2 and cfdof (Japanese Ver.)
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
JEP280: Java 9 で文字列結合の処理が変わるぞ!準備はいいか!? #jjug_ccc
Node-v0.12のTLSを256倍使いこなす方法
Node-v0.12のTLSを256倍使いこなす方法
20210515 of4 wi&paraview 5.9.0_motorbike
20210515 of4 wi&paraview 5.9.0_motorbike
クラスローダーについて
クラスローダーについて
Reactive Extensions v2.0
Reactive Extensions v2.0
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
MessagePack RPC によるドキドキ非同期通信 @関ジャバ 2012年度8月
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
FlexUnit4とMockitoFlex
FlexUnit4とMockitoFlex
Reactive Extensionsで非同期処理を簡単に
Reactive Extensionsで非同期処理を簡単に
Javaでトランザクショナルメモリを使う
Javaでトランザクショナルメモリを使う
Groovyの紹介20130323
Groovyの紹介20130323
node-handlersocket
node-handlersocket
Decsx launcherv 2.5
Decsx launcherv 2.5
Similaire à TruffleSqueakの紹介
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Koichi Sakata
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
tamtam180
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
tamtam180
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
Yuichi Sakuraba
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Akira Shimosako
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
AdvancedTechNight
JavaFX & GlassFish 勉強会 Project Visage
JavaFX & GlassFish 勉強会 Project Visage
Yuichi Sakuraba
Inside frogc in Dart
Inside frogc in Dart
Goro Fuji
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
a know
Open modeler
Open modeler
Yoshiki Izumi
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
Oonishi Keitarou
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Koichi Sakata
Clojureの発表など
Clojureの発表など
Kikuta Go
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
yoshiaki iwanaga
TDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
Nobuhiro Sue
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
Kazuhiro Hara
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
Koichi Sakata
Grailsのススメ(仮)
Grailsのススメ(仮)
Tsuyoshi Yamamoto
開発を彩る技術たち
開発を彩る技術たち
Oda Shinsuke
Similaire à TruffleSqueakの紹介
(20)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
JavaFX & GlassFish 勉強会 Oh! JavaFX 2.0!
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
全部入り!WGPで高速JavaScript+HML5体験
全部入り!WGPで高速JavaScript+HML5体験
JavaFX & GlassFish 勉強会 Project Visage
JavaFX & GlassFish 勉強会 Project Visage
Inside frogc in Dart
Inside frogc in Dart
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
Open modeler
Open modeler
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
覚醒JavaScript -ES6で作るIsomophicアプリケーション-
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
GraalVMで使われている、他言語をJVM上に実装する仕組みを学ぼう
Clojureの発表など
Clojureの発表など
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
TDC20111031_Groovy_Geb
TDC20111031_Groovy_Geb
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
WebSocket+Akka(Remote)+Play 2.1 Java
WebSocket+Akka(Remote)+Play 2.1 Java
関ジャバ JavaOne Tokyo 2012報告会
関ジャバ JavaOne Tokyo 2012報告会
Grailsのススメ(仮)
Grailsのススメ(仮)
開発を彩る技術たち
開発を彩る技術たち
Plus de Masashi Umezawa
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
Masashi Umezawa
FileManで楽々ファイル操作
FileManで楽々ファイル操作
Masashi Umezawa
TaskItの紹介
TaskItの紹介
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Masashi Umezawa
Revealing ALLSTOCKER
Revealing ALLSTOCKER
Masashi Umezawa
TarandocでJSONを永続化
TarandocでJSONを永続化
Masashi Umezawa
Dockerizing pharo
Dockerizing pharo
Masashi Umezawa
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Masashi Umezawa
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
Masashi Umezawa
VerStixの紹介
VerStixの紹介
Masashi Umezawa
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
Masashi Umezawa
Pyonkeeを鳴らす
Pyonkeeを鳴らす
Masashi Umezawa
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
Masashi Umezawa
Tarantalk
Tarantalk
Masashi Umezawa
Smalltalkと型について
Smalltalkと型について
Masashi Umezawa
Introduction of Pharo 5.0
Introduction of Pharo 5.0
Masashi Umezawa
Why!? Smalltalk
Why!? Smalltalk
Masashi Umezawa
Pillarの紹介
Pillarの紹介
Masashi Umezawa
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Masashi Umezawa
NanoStrand
NanoStrand
Masashi Umezawa
Plus de Masashi Umezawa
(20)
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
第142回Smalltalk勉強会 - PharoJSで作るWebアプリケーション
FileManで楽々ファイル操作
FileManで楽々ファイル操作
TaskItの紹介
TaskItの紹介
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Smalltalk勉強会 - 過去、現在、そして未来へ のその後
Revealing ALLSTOCKER
Revealing ALLSTOCKER
TarandocでJSONを永続化
TarandocでJSONを永続化
Dockerizing pharo
Dockerizing pharo
今からでも遅くないSmalltalk入門
今からでも遅くないSmalltalk入門
Tarantubeでメッセージキューを使い倒す
Tarantubeでメッセージキューを使い倒す
VerStixの紹介
VerStixの紹介
Oldtalk - あのころの処理系は今
Oldtalk - あのころの処理系は今
Pyonkeeを鳴らす
Pyonkeeを鳴らす
Smalltalk勉強会 - 過去、現在、そして未来へ
Smalltalk勉強会 - 過去、現在、そして未来へ
Tarantalk
Tarantalk
Smalltalkと型について
Smalltalkと型について
Introduction of Pharo 5.0
Introduction of Pharo 5.0
Why!? Smalltalk
Why!? Smalltalk
Pillarの紹介
Pillarの紹介
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
Scrumの紹介とXPプロジェクトへの適用(Scrum and XP)
NanoStrand
NanoStrand
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化できるとより楽しそう
Télécharger maintenant