Why Smalltalk?

This is a question is occasionally asked by students and here is the answer. We are not religious. This choice is not dogmatic. We do both research in programming languages and tool support for software evolution. In both cases Smalltalk is handy: Programming language — Smalltalk is extermely uniform. Experimenting with a language change is faster in Smalltak, than say, Java or Ruby. Their syntax … Continue reading Why Smalltalk?

Reflecting on Reflection

(A cheap title, I know) Reflection is one of these concept that constantly move from “obvious” to “puzzling” in my head–you feel like you have a firm understanding of it, and then suddently it evades, you feel puzzled by certain aspects, and ultimately confused about the whole thing. Why? Two Perspectives One of the first source of confusion is that reflection can be apprehended with … Continue reading Reflecting on Reflection

The Object Cube

There’s the lambda cube, and the big data cube. Why not a an object cube? Here would be three axis: Object Existence — The object existence dimension can range for everything ia a mutable object, to more distinctions between mutable and immutable objects, or objects and values. Existence, identity and mutability are tightly related (“I have an identity therefore I exist”). Object Composition — The … Continue reading The Object Cube

Ownership for Dynamic Languages

Edit: the idea presented in this post was worked out into a consistent language feature and accepted for publication. Ownership type systems have been designed for statically typed languages to confine and constraint aliasing, which in turn increases security and safety. Ownership type systems are conservative, and can only enforce properties that are known to hold globally and statically. Rather than taking a static view … Continue reading Ownership for Dynamic Languages

Abstraction-Level vs. Meta-Level

As per wikipedia, a model is a pattern, plan, representation (especially in miniature), or description designed to show the main object or workings of an object, system, or concept. In the case of software engineering, models are used to represent specific aspects of the software system, such as static structures, communication paths, algorithms, etc. Models can be created along two axis: Abstraction level An abstraction … Continue reading Abstraction-Level vs. Meta-Level