inline compiler
От: c-smile Канада http://terrainformatica.com
Дата: 12.03.16 22:39
Оценка:
Подумалось вот что хорошо бы иметь некий inline C to native code compiler. Типа того же shader compiler в OpenGL.

Use cases:

В JavaScript например

var inverseAlpha = compileNativeFunction("rgba main(rgba in) { in.alpha = 255 - in.alpha; return in; }");  
image.eachPixel(inverseAlpha);


ну, т.е. типичный pixel shader.

По идее всем scripting языкам такое бы не помешало. Может кто-то видел что похожее?
Re: inline compiler
От: Evgeny.Panasyuk Россия  
Дата: 12.03.16 23:10
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>По идее всем scripting языкам такое бы не помешало. Может кто-то видел что похожее?


Видел macro-runtime-EDSL который умеет строить/оптимизировать AST, захватывать переменные и вызывать внешний компилятор.
TaskGraph (1, 2):
int main( int argc, char *argv[] ) {
  TG_IntResIntArg T;
  int n = atoi( argv[1] );
  taskgraph( TG_IntResIntArg, T, tuple1(a) ) {
    tVar(int, i);
    tVar(int, j);
    tFor(i, 0, n-1) {
      tFor(j, 0, n-1) {
        tPrintf("Iteration i=%d, j=%d\n", i, j);
      }
    }
    tReturn(a + n);
  }
  InterchangeSettings inter;
  inter.firstLoop = LoopIdentifier ( 1 );
  inter.secondLoop = LoopIdentifier ( 1, 1 );
  T.applyOptimisation ( "interchange", &inter );
  T.compile( tg::GCC, true );
  printf( "T(%d) = %d\n", n, T(n) );
}
Re: inline compiler
От: Evgeny.Panasyuk Россия  
Дата: 12.03.16 23:12
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Подумалось вот что хорошо бы иметь некий inline C to native code compiler. Типа того же shader compiler в OpenGL.


Есть же ещё OpenCL, который компилируется в runtime. В том числе есть и генерация кода для CPU.
Re: inline compiler
От: watchmaker  
Дата: 13.03.16 00:32
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>var inverseAlpha = compileNativeFunction("rgba main(rgba in) { in.alpha = 255 - in.alpha; return in; }");  
CS>image.eachPixel(inverseAlpha);
CS>


В C/C++ неудобно то, что придётся с собой исходники всей программы со всеми библиотеками таскать. Иначе как компилятор узнает что такое rgba в вышеприведённом примере? Вдруг эта сущность от какой-нибудь макросошаблонной магии из недр boost'а, например, выводится.

Или предполагается более лёгкий вариант, когда ответственность за бинарную совместимость внутренней и внешней программ перекладывается на программиста? То есть это будет его задачей следить, чтобы из переданного текста было понятно что такое rgba, и чтобы этот тип был бинарно совместим с исходным?

CS> Может кто-то видел что похожее?


Запускается компилятор (упакованный в библиотеку или даже stand-alone), ему скармливается строчка-программа, формируется динамически загружаемая библиотека и из неё импортируется новосозданная функция
Вариант тупой, но рабочий. Иногда даже сами разработчики компиляторов такую схему используют (см. gcc jit, например, хотя там и не C на входе).

CS> некий inline C to native code compiler.

С компилятором clang идёт пример clang-interpreter — там как раз программа через llvm jit запускается. Или вот есть cling, как дальнейшее развитие идеи.
Re: inline compiler
От: c-smile Канада http://terrainformatica.com
Дата: 13.03.16 02:10
Оценка:
Уточнение.

Категорически не хочется привлекать ни GCC ни что-то еще внешнее.
Нужна условно говоря библиотека.

Ну вот есть же JIT всякие... Вот что-то такое и ищется.

Ну скажем вот http://sljit.sourceforge.net/
У него на входе некий абстрактный ассемблер. По идее можно сделать компилятор чего-то в тот ассемблер и скормить ему.

Вот что-то такое ищется.
Re[2]: inline compiler
От: c-smile Канада http://terrainformatica.com
Дата: 13.03.16 02:30
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Вот что-то такое ищется.


Или вот http://www.gnu.org/software/dotgnu/libjit-doc/libjit.html

Там в качестве примера есть Pascal компилятор в их набор инструкций. Потом он JITится и исполняется.
Вот чего-то бы такое только для C подобного.

Неужто опять лисапет избретать?
Re[3]: inline compiler
От: acDev Россия  
Дата: 13.03.16 04:45
Оценка: 64 (2)
Здравствуйте, c-smile, Вы писали:

CS>Неужто опять лисапет избретать?


Я в одном проекте использую AsmJit.
Вот на харбре короткая заметка: https://m.habrahabr.ru/company/spbau/blog/250841/
Re: inline compiler
От: Ops Россия  
Дата: 14.03.16 12:19
Оценка: 48 (2) +1
Здравствуйте, c-smile, Вы писали:

CS>По идее всем scripting языкам такое бы не помешало. Может кто-то видел что похожее?


Не оно?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: inline compiler
От: Mr.Delphist  
Дата: 14.03.16 12:36
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Подумалось вот что хорошо бы иметь некий inline C to native code compiler. Типа того же shader compiler в OpenGL.


Ну, традиционно берут не сам C, а некие упрощённые языки, тот же Lua. Иначе есть риск "C++ injection"
Re: inline compiler
От: monah_tuk Пират http://htrd.su
Дата: 15.03.16 00:19
Оценка: 42 (1)
Здравствуйте, c-smile, Вы писали:

CS>Подумалось вот что хорошо бы иметь некий inline C to native code compiler. Типа того же shader compiler в OpenGL.

CS>По идее всем scripting языкам такое бы не помешало. Может кто-то видел что похожее?

Именно для С: TCC от Фабриса Беллара. У него есть libtcc: http://bellard.org/tcc/tcc-doc.html#SEC22 по языковым возможностям: http://bellard.org/tcc/tcc-doc.html#SEC5
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.