Сап, программач. Разрабатываю тут одну софтину для научных расчетов. Раньше был ее единственным пользователем, но примерно через год ПО надо будет уже релизнуть в удобном для конечного пользователя виде. Суть в том, что пользователь может задавать кастомные структуры данных и ряд функций, вызывающихся на определенных этапах работы программы (например, пользователь может определить компоненту и, скажем, функцию, обновляющую некоторые переменные компоненты в зависимости от состояния присоединенных компонент). До этого момента я как-то не заботился об этой части и банально писал нужные функции прямо в коде. Но вряд ли пользователи захотят перекомпилировать эту махину просто для добавления функции на десять строчек. Соответственно, нужен язык для описания таких функций, причем довольно-таки ограниченный. Разумеется, это все дело должно перед запуском компилироваться, поскольку производительность этих функций критична. Отсюда вопрос -- в какую сторону копать, что изучать, на чем учиться для создания такого языка и jit-компилятора к нему? Могу потратить на эту задачу примерно месяцев 6-7, за это время желательно получить рабочий результат с ненулевой производительностью. ЯП - Си, обязательное требование -- поддержка векторных инструкций. На ЯП требуется описывать определенного рода объекты, его компоненты и правила их добавления/изменения/обновления состояния. Накидайте трушной литературы по теме, пожалуйста. Любой сложности, с этим проблем нет. Ссылки на готовые реализации для аналогичных целей приветствуются.
>>1356979 (OP) > ЯП - Си, Кресты не вариант? Я делал что-то подобное на кюте, Структуры описывались в дсл на основе csv таблиц, чтобы можно было забивать в экселе копипастом из тз. Туда же вставлялись скрипты на жаваскрипте (в кют встроен v8, так что это довольно шустро работает). Сделал за месяц особо не напрягаясь.
>>1356979 (OP) >Отсюда вопрос -- в какую сторону копать, что изучать, на чем учиться для создания такого языка и jit-компилятора к нему Бери luajit и встраивай. Велосипеды не нужны
>>1356979 (OP) Не трать время зря, аспирантик. Оглянись вокруг, и задай себе вопрос: сколько есть похожих велосипедов? Хинт: это не потому, что ты умный и особенный.
>>1357051 Если следовать правилу "велосипеды ненужны", то следует брать рэкет, ибо это как раз тулкит для быстрого написания языков. Плюс схему потом можно транслировать в си, так что производительность будет соответствующая.
>>1357036 Там HPC стек - C + OpenCL 1.2 + MPI, код функции, скажем, обновления состояния элемента на основе шага временной сетки, кое-какой информации о физической среде и состоянии связанных компонент должен максимально быстро численно интегрировать приличные такие диффуры. Не катит.
>>1357002 Благодарствую за подсказку. Ocaml в свое время доставил хотя поменьше, чем haskell, может, это судьба :-)
>>1357051 Над этим тоже подумаю, потому что, как я писал выше, хотелось бы обойтись без велосипедостроения -- заставлять пользователей программы учить новый, нужный только для данной системы ЯП - издевательство, а его реализация - потеря времени.
>>1357128 Я еще не аспирант, хотя на PhD уже кое-где ждут но формально следует сначала окончить магистратуру. Что касается разрабатываемой мной системы -- собственно, это ни разу не велосипед, профессор тщательно искал готовые решения с нужной функциональностью, пилю потому, что готового не нашлось. А тред создал потому как раз, что хочется минимизировать количество велосипедов внутри поделки.
>>1357415 >А тред создал потому как раз, что хочется минимизировать количество велосипедов внутри поделки. Блин, я охуеваю, можно подумать, ты первый в мире реализуешь кастомную математику. Профессор что-то там поискал, вообще охуеть. Есть миллион возможных решений, и DSL в самом низу по отношению затрат к результату. Возьми нормальный фреймворк типа Scilab и прототипь там свою систему в качестве модуля. Если скорость не будет устраивать, то можно уже переписывать модуль на той же Яве.
>>1357483 >>1357481 Я, наверное, не очень хорошо пояснил, в чем заключается проблема. Есть ПО, довольно-таки узконаправленное и максимально оптимизированное вплоть до спецэфических для стоящих в кластере железяк инструкций для своих задач. Есть модуль этого ПО, в котором пользователю могут понадобиться (и понадобятся) отсутствующие в программе алгоритмы и структуры данных. И мне нужно дать пользователю достаточно безболезненный способ задания таких алгоритмов и структур данных. При этом очень важна скорость работы этих алгоритмов, что явно означает необходимость в компиляции созданного пользователем кода. Впрочем, забейте. Попробую поковырять luajit, выше советовали, возьму производительность с ним за единицу и буду отталкиваться от этого.
>>1357487 >Попробую поковырять luajit Можешь еще asmjit попробовать. Он крестовый и только х86, зато там есть SIMD инструкции. Он умеет не только ассемблер, там есть еще и регаллокатор с оптимизациями, то есть вручную по регистрам раскидывать не обязательно. Простенький компилятор пишется очень быстро. https://github.com/asmjit/asmjit
>>1357628 Речь о том, что у тебя в голове каша, и вместо того, чтобы ее систематизировать и отделить важное от второстепенного, а потом найти подходящее решение, которым до тебя пользовались тысячи других людей с совершенно аналогичными задачами, ты будешь пилить свой уникальный велосипед, который потом никто не будет поддерживать и про который все забудут через год-два.
>>1357731 >которым до тебя пользовались тысячи других людей с совершенно аналогичными задачами Люди с аналогичными задачами бывают делают хуйню вроде трансляции формул в сишку, которая компилируется gcc, поставляющемся вместе с дистрибутивом проги. Это наиболее распространенное решение, кстати.
>>1357826 >НЕ ПОНИМАЕТ Хуй знает, кто тебя вообще понимает. Ты общаешься как полный мудофел. Какие-то ебанутые многозначительные намеки без конкретики. Пук-пук вы дети, а я дедуля, мудя седые. Маги-шизотерики в /sn примерно так друг с другом общаются. Ты оттуда приплыл, видимо.
>>1357844 Ты опять пердишь с многозначительным видом. Трансляция в другой язык - абсолютно обыденная вещь. В сишку и js каждый второй язык транслируется.
Отсюда вопрос -- в какую сторону копать, что изучать, на чем учиться для создания такого языка и jit-компилятора к нему? Могу потратить на эту задачу примерно месяцев 6-7, за это время желательно получить рабочий результат с ненулевой производительностью. ЯП - Си, обязательное требование -- поддержка векторных инструкций. На ЯП требуется описывать определенного рода объекты, его компоненты и правила их добавления/изменения/обновления состояния. Накидайте трушной литературы по теме, пожалуйста. Любой сложности, с этим проблем нет. Ссылки на готовые реализации для аналогичных целей приветствуются.