Сохранен 33
https://2ch.hk/pr/res/1356979.html
Прошлые домены не функционирует! Используйте адрес ARHIVACH.VC.
24 декабря 2023 г. Архивач восстановлен после серьёзной аварии. К сожалению, значительная часть сохранённых изображений и видео была потеряна. Подробности случившегося. Мы призываем всех неравнодушных помочь нам с восстановлением утраченного контента!

Создание спецэфического яп и написание компилятора к нему /c/

 Аноним OP 28/02/19 Чтв 23:33:56 #1 №1356979 
IMG5550.JPG
Сап, программач. Разрабатываю тут одну софтину для научных расчетов. Раньше был ее единственным пользователем, но примерно через год ПО надо будет уже релизнуть в удобном для конечного пользователя виде. Суть в том, что пользователь может задавать кастомные структуры данных и ряд функций, вызывающихся на определенных этапах работы программы (например, пользователь может определить компоненту и, скажем, функцию, обновляющую некоторые переменные компоненты в зависимости от состояния присоединенных компонент). До этого момента я как-то не заботился об этой части и банально писал нужные функции прямо в коде. Но вряд ли пользователи захотят перекомпилировать эту махину просто для добавления функции на десять строчек. Соответственно, нужен язык для описания таких функций, причем довольно-таки ограниченный. Разумеется, это все дело должно перед запуском компилироваться, поскольку производительность этих функций критична.
Отсюда вопрос -- в какую сторону копать, что изучать, на чем учиться для создания такого языка и jit-компилятора к нему? Могу потратить на эту задачу примерно месяцев 6-7, за это время желательно получить рабочий результат с ненулевой производительностью. ЯП - Си, обязательное требование -- поддержка векторных инструкций. На ЯП требуется описывать определенного рода объекты, его компоненты и правила их добавления/изменения/обновления состояния. Накидайте трушной литературы по теме, пожалуйста. Любой сложности, с этим проблем нет. Ссылки на готовые реализации для аналогичных целей приветствуются.
Аноним 01/03/19 Птн 00:47:29 #2 №1357002 
>>1356979 (OP)
ocaml + llvm, за месяц управишься.

Еще я бы тебе посоветовал покопать в сторону dsl, но при таких исходных данных думаю смысла нет, тебе проще с нуля будет запилить.
Аноним 01/03/19 Птн 05:48:17 #3 №1357036 
>>1356979 (OP)
> ЯП - Си,
Кресты не вариант?
Я делал что-то подобное на кюте, Структуры описывались в дсл на основе csv таблиц, чтобы можно было забивать в экселе копипастом из тз. Туда же вставлялись скрипты на жаваскрипте (в кют встроен v8, так что это довольно шустро работает).
Сделал за месяц особо не напрягаясь.
Аноним 01/03/19 Птн 07:57:57 #4 №1357051 
>>1356979 (OP)
>Отсюда вопрос -- в какую сторону копать, что изучать, на чем учиться для создания такого языка и jit-компилятора к нему
Бери luajit и встраивай. Велосипеды не нужны
Аноним 01/03/19 Птн 08:30:58 #5 №1357056 
>>1357051
Ему нужна производительность. Твой луаджит может в генерацию нативного кода как в8?
Аноним 01/03/19 Птн 08:38:38 #6 №1357058 
>>1357056
luajit быстрее v8.
Если бы не нужна была производительность, советовал бы питон встраивать
Аноним 01/03/19 Птн 09:13:15 #7 №1357064 
>>1357058
>luajit быстрее v8.
Погуглил - действительно...
Аноним 01/03/19 Птн 11:11:12 #8 №1357107 
>>1356979 (OP)
Решил переизобрести матлаб?
Аноним 01/03/19 Птн 12:03:57 #9 №1357128 
>>1356979 (OP)
Не трать время зря, аспирантик.
Оглянись вокруг, и задай себе вопрос: сколько есть похожих велосипедов?
Хинт: это не потому, что ты умный и особенный.
Аноним 01/03/19 Птн 14:50:41 #10 №1357193 
>>1356979 (OP)
Говорят, в Guile в крайней версии jit завезли. Я бы на твоём месте присмотрелся, всё-таки official GNU extension language.
Аноним 01/03/19 Птн 17:17:40 #11 №1357255 
>>1357051
Если следовать правилу "велосипеды ненужны", то следует брать рэкет, ибо это как раз тулкит для быстрого написания языков. Плюс схему потом можно транслировать в си, так что производительность будет соответствующая.
Аноним 01/03/19 Птн 21:31:11 #12 №1357410 
>>1357036
Там HPC стек - C + OpenCL 1.2 + MPI, код функции, скажем, обновления состояния элемента на основе шага временной сетки, кое-какой информации о физической среде и состоянии связанных компонент должен максимально быстро численно интегрировать приличные такие диффуры. Не катит.

>>1357002
Благодарствую за подсказку. Ocaml в свое время доставил хотя поменьше, чем haskell, может, это судьба :-)

>>1357051
Над этим тоже подумаю, потому что, как я писал выше, хотелось бы обойтись без велосипедостроения -- заставлять пользователей программы учить новый, нужный только для данной системы ЯП - издевательство, а его реализация - потеря времени.
Аноним 01/03/19 Птн 21:41:34 #13 №1357415 
>>1357128
Я еще не аспирант, хотя на PhD уже кое-где ждут но формально следует сначала окончить магистратуру. Что касается разрабатываемой мной системы -- собственно, это ни разу не велосипед, профессор тщательно искал готовые решения с нужной функциональностью, пилю потому, что готового не нашлось. А тред создал потому как раз, что хочется минимизировать количество велосипедов внутри поделки.

