Category Archives: Smalltalk

New Month’s Resolutions: April 2019

Spring is here, in Buenos Aires. Time to review the past month’s resolutions and write down the new month’s ones.

– Continue simpledfs [pending]
– Continue Erlie [complete] see repo
– Continue Walang [complete] see repo
– Continue robotsim [pending]
– Continue Elmie [pending]
– Continue SimpleNeuron [pending]
– Continue BlockchainJ [complete] see repo
– Continue Dexert [pending]
– Continue EthBridge [pending]
– Continue Idener [pending]
– Record a talk about Smart Contracts programming [complete]
– Write experimental code for RskJ [complete] see repo
– Continue gelex [complete] see repo
– Continue geast [complete] see repo
– Continue HuskyJS [pending]
– Continue EthCollectible [pending]
– Continue EthPets [pending]

Also, I was working in:

– Start evmcompiler, Ethereum Virtual Machine compiler [complete] see repo
– Start generic parser gepars [complete] see repo
– Improve SimpleTalk [complete] see repo
– Improve SimpleTensor [complete] see repo
– Start selang programming language [complete] see repo
– Start solcom solidity compiler using evmcompiler [complete] see repo

My new month’s resolutions:

– Continue simpledfs
– Continue Walang
– Continue SimpleNeuron
– Continue SimpleTalk
– Continue BlockchainJ
– Continue Dexert
– Continue EthBridge
– Record a talk about Smart Contracts programming
– Write experimental code for RskJ
– Continue gelex
– Continue geast
– Continue gepars
– Continue evmcompiler
– Continue selang
– Continue solcomp
– Continue HuskyJS
– Continue EthCollectible
– Continue EthPets

Angel “Java” Lopez

Smalltalk: Links, News And Resources (20)

Previous Post

Objective-Smalltalk talk at FOSDEM 2014 – YouTube

Alan Kay On Messaging

Pharo Smalltalk – YouTube

pathToolsFramework – Squeak Community Projects

Pharo4 Plans and Dreams – YouTube

39 – Leandro Caniglia – self ideas asStream next – YouTube

20 – Nicolas Petton – Amber Smalltalk – YouTube

32 – Hernan Wilkinson – Web Development In Smalltalk For Newbies – YouTube

15 – Dale Henrichs – tODE: And Now For Something Completely Different – YouTube

Smalltalk reddit

Where Smalltalk Went Wrong 2

Where Smalltalk Went Wrong

Saying Goodbye To Python

Interview with Esteban Lorenzano

The goal of RMoD is to support remodularization of object-oriented applications. This objective is tackled from two complementary perspectives: reengineering and modularity constructs for programming languages.

PhaROS – FOSDEM 2014 – Slides

My Links

Stay tuned!

Angel “Java” Lopez

Smalltalk: Links, News And Resources (19)

Previous Post
Next Post

ESUG: 2014

Pharo Open Source Smalltalk — News


Philippe Back Interviews Nicolas Petton on Amber Smalltalk by philippeback on SoundCloud – Hear the world’s sounds


smallworks: Why I’m using git in my Pharo projects

Dyla’14 at PLDI, Edinburgh, UK


Self Mallard (4.5.0) released | Self

Self | Fun through simplicity

stic13 – YouTube

(349) Programming Languages: Why create any more programming languages? – Quora

Anyone interested in smalltalk? : learnprogramming

ST 4U 510: Dynamic Code Generation in Pharo

Was Alan Kay wrong? And why does that matter?

Smalltalk on Raspberry Pi | a blog on Smalltalk on the Raspberry Pi

My Links

Stay tuned!

Angel “Java” Lopez

AjTalk Implementing Smalltalk In C# (4) The Project

Previous Post

Year and a half since I didn’t write about this project in C #, but I was working on it, and the parallel implementation I have in JavaScript (in fact, I introduced some concepts of both the Smalltalks 2013 conference, Rosario, Argentina).

The project is at:

Current structure:

The projects are:

AjTalk: class library, with a compiler to bytecodes implementation. There is a compiler to JavaScript too. There is an interpreter of those bytecodes.

AjTalk.Compiler: a console project that uses the compiler to JavaScript.

AjTalk.Console: a simple REPL (Read Eval Print Loop)

AjTalk.Gui: a work-in-progress example using windows

AjTalk.Tests: the test I wrote, followin TDD (Test-Driven Development) flow.

I guess now I don’t need the compiler to JavaScript, because I have a native JavaScript implementation at:

It can compile to bytecodes or to JavaScript. The project is written in JavaScript.

