Re[5]: Про скобочки
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.10 19:30
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну они выглядят как аналогичные операции в Си, однако "работают" не так, т.е. семантика другая.


Это ты про ++? Чем же у них семантика другая? Разве что не возвращаю значения. Ну, дык это для безопасности. Хотя можно было бы итак и не преестраховываться. В Шарпе тоже не встречал проблем из-за них. Язык все же типобзеопасный, что сильно спасает от подобных бяк. Но значение то меняют по месту. Так что семантика очень близкая. По крайней мере код с их применением на немерле будет полностью идентичен сишному.

ВВ>Честно, мне сложно представить, зачем кому-то в функциональном языке потребовались такие макросы


А где ты увидел функциональный язык? Это же не хаскель упершийся в одну парадигу.
Немерл — язык мультипарадигмынй. Он просто обязан писать в хорошем С-шном стиле. А как же этого достичь если нельзя написать классический сишный for:
for (mutable i = 0; i < 100; i++)
  ...



VD>>Ты же вроде про круглые говорил. Или ты решил все же тему махнуть?


ВВ>Ну раз вы начали тут про фигурные флеймить, то я-то чем хуже...


Мы вроде не с тобой начали.

ВВ>Мне лично понравился бы такой синтаксис:


ВВ>match (expr)

ВВ>| x => x + y
ВВ>| _ => { expr1; expr2; }

Это подразумевалось. Идя в том, что каждое вражение должно быть одним выражением, а не последовательностью. Блок — это тоже одно выражение содержащее последовательность.

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

ВВ>Вроде как для образца _ у нас два выражения.


Чё?

ВВ>Я, видимо, что-то не понимаю в синтаксисе Немерле, но зачем в таком случае дополнительные фигурные скобки вокруг match, неясно.


В каком в таком? В немерле каждое вхождение матча может содержать последовательность выражений. Следующий код корректен:
match (expr)
{
  | x => x + y
  | _ => expr1; expr2;
}


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


А это и так так.

Мы вот думали расширить это правило для методов без параметров (но экземплярных, т.е. где доступен this), чтобы можно было писать так:
public override ToString() : string
{
  | VariantOptionA(a) => $"VariantOptionA($a)"
  | VariantOptionB(b) => $"VariantOptionB($b)"
}

а не только как сейчас:
public override ToString() : string
{
  match (this)
  {
    | VariantOptionA(a) => $"VariantOptionA($a)"
    | VariantOptionB(b) => $"VariantOptionB($b)"
  }
}


ВВ>Ага, лексический скоп, в котором нельзя объявлять имена. Фишку понял


Ну, не где.

А чем это отличается от сишного switch-а? Как мне в С или C# объявить переменную внутри switch { тут } ?

ВВ>Для вхождения я никогда не предлагал скобки. В Си тоже скобки — не единственная конструкция которая задает скоп. for, например, тоже задает скоп, независимо от наличия или отсутствия скобок. Т.е. это-то ИМХО нормально.


Если быть точным, то именно в С for скопа не задает. Это так только в С++. Но, да согласен, есть отступления.

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


А есть много людей которых чем-то не устраивает скоп в Немерле? Он даже Питонистов удовлетворяет, так как есть #pragma indent.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Про скобочки
От: Воронков Василий Россия  
Дата: 26.04.10 20:01
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это ты про ++? Чем же у них семантика другая? Разве что не возвращаю значения. Ну, дык это для безопасности. Хотя можно было бы итак и не преестраховываться. В Шарпе тоже не встречал проблем из-за них. Язык все же типобзеопасный, что сильно спасает от подобных бяк. Но значение то меняют по месту. Так что семантика очень близкая. По крайней мере код с их применением на немерле будет полностью идентичен сишному.


В Си есть разница между пост и пре инкрементом, я об этом. А то как это сделано в Немерле — ну разница между ними просто теряет всякий смысл.
Я бы понял, если бы их вообще не было, а так получается, что "спец-эффект" оставили, а возвращаемое значение убрали.

ВВ>>Честно, мне сложно представить, зачем кому-то в функциональном языке потребовались такие макросы


VD>А где ты увидел функциональный язык? Это же не хаскель упершийся в одну парадигу.

VD>Немерл — язык мультипарадигмынй. Он просто обязан писать в хорошем С-шном стиле. А как же этого достичь если нельзя написать классический сишный for:

