Ну что же, первые впечатления конечно положительные, давненько мечтал о чём-то подобном, хотя лучше бы взяли в качестве языка Модулу-2 или Оберон.
Есть недостатки. Например, все типы беззнаковые. Вещественной арифметики нет.
TRSE supports several data types:
byte : values 0-255. Supported on all systems.
integer: values 0-65535. Supported on all systems.
long : 32-bit double word. Supported on all x86 and m68k systems. On the 6502, “long” is a 24-bit number.
pointer : Points to an address in memory. Uses zero pages on the 6502, “long” on the x86/m68k and is simply an integer on the (GB)Z80
lpointer: 24-bit pointers for the 65c816.
boolean: Syntactically identical to a byte.
string : An array of characters. Syntactically identical to an array of bytes.
Здесь не очень понятно почему беззнаковый целый тип назван integer. Сделали бы word. Ломают совместимость на корню, даже самую минимальную.
Есть и другие странности.
Циклы for в TRSE по умолчанию не включаются, что означает, что приведенное ниже выражение будет считать i от 0 до 9.
for i:=0 to 10 do
begin
PrintNumber(i); // will print 0-9
end;
Если вы предпочитаете включать for, используйте ключевое слово fori :
fori i:=0 to 10 do
begin
PrintNumber(i); // will output 0-10
end;
А знаете как бы я сделал, раз уж так припекло:
Код:
for i := 0 to 10 [ by N ] do <— от 0 до 10
for i := 0 until 10 [ by N ] do <— от 0 до 9
Вы можете изменить длину шага, используя ключевое слово step:
Код:
for i:=0 to 10 step 2 do
begin
PrintNumber(i); // will output 0,2,4,6,8
end;
А step зачем? Есть же короткое Виртовское by. Авторы совсем не в курсе про дальнейшую деятельность Вирта?
Если кто-то будет связываться с разработчиками Rascal, было бы интересно насколько они открыты к такого рода вопросам.
Да, очень странный Паскаль. У авторов своё ни с чем не сравнимое видение.
"Такого даже в Обероне нет!"