Лэнгвиж дизайн.

Nov 12, 2008 14:49

Точка с запятой может быть либо разделителем операторов, либо завершителем.

В Си она является завершителем - после каждого оператора должна стоять точка с запятой:
a = b+c ;
d = x-y;В Паскале, который изначальный Паскаль, она являлась разделителем операторов, поэтому последний оператор в блоке не имеет её:
begin
a = b+c;
d = x-y
endВ Хаскеле, ( Read more... )

vhdl, Си, Паскаль, языки программирования, Хаскель

Leave a comment

Comments 16

nealar November 12 2008, 12:44:12 UTC
Кто мешает втыкать лишние разделители? Пусть они тоже будут перестановочными.

Reply

thesz November 12 2008, 13:12:41 UTC
В Аду? Там не разрешены пустые операторы. В Паскеле то же самое.

Reply

в The Only True Language yet nealar November 12 2008, 14:00:19 UTC
Ады я не знаю, а Паскаль уже забыл. :)

Reply

Re: в The Only True Language yet thesz November 12 2008, 14:03:46 UTC
В Аде даже просто begin end; нельзя написать, надо писать begin null end;. ;)

Reply


(The comment has been removed)

thesz November 13 2008, 05:19:04 UTC
:=, действительно. Забыл. ;)

Я вел речь и об операторах, и о выражениях. В обоих случаях, по-моему, завершитель лучше разделителя.

Reply


_winnie November 12 2008, 21:44:04 UTC
кстати, запятая в списках иногда опциональная, что иногда упрощает кодогенерацию.

#define ENTRY(x) { #x, &foobar::x },

typedef struct entry_t_
{
const char *name;
void (*func_ptr)();
} entry_t_;

entry_t_ array[] =
{
ENTRY(foo)
ENTRY(bar)
ENTRY(qux)
ENTRY(nya)
};

Reply

thesz November 13 2008, 05:23:33 UTC
По моим сведениям, она стала такой достаточно недавно.

А то я помню, как делал таблички с помощью
/* содержимое файла с табличкой о некоем перечислимом типе */
ENUM_ENTRY(a,"a",parameter) ... _ENUM_COMMA
ENUM_ENTRY(b,"b",param) ... _ENUM_COMMA
ENUM_ENTRY(l,"l",dummy) ... _ENUM_LASTи при включении определял и _ENUM_COMMA (, или ;) и _ENUM_LAST (пусто или ;).

Reply


nivanych November 13 2008, 12:42:47 UTC
Надо бы ещё вспомнить Haskell и Coq.
В Haskell синтаксисе мне не нравится
зависимость от индентации, это не очень хорошо,
а синтаксис без "индентозависимости" неудобен.
Coq'овый синтаксис несколько громоздкий (как OCaml),
но там хорошо сделано с точкой в конце определения.

По-моему, "самое оно" будет Haskell'ный синтаксис,
только с избавлением от "индентозависимости", как в Coq.
Единственный (по-моему, небольшой) недостаток
будет в неперестановочности точки.

Reply

thesz November 13 2008, 12:49:15 UTC
Не нравится - не пользуйся. Ставь везде скобочки. ;)

Неперестановочность разделителя это мелкий, но досадный недостаток. ;)

Reply

nivanych November 13 2008, 16:13:39 UTC
Ну уж нет, везде скобочки мне не нравятся
значительно больше, чем индентозависимость,
которая, всего лишь, вызывает некоторые
неприятные впечатления от синтаксиса ;-)
На практике она мешает крайне редко.
И уж читать написанные программы
не мешает нисколько.

Мне нравится в Haskell'евом синтаксисе
всё, кроме зависимости от индентации.
И если что-то разрабатывать, я бы
взял за основу подобный подход.
Он хорошо подходит для всего,
отличающегося от императивного.

Если избавляться от "индентозависимости",
то надо делать это не скобочками, а точкой
в конце определения и разделение выражений
делать не определённым знаком, а несколькими,
подходящими под смысл конкретных выражений.
Пример, как это хорошо сделать -- Coq.
Правда, всё остальное мне в нём не очень нравится.

Reply

thesz November 13 2008, 16:16:48 UTC
Если избавляться от "индентозависимости",
то надо делать это не скобочками, а точкой
в конце определения и разделение выражений
делать не определённым знаком, а несколькими,
подходящими под смысл конкретных выражений.

Открывающаяся скобочка - начало выражения. Точка с запятой - завершитель всех, за исключением последнего. Закрывающая скобочка - завершитель списка определений.

Получается то же, что и у тебя. Плюс-минус. ;)

Reply


Leave a comment

Up