Предлагаю подобрать скобки для типов...
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.09 15:23
Оценка:
Практика показывает, что неоднозначность между синтаксисом индексации:
some[index]

и синтаксисом аргументов типов
List[int]

создает ряд проблем.
В общем-то, вывод типов Немерла с ними справляется, но все же было бы лучше избавиться от этих пробелем. Это позволило бы:
1. Сделать алгоритм вывода типов более быстрым и простым.
2. Избавиться от уродливой точки, которую иногда нужно ставить перед аргументами типа.
3. Улучшить автодополнение при вводе значений в параметрах индексаторов.
4. Облегчить чтение кода содержащего явное указание параметров типов и индексаторов.

Собственно сделать это не сложно. Но есть три вопроса:
1. Какой синтаксис скобок выбрать для этого? Например, можно использовать скобки состоящие из двух символов (на подобии тех, что используются в квази-цитировании) — <( )>, [< >] или скобки в сочетании с некоторым символом: <% %>, <| |> и т.п. Скобки вида ([ ]) и [( )] лучше не использовать, так как они конфликтуют с имеющимися конструкциями.
2. Нужно ли делать это до выпуска версии 1.0 или отложить смену синтаксиса до будущей версии?
3. Делать ли такую смену в виде ключа компиляции допускающего как квадратные скобки с точкой (как принято сейчас), так и новые скобки?

Приветствуются любые мысли!

06.11.11 18:49: Перенесено из 'Nemerle'
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Предлагаю подобрать скобки для типов...
От: IT Россия linq2db.com
Дата: 14.12.09 15:30
Оценка: +3
Здравствуйте, VladD2, Вы писали:

VD>Собственно сделать это не сложно. Но есть три вопроса:

VD>1. Какой синтаксис скобок выбрать для этого?

Стандартный для С-подобных языков: <T>.

VD>2. Нужно ли делать это до выпуска версии 1.0 или отложить смену синтаксиса до будущей версии?




VD>3. Делать ли такую смену в виде ключа компиляции допускающего как квадратные скобки с точкой (как принято сейчас), так и новые скобки?


Если чистить язык от подобных детских болезней, то лучше на более ранней стадии.
Если нам не помогут, то мы тоже никого не пощадим.
Re: Предлагаю подобрать скобки для типов...
От: IT Россия linq2db.com
Дата: 14.12.09 15:34
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>3. Делать ли такую смену в виде ключа компиляции допускающего как квадратные скобки с точкой (как принято сейчас), так и новые скобки?


Кстати, можно на старый синтаксис просто выдавать предупреждение какое-то время. Ну а потом 'кто не спрятался'.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: Предлагаю подобрать скобки для типов...
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.09 16:10
Оценка:
Здравствуйте, IT, Вы писали:

IT>Стандартный для С-подобных языков: <T>.


Создает еще большую неоднозначность в синтаксисе. Собвственно сегодняшнее решение и было сделано в попытке избежать эту неоднозначность.

Я склоняюсь к синтаксису <| |> он ближе всего к сишному и при этом не очень мозолит глаз.

VD>>2. Нужно ли делать это до выпуска версии 1.0 или отложить смену синтаксиса до будущей версии?


IT>


VD>>3. Делать ли такую смену в виде ключа компиляции допускающего как квадратные скобки с точкой (как принято сейчас), так и новые скобки?


IT>Если чистить язык от подобных детских болезней, то лучше на более ранней стадии.


Это как-то расходится с ответом "хз" на второй вопрос.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Предлагаю подобрать скобки для типов...
От: IT Россия linq2db.com
Дата: 14.12.09 16:26
Оценка: +4
Здравствуйте, VladD2, Вы писали:

IT>>Стандартный для С-подобных языков: <T>.


VD>Создает еще большую неоднозначность в синтаксисе. Собвственно сегодняшнее решение и было сделано в попытке избежать эту неоднозначность.


