Скобочки для templates
От: x-code  
Дата: 04.09.11 16:28
Оценка:
Наткнулся на эту тему
Автор: IROV..
Дата: 02.09.11
, задумался, потом вспомнил про эту
Автор: VladD2
Дата: 14.12.09
, прочитал все по несколько раз Но так и не понял до конца, в чем там фишка.

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

С одной стороны, в С,С++,Java,C#,Delphi — т.е. в основных языках, используются <>. Поэтому в любом новом языке хорошо бы оставить именно <>. С другой стороны, ясно что неоднозначности есть и наверняка они будут мешать. Подумал и придумал свой вариант.

В объявлении шаблонов оставить все как есть, обычные угловые скобки
//c#
class MyGeneric<T>
{
 T data[100];
}
//c++
template<int N>
int get(int x)
{
    return N*x;
}


При создании объектов вроде достаточно добавить какой-нибудь символ, и все, неопределенностей нет.
например ! как в Ди.
MyGeneric!<int> foo;
int a = get!<10>(20);


Если поймали спецсивол и следом за ним "<", то это открывающая угловая скобка, и компилятор ожидает, что будет закрывающая, соответственно символ '>' интерпретируем именно как закрывающую угловую скобку. Иначе тупо интерпретируем ее как знак "меньше". Кому надо заюзать операцию сравнения или сдвига внутри аргумента шаблона — пусть юзают круглые скобки как обычно для приотиретов операций. И всякие сдвиги ">>" и "<<" тупо считать сдвигами и также кому надо — пусть юзают круглые скобки.
int a = get!< ((9>8)<<2)  >(20);


Преимущества: везде используются родные угловые скобочки, мозг ломать не надо. И дополнительный спецсимвол вроде как(???) снимает неоднозначности.
Что думаете?
Re: Скобочки для templates
От: vsb Казахстан  
Дата: 04.09.11 17:04
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Наткнулся на эту тему
Автор: IROV..
Дата: 02.09.11
, задумался, потом вспомнил про эту
Автор: VladD2
Дата: 14.12.09
, прочитал все по несколько раз Но так и не понял до конца, в чем там фишка.


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


XC>С одной стороны, в С,С++,Java,C#,Delphi — т.е. в основных языках, используются <>. Поэтому в любом новом языке хорошо бы оставить именно <>. С другой стороны, ясно что неоднозначности есть и наверняка они будут мешать. Подумал и придумал свой вариант.


XC>Преимущества: везде используются родные угловые скобочки, мозг ломать не надо. И дополнительный спецсимвол вроде как(???) снимает неоднозначности.

XC>Что думаете?

Мне нравится подход Scala — для шаблонов используются угловые скобки. Для адресации массивов используются круглые скобки. Впрочем это наверное не очень традиционно, но читаемость хорошая.
Re: Скобочки для templates
От: Centaur Россия  
Дата: 04.09.11 17:42
Оценка: :)
Здравствуйте, x-code, Вы писали:

XC>В объявлении шаблонов оставить все как есть, обычные угловые скобки

XC>При создании объектов вроде достаточно добавить какой-нибудь символ, и все, неопределенностей нет.
XC>например ! как в Ди.

В наш унокодный век можно уже использовать в синтаксисе языков всё великое множество скобок и кавычек. () [] {} "" '' “” ‘’ «» ⁅⁆ 〈〉 《》 「」 『』 【】 〔〕 〖〗 〘〙 〚〛
Re[2]: Скобочки для templates
От: x-code  
Дата: 04.09.11 18:11
Оценка:
Здравствуйте, Centaur, Вы писали:

C>В наш унокодный век можно уже использовать в синтаксисе языков всё великое множество скобок и кавычек. () [] {} "" '' “” ‘’ «» ⁅⁆ 〈〉 《》 「」 『』 【】 〔〕 〖〗 〘〙 〚〛


что это за квадратики?
Re[2]: Скобочки для templates
От: Xenon-54  
Дата: 04.09.11 18:13
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Здравствуйте, x-code, Вы писали:


XC>>В объявлении шаблонов оставить все как есть, обычные угловые скобки

XC>>При создании объектов вроде достаточно добавить какой-нибудь символ, и все, неопределенностей нет.
XC>>например ! как в Ди.

C>В наш унокодный век можно уже использовать в синтаксисе языков всё великое множество скобок и кавычек. () [] {} "" '' “” ‘’ «» ⁅⁆ 〈〉 《》 「」 『』 【】 〔〕 〖〗 〘〙 〚〛
Re[2]: Скобочки для templates
От: hardcase Пират http://nemerle.org
Дата: 04.09.11 20:20
Оценка:
Здравствуйте, Centaur, Вы писали:

C>Здравствуйте, x-code, Вы писали:


XC>>В объявлении шаблонов оставить все как есть, обычные угловые скобки