В хорошем Сишном стиле — это с кучей спец-эффектов, опираясь на порядок операций — в Немерле это будет уже сложно, ибо много конструкций не возвращают значение в отличие от Си.

VD>
VD>for (mutable i = 0; i < 100; i++)
VD>  ...
VD>

VD>

Ой, а оно надо, этот for?
Я вот думаю, вообще у себя открутить этот for, заменив его на конструкцию вида for x to y как в F#.
Вообще бы вам весь этот хлам засунуть в Nemerle.Imperative. А то break/continue/return именно там, а for почему-то нет.

VD>>>Ты же вроде про круглые говорил. Или ты решил все же тему махнуть?

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

А мне тоже хочется

ВВ>>Вроде как для образца _ у нас два выражения.

VD>Чё?

Э, я имел в виду, что в последнем вхождении после => два выражения в блоке {}.

ВВ>>Я, видимо, что-то не понимаю в синтаксисе Немерле, но зачем в таком случае дополнительные фигурные скобки вокруг match, неясно.

VD>В каком в таком? В немерле каждое вхождение матча может содержать последовательность выражений. Следующий код корректен:
VD>
VD>match (expr)
VD>{
VD>  | x => x + y
VD>  | _ => expr1; expr2;
VD>}
VD>


ОК. Теперь понятно.

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


VD>А это и так так.


Не, я о том, чтобы можно было писать:

def func(x, y) { | (2, _) => ... | (3, 1) => ... }

Т.е. сам же где-то писал, что параметры функцию описываются через тюпл, так зачем ограничивать одним только параметром?
По-моему сразу видно, что именно в таком случае матчится.

VD>Мы вот думали расширить это правило для методов без параметров (но экземплярных, т.е. где доступен this), чтобы можно было писать


Это тоже было бы хорошо, но ИМХО менее очевидно.

VD>А чем это отличается от сишного switch-а? Как мне в С или C# объявить переменную внутри switch { тут } ?


Мда, убил наповал

ВВ>>Для вхождения я никогда не предлагал скобки. В Си тоже скобки — не единственная конструкция которая задает скоп. for, например, тоже задает скоп, независимо от наличия или отсутствия скобок. Т.е. это-то ИМХО нормально.

VD>Если быть точным, то именно в С for скопа не задает. Это так только в С++. Но, да согласен, есть отступления.

Разве в С99 не задает? Хотя по фиг в принципе.
Будем считать, что говоря С, я имею в виду C#

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

VD>А есть много людей которых чем-то не устраивает скоп в Немерле? Он даже Питонистов удовлетворяет, так как есть #pragma indent.

Да не, я не про Немерле. Мне просто интересен фидбек от программистов, привыкших к Си-подобному синтаксису — понравилось бы им, если бы круглых скобочек стало поменьше.
Re[7]: Про скобочки
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.10 21:21
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>В Си есть разница между пост и пре инкрементом, я об этом.


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

ВВ>А то как это сделано в Немерле — ну разница между ними просто теряет всякий смысл.


Именно. Но это же не другое поведение? Это же его ограничение. Причем намеренное.

ВВ>Я бы понял, если бы их вообще не было, а так получается, что "спец-эффект" оставили, а возвращаемое значение убрали.


Дык сам оператор полезен, а возврат значения вызывает ошибки. В дизайн языка намеренно не вносились плохие или спорные решения.

ВВ>В хорошем Сишном стиле — это с кучей спец-эффектов, опираясь на порядок операций — в Немерле это будет уже сложно, ибо много конструкций не возвращают значение в отличие от Си.


Не в хорошем, а в плохом. Плохое и устраняли. Возможно чуть-чуть переборшили. В прочем, думаю, тут еще одна причина была. Насколько я понимаю, современный парсер немела не делает различий между постфиксными и префиксными формами унарных операторов. А это делает невозможным качественную реализацию С-шных операторов. Так что придется подождать Немерл 2 где это будет возможно и можно будет подменять реализацию стандартных макросов (явно и без отключения стандартной библиотеки макросов).

VD>>
VD>>for (mutable i = 0; i < 100; i++)
VD>>  ...
VD>>

VD>>

ВВ>Ой, а оно надо, этот for?