Я понимаю. А можно не избегать неоднозначность, но использовать годами привычный синтаксис?

VD>Я склоняюсь к синтаксису <| |> он ближе всего к сишному и при этом не очень мозолит глаз.


Вот только этого уродства не надо. Лучше тогда оставить как есть. Я думаю, если что-то и менять, то только на <T>. От любого другого изменения будет только ещё хуже. Все эти двойные скобки — экзотика и смотрятся довольно мрачно. В квази-цитировании это ещё куда ни шло, но в остальных случаях, даже в твоих строках, это уже перебор.

IT>>Если чистить язык от подобных детских болезней, то лучше на более ранней стадии.

VD>Это как-то расходится с ответом "хз" на второй вопрос.

Считай это как мысли вслух.
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Предлагаю подобрать скобки для типов...
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.09 16:42
Оценка:
Здравствуйте, IT, Вы писали:

IT>Я понимаю. А можно не избегать неоднозначность, но использовать годами привычный синтаксис?


Можно, это называется C#. Без макросов конечно, и сприколами вроде изменения смысла выражения от появления в нем скобок, но зато очень привычное.

VD>>Я склоняюсь к синтаксису <| |> он ближе всего к сишному и при этом не очень мозолит глаз.


IT>Вот только этого уродства не надо.


Очень аргументировано. Узнаю IT. Кроме привычек еще что-то есть?

IT>Лучше тогда оставить как есть.


Как есть портит уже семантику языка. Плюс вынуждает использовать действительно уродливые точки. Уродливые даже не тем, что они не к месту, а тем, что где-то они нужны, а где-то нет.

IT> Я думаю, если что-то и менять, то только на <T>. От любого другого изменения будет только ещё хуже. Все эти двойные скобки — экзотика и смотрятся довольно мрачно. В квази-цитировании это ещё куда ни шло, но в остальных случаях, даже в твоих строках, это уже перебор.


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

Надо не забывать, что Немерле — это язык с изменяемым синтаксисом и мошьным выводом типов. Это куда более удобно нежели привычких С++-ный синтаксис (который на поверку еще то уродство). Это накладывает определенные ограничения. Одно из них — требование однозначной грамматики.

По мне так качество работы компилятора и легкость чтения важнее привычности синтаксиса. В конце концов в Немерле уже сделано несколько отступлений от традиций. Это и объявление типов. И отсутствие управляющих конструкций. И использование тех же [ ] вместо < >. Так почему бы не сделать еще одно отступление, если от этого будет реальная практическая польза? В конце концов мест где в коде нужно явно указывать аргументы типов не так много. Так что код мало чем изменится. В описании методов и типов два лишних символа погоды не сделают. Так в чем тогда вопрос?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Предлагаю подобрать скобки для типов...
От: nikov США http://www.linkedin.com/in/nikov
Дата: 14.12.09 17:02
Оценка: 13 (2) +1
Здравствуйте, VladD2, Вы писали:

VD>Приветствуются любые мысли!


Это сложный вопрос.
Мне больше всего нравится, как сделано в Scala: типы-параметры [], вызов индексатора ()
Это очень логично, потому что вызов индексатора вполне можно представлять себе как вызов функции, аргументы которой — это индексы.
Re[5]: Предлагаю подобрать скобки для типов...
От: IT Россия linq2db.com
Дата: 14.12.09 17:19
Оценка:
Здравствуйте, VladD2, Вы писали:

IT>>Я понимаю. А можно не избегать неоднозначность, но использовать годами привычный синтаксис?

VD>Можно, это называется C#. Без макросов конечно, и сприколами вроде изменения смысла выражения от появления в нем скобок, но зато очень привычное.

А можно <> оставить как в шарпе? Без приколов и очень привычно.

VD>>>Я склоняюсь к синтаксису <| |> он ближе всего к сишному и при этом не очень мозолит глаз.

IT>>Вот только этого уродства не надо.
VD>Очень аргументировано. Узнаю IT. Кроме привычек еще что-то есть?

