Re[23]: Являются ли макросы свидетельством недостаточной выр
От: IT Россия linq2db.com
Дата: 01.08.07 16:06
Оценка: 33 (1) +2
Здравствуйте, Gaperton, Вы писали:

G>1) У тебя там применяются атрибуты. Добавление кастомных атрибутов никак не меняет синтаксис языка, и не увеличивает indirection level языковых конструкций.


В этом смысле да. Но в том же немерле синтаксис атрибутов является лишь одним из форм макросов.

Что касается синтаксических конструкций... честно говоря, я пытаюсь понять почему вы считаете это плохой практикой и пока никак не могу понять Почему, например, расширение linq захардкоженное, прибитое гвоздями к C# и VB это хорошо, а набор макросов, делающий тоже самое — это плохо. Почему printf("%d %s", a), убивающий программу или string.Format("{0} {1}", a), приводящий к run-time exception — это хорошо, а $"$a", где просто нет шансов на ошибку — это плохо.

G>2) Удобный биндинг к БД — это даже более ходовая и популярная задача, чем создание парсеров. И для ее решения, так же как ex/yacc, вполне оправдано сделать внешний макропроцессор, совсем не обязательно иметь поддержку макросов в языке. Насколько я понимаю, в твоем тулките, на который ты ссылаешься, так и сделано — макросисиема там не применяется. Этой же цели, кажется, служит явский hybernate? Опять, обошлись без макросистемы. Что имеем в сухом остатке? Индустрия подверждает мой тезис о макросах, не так ли?


Индустрия банально не имеет макросов, поэтому извращается как может. Проблемы pre-compile и run-time кодогенерации хорошо известны и, к сожалению, неразрешимы. Я, например, в своё время поимел много гемороя с pre-compile-time генерацей код. Народ по незнаю правил такой код вручную и когда это всплывало через несколько месяцев, то наступал полный паралич. Перегенерация отменит исправления, а что сломает такое исправление никто уже не помнит. Хорошо, если компилятор матюгнётся, а так можно вообще пропустить отмену и словить потом проблемы где-нибудь у заказчика.

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

Нормальная макросистема может все эти недостатки легко устранить. Но пока что мейнстрим до неё ещё не дорос. Хотя странно это. По-идее, на сегодняшний день это единственный способ существенно увеличить производительность девелоперов.
Если нам не помогут, то мы тоже никого не пощадим.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.