Сообщение 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" это вполне осмысленный тип.
И еще лишний символ :, код аж на целую букву длиннее.
Когда типы слева, делать с функциями хтонический ужас как у Си никто не заставляет, конечно.
Я на работе занимаюсь созданием ЯП, и когда добавлял туда типы, сделал типы слева. Получилось довольно складно, имхо:
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?
И еще лишний символ :, код аж на целую букву длиннее.
Когда типы слева, делать с функциями хтонический ужас как у Си никто не заставляет, конечно.
Я на работе занимаюсь созданием ЯП, и когда добавлял туда типы, сделал типы слева. Получилось довольно складно, имхо:
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) => ... // тут аргумент функ. типа, тоже все ок