Кому-то надо. Особенно тем кто еще не слез с С-подобных языков.
По частоте применения for-а можно судить о стаже программирования на немерле . Дедушки им вообще не пользуюется .

ВВ>Я вот думаю, вообще у себя открутить этот for, заменив его на конструкцию вида for x to y как в F#.


Хозяин барин.

ВВ>Вообще бы вам весь этот хлам засунуть в Nemerle.Imperative. А то break/continue/return именно там, а for почему-то нет.


mutable тоже туба?

VD>>>>Ты же вроде про круглые говорил. Или ты решил все же тему махнуть?

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

ВВ>А мне тоже хочется




ВВ>>>Вроде как для образца _ у нас два выражения.

VD>>Чё?

ВВ>Э, я имел в виду, что в последнем вхождении после => два выражения в блоке {}.


Ну, так блок же одно выражение?

Хотя можно и его запретить. Дурное дело не хитрое.

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


VD>>А это и так так.


ВВ>Не, я о том, чтобы можно было писать:


ВВ>def func(x, y) { | (2, _) => ... | (3, 1) => ... }


Так оно и есть. Мог бы попробовать прежде чем писать.

VD>>Мы вот думали расширить это правило для методов без параметров (но экземплярных, т.е. где доступен this), чтобы можно было писать


ВВ>Это тоже было бы хорошо, но ИМХО менее очевидно.


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

VD>>А чем это отличается от сишного switch-а? Как мне в С или C# объявить переменную внутри switch { тут } ?


ВВ>Мда, убил наповал


Чем это?

ВВ>Разве в С99 не задает? Хотя по фиг в принципе.

ВВ>Будем считать, что говоря С, я имею в виду C#




ВВ>Да не, я не про Немерле. Мне просто интересен фидбек от программистов, привыкших к Си-подобному синтаксису — понравилось бы им, если бы круглых скобочек стало поменьше.


Ну, тут все очень просто. Сколько людей столько и мнений. Но если сделать как в С, то все поймут, а если сделать по другому, то сразу появится лагерь поклонников и недовольных.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Про скобки и одно выражение
От: SergeCpp Россия http://zoozahita.ru
Дата: 26.04.10 21:36
Оценка:
Здравствуйте, Воронков Василий!

ВВ>Писать скобки в случае одного выражения или не писать — это тема для отдельного флейма и вроде как такой флейм тут недавно был, смысла в его продолжении я не вижу.


В Visual Studio одно время (версия 5 и ещё 6 вроде) было нужно писать вот так:
for(;;)
{
    i++;
}

для прохода в отладчике по шагам несколько итераций; вот так:
for(;;)
    i++;

не получалось. Может, в новых версиях уже и можно.

Кстати, вот так:
for(;;) {
    i++;
}

тоже не получалось тогда, что и явилось одним из мотивов перехода на:
for(;;)
{
    i++;
}
http://zoozahita.ruБездомные животные Екатеринбурга ищут хозяев
Re[8]: Про скобочки
От: Воронков Василий Россия  
Дата: 26.04.10 21:58
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Именно. Но это же не другое поведение? Это же его ограничение. Причем намеренное.

ВВ>>Я бы понял, если бы их вообще не было, а так получается, что "спец-эффект" оставили, а возвращаемое значение убрали.
VD>Дык сам оператор полезен, а возврат значения вызывает ошибки. В дизайн языка намеренно не вносились плохие или спорные решения.

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

ВВ>>В хорошем Сишном стиле — это с кучей спец-эффектов, опираясь на порядок операций — в Немерле это будет уже сложно, ибо много конструкций не возвращают значение в отличие от Си.


VD>Не в хорошем, а в плохом. Плохое и устраняли. Возможно чуть-чуть переборшили. В прочем, думаю, тут еще одна причина была. Насколько я понимаю, современный парсер немела не делает различий между постфиксными и префиксными формами унарных операторов. А это делает невозможным качественную реализацию С-шных операторов. Так что придется подождать Немерл 2 где это будет возможно и можно будет подменять реализацию стандартных макросов (явно и без отключения стандартной библиотеки макросов).


Интересно. А парсер врукопашную написан?

VD>Кому-то надо. Особенно тем кто еще не слез с С-подобных языков.

VD>По частоте применения for-а можно судить о стаже программирования на немерле . Дедушки им вообще не пользуюется .

