... потому что семантика тут тема совсем отдельная. Видимо, встраивание чего-то вроде Lua или Rexx народ не устраивает, поэтому извращаются со своим - и вот:
I. Коммунигейт и его CG/PL с тривиально расшифровываемым названием. Основа - такое себе динамически типизированное чудо в стиле привычных Perl, Python, Ruby, Lua, Tcl, Rexx (никого не забыл?) А вот синтаксис на удивление алголоподобный, более того - явно слизан с Ada:
Ну ладно, в дань моде присвоение обозначено `=' (или лично дядя Вова так захотел). Зато - блоки обязательно закрыты, begin отменён, зато в end надо повторять, к чему именно end (if, while...)
Смотрим далее в список операций и видим:
and, or, xor, and then, or else
[...]
The and then operation computes the left operand value first. If that value is a null-value, the right operand is not computed, and the operation value is a null-value. Otherwise the right operand is computed and its value becomes the operation value.
The && sign can be used instead of the and then keywords.
Приятно видеть тонкого ценителя семантики. Без иронии.
Или вот грамотный if:
Впрочем, тут же начинают издеваться предоставлением альтернативного синтаксиса (вот это, по-моему, жуткая диверсия):
Интересно, как они выкрутятся при необязательности фигурных скобок стандартного для C случая "не понял куда относится этот else"?
II. Sip Express Router (SER)
Здесь синтаксис строго сишного стиля, но продуман намного лучше - добавляется жёсткая регулировка той же группировки за счёт точек с запятой и обязательности {} вокруг внутренних блоков. Что выглядит примерно так:
и крайне существенно где стоит точка с запятой после {} вокруг внутреннего блока - если её поставить перед else - тот if будет сочтён законченным, else не будет отнесено ни к чему (потому что '}' - единственная лексема допущенная перед else) и будет ошибка. И наоборот, не поставив ';' после финальной '}' получим опять ерунду в синтаксисе.
(Заметно что они делали это в расчёте на добавление elif. Почему его пока нет - ХЗ)
{} вместо if-end, while-end... удобнее одной вроде бы мелкой но ооочень важной деталью - нажал '%' в vim и уехал на противоположную скобку.
Язык SER, впрочем, то ещё чудо. Нормального присвоения там нет, AVP механизм который его может заменить - понимается в лучшем случае после 3-й бутылки. К транзакции AVP не приписать - ещё одна беда (я вот хочу передать для onreply_route специфические данные - и что мне делать?) Может в 1.0 исправят?
И всё-таки - почему не что-то стандартное вроде того же Lua? *shrug*
I. Коммунигейт и его CG/PL с тривиально расшифровываемым названием. Основа - такое себе динамически типизированное чудо в стиле привычных Perl, Python, Ruby, Lua, Tcl, Rexx (никого не забыл?) А вот синтаксис на удивление алголоподобный, более того - явно слизан с Ada:
entry Main is
myName = "Jim" + " " + "Smith";
if length(myName) > 10 then
myName = Substring(myName,0,8) + "..";
end if;
end;
Ну ладно, в дань моде присвоение обозначено `=' (или лично дядя Вова так захотел). Зато - блоки обязательно закрыты, begin отменён, зато в end надо повторять, к чему именно end (if, while...)
Смотрим далее в список операций и видим:
and, or, xor, and then, or else
[...]
The and then operation computes the left operand value first. If that value is a null-value, the right operand is not computed, and the operation value is a null-value. Otherwise the right operand is computed and its value becomes the operation value.
The && sign can be used instead of the and then keywords.
Приятно видеть тонкого ценителя семантики. Без иронии.
Или вот грамотный if:
if myCount < 10 then
myCount = myCount + 2;
elif myCount < 20 then
myCount = myCount - 3;
end if;
Впрочем, тут же начинают издеваться предоставлением альтернативного синтаксиса (вот это, по-моему, жуткая диверсия):
if (myCount < 10) {
myCount = myCount + 2;
} elif (myCount < 20) {
myCount = myCount - 3;
} else {
myCount = myCount * 4;
}
Note: it is not required to use parentheses to enclose if-expressions or elif-expressions.
Интересно, как они выкрутятся при необязательности фигурных скобок стандартного для C случая "не понял куда относится этот else"?
II. Sip Express Router (SER)
Здесь синтаксис строго сишного стиля, но продуман намного лучше - добавляется жёсткая регулировка той же группировки за счёт точек с запятой и обязательности {} вокруг внутренних блоков. Что выглядит примерно так:
if (cond1) {
action1;
} else {
action2;
};
и крайне существенно где стоит точка с запятой после {} вокруг внутреннего блока - если её поставить перед else - тот if будет сочтён законченным, else не будет отнесено ни к чему (потому что '}' - единственная лексема допущенная перед else) и будет ошибка. И наоборот, не поставив ';' после финальной '}' получим опять ерунду в синтаксисе.
(Заметно что они делали это в расчёте на добавление elif. Почему его пока нет - ХЗ)
{} вместо if-end, while-end... удобнее одной вроде бы мелкой но ооочень важной деталью - нажал '%' в vim и уехал на противоположную скобку.
Язык SER, впрочем, то ещё чудо. Нормального присвоения там нет, AVP механизм который его может заменить - понимается в лучшем случае после 3-й бутылки. К транзакции AVP не приписать - ещё одна беда (я вот хочу передать для onreply_route специфические данные - и что мне делать?) Может в 1.0 исправят?
И всё-таки - почему не что-то стандартное вроде того же Lua? *shrug*
no subject
Date: 2006-08-28 03:32 am (UTC)в смысле как именно заметно?
даже в самом древнем паскале были if then if then; else;
и никакого прихода elif нет даже и сейчас в борландовском object pascal какой-он-там-версии-сейчас
no subject
Date: 2006-08-28 06:02 am (UTC)Вот Modula (всех версий) и Ada содержит уже правильные конструкции.
no subject
Date: 2006-08-28 07:06 am (UTC)