Comments 14
В примере выше символы NUM и INT определенные в user-code должны быть экспортированы вниз, на уровень модуля metare, что очевидно невозможно.
Заворачиваем модуль в mixin template:
mixin template METARE() {
// код модуля
}
А в пользовательском коде добавляем:
mixin METARE;
Всё, теперь мир под полным вашим контролем ;-)
У меня тут есть отличная идея для ненормального программирования. Что если взять JS код, распарсить его с помощью D при компиляции и сгенерить код, который компилятор сможет по максимуму оптимизировать. Добавить к этому всему NodeJS API и можно выпускать движок для запуска NodeJS приложений, генерирующий оптимизированный под задачу машинный код, без накладных расходов на JIT.
взять JS код, распарсить его с помощью D при компиляции
Где-то на этом месте ничего не получится :)
Это кончено возможно, но применимо только для ненормального программирования. AOT оптимизации в JS почти невозможны без изменения поведения кода. Парсинг в D превратится в ещё одну виртуальную машину. Слишком уж он динамичный и многое себе позволяет. Если же ввести ограничения на код, не давать менять типы в рантайме, добавлять свойства и тд, то может и получится. Только с такими ограничениями проще сразу на D писать.
D в браузере не удобно запускать. Я думаю можно было бы начать с TypeScript, а потом уже добавлять динамику.
Не думаю, что вам удастся компилить в D более эффективно, чем V8 компилит в натив.
Кстати, никто не мешает такую компиляцию и использовать...
Может сложиться совершенно ложное представление что на D пишут исключительно нормальные люди, или еще хуже того — что знание D автоматически делает из любого программиста нормального человекаС учетом того, что основную библиотеку (Фобос) пишет Александреску и почти исключительно метапрограммированием, нечего опровергать =)
Совсем нормальные люди это использовать просто не смогут
D1 с императивной библиотекой Танго имел все шансы стать второй Явой, только компилируемой, быстрой и более удобной в программировании.
А D2+Фобос стал всего лишь одним из лучших Языков Выходного Дня, наряду с эзотерикой.
приводит к неочевидным многостраничным сообщениям времени компиляции
Как раз в D с этим намного-намного лучше.
А вторая Ява мне вот лично совершенно не нужна, на самом деле, ну зачем?
Что ж тут не очевидномногостраничного?
source\metare.d-mixin-119(119,13): Error: undefined identifier 'NUM.match'
source\metare.d(34,15): Error: template instance metare.compile_meta!"{NUM}" error instantiating
source\metare.d(55,31): instantiated from here: regex!(app, "{NUM}")
source\app.d(25,11): instantiated from here: regex!(app, "[+-]?{NUM}")
source\metare.d-mixin-119(119,13): Error: undefined identifier 'INT.match'
source\metare.d(34,15): Error: template instance metare.compile_meta!"{INT}(,{INT})*" error instantiating
source\app.d(26,12): instantiated from here: regex!(app, "{INT}(,{INT})*")
Метарегулярные выражения на D