>>1357255
Тоже гляну, спасибо.
Аноним 02/03/19 Суб 00:01:25 #14 №1357481 
>>1357415
>А тред создал потому как раз, что хочется минимизировать количество велосипедов внутри поделки.
Блин, я охуеваю, можно подумать, ты первый в мире реализуешь кастомную математику. Профессор что-то там поискал, вообще охуеть.
Есть миллион возможных решений, и DSL в самом низу по отношению затрат к результату. Возьми нормальный фреймворк типа Scilab и прототипь там свою систему в качестве модуля. Если скорость не будет устраивать, то можно уже переписывать модуль на той же Яве.
Аноним 02/03/19 Суб 00:04:35 #15 №1357483 
>>1357415
>профессор
Кислых щей? Матлаб кому запилили?
Аноним 02/03/19 Суб 00:38:25 #16 №1357487 
>>1357483
>>1357481
Я, наверное, не очень хорошо пояснил, в чем заключается проблема. Есть ПО, довольно-таки узконаправленное и максимально оптимизированное вплоть до спецэфических для стоящих в кластере железяк инструкций для своих задач. Есть модуль этого ПО, в котором пользователю могут понадобиться (и понадобятся) отсутствующие в программе алгоритмы и структуры данных. И мне нужно дать пользователю достаточно безболезненный способ задания таких алгоритмов и структур данных. При этом очень важна скорость работы этих алгоритмов, что явно означает необходимость в компиляции созданного пользователем кода. Впрочем, забейте. Попробую поковырять luajit, выше советовали, возьму производительность с ним за единицу и буду отталкиваться от этого.
Аноним 02/03/19 Суб 01:05:32 #17 №1357499 
>>1357487
Блин, как же заебали студенты, как я счастлив, что ушел из академии.
Аноним 02/03/19 Суб 10:48:29 #18 №1357628 
>>1357499
Наверное, все время обьяснять очевидные для себя вещи а некоторым и не по разу действительно бесит. Или речь идет о чем-то еще?
Аноним 02/03/19 Суб 11:42:14 #19 №1357643 
>>1357487
>Попробую поковырять luajit
Можешь еще asmjit попробовать. Он крестовый и только х86, зато там есть SIMD инструкции. Он умеет не только ассемблер, там есть еще и регаллокатор с оптимизациями, то есть вручную по регистрам раскидывать не обязательно. Простенький компилятор пишется очень быстро.
https://github.com/asmjit/asmjit
Аноним 02/03/19 Суб 15:07:01 #20 №1357731 
>>1357628
Речь о том, что у тебя в голове каша, и вместо того, чтобы ее систематизировать и отделить важное от второстепенного, а потом найти подходящее решение, которым до тебя пользовались тысячи других людей с совершенно аналогичными задачами, ты будешь пилить свой уникальный велосипед, который потом никто не будет поддерживать и про который все забудут через год-два.
Аноним 02/03/19 Суб 15:38:38 #21 №1357742 
>>1357731
>которым до тебя пользовались тысячи других людей
А если не пользовались я тебе ебальник сломаю, окей?
Пиши контакты.
Аноним 02/03/19 Суб 15:45:12 #22 №1357750 
>>1357731
>которым до тебя пользовались тысячи других людей с совершенно аналогичными задачами
Люди с аналогичными задачами бывают делают хуйню вроде трансляции формул в сишку, которая компилируется gcc, поставляющемся вместе с дистрибутивом проги. Это наиболее распространенное решение, кстати.
Аноним 02/03/19 Суб 16:47:08 #23 №1357779 
>>1357750
>трансляции формул в пиздон/онгулярий/1с
Поправил этого наивного ребенка.
Аноним 02/03/19 Суб 17:03:05 #24 №1357791 
>>1357731
Съеби уже со своим нытьем отсюда.
Аноним 02/03/19 Суб 17:34:16 #25 №1357814 
>>1357779
Ты о чем вообще? Какой питон? 1С?
Аноним 02/03/19 Суб 18:00:05 #26 №1357826 
>>1357814
Ребенок НЕ ПОНИМАЕТ
Ох лол.
Это ничего - все у тебя впереди.
Аноним 02/03/19 Суб 18:24:45 #27 №1357836 
>>1357826
>НЕ ПОНИМАЕТ
Хуй знает, кто тебя вообще понимает. Ты общаешься как полный мудофел. Какие-то ебанутые многозначительные намеки без конкретики. Пук-пук вы дети, а я дедуля, мудя седые.
Маги-шизотерики в /sn примерно так друг с другом общаются. Ты оттуда приплыл, видимо.
Аноним 02/03/19 Суб 18:38:03 #28 №1357844 
>>1357836
>трансляции формул во всякое говно (жс включительно) потому что кромешные дебилы вообще везде
>намеки без конкретики
А вот и иллюстрация.
Аноним 02/03/19 Суб 18:48:13 #29 №1357851 
>>1357844
Ты опять пердишь с многозначительным видом. Трансляция в другой язык - абсолютно обыденная вещь. В сишку и js каждый второй язык транслируется.
Аноним 02/03/19 Суб 19:02:37 #30 №1357858 
>>1357851
>вычислительные задачи
>обыденная вещь
>В js
И правда олигофрен.
Впрочем, as expected.
Аноним 02/03/19 Суб 20:03:54 #31 №1357882 
>>1357858
Но ведь там говорилось про си...
[mailto:SAGE] Аноним 02/03/19 Суб 20:06:40 #32 №1357883 
>>1357882
Не разговаривай с ним, он ебанько.
Аноним 02/03/19 Суб 20:46:31 #33 №1357903 
>>1357882
>говорилось
Так и ты говори (с)
>>1357883
>этот обиженный дебил
Ясно.
comments powered by Disqus