Мне кажется for в таком виде изначально задумывался как некая универсальная конструкция для организации циклов. И даже в C# он особо и не нужен. Ну т.е. я пользуюсь for-ом, конечно, но это всегда строго перебор значений в некотором диапазоне, и все его навороты оказываются за бортом.
А в этом плане for/to на манер F# мне кажется более культурным, что ли, вариантом.

ВВ>>Вообще бы вам весь этот хлам засунуть в Nemerle.Imperative. А то break/continue/return именно там, а for почему-то нет.

VD>mutable тоже туба?

mutable не трожь
Он-то не мешает писать функциональный код, а вот вышеозначенное — конструкции для типичного императивного flow. Ими можно вообще не пользоваться. А вот мутабельными переменными вообще не пользоваться нельзя, все же Немерле не чистый язык.

ВВ>>def func(x, y) { | (2, _) => ... | (3, 1) => ... }

VD>Так оно и есть. Мог бы попробовать прежде чем писать.

О, круто
Непонятно, почему я считал, что параметр должен быть один. И в статье по Немерле у тебя написано, что несколько параметров интерпретируются как кортеж.
Видимо, я напутал с OCaml-ом.

VD>>>Мы вот думали расширить это правило для методов без параметров (но экземплярных, т.е. где доступен this), чтобы можно было писать


ВВ>>Это тоже было бы хорошо, но ИМХО менее очевидно.


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


Хз, честно
С одной стороны, это логично. С другой — если бы я увидел такой код, то может и не сразу понял бы, что там match-ится.

VD>>>А чем это отличается от сишного switch-а? Как мне в С или C# объявить переменную внутри switch { тут } ?

ВВ>>Мда, убил наповал
VD>Чем это?

Ну, про switch я как-то забыл

ВВ>>Да не, я не про Немерле. Мне просто интересен фидбек от программистов, привыкших к Си-подобному синтаксису — понравилось бы им, если бы круглых скобочек стало поменьше.

VD>Ну, тут все очень просто. Сколько людей столько и мнений. Но если сделать как в С, то все поймут, а если сделать по другому, то сразу появится лагерь поклонников и недовольных.

Это верно. Стандартный выбор — сделать хорошо или привычно. А может быть, плохо или привычно. Тут уж как повезет.
Все же синтасис Си перегружен этой скобочностью, мне кажется. Тот же шарп воспроизводит его практически один-в-один (Немерле — в меньшей степени), и часто получается лес скобочек, причем с совершенно разной семантикой. И ведь в принципе можно же вполне уменьшить их количество
Re[8]: Про скобки и одно выражение
От: Воронков Василий Россия  
Дата: 26.04.10 22:01
Оценка:
Здравствуйте, SergeCpp, Вы писали:

Это, так сказать, language dependent мотивы. Например, на JavaScript я всегда использую нотацию K&R по той простой причине, что там есть зловредный механизм под названием semicolon insertion, который по сути препроцессит файлы и может вставить лишнего.
Речь о синтаксисе все же.
Re[9]: Про скобочки
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.10 22:58
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


Ну, тут понимание или есть сразу, или его нет вообще .

Сайд-эффекты — это вам не неправильное форматирование. Незаметный ошибочный сайд-эффект можно искать очень долго.

ВВ>Интересно. А парсер врукопашную написан?


Да. Но в следующей версии планируется использовать PEG. Он должен обеспечить как беспрецедентную расширяемость, так так и требуемую гибкость (значительно большую чем есть сейчас).


ВВ>>>Вообще бы вам весь этот хлам засунуть в Nemerle.Imperative. А то break/continue/return именно там, а for почему-то нет.

VD>>mutable тоже туба?

ВВ>mutable не трожь


Не последовательно как-то.

ВВ>Он-то не мешает писать функциональный код, а вот вышеозначенное — конструкции для типичного императивного flow. Ими можно вообще не пользоваться. А вот мутабельными переменными вообще не пользоваться нельзя, все же Немерле не чистый язык.


mutable — это самая базовая императивная конструкция. Без него императив не возможен.

ВВ>Непонятно, почему я считал, что параметр должен быть один.


В психологии — это называют "ожидание худшего".

ВВ> И в статье по Немерле у тебя написано, что несколько параметров интерпретируются как кортеж.

ВВ>Видимо, я напутал с OCaml-ом.

А там не так?

