Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
201 views
in Technique[技术] by (71.8m points)

Smalltalk-80 character meaning/usage

What is the exact meaning of these characters ←, ≡, ?, ≠, ?, and ? and how are used in Smalltalk-80?

consider the following expressions: (taken from the smalltalk-80 source code)

  1. ^self class ≡ x ≡ false
  2. ^mem ? ?448 ≠ 0
  3. strm frame ← 15000 ? frame origin y rect: 20000 ? frame corner y.
  4. neg ← (aStream ? 45 "-" ifTrue: [true] ifFalse: [aStream ? 21 "**?**"]).

Note: This examples were extracted from the original Xerox Alto disks found in this link: http://bitsavers.trailing-edge.com/bits/Xerox/Alto/disk_images/

question from:https://stackoverflow.com/questions/65916322/smalltalk-80-character-meaning-usage

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Sounds like this is a source file from a Xerox-internal version of Smalltalk-80. For the public release they must have replaced these "unusual" chars (which required custom font glyphs) with ASCII, only keeping and glyphs for the _ and ^ ASCII characters.

This is a best guess based on my experience with St76/78 (Update: confirmed by Dan Ingalls):

  1. assignment as in var ← object. Same in St80.

  2. rcvr word← arg is an alternative to word: and usually indicates assignment to a slot of the receiver (e.g. x← as in point x ← 100). St80 only allows keywords ending in a colon :.

    The parser treats as lower precedence so you can have keyword expressions on both sides of it. E.g.

    a foo: b ← c bar: d

    would eval c bar: d and pass the result as second argument to a's foo:← method).

  3. ? indexing as in array?index. St80 uses at: instead.

  4. ?← equivalent to St80's at:put: as in array?index ← value

  5. identity, like St80's ==

  6. ? literal for negative numbers as in ?1 for -1. The parser treated - as a binary message selector so another symbol had to be used for negative numbers literals.

  7. not equal, like St80's ~=

  8. ? not identical, like St80's ~~

  9. ? create a Point, like St80's @

  10. ? match token from stream. If the next token read from stream matches the argument, it is consumed and returned. Otherwise it answers false.

For more info check out the Smalltalk Zoo website.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...