Amber Smalltalk
![]() An ancient flying insect caught in amber. | |
Original author(s) | Nicolas Petton |
---|---|
Developer(s) | Amber Community |
Initial release | September 13, 2011 |
Stable release | 0.30.0 / February 23, 2021[1] |
Repository | lolg |
Written in | Smalltalk, JavaScript |
Operating system | Cross-platform |
Platform | Web browser |
Available in | English |
Type | Object-oriented programming language, IDE |
License | MIT |
Website | www |
Amber Smalltalk, formerly named Jtalk, is an implementation of the programming language Smalltalk-80, that runs on the JavaScript runtime of a web browser. It is designed to enable client-side development using Smalltalk.[2] The programming environment in Amber is named Helios.[3]
Key features
[edit]Amber includes an integrated development environment (IDE) with a class browser, Workspace, transcript, object inspector, and debugger. Amber is written in itself (is self-hosting), including the compiler, and compiles into JavaScript, mapping one-to-one with the JavaScript equivalent.[4] This one-to-one mapping with JavaScript differentiates Amber from other Smalltalk variants such as Pharo, Seaside, and Squeak.[2] Developing Amber project requires Node.js to run the tooling; the deployed project only needs browser to run. Amber doesn't run slowly on a bytecode virtual machine due to its convenient mapping to JavaScript, which makes compiled code run fast.
History
[edit]Amber was originally created by Nicolas Petton in 2011.[5] Amber was influenced by an earlier Smalltalk in browser project, named Clamato, created by Avi Bryant.[5][6][7] Amber and Clamato both use parsing expression grammar (PEG) libraries to parse Smalltalk source code. Amber uses the JavaScript based PEG.js library[8][9] written by David Majda. Clamato uses PetitParser, a Smalltalk-based library written by Lukas Renggli.[5] Clamato and Amber were both influenced by earlier work by Dan Ingalls in developing the Lively Kernel implementation of Morphic to run in web browsers via JavaScript.[5][10]
Starting with version 0.12.0, Amber modules compile to asynchronous module definition (AMD).[11] Starting with version 0.12.6, the development helper command-line interface (CLI) tool is extracted to dedicated module, which can be installed from npm as @ambers/cli
; and setting up the project and its JavaScript ecosystem (npm, grunt) is greatly simplified using this CLI tool by issuing amber init
and answering a few questions.[12] Since August 2018, project scaffolding of "amber init" is simplified, not using bower any more and only based on npm and whole project resides under npm organization @ambers
. This makes setting Amber Smalltalk easier for people with little JavaScript experience.[13]
Installing
[edit]Up-to-date instructions should be at https://lolg.it/amber/amber.
To install Amber, Git must be installed first, if it is not already. The following commands will install Amber:[3]
# for macOS and Linux, needs the following two commands: npm config set prefix=~/npm export PATH="$PATH:$HOME/npm/bin" # add to .bash_profile or .bashrc npm install -g grunt-cli grunt-init @ambers/cli
To create a new project, write:
# Create the empty project dir mkdir example-project cd example-project # Create and initialize a new Amber project amber init
"amber init" step will lead to some questions about the project. For most of them, a default answer can be set. The next step is to start the server:
amber serve
After that, typing http://localhost:4000
in the browser will get to the application. Most browsers will block Helios IDE pop-ups by default, so browser settings may need changing to allow the Helios IDE popup to appear.
Integrating external JavaScript libraries
[edit]Npm software can be used to access a vast array of JavaScript libraries. A library can be integrated by following only four steps:[3]
- Install the library using npm.
- If 'local.amd.json' files doesn't exist for the npm package, create a 'libname.amd.json' file in the project root.
- Run 'grunt devel' (or 'grunt deploy' if ready to deploy an application).
- Add 'libname' to the application package's #imports: .
Deployment
[edit]By running grunt deploy
, the Amber project is packaged using RequireJS into just a few files, at the minimum just index.html
and the.js
, which can be hosted statically as any other static web page.
See also
[edit]References
[edit]- ^ "Release version 0.30.0". lolg.it. Retrieved 2021-03-25.
- ^ a b Smalltalk Implementations (brief comparative summaries describing Smalltalk dialects)
- ^ a b c Eng, Richard (2015-06-09). "A Gentle Introduction to Amber: Engaging in Smalltalk with Her, Reads Like English, and It's Still Succinct!, "It's alive! It's alive!", The All-seeing Helios, Testing D3". Medium. Retrieved 2016-02-07.
- ^ Petton, Nicolas. "Amber Smalltalk". amber-lang.net. Retrieved 2016-01-30.
- ^ a b c d Schuster, Werner (August 22, 2011). "Smalltalk IDEs Come to the Browser: Jtalk, tODE, Lively Kernel 2.0". Retrieved October 20, 2011.
- ^ "Clamato". (Clamato Smalltalk project website)
- ^ Petton, Nicolas (August 2011). Jtalk, the Smalltalk for Web developers. European Smalltalk User Group Conference (ESUG). Edinburgh, Scotland, United Kingdom. Archived from the original on 2012-01-28. Slides.
- ^ Majda, David (2010–2016). "PEG.js: Parser Generator for JavaScript". PEG.js.org. David Majda. Archived from the original on 27 April 2011. Retrieved 13 November 2016.
- ^ Petton, Nicolas (13 September 2011). "Bye, bye Jtalk... Hello Amber!". Google Groups. Google, Inc. Retrieved 13 November 2016.
... we are now making a first release humbly numbered 0.9. We are also taking the opportunity to pick a slicker name for Jtalk - Amber!
- ^ Shuster, Werner (June 22, 2010). "Dan Ingalls on the History of Smalltalk and the Lively Kernel". Retrieved October 26, 2011.
- ^ "amber-smalltalk/amber". GitHub. Retrieved 2016-01-30.
- ^ "amber-smalltalk/amber". GitHub. Retrieved 2016-01-30.
- ^ Petton, Nicolas. "Installing Amber". Amber-lang.net. Retrieved 2016-01-30.