Как стать автором
Обновить

Комментарии 9

Попробуем смастерить интерпретатор в котором базовыми являются всего две операции - присваивание и "вычисляемый GOTO" - и посмотрим что получилось.

Встречал проекты, где пошли дальше и инструкция была всего одна - cmov, условное присваивание. Если учесть, что goto это просто запись в ip, ничего невозможного. :)

Только с cmov не получится, нужна либо хоть какая-нибудь арифметика, либо перед запуском программы память должна быть заполнена какой-нибудь хитрой табличкой, а cmov должен уметь делать load/store с displacement. Для машин с одной инструкцией (OISC) чаще применяют subleq A, B, C, которая делает *B = *B - *A; if (*B <= 0) { IP = C; } else { IP++; }

(Не)кстати, в Smalltalk'е формально нет условных операторов и циклов.

Если написать в javascript-подобном синтаксисе, выглядит это так:
Для условных операторов
booleanExpression.ifTrueIfFalse( ()->{что-то-выполняется-если-истина}, ()->{что-то-выполняется-если-ложь} );

Результат booleanExpression - либо true, либо false; true - единственный экземпляр класса True, false - единственный экземпляр класса False, и метод ifTrueIfFalse(парам1, парам2) определен по-разному в этих классах - у одного выполняется только парам1, у другого только парам2.

А де-факто-циклы, да, формально определены через рекурсию, хотя и реализованы внутри VM для скорости.

Есть определённые проблемы (с return) в синтаксисе JS и прочих C-подобных, из-за которых операторы if() и т.п. там нужны, но в ST их нет.

Я вот все жду и жду, когда же С умрет... И появиться невероятный, мощный, простой ЯП.... ;))))). Сарказм - если что ))))

Надо было назвать не ZLE, а ZLO:)

Не для энтузиастов, а для оптимистов. У которых код пишется 1 раз, и сразу работает как надо, функциональных доработок и баг фикса не требует)

дык, переименовал в последний момент. для конспирации :)

А зачем называть по-другому, если первое является наречием, образованным от второго?

На счет отличия for и foreach - первый это истинный цикл т. к. допускает бесконечное выполнение, второй задает верхнюю границу т. е. для реализации алгоритма через foreach придется заранее посчитать кол-во итераций => нельзя назвать язык с foreach тьюринг полным

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации