Pull to refresh

Comments 14

В примере выше символы NUM и INT определенные в user-code должны быть экспортированы вниз, на уровень модуля metare, что очевидно невозможно.

Заворачиваем модуль в mixin template:


mixin template METARE() {
// код модуля
}

А в пользовательском коде добавляем:


mixin METARE;

Всё, теперь мир под полным вашим контролем ;-)

Вау! Сам не догадался бы. Спасибо.

У меня тут есть отличная идея для ненормального программирования. Что если взять JS код, распарсить его с помощью D при компиляции и сгенерить код, который компилятор сможет по максимуму оптимизировать. Добавить к этому всему NodeJS API и можно выпускать движок для запуска NodeJS приложений, генерирующий оптимизированный под задачу машинный код, без накладных расходов на JIT.

Да, пожалуй идея красивая. Но я тут пас из за полного незнания JS.
взять JS код, распарсить его с помощью D при компиляции

Где-то на этом месте ничего не получится :)
Это кончено возможно, но применимо только для ненормального программирования. AOT оптимизации в JS почти невозможны без изменения поведения кода. Парсинг в D превратится в ещё одну виртуальную машину. Слишком уж он динамичный и многое себе позволяет. Если же ввести ограничения на код, не давать менять типы в рантайме, добавлять свойства и тд, то может и получится. Только с такими ограничениями проще сразу на D писать.

D в браузере не удобно запускать. Я думаю можно было бы начать с TypeScript, а потом уже добавлять динамику.

Чтоб запускать в браузере эффективный код — есть asm.js. Код на D можно, думаю, скомпилить в него и запустить в браузере — но это задача ровно противоположная той, с которой вы начали (не js в D, а D в js)

Не думаю, что вам удастся компилить в D более эффективно, чем V8 компилит в натив.
Кстати, никто не мешает такую компиляцию и использовать...

Может сложиться совершенно ложное представление что на D пишут исключительно нормальные люди, или еще хуже того — что знание D автоматически делает из любого программиста нормального человека
С учетом того, что основную библиотеку (Фобос) пишет Александреску и почти исключительно метапрограммированием, нечего опровергать =)

Совсем нормальные люди это использовать просто не смогут
А что не так с Фобосом? По моему очень сбалансированная библиотека.
И уж на 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})*")
Sign up to leave a comment.

Articles