А что здесь ещё может быть кроме предпочтений? У тебя есть логическое объяснение почему <|T|> лучше <T>. Для моего утончённого чувства прекрасного <|T|>, как и любые другие двойные скобки, представляются настоящим уродством. А твоё объяснение про какие-то там проблемы в парсере не будут понятны и приняты подавляющим большинством пользователей языка. К тому же не такие они уж и большие проблемы.

IT>> Я думаю, если что-то и менять, то только на <T>. От любого другого изменения будет только ещё хуже. Все эти двойные скобки — экзотика и смотрятся довольно мрачно. В квази-цитировании это ещё куда ни шло, но в остальных случаях, даже в твоих строках, это уже перебор.


VD>А я думаю иначе. Мне твое мнение кажется ретроградством которое основано исключительно на привычках и вообще не учитывает реальных проблем.


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

VD>Надо не забывать, что Немерле — это язык с изменяемым синтаксисом и мошьным выводом типов. Это куда более удобно нежели привычких С++-ный синтаксис (который на поверку еще то уродство). Это накладывает определенные ограничения. Одно из них — требование однозначной грамматики.


Давай изуродуем язык всякими <|T|>. Он, конечно, останется однозначный, только после этого нафиг никому не нужный.

VD>По мне так качество работы компилятора и легкость чтения важнее привычности синтаксиса.


А кто тебе сказал, что <|T|> это лёгкость чтения? Лёгкость чтения как раз <T>. Это легко читать и к тому же привычно, что является большим плюсом, а не минусом, как ты тут хочешь нам доказать.

VD>В конце концов в Немерле уже сделано несколько отступлений от традиций. Это и объявление типов. И отсутствие управляющих конструкций. И использование тех же [ ] вместо < >. Так почему бы не сделать еще одно отступление, если от этого будет реальная практическая польза?


Что значит реальная практическая? То, что ты предлагаешь называется затычка, а не реальная практическая польза. Как проблему решить мы не знаем, давайте заткнём дырку чем-нибудь. Сначала её заткнули [T], потом .[T], теперь <|T\>. Я тебе, кстати, ещё пару лет назад говорил, что [T] — это плохо. Сегодня ты это утверждаешь сам. Ещё через пару лет до тебя дойдёт, что <|T|> ничем не лучше.

VD>В конце концов мест где в коде нужно явно указывать аргументы типов не так много. Так что код мало чем изменится. В описании методов и типов два лишних символа погоды не сделают. Так в чем тогда вопрос?


А зачем ты его тогда вообще поднял? Вывод типов, конечно, помогает, но проблему не решает ни в том, ни в другом случае.
Если нам не помогут, то мы тоже никого не пощадим.
Re: Предлагаю подобрать скобки для типов...
От: Cyberax Марс  
Дата: 14.12.09 17:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Приветствуются любые мысли!

А зачем скобки?
List`int`
Sapienti sat!
Re[2]: Предлагаю подобрать скобки для типов...
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.09 17:39
Оценка:
Здравствуйте, nikov, Вы писали:

N>Это сложный вопрос.

N>Мне больше всего нравится, как сделано в Scala: типы-параметры [], вызов индексатора ()
N>Это очень логично, потому что вызов индексатора вполне можно представлять себе как вызов функции, аргументы которой — это индексы.

Скала базируется на яве в кторой индексеров просто нет (только встроенные для массивов). В дотнете же они есть как отдельная сущность.

С другой стороны, боюсь, что люди привыкли к индексам с помощью квадратных скобок куда больше чем к < > для аргументов типов.

Ну, да посмотрим, что скажут другие.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Предлагаю подобрать скобки для типов...
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.12.09 17:41
Оценка:
Здравствуйте, Cyberax, Вы писали:

VD>>Приветствуются любые мысли!

C>А зачем скобки?
C>
C>List`int`
C>


