Бодрый вечер!
Итак, я все о том же - есть некая тулза на питоне для генерации кода числодробилок. Выглядит все примерно так - юзер задает численную схему на питоне из экземпляров очень специального класса, для которого перегружены арифметические операторы, в итоге каждое выражение разбирается интерпретатором в AST, все это хозяйство складывается в таблицу. Дальше есть несколько модулей с-но кодогенерации, каждый модуль генерит по своему - берет эту таблицу и распихивает ее содержимое по слотам в наборе С-шных файлов уже в С-шном формате. Модули кодогенерации это конечно что то жуткое... но в общем работает.
Сегодня с утра пришла в голову дурная мысль, которой и делюсь (может отговорит кто). Фактически, новая версия этой тулзы (родившаяся в частности из обсуждений тута) будет иметь следующий вид - схема задается кусками, каждый кусок в отдельной функции обернутой хитровыкрученным декоратором. При выполнении такой ф-ии появляется новый кусок численной схемы, при этом ф-ии могут вызывать друг друга (вызвал ф-ю - получил кусок схемы там где вызвал). То есть выполняется обычная питоновская программа, в ней крутятся циклы, условия проверяются, зарождаются и гибнут цивилизации, все в общем как обычно, но в процессе выполнения где то накапливается информация о численной схеме. Дурная мысль следующая - не ввести ли в нее такие конструкции как обычные С-шные цилы, условия и проч, и не писать ли кодогенерацию на этой же тулзе? Т.е. кроме откладывания кусков алгебраических выражений эта шутка сможет откладывать в ту же таблицу - овт тут начался цикл/вот тут закончился цикл, и проч.
В чем профит задания схемы на питоне мне очевидно - во первых есть ряд фич, позволяющий это самое задание сильно упростить (всякие циклические перестановки, аналитическое дифференцирование, привлечение CAS и пр), в итоге все выглядит гораздо компактней. Во вторых, заданную схему можно проверять на корректность и генерить по ней хитровыкрученный код.
В чем профит описания генерации этого хитровыкрученного кода на той же тулзе мне пока не очень понятно... кроме того, что можно опять таки задавать какие то высокоуровневые конструкции, которые в итоге окажутся удобней и компактнее чем на С++. Но может если меня кто то спросит подробностей, я в процессе ответа сам это для себя пойму (или пойму что профита нету).
И еще, кто работал во всяких маплах/маткадах/матлабах и проч., какие от них ощущения в смысле той же кодогенерации?