Информация об изменениях

Сообщение Re: Синтаксис объявления переменных от 05.04.2021 12:54

Изменено 05.04.2021 12:57 D. Mon

Re: Синтаксис объявления переменных
Здравствуйте, x-code, Вы писали:

XC>Современные языки имеют тенденцию ко второму варианту.

XC>Почему? У него есть какое-то фундаментальное преимущество перед первым?

По-моему, фундаментальных никаких нету. Просто в теории типов издавна было "x : T", потом так же было в языках ML семейства еще с 70х годов. А теперь авторы языков наконец открыли учебники/статьи и прониклись.

Кому как больше нравится, предпочтения чаще всего эстетические. К опциональности указания типов это отношения не имеет.
Что мне лично не очень нравится в нотации "тип справа":
x : T = v
выглядит как "х имеет тип (Т = v)". При том, что в некоторых языках вроде Idris "a = b" это вполне осмысленный тип.
И еще лишний символ :, код аж на целую букву длиннее.

Когда типы слева, делать с функциями хтонический ужас как у Си никто не заставляет, конечно.

Я на работе занимаюсь созданием ЯП, и когда добавлял туда типы, сделал типы слева. Получилось довольно складно, имхо:
int x = 42
x = 42                   // тип можно и не указывать, он будет выведен
(a,b) => a+b             // лямбда, все типы выводятся
(int a, int b) => a+b    // лямбда с указанием типов аргументов
(a,b) => int: a+b        // лямбда с указанием типа результата
f(int a, int b) => a+b   // определение функции. заметьте, как легко
f(a, b) => int: a+b      //  превращать лямбду в ф-ю и обратно
inc(x) => int: x+1       //
(int) -> int g = inc     // переменная функционального типа, нет проблем его иметь слева
map((#a) -> #b f, [#a] xs) => ... // тут аргумент функ. типа, тоже все ок
Re: Синтаксис объявления переменных
Здравствуйте, x-code, Вы писали:

XC>Современные языки имеют тенденцию ко второму варианту.

XC>Почему? У него есть какое-то фундаментальное преимущество перед первым?

По-моему, фундаментальных никаких нету. Просто в теории типов издавна было "x : T", потом так же было в языках ML семейства еще с 70х годов. А теперь авторы языков наконец открыли учебники/статьи и прониклись.

Кому как больше нравится, предпочтения чаще всего эстетические. К опциональности указания типов это отношения не имеет.
Что мне лично не очень нравится в нотации "тип справа":
x : T = v
выглядит как "х имеет тип (Т = v)". При том, что в некоторых языках вроде Idris "a = b" это вполне осмысленный тип.
И вообще, почему мы пишем T = v, когда имеем в виду x = v?

И еще лишний символ :, код аж на целую букву длиннее.

Когда типы слева, делать с функциями хтонический ужас как у Си никто не заставляет, конечно.

Я на работе занимаюсь созданием ЯП, и когда добавлял туда типы, сделал типы слева. Получилось довольно складно, имхо:
int x = 42
x = 42                   // тип можно и не указывать, он будет выведен
(a,b) => a+b             // лямбда, все типы выводятся
(int a, int b) => a+b    // лямбда с указанием типов аргументов
(a,b) => int: a+b        // лямбда с указанием типа результата
f(int a, int b) => a+b   // определение функции. заметьте, как легко
f(a, b) => int: a+b      //  превращать лямбду в ф-ю и обратно
inc(x) => int: x+1       //
(int) -> int g = inc     // переменная функционального типа, нет проблем его иметь слева
map((#a) -> #b f, [#a] xs) => ... // тут аргумент функ. типа, тоже все ок