Можно сказать, что это разновидность скобок. Пойдет как вариант, но как-то их совсем плохо видно. Можно конечно использовать « » но их нет на клавиатуре, так что будут проблемы со вводом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Предлагаю подобрать скобки для типов...
От: Ilya10k Россия  
Дата: 14.12.09 18:10
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Практика показывает, что неоднозначность между синтаксисом индексации:

VD>
VD>some[index]
VD>

VD>и синтаксисом аргументов типов
VD>
VD>List[int]
VD>

VD>создает ряд проблем.
VD>В общем-то, вывод типов Немерла с ними справляется, но все же было бы лучше избавиться от этих пробелем. Это позволило бы:
VD>1. Сделать алгоритм вывода типов более быстрым и простым.
VD>2. Избавиться от уродливой точки, которую иногда нужно ставить перед аргументами типа.
VD>3. Улучшить автодополнение при вводе значений в параметрах индексаторов.
VD>4. Облегчить чтение кода содержащего явное указание параметров типов и индексаторов.

Отлично!

VD>Собственно сделать это не сложно. Но есть три вопроса:

VD>1. Какой синтаксис скобок выбрать для этого? Например, можно использовать скобки состоящие из двух символов (на подобии тех, что используются в квази-цитировании) — <( )>, [< >] или скобки в сочетании с некоторым символом: <% %>, <| |> и т.п. Скобки вида ([ ]) и [( )] лучше не использовать, так как они конфликтуют с имеющимися конструкциями.
Не имеет принципиального значения.

VD>2. Нужно ли делать это до выпуска версии 1.0 или отложить смену синтаксиса до будущей версии?

Как можно раньше.

VD>3. Делать ли такую смену в виде ключа компиляции допускающего как квадратные скобки с точкой (как принято сейчас), так и новые скобки?

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

VD>Приветствуются любые мысли!
... << RSDN@Home 1.2.0 alpha 4 rev. 1238>>
Re: Предлагаю подобрать скобки для типов...
От: nikov США http://www.linkedin.com/in/nikov
Дата: 14.12.09 18:13
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Приветствуются любые мысли!


И ещё, в случае breaking changes (включая случай поддержки старого синтаксиса как deprecated), было бы очень желательно предоставить утилиту для автоматической миграции кода на новый синтаксис.
Re[2]: Предлагаю подобрать скобки для типов...
От: hi_octane Беларусь  
Дата: 14.12.09 18:20
Оценка: +1
N>И ещё, в случае breaking changes (включая случай поддержки старого синтаксиса как deprecated), было бы очень желательно предоставить утилиту для автоматической миграции кода на новый синтаксис.

Есть ли смысл тратить на это силы которых и так немного? Даже большой проект, если он компилировался до breaking changes — после них можно будет пофиксить от силы в человеко-час-два. А такую утилиту придётся писать минимум день.
Re[3]: Предлагаю подобрать скобки для типов...
От: Don Reba Канада https://stackoverflow.com/users/49329/don-reba
Дата: 14.12.09 18:23
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, да посмотрим, что скажут другие.


На мой взгляд, в порядке предпочтения идут варианты:

1. Cyberax (`T`)
2. Nikov (круглые скобки для индексаторов)
3. IT (<T>)
4. VladD2 (<|T|>)

Аргументы за и против все те же, что уже были преведены.
Двойные скобки слишком выделяются. Для ключевой особенности языка — квазицитирования — это ещё ничего, но для обычных аргументов типа, перебор.
Ce n'est que pour vous dire ce que je vous dis.
Re: Предлагаю подобрать скобки для типов...
От: hi_octane Беларусь  
Дата: 14.12.09 18:30
Оценка: 29 (1) +4
VD>1. Какой синтаксис скобок выбрать для этого? Например, можно использовать скобки состоящие из двух символов (на подобии тех, что используются в квази-цитировании) — <( )>, [< >] или скобки в сочетании с некоторым символом: <% %>, <| |> и т.п. Скобки вида ([ ]) и [( )] лучше не использовать, так как они конфликтуют с имеющимися конструкциями.

