Растуолкуйте плиз
От: Ziaw Россия  
Дата: 23.11.11 14:23
Оценка:
Вот я тут задумался и сам сходу ответить не смог. Почему для типа array[] синтакис конструктора совпадает с именем типа, а для кортежей и функций придуман свой синтаксис?

Почему не сделать объявление типа кортежей и функций совпадающим с синтаксисом их описания? Вроде бы нигде нет мест, где может стоять как тип так и выражение.

def x(f : int => int) : (int, string) {
}

Я понимаю, что для функций -> исторически сложилась. А => пришел из C# позже. А вот с кортежами не очень понятно. Где неоднозначности?
Re: Растуолкуйте плиз
От: CodingUnit Россия  
Дата: 23.11.11 15:30
Оценка:
Здравствуйте, Ziaw, Вы писали:


Z>Вот я тут задумался и сам сходу ответить не смог. Почему для типа array[] синтакис конструктора совпадает с именем типа, а для кортежей и функций придуман свой синтаксис?


Z>Почему не сделать объявление типа кортежей и функций совпадающим с синтаксисом их описания? Вроде бы нигде нет мест, где может стоять как тип так и выражение.


Z>def x(f : int => int) : (int, string) {

Z>}

Z>Я понимаю, что для функций -> исторически сложилась. А => пришел из C# позже. А вот с кортежами не очень понятно. Где неоднозначности?