XC>>При создании объектов вроде достаточно добавить какой-нибудь символ, и все, неопределенностей нет.
XC>>например ! как в Ди.

C>В наш унокодный век можно уже использовать в синтаксисе языков всё великое множество скобок и кавычек. () [] {} "" '' “” ‘’ «» ⁅⁆ 〈〉 《》 「」 『』 【】 〔〕 〖〗 〘〙 〚〛


Тяжко набирать
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: Скобочки для templates
От: Centaur Россия  
Дата: 05.09.11 01:43
Оценка:
Здравствуйте, hardcase, Вы писали:

C>>В наш уникодный век можно уже использовать в синтаксисе языков всё великое множество скобок и кавычек. () [] {} "" '' “” ‘’ «» ⁅⁆ 〈〉 《》 「」 『』 【】 〔〕 〖〗 〘〙 〚〛


H>Тяжко набирать


Редакторы клавиатурных раскладок есть под все распространённые платформы.
Re: Скобочки для templates
От: Sinix  
Дата: 05.09.11 02:01
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Преимущества: везде используются родные угловые скобочки, мозг ломать не надо. И дополнительный спецсимвол вроде как(???) снимает неоднозначности.

XC>Что думаете?

Что надо быть последовательным. Или используем токен '!<' и в объявлении, и в использовании шаблона, или (лично я за этот вариант) не расширяем синтаксис ради поддержки некрасивого кода.
Re[2]: Скобочки для templates
От: x-code  
Дата: 05.09.11 05:05
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Что надо быть последовательным. Или используем токен '!<' и в объявлении, и в использовании шаблона, или (лично я за этот вариант) не расширяем синтаксис ради поддержки некрасивого кода.


Ну можно и в объявлении. Вопрос-то был в том, решает ли такое расширение проблемы неоднозначностей, которые есть в С++/C#?
Re[3]: Скобочки для templates
От: Sinix  
Дата: 05.09.11 05:12
Оценка:
Здравствуйте, x-code, Вы писали:


XC>Ну можно и в объявлении. Вопрос-то был в том, решает ли такое расширение проблемы неоднозначностей, которые есть в С++/C#?

Для шарпа — решает, но я бы подождал nikov-а Толку правда 0 — в c# оно всплывёт хорошо если раз в 10 лет.
Re[3]: Скобочки для templates
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.09.11 05:29
Оценка: +1
Здравствуйте, x-code, Вы писали:

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


S>>Что надо быть последовательным. Или используем токен '!<' и в объявлении, и в использовании шаблона, или (лично я за этот вариант) не расширяем синтаксис ради поддержки некрасивого кода.


XC>Ну можно и в объявлении. Вопрос-то был в том, решает ли такое расширение проблемы неоднозначностей, которые есть в С++/C#?

в C# выражения в параметрах жаблона недопустимы, на сколько я знаю.
Но насчет остального — по-моему надо и перед закрывающей скобкой неоднозначность убирать.
foo!<A > B > x;
Re[4]: Скобочки для templates
От: x-code  
Дата: 05.09.11 05:47
Оценка:
Здравствуйте, samius, Вы писали:

S>Но насчет остального — по-моему надо и перед закрывающей скобкой неоднозначность убирать.

S>foo!<A > B > x;

А смысл? Насколько часто в параметры шаблонов пихают операторы сравнения? Я в реальном коде ни разу не видел
Поэтому достаточно так.
foo!< (A>B) > x;

Ведь никого же не смущает, что у умножения приоритет больше чем у сложения? Вот и здесь будет правило — приоритет операторов сравнения больше чем у шаблонных скобок. А символ '!' фактически меняет этот приоритет "локально". т.е. если попадаются два токена ! и вслед за ним < — то следующий токен '>' на этом скобочном уровне будет "закрывающая угловая скобка", а не "больше".
Т.е. это не часть оператора <>, а что-то вроде аналога ключевого слова template в примере
Автор: IROV..
Дата: 02.09.11
.
Если же ввести еще символ, то получатся фактически двухсимвольные скобки, против чего выступало большинство в том обсуждении. Не знаю почему, то форма с дополнительным символом воспринимается гораздо легче, чем тяжеловесные двойные скобки (хотя казалось бы — тут три символа, там четыре, вроде не особо большая разница).
Re[5]: Скобочки для templates
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.09.11 05:55
Оценка:
Здравствуйте, x-code, Вы писали:

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


S>>Но насчет остального — по-моему надо и перед закрывающей скобкой неоднозначность убирать.

S>>foo!<A > B > x;

XC>А смысл? Насколько часто в параметры шаблонов пихают операторы сравнения? Я в реальном коде ни разу не видел

