3 ms·
Here's a short description of the debugging process for web apps written in Seaside: http://news.ycombinator.com/item?id=1887874 http://news.ycombinator.com/it
by cwp 16y ago
Here's a short description of the debugging process for web apps written in Seaside:
http://news.ycombinator.com/item?id=1887874 http://news.ycombinator.com/item?id=1887874
For me the key thing about Smalltalk is that its handling of abstraction scales well. On one hand, it's a modern, garbage collected, dynamic language in the same vein as Ruby, Python or Javascript. On the other, it give the programmer a lot more low-level control than any of those languages.
For example, Seaside makes heavy use of continuations. In most languages, you're at the mercy of the language designer as to whether continuations are supported: Ruby has them, but Python and Javascript don't. Smalltalk hasn't traditionally supported continuations, but it provides low-level control of the stack, and Seaside implements continuations as part of the framework.
Here's another, less exotic, example. Smalltalk provides GC-safe ways of manipulating raw chunks of memory, which other dynamic languages tend not to do. A couple of years ago, I needed to implement a specialized type of timestamp in Smalltalk. For my application, there would be many timestamps in memory at once, so optimized for memory usage. Internally each instance stored the number of seconds since March 1, 1980 as a 32-bit unsigned integer.
More recently, I implemented a timestamp object in Javascript. Without the level of control that Smalltalk allows, I ended up just wrapping Javascript Date objects. I don't know what the internal storage of Date objects looks like, but I bet it's more efficient than anything I could implement in Javascript.
You see this kind of thing all over the place in Smalltalk. Here's a comment I wrote a while back on syntax:
http://news.ycombinator.com/item?id=1289177 http://news.ycombinator.com/item?id=1289177
It's a bit hard to quantify, but I find this scalability of abstraction to be one of the key things I look for in a programming language. I'm not a Lisp hacker, but my impression is that this is one of the primary virtues of Lisp as well.