Если менять то только на простые угловые скобки <T>. Основные проблемы при миграции с C# на Nemerle — это квадратные скобки в generic'aх и постфиксная запись типов. Но если к записи типов не просто привыкаешь, но и в итоге понимаешь что это куда лучше чем в C#, то с квадратными скобками всё не так однозначно.
Двойные скобки — лучше оставить для макросов, каких-то собственных операторов и т.п. Кошмарить ими программиста который писал на C# — это снижать популярность языка.

VD>2. Нужно ли делать это до выпуска версии 1.0 или отложить смену синтаксиса до будущей версии?


Если есть возможность поменять на простые треугольные скобки — то однозначно да.

VD>3. Делать ли такую смену в виде ключа компиляции допускающего как квадратные скобки с точкой (как принято сейчас), так и новые скобки?


Нет, время на это тратить не стоит. Мелкий проект — может спокойно жить и на старой версии компилятора. А по моим прикидкам — даже крупный проект реально перевести на новый синтаксис врукопашную от силы за час или два. Особенно учитывая что generic-и реально не сильно то и объявляются — хвала выводу типов.
Re[2]: Предлагаю подобрать скобки для типов...
От: IT Россия linq2db.com
Дата: 14.12.09 18:36
Оценка:
Здравствуйте, hi_octane, Вы писали:

_>Если менять то только на простые угловые скобки <T>. Основные проблемы при миграции с C# на Nemerle — это квадратные скобки в generic'aх и постфиксная запись типов. Но если к записи типов не просто привыкаешь, но и в итоге понимаешь что это куда лучше чем в C#, то с квадратными скобками всё не так однозначно.

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

Вот, Влад, послушай умного человека.

_>Нет, время на это тратить не стоит. Мелкий проект — может спокойно жить и на старой версии компилятора. А по моим прикидкам — даже крупный проект реально перевести на новый синтаксис врукопашную от силы за час или два. Особенно учитывая что generic-и реально не сильно то и объявляются — хвала выводу типов.


Проблема не столько в использовании <|T|> там, где помогает вывод типов, сколько там где он не помогает:

class MyClass<|T|> : IMyInterface<|T|>
{
}

Имхо, бредятина.
Если нам не помогут, то мы тоже никого не пощадим.
Re[4]: Предлагаю подобрать скобки для типов...
От: IT Россия linq2db.com
Дата: 14.12.09 18:41
Оценка: 1 (1) +1
Здравствуйте, Don Reba, Вы писали:

DR>На мой взгляд, в порядке предпочтения идут варианты:


DR>1. Cyberax (`T`)


С трудом нашёл как ввести этот символ с клавиатуры. Да и смахивает больше на строковый литерал, чем на параметр типа.

DR>2. Nikov (круглые скобки для индексаторов)


Мне этот вариант тоже ипмонирует, хотя я не стал бы за него голосовать по той же самой причине. Интересно, что в данном случае Влад почему-то считает, что привычки важны.

DR>3. IT (<T>)


А здесь привычки не важны.
Если нам не помогут, то мы тоже никого не пощадим.
Re: Предлагаю подобрать скобки для типов...
От: Воронков Василий Россия  
Дата: 14.12.09 18:41
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Приветствуются любые мысли!


А обязательно нужен синтаксис именно в стиле "обрамления" параметра? Если уж пошла такая пьянка с <| |>, то можно покреативить и в таком ключе:

List?int
List!int
List@int

Еще мне нравится List*int, но такой синтаксис вроде как занят.
Re[2]: Предлагаю подобрать скобки для типов...
От: IT Россия linq2db.com
Дата: 14.12.09 18:42
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>List?int

ВВ>List!int
ВВ>List@int

ВВ>Еще мне нравится List*int, но такой синтаксис вроде как занят.


А для более чем одного параметра?
Если нам не помогут, то мы тоже никого не пощадим.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.