ВВ>Это верно. Стандартный выбор — сделать хорошо или привычно. А может быть, плохо или привычно. Тут уж как повезет.


Ну, да. По этому я лично придерживаюсь очень простого правила. Привычное надо менять только тогда когда оно создает реальные проблемы (ощутимые и не обходимые другими путями). Вот сишное приведение типов, задание типов переменных спереди, четкое выделение операторов в виде стэйтментов, делегаты в качестве замены функциональных типов и многое другое — это явно плохое. И избежание повторения таких привычных вещей легко объяснимо, а значит правильно. А вот отказ от скобок и оператора for — не объяснимо и по сути не нужно. Это привычки людей. А людей не надо ломать об колено. Им еще ФП и МП учить. Пусть уж лучше они учат их в привычной среде.

ВВ>Все же синтасис Си перегружен этой скобочностью, мне кажется.


Вы еще Лисп не видели, коллега! (с)

ВВ> Тот же шарп воспроизводит его практически один-в-один (Немерле — в меньшей степени), и часто получается лес скобочек, причем с совершенно разной семантикой. И ведь в принципе можно же вполне уменьшить их количество


А жалобы есть от тех кто С-подобные языки пользует? Нет? Ну, а что тогда копья ломать?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Про скобочки
От: Воронков Василий Россия  
Дата: 26.04.10 23:38
Оценка:
Здравствуйте, VladD2, Вы писали:

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

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

Вот объясни мне как *возвращаемое значение* может привести к *незаметному* ошибочному сайд-эффекту?

ВВ>>Интересно. А парсер врукопашную написан?

VD>Да. Но в следующей версии планируется использовать PEG. Он должен обеспечить как беспрецедентную расширяемость, так так и требуемую гибкость (значительно большую чем есть сейчас).

Т.е. там можно составить расширяемое формальное описание грамматики?

ВВ>>mutable не трожь

VD>Не последовательно как-то.
VD>mutable — это самая базовая императивная конструкция. Без него императив не возможен.

Дык без него вообще писать затруднительно, в том-то и дело.
Немерле же не ставит цель убрать сайд-эффекты вообще.

ВВ>>Непонятно, почему я считал, что параметр должен быть один.

VD>В психологии — это называют "ожидание худшего".

А мне казалось, это называется "каша в голове".

ВВ>> И в статье по Немерле у тебя написано, что несколько параметров интерпретируются как кортеж.

ВВ>>Видимо, я напутал с OCaml-ом.
VD>А там не так?

AFAIR там есть ключевое слово function. Если с помощью него объявить функцию, то внутри нее можно использовать сокращенный паттерн-матчинг, но функция при этом будет принимать только один параметр, явно не указываемый.

ВВ>>Это верно. Стандартный выбор — сделать хорошо или привычно. А может быть, плохо или привычно. Тут уж как повезет.


VD>Ну, да. По этому я лично придерживаюсь очень простого правила. Привычное надо менять только тогда когда оно создает реальные проблемы (ощутимые и не обходимые другими путями). Вот сишное приведение типов, задание типов переменных спереди, четкое выделение операторов в виде стэйтментов, делегаты в качестве замены функциональных типов и многое другое — это явно плохое. И избежание повторения таких привычных вещей легко объяснимо, а значит правильно. А вот отказ от скобок и оператора for — не объяснимо и по сути не нужно. Это привычки людей. А людей не надо ломать об колено. Им еще ФП и МП учить. Пусть уж лучше они учат их в привычной среде.


Однако ж "странный синтаксис" не мешает тому же Питону пользоваться большой популярностью.

Вот Си-касты — плохо, согласен. А почему плохо? Невыразительный синтаксис, "сливается", не всегда и видно с первого взгляда, где тут приведение. Короче, скобочек много. И в данном случае ML-ный :> как раз альтернатива скобкам. Как do здесь:

for x in y do
  expr


ВВ>>Все же синтасис Си перегружен этой скобочностью, мне кажется.

VD>Вы еще Лисп не видели, коллега! (с)

В Лиспе скобочек много, но семантика их всегда одинакова. Разве нет?

ВВ>> Тот же шарп воспроизводит его практически один-в-один (Немерле — в меньшей степени), и часто получается лес скобочек, причем с совершенно разной семантикой. И ведь в принципе можно же вполне уменьшить их количество