The window implementation is very primitive. I plan to replace it for direct AjTalk program using .NET types and object.

One point that I find very interesting (in both projects, C # and JavaScript) is to have a modular implementation: instead of loading an image yet defined, my plan is to define modules to load, as happens in the Node.js environment . The modules would be published in the NPM (Node Package Manager’s), and each could indicate which modules need in your program instead of lifting all Smalltalk.

Another topic in this C # project I have implemented that can run more than one AjTalk machine at the same time. And I can even make a machine “help” to the other. For example, if the machine does not have to compile methods to new methods, machine B can go to his aid. Thus, A machine (and his image, I’m already recording binary image) can be kept small.

Another feature that I have implemented: the ability to send a message to an object, without waiting for a response, a “fire and forget”. And that the target object can attend ONE OF those messages as models of actors.

I have to review the implementation of remote objects (now based on the old Remoting. NET). But I think it is an important feature to maintain and explore.

Well, you see, many issues remain for other posts, such as implementation details Smalltalk concepts such as Object, Class, ClassDescription, Behavior, MetaClass, etc..

Nos leemos!

Angel “Java” Lopez

Smalltalk: Links, News And Resources (18)

Previous Post 
Next Post

gravel-st/gravel · GitHub
Smalltalk in Java’s-Home-page/Squeak/RTOSinSmalltalk.html.pdf’s-Home-page/Squeak/RTOSinSmalltalk.html.pdf


tim’s Home page

Oral History of Adele Goldberg – YouTube


hhzl (Hannes Hirzel)

Lively Kernel – Home

Viewpoints Research Institute

Welcome to Self — Self – the power of simplicity

Fast and Dynamic

Jon’s Place: Roz & RobotsConf

Smalltalk intro i

Smalltalks13 pharo techoverview

Smalltalks 2007 to 2012 History – YouTube

SqueakSource de l’Ecole des Mines de Douai

Seed: Pharo Kernels

Germán Arduino: Finalizó Smalltalks2013

Smalltalks2013 – a set on Flickr

nativeboost – Squeak NativeBoost plugin source code – Google Project Hosting

My Links

Stay tuned!

Angel “Java” Lopez

Smalltalk from Scratch

I think Smalltalk is a wonderful technology that influence the past decades in programming. But not directly: its influence is not via its killer apps. Smalltalk influenced programmers. The Smalltalk mark can be traced in Python and Ruby design decisions. And many programmers have been touched by Smalltalk ideas. But Smalltalk, as technology, didn’t exploded. We can discuss the reasons: early “balkanization” of providers, no early open source implementation. My thoughts: it is too couple to its own “GUI IDE”, and it is a bit overwhelming (too many pieces).

I think that is time to explore alternatives path. In the past decades, I visited many technologies and languages, and in the past ten (more or less) years, I took again Smalltalk and tried to follow an alternative path.

My position: we should try a simpler Smalltalk. An Smalltalk not tied to GUI IDE, not tied to thousands of classes. A simple implementation that can access the rest of the world advances in programming.

So, I started three own implementations: Smalltalk hosted in .NET, in Java and in JavaScript/Node.js:

More info in

But this post is not dedicated to review those implementation. Its purpose is to write down some ideas about how to create an Smalltalk, without struggling with the shrinking of a previous image.

The Core

I think that a new Smalltalk from scratch could be developed. An Smalltalk that runs in a host environment, like .NET, Java or JavaScript. Or another one. But it’s time to have an Smalltalk that is not an autism program: it should leverage the work of other technologies. For example, an Smalltalk running on JavaScript could access the JS ecosystem, via browser modules and libraries, or using Node.js or other engine package ecosystem.

The core Smalltalk should implement:

Object: the base object and class, with some base methods, like #subclass:.

Array: for arrays with numeric index, starting from 1 (to not break with Smalltalk tradition)

Dictionary: to map keys (names) to values

Primitive types: the underlying language (.NET, Java, JavaScript) could implement numbers (integers and floats), bytes, chars, strings, etc.

Access to native objects and types: to create them, to call type methods, to call instance methods.

The Library

First, a minimal implementation of some classes, that can be shipped with the initial implementation.

But then, and this is important: try to live in an ecosystem of packages. Instead of having all classes in the image, try to have an ecosystem of packages. Each Smalltalk application could define the needed packages, and then, the packages could be installed from the package ecosystem. In my implementations, I started to explore the use of NPM (Node Package Manager) to publish new package, and to install them per application, even with the use of explicit package version, so we have a less brittle ecosystem.

Package candidates:

– Test library (with an initial assert method)
– HTTP server
– MVC web framework (I have a minimal sample using Node.js Express)
– Distributed messages (I have a naive implementation in C#)
– etc.

In this way, the adoption of a package will be easy: not need of porting a package, only consume it, given the right dependencies in place. And, as in other technologies (Python, Ruby with gems, and notably, Node.js with NPM), each package can keep the description of the needed dependencies (NPM takes care of versions too).

Additional Items

I want to have an environment feature: that a class/package can load other classes, but only for internal use, without pollute the global Smalltalk environment.

I want to have an image running with the help of other image. That is, the Smalltalk VM should manage MORE THAN one running image. And one image could help another one. For example: one minimal image could have no compile method, but this method could be provided by the host image. In this way, a minimal image could be created, without any convoluted “shrinking” step. I already implemented this feature in my C# implementation.

In some implementations, I want to have an image (save and restore). But it is time to explore the development without the need of an image.

Any GUI should be created over the host environment. Use Windows.Form if your Smalltalk is running over C#. Or use another library, in Java (Swing? SWT?). But the idea is that the GUI management should be something clearly separated from the core implementation. Current popular Smalltalk implementations are too coupled with GUI management. Look at other technologies: Python, Ruby, Node.js, Go, etc.. There are lots of developers not using a technology so tied to a GUI IDE. And they are producing useful applications.

As I usually say: explore. That is the verb. We must explore alternative path, even when the outcome and gains are not clear. If I had seen killer applications in Smalltalk, or the use of Smalltalk in the creation of application that are really used by other developers (like in Python, Ruby, Java, JavaScript, Node.js, and others), I should stop thinking in this way. But, for some reason, Smalltalk is not taking the world by storm. Alternatives are here, floating around us, ready to be taken and to be explored.

Keep tuned!

Angel “Java” Lopez

Smalltalk, JavaScript, NodeJs, C#, and Tutti Li Fiocci

Past year, I gave a talk at Smalltalks 2013, Rosario, Argentina. The conference was a great experience to me, and there were many interesting talks, implementations and ideas.

My talk was about implementing Smalltalk, in C#, and JavaScript. The main repos are: (I presented it at Smalltalks 2010) (I presented it at Smalltalks 2011)

My recorded talk:

The presentation:
More talks at

The first project is an interpreted based on byte codes, written in C#. It can compile to JavaScript, but the key features is to have a VM based on bytecodes, that have access to native .NET types and objects, remote execution, actors, and more. See my posts.

The second project is an implementation of Smalltalk but in JavaScript. Internally, it have a compiler to JavaScript, but also a compiler to bytecodes and then, an interpreted VM written in JavaScript. Both projects now supports NPM (Node.js package manager) for new modules.

In 2013, I added Node.js support and access to AjTalkJs, so I can run an Express application from Smalltalk:


Next experiments: distributed message. That is, an object in one machine sends a message to an object in a remote machine/process,  in a fire and forget way. I think Node.js ecosystem is a good plate to host such experiments. My previous work at Distributed Applications with Node.js. I want a distributed Smalltalk machine/application. Maybe, if the communication protocol is easy or pluggable, I could add clients/servers implemented in other Smalltalk dialects. But baby steps first 😉

Keep tuned!

Angel “Java” Lopez

End Of Iteration 2013w45

Previous Post
Next Post

I’m exhausted, after my Node.js Knockout participation, last week end.

Node Knockout

It is my main deliverable for past week. I wrote a web application, in two days, from scratch, using Node.js and Express. Video with demo:

It’s running online at:

Now, the repo is private, but I will clone it to my public GitHub account. You can see the votes at:

TDD and JavaScript

I gave a talk at local JavaScript meetup

Code at:

Slides at:

Other works

Minor updates at

Updated require algorithm at

Keep tuned!

Angel “Java” Lopez

End Of Iteration 2013w44

Previous Post
Next Post

The main outcomes were: a talk, about my Smalltalk implementations, new sample code and a new project, inspired by Python and Smalltalk conference.

AjTalk Implementations

I reviewed and improved my implementations:

I added a sample using AjTalkJs, Node.js, Express.

My talk for Smalltalks 2013 at


I want to implement a compiler/transpiler from reduced (subset of) Python to C, at first using JavaScript.

The project:

I have two samples running: simple hello world, and

More ideas to implement this week. I should improve my Ruby in C# implementation, and maybe, write a Ruby implementation in JavaScript.

Keep tuned!

Angel “Java” Lopez