Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Здравствуйте, gandjustas, Вы писали:
G>>>>Сейчас вот изобретают async для C#5, там семантика известна заранее и соответствует семантике обычного выражения, а макросы позволяют делать выражения с любой семантиков, независимо от того как они выглядят. Это слишком большая пушка для отстрела ног.
H>>>Перефразируя: макросы — зло, потому что они позволяют менять семантику кода (это одно из их предназначений)?
G>>Не-а. макросы — зло, потому что они позволяют менять семантику кода без изменения самого кода. Ну собственно проблема та же, что и макросов в C. Только в nemerle можно сделать более умные макросы.
ГВ>Если так рассуждать, то все библиотеки — такое же зло. Семантику библиотечного вызова тоже ведь можно поменять в любой момент совсем без изменения использующего кода. Я тебе больше скажу — отчасти для этого библиотеки и создаются. Следовательно, библиотеки — это зло изначально(е)!
Это ты сам выдумал. Я говорю о семантике
вызова функции.
Например. Сделали "для обучения" некоторую систему на .NET, которая должна повторять семантику delphi, где решили сделать setable индексатор для строки. Поэтому появились очень интересные спецэффекты:
var a = 'abc';
var b = a;
a[1] = 'd';
b[1] что вернет? правильно b
Вот и умудрились нарушить семантику. Чтобы понять что происходит надо очень хорошо понимать как оно все работает.
А Nemerle позволяет такие дырки на каждом углу плодить.
G>>>>Я бы вообще предложил запретить по-умолчанию кастомные синтаксические макросы, оставить только макросы в виде атрибутов и макросы "изкаропки".
H>>>Это решается административными мерами.
G>>Административные меры без энфорсинга со стороны инструментов не работают.
ГВ>От же ж держиморды выискались: запретить-запретить-запретить!
Это называется safe by default. Операции с указателями запретили, и ниче.
Здравствуйте, gandjustas, Вы писали:
ГВ>>Если так рассуждать, то все библиотеки — такое же зло. Семантику библиотечного вызова тоже ведь можно поменять в любой момент совсем без изменения использующего кода. Я тебе больше скажу — отчасти для этого библиотеки и создаются. Следовательно, библиотеки — это зло изначально(е)!
G>Это ты сам выдумал. Я говорю о семантике вызова функции.
Так о семантике чего именно ты говоришь? Я говорю о семантике набора символов (если обобщённно). Например, есть у нас некая последовательность символов: a b c, относительно которой справедливо предположение, что получится некий d. Потом кто-то меняет реализацию b и вместо d получается какой-нибудь d'. Собственно, именно такой эффект я и назвал "изменением семантики библиотечного вызова". Под "вызовом" подразумевался именно набор символов, обозначающий вызов библиотечной функции, к примеру, банальнейший "myfunc(25)".
G>Например. Сделали "для обучения" некоторую систему на .NET, которая должна повторять семантику delphi, где решили сделать setable индексатор для строки. Поэтому появились очень интересные спецэффекты:
G>G>var a = 'abc';
G>var b = a;
G>a[1] = 'd';
G>
G>b[1] что вернет? правильно b
G>Вот и умудрились нарушить семантику. Чтобы понять что происходит надо очень хорошо понимать как оно все работает.
G>А Nemerle позволяет такие дырки на каждом углу плодить.
Во-первых, я тут не вижу подмены семантики вызова функции. Во-вторых, не надо в целях обучения делать из языка X язык Y, тем более "для обучения", тем более — делать криво. Тут вопросы не к Nemerle, .Net или ещё какому-нибудь мировому злу, а исключительно к источникам этой светлой идеи (изобразить Delphi подручными средствами).
ГВ>>От же ж держиморды выискались: запретить-запретить-запретить!
G>Это называется safe by default. Операции с указателями запретили, и ниче.
Я давно отзываюсь о такой практике исключительно оборотами, состоящими на 9/10 из обсценной лексики... Забанят, если начну отвечать на твоё "ничё". Короче — ты понял.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!