VD>А жалобы есть от тех кто С-подобные языки пользует? Нет? Ну, а что тогда копья ломать?

А я не в счет?
Re[11]: Про скобочки
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.04.10 01:00
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

VD>>Сайд-эффекты — это вам не неправильное форматирование. Незаметный ошибочный сайд-эффект можно искать очень долго.


ВВ>Вот объясни мне как *возвращаемое значение* может привести к *незаметному* ошибочному сайд-эффекту?


Для не внимательных выделил лопату жирным.

ВВ>Т.е. там можно составить расширяемое формальное описание грамматики?


Да. И каждый макрос будет правилом такой грамматики. Причем маклос сможет использовать любые другие правила введенные другими макросами доступными к этому времени в скомпилированном виде (т.е. подключенные к проекту).

ВВ>Дык без него вообще писать затруднительно, в том-то и дело.


Ну, почему же? ФП доказанно полон по Тьюрингу. Не всегда эффективен, не всегда достаточно гибок, но писать можно что угодно.

ВВ>Немерле же не ставит цель убрать сайд-эффекты вообще.


Нет. По этому и паранойи с вносом цилка черти куда нет.

ВВ>Однако ж "странный синтаксис" не мешает тому же Питону пользоваться большой популярностью.


Он к этому шел (идет) где-то 15 (а то и больше) лет. И до сих пор не достиг поплярности даже C#-а.
Плюс — это скрипт который часто используют для "несерьёзных целей". Это позволило ему проникнуть в массы.

Короче, можешь попытать счастье. Может твой синтаксис (тет через 15) тоже проникнет в массы.

ВВ>Вот Си-касты — плохо, согласен. А почему плохо? Невыразительный синтаксис, "сливается", не всегда и видно с первого взгляда, где тут приведение. Короче, скобочек много. И в данном случае ML-ный :> как раз альтернатива скобкам. Как do здесь:


Дело не в скобочках. Дело в том, что это контекстно зависмая грамматика. В С/С++ чтобы отличить приведение от других выражений нужно знать тип выражения внутри скобок. В C# водится эвристика которая вызвает некоторые побочные эффекты. Ну, и человек тоже плохо эти эвристики съедает. Скобки же здесь не причем. В тех же кортежах тоже скобки используются, но проблем они не вызывают.

ВВ>В Лиспе скобочек много, но семантика их всегда одинакова. Разве нет?


В лиспе семантика? Не, ну у скобок там конечно всегда семантика скобок. Но скажем список и вызов функции отличается... эээ.. ну ничем. В прочем там все список и что угодно может оказаться макросом .

VD>>А жалобы есть от тех кто С-подобные языки пользует? Нет? Ну, а что тогда копья ломать?


ВВ>А я не в счет?


Ах, ты. Да ты в счет. Итак счет 1 к скольки там?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Про скобочки
От: Undying Россия  
Дата: 27.04.10 03:34
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>А как бы вы отнеслись к сокращению "скобочности" синтаксиса? Хотя бы в выражениях. Например, вместо


Крайне отрицательно, читабельность резко ухудшится.
Re[9]: Про скобочки
От: Undying Россия  
Дата: 27.04.10 03:43
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я не считаю, что проблемы — это предмет веры. Они или есть, или нет. Если у меня есть выражение:

VD>
VD>when (a)
VD>  b();
VD>


В этом случае естественно скобочки не нужны. А вот уже в таком случае:

if (a)
{
  DevExpressHlp.ShowUserControlAsForm(new ScheduleEditor(dbConnection, typeBox, routeBox, jointBox,
    ref editScheduleId, markerIds, null, true));
}


или

if (a)
  DevExpressHlp.ShowUserControlAsForm(new ScheduleEditor(dbConnection, typeBox, routeBox, jointBox,
    ref editScheduleId, markerIds, null, true));


Со скобочками читается гораздо лучше, чем без них.
Re: Про скобочки
От: Undying Россия  
Дата: 27.04.10 03:47
Оценка: +1
Здравствуйте, Воронков Василий, Вы писали:

ВВ>
ВВ>for x in y do
ВВ>  expr
ВВ>


А, кстати, в чем выигрышь-то? Вместо двух скобочек появился один лишний пробел + "do".

ВВ>
ВВ>if x > y then
ВВ>  expr
ВВ>else
ВВ>  expr
ВВ>


