Chronos is one of the many Smalltalk-related blogs syndicated on Planet Smalltalk

Discussion of the Essence# programming language, and related issues and technologies.

Blog Timezone: America/Los_Angeles [Winter: -0800 hhmm | Summer: -0700 hhmm] 
Your local time:  


Chronos Version B1.29 Published

Someone is porting Chronos from VisualWorks to a different flavor of Smalltalk. No mention was made as to when, nor even whether, this particular Chronos port might become publicly available--and no, I won't tell you who's doing it, nor even what the target Smalltalk environment happens to be, so you'll just have to wait until the party in question decides to make an announcement. And no, I'm not the one.

What I will say is this: A first cut at the port was completed without any aid or advice from me. I only found out about it when I got an e-mail detailing the problems that arose and the steps necessary to overcome them. I believe the party in question is waiting for this new version so that "they" (to be mysterious) can synchronize their port with it before proceding to package up the ported version and put a bow on it.

Many of the changes in this version are motivated by the porting issues discovered during the Chronos port mentioned above:

1. New package created: Chronos-Class Initialization.

Moved certain class-side #initialize methods from the "home" package of their class to the Chronos-Class Initialization package (as "extension" methods.) Reason: To address portability issues discovered during the Chronos port mentioned above. There's a new version of the Porting.html document that discusses this issue (and also other new issues.)

2. Added the methods ChronosUtility class>>ansiValueOfLiteralArrayElement: and ChronosUtility class>>ansiValueOfArrayLiteral:. The first method converts #nil to nil, #true to true and #false to false, but leaves all other values unchanged, and the second method applies the first to the contents of its argument (which should be an Array literal.)

3. Made the Chronos code agnostic with respect to whether or not the compiler of the host Smalltalk environment interprets Array literals according to the ANSI Standard (where #(nil) = (Array with: nil)) or according to the original "Blue Book" (where #(nil) = (Array with: #nil).)

So in VW, both "Timepoint now printStringUSing: #(timeZoneElementSeparator: nil)" and "Timepoint now printStringUSing: #(timeZoneElementSeparator: #nil)" will work the same, and neither will be an error.

4. Delagated responsibility to the ChronosEnvironment for constructing a character value to represent the euro currency symbol. If the host Smalltalk environment can't represent that character, then it can't, and Chronos will simply use a different default currency symbol (i.e., $, which is not the default in VW.)

5. Converted all the Bahai Calendar month-name Symbol literals to "quoted" syntax. For instance, #Bahá => #'Bahá'

6. Added the instance methods #makeMutable: and #makeImmutable: to ChronosSystemFacade. Changed all (other) senders in the Chronos codebase of the VW-specific #isImmutable: message to instead use #makeMutable: or #makeImmutable:.

7. Added binary operator % to ChronosPrintable. It takes any of 1) a ChronosPrintPolicy, 2) a key of a registered ChronosPrintPolicy (string or symbol), or 3) a ChronosPrintPolicy spec array as its argument, and answers the result of sending #printStringUsing: (with the same argument) to the receiver.


Timepoint now % #rfc2822
=> ''Sun, 05 Feb 2006 23:04:36 -0800''
Timepoint now % (ChronosPrintPolicy applying: #(timeOfDayPrefix: $@))
=> ''2006-02-05@23:05:53.528256-08:00''
Timepoint now % #(timeOfDayPrefix: $@)
=> ''2006-02-05@23:06:46.506399-08:00''

For information on the prior release, see the Chronos Version B1.25 Publication Announcement. That announcement has a link to the information about yet earlier released versions.

No comments: