Awesome
A Squeak/Smalltalk VM and Polyglot Programming Environment for the GraalVM.
Getting Started
-
Download and extract the latest TruffleSqueak standalone for your platform.
-
Run the following in a terminal to start TruffleSqueak:
bin/trufflesqueak [<option>...] [<imageName> [<argument>...]]
-
(Optional) Install additional languages (only available in a JVM standalone):
# Evaluate the following from within TruffleSqueak Polyglot installLanguage # or run the following on the command line bin/trufflesqueak-polyglot-get js # or ruby, python, java, llvm, wasm
Demos
<table> <tr align="center"> <td width="50%"><a href="https://www.youtube.com/watch?v=rZiH9ub1aT4" title="TruffleSqueak: Polyglot Notebooks (Demo)"><img src="https://user-images.githubusercontent.com/2368856/90332594-6c2ead00-dfbe-11ea-8e92-f3136ad6ca05.png" alt="TruffleSqueak: Polyglot Notebooks (Demo)" /><br>TruffleSqueak: Polyglot Notebooks</a></td> <td width="50%"><a href="https://www.youtube.com/watch?v=_rnOW3ZMYQ4" title="TruffleSqueak: Workspace, Inspector, and Explorer (Demo)"><img src="https://user-images.githubusercontent.com/2368856/90333124-4f48a880-dfc3-11ea-8962-edc866a8d21a.png" alt="TruffleSqueak: Workspace, Inspector, and Explorer (Demo)" /><br>TruffleSqueak: Workspace, Inspector, and Explorer</a></td> </tr> <tr align="center"> <td width="50%"><a href="https://twitter.com/fniephaus/status/1264839969115340800" title="TruffleSqueak: Live Plots with ggplot2 (Demo)"><img src="https://user-images.githubusercontent.com/2368856/90331920-b319a400-dfb8-11ea-877d-e0505c8adf20.png" alt="TruffleSqueak: Live Plots with ggplot2 (Demo)" /><br>TruffleSqueak: Live Plots with ggplot2</a></td> <td width="50%"><a href="https://www.youtube.com/watch?v=If7xNBYA0Bk" title="TruffleSqueak: Polyglot User Interfaces (Demo)"><img src="https://user-images.githubusercontent.com/2368856/90332427-0d1c6880-dfbd-11ea-9bfc-bc9927784437.png" alt="TruffleSqueak: Polyglot User Interfaces (Demo)" /><br>TruffleSqueak: Polyglot User Interfaces</a></td> </tr> <tr align="center"> <td width="50%"><a href="https://www.youtube.com/watch?v=MxYoc6chBlg" title="TruffleSqueak: Polyglot Code Editor (Demo)"><img src="https://user-images.githubusercontent.com/2368856/90332428-10175900-dfbd-11ea-85b0-1b04d735827a.png" alt="TruffleSqueak: Polyglot Code Editor (Demo)" /><br>TruffleSqueak: Polyglot Code Editor</a></td> <td width="50%"><a href="https://www.youtube.com/watch?v=W7p-W9VAbQU" title="TruffleSqueak: Polyglot Code Finder (Demo)"><img src="https://user-images.githubusercontent.com/2368856/90332430-10afef80-dfbd-11ea-8448-b04e7a222f78.png" alt="TruffleSqueak: Polyglot Code Finder (Demo)" /><br>TruffleSqueak: Polyglot Code Finder</a></td> </tr> <tr align="center"> <td width="50%"><a href="https://www.youtube.com/watch?v=wuGVyzUsEqE" title="TruffleSqueak vs. OpenSmalltalkVM: Bouncing Atoms"><img src="https://user-images.githubusercontent.com/2368856/90332179-350acc80-dfbb-11ea-803b-bdeb28577ef9.png" alt="TruffleSqueak vs. OpenSmalltalkVM: Bouncing Atoms" /><br>TruffleSqueak vs. OpenSmalltalkVM: Bouncing Atoms</a></td> <td width="50%"><a href="https://twitter.com/fniephaus/status/1363499071575642112" title="TruffleSqueak: CallTargetBrowser (Demo)"><img src="https://user-images.githubusercontent.com/2368856/108628591-24e91380-745c-11eb-9ff5-030a2b10dc35.png" alt="TruffleSqueak: CallTargetBrowser (Demo)" /><br>TruffleSqueak: CallTargetBrowser</a></td> </tr> <tr align="center"> <td width="50%"><a href="https://twitter.com/fniephaus/status/1075807587491291137" title="TruffleSqueak: Polyglot Workspace (Demo)"><img src="https://user-images.githubusercontent.com/2368856/90332290-e4e03a00-dfbb-11ea-92e5-55bded783c8e.png" alt="TruffleSqueak: Polyglot Workspace (Demo)" /><br>TruffleSqueak: Polyglot Workspace</a></td> <td width="50%"></td> </tr> </table>Talks
<table> <tr align="center"> <td width="50%"><a href="https://www.youtube.com/watch?v=MVblV_ruG28" title="Some Smalltalk with Fabio Niephaus and Thomas Würthinger (~1h10min, GraalVM Stream on Twitch, 2021)"><img src="https://user-images.githubusercontent.com/2368856/111808110-f849df80-88d3-11eb-8c86-3d07cceae296.png" alt="Some Smalltalk with Fabio Niephaus and Thomas Würthinger (~1h10min, GraalVM Stream on Twitch, 2021)" /><br>Some Smalltalk with Fabio Niephaus and Thomas Würthinger<br>(~1h10min, GraalVM Stream on Twitch, 2021)</a></td> <td width="50%"><a href="https://www.youtube.com/watch?v=bJ8Y_LTzwD8" title="Exploiting Dynamic Run-time Data with TruffleSqueak (~30min, Virtual Machine Meetup, 2021)"><img src="https://user-images.githubusercontent.com/2368856/142394925-4ec6e9a7-5a7a-4d15-985e-da39df107e8f.png" alt="Exploiting Dynamic Run-time Data with TruffleSqueak (~30min, Virtual Machine Meetup, 2021)" /><br>Exploiting Dynamic Run-time Data with TruffleSqueak<br>(~30min, Virtual Machine Meetup, 2021)</a></td> </tr> <tr align="center"> <td width="50%"><a href="https://www.youtube.com/watch?v=9SyOVmAqqLg" title="Polyglot Programming with TruffleSqueak and GraalVM (~21min, HPI Symposium at SAP, 2021)"><img src="https://user-images.githubusercontent.com/2368856/111785173-8d40de80-88bc-11eb-82e8-bff9008638ad.png" alt="Polyglot Programming with TruffleSqueak and GraalVM (~21min, HPI Symposium at SAP, 2021)" /><br>Polyglot Programming with TruffleSqueak and GraalVM<br>(~21min, HPI Symposium at SAP, 2021)</a></td> <td width="50%"><a href="https://www.youtube.com/watch?v=FAk3Ec8hmzk" title="Polyglot Notebooks with Squeak/Smalltalk on the GraalVM (~28min, ESUG 2019)"><img src="https://user-images.githubusercontent.com/2368856/111785181-903bcf00-88bc-11eb-8722-7ca7d0558a22.png" alt="Polyglot Notebooks with Squeak/Smalltalk on the GraalVM (~28min, ESUG 2019)" /><br>Polyglot Notebooks with Squeak/Smalltalk on the GraalVM<br>(~28min, ESUG 2019)</a></td> </tr> </table>Community Support
If you have a question, need some help, or want to discuss a new feature, feel
free to open an issue or join the #trufflesqueak
channel on the
GraalVM Slack.
Documentation
Documentation is available in docs/
.
Development
Active development is done in the main
branch.
Please feel free to open a pull request if you'd like to
contribute a bug-fix, documentation, or a new feature.
For more information, for example on how to build TruffleSqueak from source or
set up a development environment, please refer to the
development.md.
Contributing
Please report any issues here on GitHub and open pull requests if you'd like to contribute code or documentation.
Publications
To cite this work, please use the GraalSqueak paper presented at MPLR'19.
2020
- Fabio Niephaus, Patrick Rein, Jakob Edding, Jonas Hering, Bastian König, Kolya
Opahle, Nico Scordialo, and Robert Hirschfeld. Example-based Live Programming
for Everyone: Building Language-agnostic Tools for Live Programming With LSP and
GraalVM. In Proceedings of the ACM Symposium for New Ideas, New Paradigms, and
Reflections on Everything to do with Programming and Software (Onward!)
2020, co-located with the Conference on Object-oriented Programming,
Systems, Languages, and Applications (OOPSLA), pages 108-124, Chicago, United
States, November 17-18, 2020, ACM DL.
- Jan Ehmueller, Alexander Riese, Hendrik Tjabben, Fabio Niephaus, and Robert
Hirschfeld. Polyglot Code Finder. In Proceedings of the Programming
Experience 2020 (PX/20) Workshop, companion volume to International
Conference on the Art, Science, and Engineering of Programming (‹Programming›),
co-located with the International Conference on the Art, Science, and Engineering
of Programming (‹Programming›), 6 pages, Genova, Italy, April 1, 2019, ACM DL.
- Alexander Riese, Fabio Niephaus, Tim Felgentreff, and Robert Hirschfeld.
User-defined Interface Mappings for the GraalVM. In Proceedings of the
Interconnecting Code Workshop (ICW) 2020, companion volume to the
International Conference on the Art, Science, and Engineering of Programming
(‹Programming›), co-located with the International Conference on the Art,
Science, and Engineering of Programming (‹Programming›), pages 19-22, Porto,
Portugal, March 23, 2020, ACM DL.
2019
- Fabio Niephaus. Smalltalk with the GraalVM. In the JVM Programming Advent Calendar, December 7, 2019.
- Fabio Niephaus, Tim Felgentreff, and Robert Hirschfeld. GraalSqueak: Toward a
Smalltalk-based Tooling Platform for Polyglot Programming. In Proceedings of
the International Conference on Managed Programming Languages and Runtimes
(MPLR) 2019, co-located with the Conference on Object-oriented
Programming, Systems, Languages, and Applications (OOPSLA), 12 pages, Athens,
Greece, October 21, 2019, ACM DL.
- Daniel Stolpe, Tim Felgentreff, Christian Humer, Fabio Niephaus, and Robert
Hirschfeld. Language-independent Development Environment Support for Dynamic
Runtimes. In Proceedings of the Dynamic Languages Symposium (DLS)
2019, co-located with the Conference on Object-oriented Programming,
Systems, Languages, and Applications (OOPSLA), 11 pages, Athens, Greece,
October 20, 2019, ACM DL.
- Fabio Niephaus. HPI Polyglot Programming Seminar. In the GraalVM Blog, October 11, 2019.
- Fabio Niephaus, Tim Felgentreff, Tobias Pape, and Robert Hirschfeld.
Efficient Implementation of Smalltalk Activation Records in Language
Implementation Frameworks. In Proceedings of the Workshop on Modern Language
Runtimes, Ecosystems, and VMs (MoreVMs) 2019, companion volume to
International Conference on the Art, Science, and Engineering of Programming
(‹Programming›), co-located with the International Conference on the Art,
Science, and Engineering of Programming (‹Programming›), 3 pages, Genova, Italy,
April 1, 2019, ACM DL.
- Tobias Pape, Tim Felgentreff, Fabio Niephaus, and Robert Hirschfeld. Let them
fail: towards VM built-in behavior that falls back to the program. In
Proceedings of the Salon des Refusés (SDR) 2019 Workshop, companion
volume to International Conference on the Art, Science, and Engineering of
Programming (‹Programming›), co-located with the International Conference on the
Art, Science, and Engineering of Programming (‹Programming›), 7 pages, Genova,
Italy, April 1, 2019, ACM DL.
- Fabio Niephaus, Eva Krebs, Christian Flach, Jens Lincke, and Robert Hirschfeld.
PolyJuS: A Squeak/Smalltalk-based Polyglot Notebook System for the GraalVM. In
Proceedings of the Programming Experience 2019 (PX/19) Workshop,
companion volume to International Conference on the Art, Science, and
Engineering of Programming (‹Programming›), co-located with the International
Conference on the Art, Science, and Engineering of Programming (‹Programming›),
6 pages, Genova, Italy, April 1, 2019, ACM DL.
2018
- Fabio Niephaus, Tim Felgentreff, and Robert Hirschfeld. GraalSqueak: A Fast
Smalltalk Bytecode Interpreter Written in an AST Interpreter Framework. In
Proceedings of the Workshop on Implementation, Compilation, Optimization of
Object-Oriented Languages, Programs, and Systems (ICOOOLPS) 2018,
co-located with the European Conference on Object-oriented Programming (ECOOP),
Amsterdam, Netherlands, July 17, 2018, ACM DL.
License
TruffleSqueak is released under the MIT license.