background preloader

Ruby vs Smalltalk

Facebook Twitter

2: Ruby's method lookup path (2 of 2) Originally published as part of the Practicing Ruby newsletter on November 11, 2010.

2: Ruby's method lookup path (2 of 2)

Most of these issues draw inspiration from discussions and teaching sessions at my free online school, Ruby Mendicant University. Ruby’s method lookup rules at a glance In Issue #1 we discussed Ruby’s lookup path and proved by example that class inheritance is just a small part of the overall picture. To recap, Ruby methods are looked up in the following order: 1) Methods defined in the object’s singleton class (i.e. the object itself) 2) Modules mixed into the singleton class in reverse order of inclusion 3) Methods defined by the object’s class 4) Modules included into the object’s class in reverse order of inclusion 5) Methods defined by the object’s superclass, i.e. inherited methods The example we looked at in the previous issue just showed the mechanics of how the above process plays out, it didn’t really hint at practical use cases.

Domain Specific Languages - Ruby, a Sign Post on the Road to Smalltalk. There's so much talk lately about Ruby being so great for writing domain specific languages, but this is only partially true, Ruby's not all it's cracked up to be.

Domain Specific Languages - Ruby, a Sign Post on the Road to Smalltalk

Too much hype and not enough substance, if one looks a little deeper. Every programmer knows one domain specific languages that is so common, it's built into most languages, predicate logic. The good old if, if/else, and while forms, and several variations of them like do, unless, etc. So please forgive me while I state the obvious. Each form works using true/false as the input, and a block of code to be conditionally or repeatedly executed depending upon the value of the input. If(aBooleanCondition){ someCodeToCall(); } else { someOtherCodeToCall(); } while(aBooleanCondition){ someCodeToCall(); } There's nothing new here, every programmer knows this. DSL and Metaprogramming with Smalltalk. Today I’ve been thinking about beauty of Smalltalk, about how productive we can be with Squeak or Seaside.

DSL and Metaprogramming with Smalltalk

Of course everone has a different opinion about productivity and efficiency. For me it means that I don’t need to worry about nothing else but only logical aspect of some programming problem, I mean - code at the speed of thought. It’s more a pragmatic, practical way of thinking but it works. Why Every Ruby Developer Should Learn Smalltalk. No matter what kind of programming you are doing these days you probably heard a lot about Smalltalk.

Why Every Ruby Developer Should Learn Smalltalk

And there is a reason for that. Its influence on what we are doing and using right now is hard to overestimate. Refactoring, XP, TDD, many VM technologies came from the Smalltalk community. As programmers we tend to become excited about new shiny things and don’t appreciate the history of our craft. Ruby's Roots: Smalltalk Comeback and Randal Schwartz on Smalltalk. A recent blog post by Gartner Analyst Mark Driver picks up on the increasing interest in Smalltalk.

Ruby's Roots: Smalltalk Comeback and Randal Schwartz on Smalltalk

There are many factors contributing, but one of them appears to be the rise in popularity of dynamic languages like Ruby, Python and others. I'm confused with block in ruby, compared to smalltalk. Ruby Programming/Classes and objects. Design Principles Behind Smalltalk. University of Virginia, Department of Computer ScienceCS655: Programming Languages Spring 2001 Daniel H.

Design Principles Behind Smalltalk

H. Ingalls Learning Research Group Xerox Palo Alto Research Center BYTE Magazine, August 1981. (c) by The McGraw-Hill Companies, Inc., NY. The purpose of the Smalltalk project is to provide computer support for the creative spirit in everyone. Build an application program within the current system (make an observation) Based on that experience, redesign the language (formulate a theory) Build a new system based on the new design (make a prediction that can be tested) The Smalltalk-80 system marks our fifth time through this cycle. Personal Mastery: If a system is to serve the creative spirit, it must be entirely comprehensible to a single individual. The point here is that the human potential manifests itself in individuals. Language In designing a language for use with computers, we do not have to look far to find helpful hints. Uniform access principle. Explanation[edit] The problem being addressed by Meyer involves the maintenance of large software projects or software libraries.

Uniform access principle

Sometimes when developing or maintaining software it is necessary, after much code is in place, to change a class or object in a way that transforms what was simply an attribute access into a method call. Visibility - Are Ruby imported methods always private.

Visibility

Iwanttolearnruby. Meta programming. Traits and Modules. Index of /download/st. Late-binding semantics comparison. By Antoine Beugnard Abstract.

late-binding semantics comparison

We observe the various interpretations of overriding and overloading in object oriented languages. With the description of an intend, represented as the following UML diagram, we have "naively" implemented in 15 different languages the same piece of code... and obtenained 11 different results. The question is: How will this model behave? Ruby vs. Smalltalk. Hmm.

Ruby vs. Smalltalk

No headers (<h1>, <h2>, etc.) allowed in here. Use COBOL-style level numbers to express an hierarchy of headers? Smalltalk « Metaphysical Developer. Even though closures and collections are useful on their own, when combined they allow us to abstract iteration mechanisms.

Smalltalk « Metaphysical Developer

Smalltalk is notable for blending closures and collections in a category of methods that form a protocol called enumeration protocol. For instance (examples in ruby, that also features an enumeration protocol, similar to smalltalk), we can rewrite this: novels = []for b in books if b.novel? Novels << b endend.