pokos> Более того, я даже знаю, что это за "деньги", и кому их надо платить.
pokos> Потому и предлагаю дать экземпляру по ядру. Тогда часть денег в виде мильона разыменований при доступе к методу будет не нужна - все методы и скрытые объекты сидят уже тут, в ядре, скомпилированные.
Нет, это немного не туда. Статические языки позволяют выполнить некоторые предусловия, находясь в которых, ты гарантированно не должен проверять. Это позволяет сильно экономить на многих вещах.
pokos> В Smalltalk нет статических классов, поэтому там оно спутано изначально, причём, намеренно. Так же, как и в Форте, нет разницы между средой разработки и программой. И ничего, вполне себе коммерчески успешный продукт.
Ага, расскажи мне — всё-таки делали компайлер со Смолтока в соседней лабе. Как ты описываешь атррибуты в нём? Это посылка сообщения может не знать. Но аттрибуты там возникают вовсе не динамически.
In Smalltalk, Classes and instances are objects, and share some common properties. This is not true in Java, because static methods cannot have all these properties. The 'class' method give us the class of an object; and also classes can resppond to 'class' method. But...wait a moment, what is the class of Class? It is Metaclass:
Metaclass:
Metaclass instances add instance-specific behavior to various class-describing objects in the system. This typically includes messages for initializing class variables and instance creation messages particular to a class. There is only one instance of a particular Metaclass, namely the class which is being described. A Metaclass shares the class variables of its instance.
Look at this table:
#| Expression -> Output
1 | (Object new) class -> Object
2 | Object class -> Object class
3 | Object class class -> Metaclass
4 | Object class class class -> Metaclass class
5 | Object class class class class -> Metaclass
5'| Metaclass class class -> Metaclass
Note: 5 and 5' are the same.
The trick is in the 5th expression. We should define MetaMetaclass for the 5th output. For avoiding this infinite recursion, Smalltalk overlap 'Metaclass' and 'Metaclass class'.
Не скажешь, откуда иерархии и правило Smalltalk overlap 'Metaclass' and 'Metaclass class' появилось? Чисто статические вещи, кстати. Но опять, не надо путать разные вещи. Да, в Форте и в Смоллтоке попытались отказаться (по разным причинам) от статического описания классов (в Форте их нет). Но вот основа-то осталась — те же методы с заголовками описываются статически.
pokos> Вот потому-то я тебе про засилие С++ и толковал...
Это не засилие, это просто не понимание того, что и зачем служит. У динмаческой части населения. Примерно, как полностью проверять машину перед каждым действием — засунули ключ в зажигание, надо выйти и проверить давление в шинах, хотим переключить скорость на дороге — надо остановиться и проверить давление в шинах.