metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2008-08-29 02:09 pm

Delphi 2009

описание новых фич

Судя по всему, Embarcadero всерьез взялись за дельфи, судя по новой версии. Фичи вроде generics и юникода по умолчанию в win32 - это очень хорошо, счас осталось производителям компонент переползти на это дело и можно будет вслед за ними переходить.
Им бы туда еще метапрограммирование добавить, вообще бы killer feature была бы.

PS: Атомная смерть, они туда и closure добавили. Прозреваю окопавшихся функциональщиков, которым в борланде менеджеры не давали развернуться на всю катушку :)

[identity profile] zamotivator.livejournal.com 2008-09-03 09:39 am (UTC)(link)
Я немало холиварил на эту тему, и поднимать старый труп снова - не хочу.
Построить производительное СУБД требует либо написания кода на языке низкого уровня - С, С++, asm, llvm IR; либо генерации этого низкоуровневого кода из DSL/высокоуровневого языка.

Писать на Си - получается длинней, более чревато ошибками и дольше, чем на плюсах - потому перевели с Сей на плюсы.

Писать на LLVM IR - убьёшься тапком + неявно platform-dependent (чтобы не было platform-dependent - генерить LLVM IR из C/C++ нужно).

Построение DSL, который выполнит такую генерацию - более трудоёмко, чем написать такую систему на С++ целиком.
А метапрограммирование на плюсах является по сути интеграрованным в С++ DSL'ем, что занимается генерацией кода.

Если есть ещё вопросы - задавайте.

[identity profile] aamonster.livejournal.com 2008-09-03 09:42 am (UTC)(link)
Да нет, спасибо. По сути ведь ответ сводится к "предметная область потребовала" - звучит понятно и разумно.

[identity profile] zamotivator.livejournal.com 2008-09-03 09:43 am (UTC)(link)
Именно это я и хотел изначально высказать - существуют предметные области, где метапрограммирование на С++ востребованны, т.к. альтернативы создают дополнительные проблемы.

[identity profile] aamonster.livejournal.com 2008-09-03 10:21 am (UTC)(link)
Но этих областей не так много и обойтись все же можно - т.е. язык без шаблонов имеет право на жизнь.

А использование метапрограммирования на шаблонах там, где не надо - создает много проблем. Куда больше, чем использование без необходимости виртуальных функций или RTTI. Почему и возникает желание отобрать эту возможность у 99% программистов (90% ее не используют вообще, еще 9 - используют не по делу).

[identity profile] zamotivator.livejournal.com 2008-09-03 10:39 am (UTC)(link)
Это естественно.
Таки извраты нужно исключительно из-за производительности.

[identity profile] aamonster.livejournal.com 2008-09-03 10:59 am (UTC)(link)
Угу. Самому раз в жизни понадобилось (ну, не считая вещей типа контейнеров и смартпойнтеров, и, естественно, использования по назначению - для создания однотипных классов/функций) - заменить вызов виртуальной функции при реализации Fast Marching (это из обработки изображений - по сути, последовательный обход всех пикселов определенным образом). И то - если бы в языке были Closures (и они нормально оптимизировались), это бы, кажется, не понадобилось, а код был бы заметно проще.

Хорошо, что языки потихоньку развиваются. В тот же C++ должны прийти вещи типа closures. В C# и, кажется, яве и D они уже есть. Вообще C# мне нравится больше C++ (хотя бы синтаксис объявления типов переменных) - но осознаю, что неправильное использование кучи может создать жуткие тормоза (так-то по моим тестам managed код уже вышел на уровень производительности native). К сожалению, перейти не так просто - проекты уже на c++, да и для реального использования нового языка надо изучить не сам язык (дел на несколько дней), а библиотеки (причем так, чтобы не задумываться, какой класс/вызов использовать - а это не просто изучение, а тренировка).