Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
А то вот смотрю в исходник образа по ссылке из статьи и, например, не понимаю, что значит RAWCLASS.Тут надо сказать оидн момент. То что вы видите в imageSource.st, RAWCLASS, CLASS, METHOD — это НЕ синтаксис Smalltalk. К Smalltalk-у там относится только то, что записано между «METHOD» и «!».
Class является подклассом MetaClass, а MetaClass является подклассом Class.METHOD Class
subclass: nm variables: v classVariables: cv | meta |
meta <- Class new name: ('Meta' + nm asString) asSymbol
parent: self class
variables: cv.
globals at: nm put: ( meta new name: nm
parent: self
variables: v ).
^ 'subclass created: ' + nm printString
!Плюс, я так понимаю, в языке всё же есть примитивы, то есть, методы не написанные на самом языке. Что в LittleSmallTalke'е является примитивами?Теперь о примитивах. Нет, методов, не написанных на Smalltallk здесь нет. Вообще. Но есть методы, которые вызывают примитив. Это такая штука в угловых скобках и с номером. Вот например, методы, реализующие доступ к содержимому массива:
METHOD Array
at: index
<24 self index>.
(self includesKey: index) ifFalse: [ self badIndex: index ].
self primitiveFailed
!
METHOD Array
at: index ifAbsent: exceptionBlock
<24 self index>.
exceptionBlock value
!
:= как оператор связывания. А в llst <-. Ну и плюс в llst нет poolDictionaries, хотя от них и в «большом» стараются избавиться.…было бы интересно описание работы VM при исполнении кода: как хранится контекст исполнения, можно ли в LST сделать call-with-current-continuation, например?Да, разумеется. Все это будет описано позже. Continuation можно сделать, поскольку все выполнение завязано на объекты контекста которые в общем случае можно тасовать как угодно. Жестко заданного традиционного call stack там нет, поэтому это все возможно.
app := (IDispatch createObject: 'V82.COMConnector') connect: 'Srvr="someServer"; Ref="1C_DB"; Usr="Администратор"; Pwd="блаблабла"'.
nDict := (app getProperty: 'Справочники') getProperty: 'Номенклатура'.
(nDict invoke: 'НайтиПоКоду' with: 'УТ000012964') getProperty: 'Наименование'.
Внутреннее устройство llst, часть 1. Введение в Smalltalk