dmzlj -

[a, b, c, ...] ;; список TList(typeof(a)) (a,b,c) ;; 3-кортеж TTuple(typeof(a), typeof(b), typeof(c))
допустим у нас язык без синтаксиса, и каждая конструкция имеет семантику вызова функции:
(list a b c d) ;; список (tuple a b c) ;; 3-кортеж
возникают следующие вопросы:
Если конструкторы данных --- это функции, то они должны иметь переменное количество параметров. Тогда как в определяемых функциях количество параметров может быть только фиксированным (вытекает из статической типизации).
Далее, если давать переопределять эти функции, то что происходит с типами данных, которые они возвращают? Количество основных типов, о которых знает компилятор и к которым сводятся остальные --- оно все равно фиксировано.
Даже если дать произвольно определять конструкторы, все равно должны быть какие-то вызовы, которые будут вызваны в этих конструкторах, что бы вернуть объект того или иного основного типа.
Если же не давать переопределять конструкторы данных, жестко определяя их синтаксис, то почему бы тогда не зафиксировать и остальные формы (define, let, if-then-else, etc), перекладывая проверку их корректности на парсер?
А можно еще рассматривать язык программирования как язык и API для генерации AST. Язык для генерации AST вполне может иметь семантические отличия от того языка, который представляетcя этим AST, т.е. например иметь динамическую типизацию и функции с переменным количеством параметров.
|
</> |