Re[21]: Почему макросы Nemerle не являются злом?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 01.05.11 21:31
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, 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. Операции с указателями запретили, и ниче.
Re[22]: Почему макросы Nemerle не являются злом?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 02.05.11 00:15
Оценка: +1
Здравствуйте, 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.: Винодельческие провинции — это есть рулез!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.