XC>Поэтому достаточно так.
XC>foo!< (A>B) > x;
Если разбор имеет доступ к ресолву имен, то достаточно и без "!". А если не имеет доступ, то это означает что может быть путаница с любым дополнительным символом, при наличии возможности вводить пользовательские операторы (вроде !<).
Так что в общем случае дополнительный символ может решить проблемы лишь там, где нет возможности определять операторы с этим символом.

XC>Если же ввести еще символ, то получатся фактически двухсимвольные скобки, против чего выступало большинство в том обсуждении. Не знаю почему, то форма с дополнительным символом воспринимается гораздо легче, чем тяжеловесные двойные скобки (хотя казалось бы — тут три символа, там четыре, вроде не особо большая разница).


То есть стоит задача отличить шаблон от выражения без ресолва имен?
Re[6]: Скобочки для templates
От: x-code  
Дата: 05.09.11 08:32
Оценка:
Здравствуйте, samius, Вы писали:

XC>>Если же ввести еще символ, то получатся фактически двухсимвольные скобки, против чего выступало большинство в том обсуждении. Не знаю почему, то форма с дополнительным символом воспринимается гораздо легче, чем тяжеловесные двойные скобки (хотя казалось бы — тут три символа, там четыре, вроде не особо большая разница).


S>То есть стоит задача отличить шаблон от выражения без ресолва имен?

Думаю, что так было бы удобнее. Хотя на самом деле просто интересно — как удобнее — и с точки зрения написания копилятора, и с точки зрения написания программ на языке.
Re[7]: Скобочки для templates
От: Sinix  
Дата: 05.09.11 08:58
Оценка:
Здравствуйте, x-code, Вы писали:

XC>Думаю, что так было бы удобнее. Хотя на самом деле просто интересно — как удобнее — и с точки зрения написания копилятора, и с точки зрения написания программ на языке.


Лично я — за меньший визуальный шум. Программы читаются куда чаще, чем пишутся и, имхо, заставлять вглядываться в разницу между < и !< такое же преступление, как использовать одинарную точку для обозначения диапазона в индексаторе (я даже не знаю, где я такой изврат видел, но сам факт запомнился).
Re[3]: Скобочки для templates
От: AlexCab LinkedIn
Дата: 05.09.11 10:07
Оценка:
Здравствуйте, hardcase, Вы писали:
C>>В наш унокодный век можно уже использовать в синтаксисе языков всё великое множество скобок и кавычек. () [] {} "" '' “” ‘’ «» ⁅⁆ 〈〉 《》 「」 『』 【】 〔〕 〖〗 〘〙 〚〛
H>Тяжко набирать

Как вариант, можно подменять на юнискобки сразу после ввода, но нужна поддержка со стороны IDE.
То есть например, вводим: class MyGeneric<T>
Автоматически подменяется на: class MyGeneric〈T〉
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[4]: Скобочки для templates
От: Murom Россия  
Дата: 05.09.11 13:00
Оценка:
Здравствуйте, AlexCab, Вы писали:

AC>Как вариант, можно подменять на юнискобки сразу после ввода, но нужна поддержка со стороны IDE.

AC>То есть например, вводим: class MyGeneric<T>
AC>Автоматически подменяется на: class MyGeneric〈T〉

После чего дампим исходник на простенькую консольку и получаем:

class MyGeneric&My_first_very_readable_symbol_1;T&My_second_very_readable_symbol2;


И сиди потом читай эту галиматью.

P.S. И не надо рассказывать про 100% юникодность всех консолей в 21 веке. Нет этого и не надо.
- Eugeny
Re[5]: Скобочки для templates
От: AlexCab LinkedIn
Дата: 05.09.11 13:37
Оценка:
Здравствуйте, Murom, Вы писали:
AC>>Как вариант, можно подменять на юнискобки сразу после ввода, но нужна поддержка со стороны IDE.
M>После чего дампим исходник на простенькую консольку ...

Зачем дампить исходный код на консоль?
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Re[4]: Скобочки для templates
От: Sinix  
Дата: 05.09.11 13:43
Оценка:
Здравствуйте, AlexCab, Вы писали:

AC>Автоматически подменяется на: class MyGeneric〈T〉

Тогда уж проще временно подменять прямо в IDE. И вам хорошо, и остальным не мучаться.
Re[5]: Скобочки для templates
От: AlexCab LinkedIn
Дата: 05.09.11 13:51
Оценка: +1
Здравствуйте, Sinix, Вы писали:
AC>>Автоматически подменяется на: class MyGeneric〈T〉
S>Тогда уж проще временно подменять прямо в IDE. И вам хорошо, и остальным не мучаться.

Почему бы и нет.
Между тем,что я думаю,тем,что я хочу сказать,тем,что я,как мне кажется,говорю,и тем,что вы хотите услышать,тем,что как вам кажется,вы слышите,тем,что вы понимаете,стоит десять вариантов возникновения непонимания.Но всё-таки давайте попробуем...(Э.Уэллс)
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.