По мере написания все большего числа примеров становилось ясно, что встроенные типы — груз традиций и ничего более. По большому счету, встроенные типы важны лишь на первых этапах формирования (или изучения) языка, поскольку облегчают написание примеров. В дальнейшем они ложатся тяжким бременем совместимости и даже ломают концепции, как и любые другие компромиссы.
Можно ли обойтись встроенными типами?
Как говорилось, встроенные типы предназначались для неких общих и простых случаев. Высказывалось предположение, что такие случаи бывают, и возможностей встроенных типов окажется достаточно для их покрытия. Допущение было чисто умозрительным, поскольку на ранних этапах еще не было примеров кода на Канторе, а у его автора не было опыта программирования на нем. Позже, когда примеры появились, вместе с опытом пришло понимание, что «общие» и «простые» случаи весьма затруднительно отделить от всех остальных, что делает аргумент о надобности встроенных типов негодным, а выбор конкретных типов из множества — волюнтаристским. В самом деле, почему именно эти типы делать встроенными?Так связь встроенных типов с общими и простыми случаями инвертировалась: общими и простыми стали считаться те блоки кода, для которых достаточно встроенных типов. Такое понятие есть доказательство через самого себя, выливающееся на практике в банальное ограничение программиста в угоду вкусу автора, не сумевшего вовремя избавиться от гнета традиций.
Неоднородность синтаксиса
Мысль об отказе от встроенных типов возникла из-за видимой глазом неоднородности синтаксиса в примерах: встроенные типы обозначаются ключевым словом, а остальные — обычным идентификатором. Сравните два описания:var of int IntValue1 = 0; Integer IntValue2 = 0; end;
IntValue1
и IntValue2
— целые переменные, а объявлены по-разному. Никакого скрытого смысла здесь нет, просто так захотелось программисту. Если язык допускает подобную самодеятельность, — это плохой язык.Как обойтись без встроенных типов?
Язык Кантор — чисто объектно-ориентированный, то есть все типы в нем являются классами. Это означает, что имеется только один встроенный тип — class, функциональность которого обеспечивается компилятором. Данная концепция — прямая и однозначная реализация как понятия чистого ОО-языка, так и принятого в Канторе архитектурного подхода, что ключевыми словами обозначаются только те понятия, которые могут быть реализованы только магией компилятора и никак иначе.Поскольку Кантор изначально проектировался как язык, синтаксис которого реализуется RTL, вывод типов в нем привязывался к предопределенным классам RTL. Затем часть предопределенных классов обозначалась ключевыми словами, что и давало встроенные типы. Предполагалось, что при компиляции ключевые слова будут развертываться в классы, поскольку в байт-коде могут храниться только ссылки на классы, а ключевые слова — синтаксическое понятие. Отказ от встроенных типов лишь избавит компилятор и отекстовщик от работы по развертыванию ключевых слов в классы RTL и наоборот, не затрагивая остальных концепций.
Межпространственная адресация
Очень редко отказ от чего-либо проходит полностью безболезненно. Отказ от встроенных типов в Канторе требует решения другой проблемы — упрощения ссылок на классы из другого пространства. Проще пояснить это на примере:public class Model of public class CantorSys of public class HelloWorld of public out :Core:String Hello; end; end; end;Фрактал, в котором работает Кантор, делится на пространства — корневые контейнеры, инкапсулирующие среды с разным временем жизни объектов и способом доступа к ним, играющие также роль пространства имен. Корень всех пространств обозначается двоеточием, вложенные объекты в пространствах также разделяются двоеточием.
В примере выше корневые пространства
:Model
и :Core
являются классами, а описание свойства :Model:CantorSys:HelloWorld.Hello
ссылается на класс :Core:String
. Во фрактальной среде вложенных описаний не избежать никак, и даже в простом примере они уже не такие короткие. На будущее нужно продумать механизм, упрощающий межпространственную адресацию, делающий это очевидным способом и однозначно ложащийся в байт-код.
Комментариев нет :
Отправить комментарий
Выбрав в выпадающем списке пункт «Имя/URL», можно оставить комментарий от своего имени без предварительной регистрации.
Примечание. Отправлять комментарии могут только участники этого блога.