Опять же вместо двух скобочек появилось аж пять символов — лишний пробел + "then".

Т.е. и лаконичность записи ухудшиться, и взгляду не за что будет цепляться. А выгода в чем?
Re: Про скобочки
От: night beast СССР  
Дата: 27.04.10 04:11
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Известно, что в Си-подобном синтаксисе круглые скобочки несколько перегружены смыслом. Это и средство для группировки выражений, и часть грамматики некоторых стандартных выражений вроде for, if и вызов функции, и приведение типов...

ВВ>На мой взгляд это несколько снижает читабельность.

ВВ>А как бы вы отнеслись к сокращению "скобочности" синтаксиса? Хотя бы в выражениях. Например, вместо


ВВ>for (x in y) 
ВВ>  expr


ВВ>было бы


ВВ>for x in y do
ВВ>  expr


а как такой вариант:
for x in (y)
  exprs

?


ВВ>Или вместо


ВВ>if (x > y)
ВВ>  expr
ВВ>else
ВВ>  expr


ВВ>было бы


ВВ>if x > y then
ВВ>  expr
ВВ>else
ВВ>  expr


и
if ( x>y ) then (expr) else (expr);



ВВ>Само собой при сохранении остальной си-подобности.
Re[11]: Про скобочки
От: Undying Россия  
Дата: 27.04.10 04:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Не, ну, возможно есть хроники которые ошибки месяцами выявлюят. У меня в худшем случае на сложную ошибку уходит 2-3 дня. И это точно не ошибки из разряда плохое форматирование.


Причем здесь скорость выявления причин известной ошибки? На исправление ошибки программист может и пять минут тратить, только толку от этого немного, т.к. если ошибка не шибко часто встречающаяся (и тем более без исключения), то пользователи о ней могут сообщить программисту через несколько месяцев, а то и вообще никогда. И все это время периодически натыкаясь на эту ошибку пользователи будут думать, что им вместо нормальной программы подсунули какую-то криво работающую поделку.
Re: Про скобочки
От: Pavel Dvorkin Россия  
Дата: 27.04.10 05:07
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>А как бы вы отнеслись к сокращению "скобочности" синтаксиса? Хотя бы в выражениях. Например, вместо


И получился у тебя Паскаль — почти 1:1
With best regards
Pavel Dvorkin
Re[9]: Про скобочки
От: FR  
Дата: 27.04.10 06:28
Оценка:
Здравствуйте, Воронков Василий, Вы писали:


ВВ>>>def func(x, y) { | (2, _) => ... | (3, 1) => ... }

VD>>Так оно и есть. Мог бы попробовать прежде чем писать.

ВВ>О, круто

ВВ>Непонятно, почему я считал, что параметр должен быть один. И в статье по Немерле у тебя написано, что несколько параметров интерпретируются как кортеж.
ВВ>Видимо, я напутал с OCaml-ом.


let func = function
  | 2, _  -> 0
  | 3, 1  -> 1
  | x, y  -> x * y
Re[10]: Про скобочки
От: Воронков Василий Россия  
Дата: 27.04.10 09:37
Оценка:
Здравствуйте, FR, Вы писали:

FR>
FR>let func = function
FR>  | 2, _  -> 0
FR>  | 3, 1  -> 1
FR>  | x, y  -> x * y
FR>


Ну это все равно функция с одним параметром. Тип параметра — кортеж.
Re[8]: Про скобочки
От: Temoto  
Дата: 27.04.10 09:49
Оценка:
ВВ>>А там можно получить неправильную программу просто вставив лишний пробел

FR>Пробел фигня, вот неправильный таб вообще может до смертоубийства довести


В чём разница?
Re[11]: Про скобочки
От: FR  
Дата: 27.04.10 10:05
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Ну это все равно функция с одним параметром. Тип параметра — кортеж.


Это да, код аналогичен Немерлевскому, но в Немерли параметры преобразуются к кортежу, но с несколькими параметрами на OCaml
тоже несложно сделать:

let func x y = match x, y with
  | 2, _  -> 0
  | 3, 1  -> 1
  | x, y  -> x * y
Re[9]: Про скобочки
От: FR  
Дата: 27.04.10 10:07
Оценка:
Здравствуйте, Temoto, Вы писали:

T>В чём разница?


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