Что тебе не нравится в текущем объявлении функции f : int -> int, помоему выглядит красиво и так во всех почти функциональных языках, => здесь не совсем уместен, его привыкли видеть при создании анонимных функций и матчей. И кортежи тоже что плохого в int * string, сразу видно что это объявление типа параметра, а x(f : int => int) : (int, string) {, от скобок разделенных двоеточием в глазах рябит. Такое изменение синтаксиса требует серьезной перестройки, потому что все уже привыкли к такому. Можешь как решение сделать макрос например уровня типа или метода, который анализирует код и производит замену твоего синтаксиса в немерловый, (int, string) будет наверное PExpr.Tuple, его заменишь на объявление параметров. Дальше какое то составное выражение, f : int => int, которое можно тоже разобрать и преобразовать в стандартные немерловые деревья. Все это можно легко делать обходя деревья Macros.TraverseExpr или TraverseExprWithContext. И будет тебе свой синтаксис, который можешь включать макросом.
Re: Растуолкуйте плиз
От: CodingUnit Россия  
Дата: 23.11.11 15:33
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Я понимаю, что для функций -> исторически сложилась. А => пришел из C# позже. А вот с кортежами не очень понятно. Где неоднозначности?


Синтаксис кортежей тоже перекочевал из ML помоему, лучше когда язык похож на своих собратов по парадигме программирования.
Re: Растуолкуйте плиз
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.11.11 17:10
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Почему не сделать объявление типа кортежей и функций совпадающим с синтаксисом их описания? Вроде бы нигде нет мест, где может стоять как тип так и выражение.


По поводу кортежей, давно уже, было обсуждение в гугулгруппе с авторами. Если не ошибаюсь, сошлись на том, что решение в виде (тип, другой) хорошее, но коней на переправе не меняют.

Что касается фунций, то это вообще натянуто. => — это просто макрос. Реально синтаксис определения методов, локальных функций и лямбд совсем другой (да и различаются между собой).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Растуолкуйте плиз
От: Ziaw Россия  
Дата: 24.11.11 04:07
Оценка:
Здравствуйте, CodingUnit, Вы писали:

CU>Что тебе не нравится в текущем объявлении функции f : int -> int, помоему выглядит красиво и так во всех почти функциональных языках, => здесь не совсем уместен, его привыкли видеть при создании анонимных функций и матчей. И кортежи тоже что плохого в int * string, сразу видно что это объявление типа параметра, а x(f : int => int) : (int, string) {, от скобок разделенных двоеточием в глазах рябит. Такое изменение синтаксиса требует серьезной перестройки, потому что все уже привыкли к такому.


Таких причин я и сам могу выдумать. Мне интереснее, есть ли объективные.
Re[2]: Растуолкуйте плиз
От: Ziaw Россия  
Дата: 24.11.11 04:10
Оценка:
Здравствуйте, CodingUnit, Вы писали:

Z>>Я понимаю, что для функций -> исторически сложилась. А => пришел из C# позже. А вот с кортежами не очень понятно. Где неоднозначности?


CU>Синтаксис кортежей тоже перекочевал из ML помоему, лучше когда язык похож на своих собратов по парадигме программирования.


Начнем с того, что в ML списки аргументов не заключаются в скобки. Кивать на ML в плане синтаксиса совсем не логично, ибо nemerle это такой ML с синтаксисом C#, а не наоборот.
Re[2]: Растуолкуйте плиз
От: Ziaw Россия  
Дата: 24.11.11 04:18
Оценка:
Здравствуйте, VladD2, Вы писали:

Z>>Почему не сделать объявление типа кортежей и функций совпадающим с синтаксисом их описания? Вроде бы нигде нет мест, где может стоять как тип так и выражение.


VD>По поводу кортежей, давно уже, было обсуждение в гугулгруппе с авторами. Если не ошибаюсь, сошлись на том, что решение в виде (тип, другой) хорошее, но коней на переправе не меняют.


Мне кажется в Н2 можно исправить это недоразумение. Причем мягко, старый синтаксис поддерживать, но объявить deprecated.

VD>Что касается фунций, то это вообще натянуто. => — это просто макрос. Реально синтаксис определения методов, локальных функций и лямбд совсем другой (да и различаются между собой).


Да ладно, абсолютно неважно, что такое => внутри. По факту это самый распространенный способ создать лямбду. Зачем делать два разных смайлика для описания и создания?

Я понимаю, что мы привыкли, но это выглядит как ошибка дизайна, а их желательно исправлять.
Re[3]: Растуолкуйте плиз
От: CodingUnit Россия  
Дата: 24.11.11 08:16
Оценка: +1
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, CodingUnit, Вы писали:


CU>>Что тебе не нравится в текущем объявлении функции f : int -> int, помоему выглядит красиво и так во всех почти функциональных языках, => здесь не совсем уместен, его привыкли видеть при создании анонимных функций и матчей. И кортежи тоже что плохого в int * string, сразу видно что это объявление типа параметра, а x(f : int => int) : (int, string) {, от скобок разделенных двоеточием в глазах рябит. Такое изменение синтаксиса требует серьезной перестройки, потому что все уже привыкли к такому.


Z>Таких причин я и сам могу выдумать. Мне интереснее, есть ли объективные.


Объективная причина при выборе синтаксиса — удобство его использования, чтобы код не казался однородной кашей и можно было отделить одни условные куски кода от других и понять их назначение. Это как известно, больше на уровне интуитивного восприятия, возможно кому то хотелось бы иметь свой синтаксис и для этого хотят либо изменить существующий или создать новый язык. Вот я и начал с того что есть ли объективные причины у тебя что то изменять в существующем синтаксисе? Традиции языков, которым следует Н, в объявлениях это не малый аргумент в пользу использования именно этого синтаксиса, это касается f : int -> int и int * string, это помогает людям в освоении языков, которые перешли на них с предыдущего поколения. Если разработчики нескольких языков пошли на это решение значит действительно у людей есть веские основания, и я не вижу ничего плохого в этом, логично разделять объявление и использование, иначе все превращается в неинтуитивную кашу. Например конкретно: какой плюс от использования f : int => int синтаксиса? На изменение этого и уход от традиций языков должен быть веский повод.
Re: Растуолкуйте плиз
От: hardcase Пират http://nemerle.org
Дата: 24.11.11 08:22
Оценка: 1 (1) +2
Здравствуйте, Ziaw, Вы писали:

Z>Я понимаю, что для функций -> исторически сложилась. А => пришел из C# позже. А вот с кортежами не очень понятно. Где неоднозначности?



А мне вот => не нравится, -> как-то лучше выглядит.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: Растуолкуйте плиз
От: CodingUnit Россия  
Дата: 24.11.11 08:23
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Здравствуйте, CodingUnit, Вы писали:


Z>>>Я понимаю, что для функций -> исторически сложилась. А => пришел из C# позже. А вот с кортежами не очень понятно. Где неоднозначности?


CU>>Синтаксис кортежей тоже перекочевал из ML помоему, лучше когда язык похож на своих собратов по парадигме программирования.


Z>Начнем с того, что в ML списки аргументов не заключаются в скобки. Кивать на ML в плане синтаксиса совсем не логично, ибо nemerle это такой ML с синтаксисом C#, а не наоборот.


Я имел в виду именно int * string синтаксис параметров кортежей, создание их как и все в ML и F# без скобок, потому что они вообще почти безскобочные это их минус. А (a, b) это синтаксис конструктора, только безымянного типа, условными полями которого являются параметры конструктора. Вот этого то не надо делать при объявлении типов параметров, потому что int * string это математическая нотация декларации, а (int, string) валит либо на конструктор либо на вызов функции, но никак на декларацию.
Re[2]: Растуолкуйте плиз
От: CodingUnit Россия  
Дата: 24.11.11 08:25
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Здравствуйте, Ziaw, Вы писали:


Z>>Я понимаю, что для функций -> исторически сложилась. А => пришел из C# позже. А вот с кортежами не очень понятно. Где неоднозначности?



H>А мне вот => не нравится, -> как-то лучше выглядит.


Согласен, вообще -> это лямбда калкулус, математическая нотация объявления функции, поэтому нововведения здесь не нужны.
Re[4]: Растуолкуйте плиз
От: Ziaw Россия  
Дата: 24.11.11 10:44
Оценка:
Здравствуйте, CodingUnit, Вы писали:

CU>Объективная причина при выборе синтаксиса — удобство его использования, чтобы код не казался однородной кашей и можно было отделить одни условные куски кода от других и понять их назначение. Это как известно, больше на уровне интуитивного восприятия, возможно кому то хотелось бы иметь свой синтаксис и для этого хотят либо изменить существующий или создать новый язык. Вот я и начал с того что есть ли объективные причины у тебя что то изменять в существующем синтаксисе? Традиции языков, которым следует Н, в объявлениях это не малый аргумент в пользу использования именно этого синтаксиса, это касается f : int -> int и int * string, это помогает людям в освоении языков, которые перешли на них с предыдущего поколения. Если разработчики нескольких языков пошли на это решение значит действительно у людей есть веские основания, и я не вижу ничего плохого в этом, логично разделять объявление и использование, иначе все превращается в неинтуитивную кашу. Например конкретно: какой плюс от использования f : int => int синтаксиса? На изменение этого и уход от традиций языков должен быть веский повод.


Для (x, y) => x * y, логично выводить тип (int, int) => int, а не int * int -> int или (int, int) -> int.

Как и многие, я привык к синтаксису ->. Да и звездочки в кортежах не напрягают. Но я не вижу ни одной причины кроме нашей привычки. А она вызвана тем, что мы давно используем этот нелогичный синтаксис. И никакой логики для тех, кто пришел с C# я тут не наблюдаю.
Re[3]: Растуолкуйте плиз
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.11.11 10:51
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Таких причин я и сам могу выдумать. Мне интереснее, есть ли объективные.


Как ты себе видишь объективный ответ, на сугубо субъективную, ничем не обоснованную претензию?

Ребята взяли общепринятый синтаксис который им понравился. О чем тут вообще рассуждать то?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Растуолкуйте плиз
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.11.11 10:53
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Начнем с того, что в ML списки аргументов не заключаются в скобки. Кивать на ML в плане синтаксиса совсем не логично, ибо nemerle это такой ML с синтаксисом C#, а не наоборот.


А ты подумай что в ML берется в скобки. Потом погляди что в ML описывается знаком "*" и сам все поймешь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Растуолкуйте плиз
От: _nn_ www.nemerleweb.com
Дата: 24.11.11 10:58
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>def x(f : int => int) : (int, string) {Z>}


А почему стрелочка => , а не -> для всего тогда ?


P.S.
class A {}
class B {}
 
def A = A();
def B = B();
 
def f(x : A -> B) : A * B {}
 
f(A => B);

http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[3]: Растуолкуйте плиз
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.11.11 11:27
Оценка: 1 (1)
Здравствуйте, Ziaw, Вы писали:

Z>Мне кажется в Н2 можно исправить это недоразумение.


Может для начала поинтересоваться считают ли окружающие это недостатком и хотят ли они чтобы этот недостаток исправлялся?

А то ты тут об объективности рассуждаешь, а сам никаких доводов не приводишь, делая свои заключения на основе своего субъективного мнения.

VD>>Что касается фунций, то это вообще натянуто. => — это просто макрос. Реально синтаксис определения методов, локальных функций и лямбд совсем другой (да и различаются между собой).


Z>Да ладно, абсолютно неважно, что такое => внутри. По факту это самый распространенный способ создать лямбду. Зачем делать два разных смайлика для описания и создания?


По факту ты притягиваешь факты за уши и высасываешь выводы из пальца. О каком серьезном обсуждении тут можно вести речь?

Скажи просто, что тебе не нравится стрелочка ->, а нравится => и все тебя пойму, как в прочем, поймут что это чистая вкусовщина.

Идея же делать описание типа функций похожими на их декларацию давно признана несостоятельной. На эти грабли наспупали еще в С. Но спустя 30 лет на них по прежнему наступают (Циклон, Котлин).

В немерле используется классическая математическая нотация. Функция описывается символом ->, который выражает стрелку. Причем функция принимает на вход кортеж и возвращает кортеж. Кортеж так же описывается принятой еще до появления программирования нотацией — произведение типов входящих в кортеж. Читайте классику.

Z>Я понимаю, что мы привыкли, но это выглядит как ошибка дизайна, а их желательно исправлять.


Не я вижу другое. Тебе делать не чего и ты решил пересмотреть базовые принципы. Но ты для начала поинтересуйся может они всех кроме тебя устраивают. Лично меня устраивают. Менять шило на мыло (т.е. -> на =>), лично я смысла не вижу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Растуолкуйте плиз
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.11.11 11:47
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Для (x, y) => x * y, логично выводить тип (int, int) => int, а не int * int -> int или (int, int) -> int.


Нет тут ничего логичного. Это всего лишь твои предпочтения. Те кто продумывал мат.формализм предпочитал описывать кортежи как произведение типов.

Пытаться сделать все типы похожими на конструкторы их значений — это не логично. Как уже не раз говорил в немерле "=>" — это макро-оператор. Довольно глупо пытаться делать похожим описание типа функции на макро-оператор. Тогда уж нужно брать описание функции в немерле. Оно имеет вид:
имя(параметр1 : тип1, параметрХ : типХ) : тип

Дизайнеры языков ненаделенные знаниями в области систем типов пошли таким путем и мы получили на свет знатных уродов вроде указателей на функции в С и делегатов в Шарпе. Сейчас вот к стану дизайнеров-похожистов примкнули авторы Котлина и Циклона.

Результат их работы — уродство. Мыслили они в точности как ты.

Z>Как и многие, я привык к синтаксису ->. Да и звездочки в кортежах не напрягают. Но я не вижу ни одной причины кроме нашей привычки. А она вызвана тем, что мы давно используем этот нелогичный синтаксис. И никакой логики для тех, кто пришел с C# я тут не наблюдаю.


Тут все очень просто. В выборе синтаксиса нет ни одной объективной причины. Все причины субективны. Такими причинами являются: традиции, личные предпочтения, фаза луны и т.п.

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

Замена стрелочки на другую — это вообще чистый бздик. Я скорее соглашусь с тем, что логичнее было бы в лямбдах использовать ->.

В общем, на мой взгляд это ничего не даст. А стал быть не стоит на это тратить время.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Растуолкуйте плиз
От: hardcase Пират http://nemerle.org
Дата: 24.11.11 11:54
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Замена стрелочки на другую — это вообще чистый бздик. Я скорее соглашусь с тем, что логичнее было бы в лямбдах использовать ->.

Такой макрос когда-то был в билиотеке (аналог питоновских лямбд):
lambda x -> x * 2
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Растуолкуйте плиз
От: Ziaw Россия  
Дата: 24.11.11 11:55
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Скажи просто, что тебе не нравится стрелочка ->, а нравится => и все тебя пойму, как в прочем, поймут что это чистая вкусовщина.


Нравится мне стрелочка. Сильно больше чем =>. Не правится два разных синтаксиса. И я спрашиваю причины, а слышу только: потому, что нам нравится, отвали.

Менять синтаксис создания лямбды вижу бОльшим злом. Ибо сишарперы съедят.

VD>Идея же делать описание типа функций похожими на их декларацию давно признана несостоятельной. На эти грабли наспупали еще в С. Но спустя 30 лет на них по прежнему наступают (Циклон, Котлин).


Во, первый намек на конструктив. Какие грабли? Синтаксис Котлина видится довольно стройным и адекватным.

VD>Не я вижу другое. Тебе делать не чего и ты решил пересмотреть базовые принципы. Но ты для начала поинтересуйся может они всех кроме тебя устраивают. Лично меня устраивают. Менять шило на мыло (т.е. -> на =>), лично я смысла не вижу.


Я вот вижу, что от нечего делать тут люди собираются экономить на пабликах. Не заморачиваясь глобальным дизайном и вопросами интуитивной понятности и принципам наименьшего сюрприза. А у меня был простой вопрос, который превратился в предложение только после "думали, логично, но коней на переправе не меняют".
Re[5]: Растуолкуйте плиз
От: CodingUnit Россия  
Дата: 24.11.11 12:22
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>Нравится мне стрелочка. Сильно больше чем =>. Не правится два разных синтаксиса. И я спрашиваю причины, а слышу только: потому, что нам нравится, отвали.


Ладно, Саш не обижайся, все свои, Влад хоть и грубоват, но говорит правду, нам с тобой надо идти в школу и учить лямбда исчисление и формальные языки, тогда все вопросы отпадут сами собой.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.