Trufflesqueak
A Squeak/Smalltalk VM and Polyglot Programming Environment for the GraalVM.
Install / Use
/learn @hpi-swa/TrufflesqueakREADME
[![Latest Release][ts_latest_badge]][ts_latest] [![Slack][graalvm_slack_badge]][graalvm_slack] [![Twitter][ts_twitter_badge]][ts_twitter] [![Build Status][ts_gh_action_badge]][ts_gh_action] [![Codacy][codacy_grade]][codacy] [![Coverage][codacy_coverage]][codacy] [![License][ts_license_badge]][ts_license]
A [Squeak/Smalltalk][squeak] VM and Polyglot Programming Environment for the [GraalVM][graalvm].
Getting Started
-
Download and extract the latest [TruffleSqueak standalone][ts_latest] 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][ts_issues] or join the #trufflesqueak channel on the
[GraalVM Slack][graalvm_slack].
Development
Active development is done in the [main branch][ts_main].
Please feel free to open a [pull request][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,
please refer to the AGENTS.md.
Contributing
Please [report any issues here on GitHub][ts_issues] and open [pull requests][pull_request] if you'd like to contribute code or documentation.
Publications
To cite this work, please use [the GraalSqueak paper presented at MPLR'19][mplr19_paper].
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][onward20], 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.
[![doi][onward20_doi]][onward20_paper] [![Preprint][preprint]][onward20_pdf] - Jan Ehmueller, Alexander Riese, Hendrik Tjabben, Fabio Niephaus, and Robert
Hirschfeld. Polyglot Code Finder. In Proceedings of [the Programming
Experience 2020 (PX/20) Workshop][px20], 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.
[![doi][px20_doi]][px20_paper] [![Preprint][preprint]][px20_pdf] - 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][icw20], 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.
[![doi][icw20_doi]][icw20_paper] [![Preprint][preprint]][icw20_pdf]
2019
- Fabio Niephaus. [Smalltalk with the GraalVM][javaadvent19]. 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][mplr19], co-located with the Conference on Object-oriented
Programming, Systems, Languages, and Applications (OOPSLA), 12 pages, Athens,
Greece, October 21, 2019, ACM DL.
[![doi][mplr19_doi]][mplr19_paper] [![Preprint][preprint]][mplr19_pdf] - 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][dls19], co-located with the Conference on Object-oriented Pro
