LINUX.ORG.RU

Трансляторы в си

 , ,


0

3

По аналогии с соседним топиком - хочу в кучу собрать информацию о языках, поддерживающих трансляцию в си либо только через неё и работающих. Гуглить «translate to c» - это хуже, чем пытаться на лоре искать что-то полезное не продираясь через срачи, флуды и тупняк :)

Если лень написать хоть несколько слов про предлагаемый язык - что ж, обойдусь и ссылкой.

Эти самые «срачи, флуды и тупняк» тоже приветствуются, если сопровождаются хоть каплей информации по теме ;)

★★★★★

Тут metaprog свою Санта-Барбару уже девятых тред ведёт — тебе типа такого надо?

XMs ★★★★★
()

новомодный V же. Ну и еще 100500 студ. поделок на гатхабе

anonymous
()
Ответ на: комментарий от anonymous

Он использует C для компиляции слов, как перевести какой нибудь forth-исходник в .c файл - низнаю. Но можешь в слове делать inline c, с препроцессором и всем другим.

Deleted
()

кстати непонятно что ты имеешь в виду «транслируется в Си». Диа тоже транслирувать свои диаграммы в Си могёт. Скорее всего тебя интересует компиляция в Си, если доё**ваться до терминологии.

anonymous
()
Ответ на: комментарий от XMs

не, живительные картинки с последующей «динамизацией» оставлю более молодым, мои закостеневшие извилины требуют только текста

yyk ★★★★★
() автор топика

Кстати а чо бы не запилить свой такой языг с закосом на мировое господство. LORlang. «go в github я создал» (с) и все такое.

anonymous
()
Ответ на: комментарий от anonymous

ну хз, тебе виднее, мне как-то «компиляция в текст» режет ухо, но по смыслу ты прав

yyk ★★★★★
() автор топика
Ответ на: комментарий от Deleted

Не знал про это слово. Спасибо

anonymous
()
Ответ на: комментарий от yyk

Хотя я чот гоню видимо. вики говорит что трансляция это тоже перегон в функциональный эквивалент из L в LL. То есть тоже самое по сути. Я думал что трансляция это то, чем макросы, например, в Си занимаются.

anonymous
()

Python to C: Cython, Nuitka (а также Pyrex, Shedskin, Pythran).

P.S. ещё есть JIT-компиляторы PyPy, Numba, Pyston.

gag ★★★★★
()

Vala поковыряй к приммеру ещё вроде язык V если я не ошибаюсь от транслируется в си

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от meliafaro

Кое-кто даже удалил сообщение по причине «дубль», хотя на самом деле это уже было третье. Четвёртым будешь.

gag ★★★★★
()
Ответ на: комментарий от hateyoufeel

Таких очень много, на самом деле.

Хм, вот что странно, пока не нашёл ни одного (кроме «новомодного V»), который бы легко с этим самым си «интеропился»: влёт подчитывал бы сишные файлы и т.д. Работающие поверх LLVM есть, транслирующие в си - пока нашёл только этот самый V.

Ветка заглохла - больше ни кто ничего не вспомнит? )

yyk ★★★★★
() автор топика
Ответ на: комментарий от yyk

Хм, вот что странно, пока не нашёл ни одного (кроме «новомодного V»), который бы легко с этим самым си «интеропился»: влёт подчитывал бы сишные файлы и т.д. Работающие поверх LLVM есть, транслирующие в си - пока нашёл только этот самый V.

Ну возьми тот же Haskell, который умеет подключать сишные хидеры в FFI и легко позволяет делать биндинги в сишным библиотекам среди прочего. Плюс GHC умеет выдавать сишный код, только это очень редко кому надо.

Просто штука в том, что до появления LLVM выдача сишного кода была наиболее простым способом сделать бэкенд компилятора твоего языка, поэтому очень многие так делали. Потом появился LLVM, язык которого гораздо лучше подходит в качестве промежуточного, и многие перелезли на него.

P.S. я пропустил тот момент, когда генератор сишного кода выкинули из GHC. Смотри старые версии компилятора, если тебе интересно.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Потом появился LLVM, язык которого гораздо лучше подходит в качестве промежуточного, и многие перелезли на него.

Как LLVM помогает инклудить сишные заголовочные файлы? Я чего-то не знаю? Есть способ оттранслировать сишный файл в удобоваримый структурированный вид?

yyk ★★★★★
() автор топика
Ответ на: комментарий от yyk

Как LLVM помогает инклудить сишные заголовочные файлы?

Перечитай ещё раз. LLVM позволяет легко сделать бэкенд для компилятора, для чего раньше использовали C.

Я чего-то не знаю?

Понятия не имею.

Есть способ оттранслировать сишный файл в удобоваримый структурированный вид?

В AST? Сишных парсеров вагон и маленькая тележка для почти любого языка.

hateyoufeel ★★★★★
()
Ответ на: комментарий от anonymous

Интересней трансляторы си в нормальные языки. Я бы на это посмотрел.

А зачем? Кто-то написал код на си, не отстрелив себе при этом ноги, яйца, уши, задницу, а ты хочешь оттранслировать его в какой-нибудь питон чтобы получить эпические тормоза, вместо использования ffi?

yyk ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

В AST? Сишных парсеров вагон и маленькая тележка для почти любого языка.

И сильно поможет персер си на хидерах какого-нибудь gmp+mpfr, где условных определений, зависящих от окружения (проца, ОС, разрядности, либ, компилятора си и его параметров), 146%?

yyk ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

Так в том то и дело, что в случае трансляции в си ничего не надо - инклуд компилятор сам и обработает. В случае самостоятельной генерации IR LLVM количество геморроя при парсинге сишных файлов мне трудно представить, если только используя утилиты llvm/шланга нельзя получить хоть какое-то структурированное представление, годное для дальнейшего использование при генерации того самого ir.

yyk ★★★★★
() автор топика
Ответ на: комментарий от yyk

Я вот нифига не понял, что во что ты хочешь транслировать. C в LLVM IR транслирует clang. Другие языки в LLVM IR транслируют соответствующие компиляторы. Некоторые из них умеют частичную поддержку сишных хидеров для нужд FFI. Что не так?

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Некоторые из них умеют частичную поддержку сишных хидеров для нужд FFI.

Вот это вот. Когда язык только транслируется в си, поддержка сишных хидеров выходит практически бесплатно (вот в том-же модерновом V это выглядит хорошо). Когда язык использует LLVM _иногда_ подобная поддержка есть, как в зиге, непример, но меня одолевают смутные сомнения, что он проглотит любой сишный хидер.

yyk ★★★★★
() автор топика
Ответ на: комментарий от yyk

Когда язык только транслируется в си, поддержка сишных хидеров выходит практически бесплатно (вот в том-же модерновом V это выглядит хорошо).

Нет. В этом случае фронтэнд может про C вообще ничего не знать, и поддержку хидеров один чёрт придётся впиливать. Это довольно ортогональные вещи, если конечно твой язык сложнее полутора макросов.

но меня одолевают смутные сомнения, что он проглотит любой сишный хидер.

А почему он что-то не должен проглотить?

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

А почему он что-то не должен проглотить?

Он, конечно, может, но для этого надо прикинуться какой-то версией какого-то компилятора, со всеми его дефайнами «по умолчанию», со всей его структурой собственных хидеров и т.д.

ХЗ, надо глянуть что там тот-же зиг делает, но по мне это немалый такой кусок работы: разобрать сишный код, чтобы построить AST, чтобы добавив свой AST сгенерировать сишный код, чтобы потом компилятор си разобрал этот код, чтобы построить AST...

yyk ★★★★★
() автор топика
Ответ на: комментарий от yyk

Он, конечно, может, но для этого надо прикинуться какой-то версией какого-то компилятора, со всеми его дефайнами «по умолчанию», со всей его структурой собственных хидеров и т.д.

Зачем? Можно просто использовать существующие хидеры.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Можно просто использовать существующие хидеры.

Ни кто и не говорит, что нельзя. Но это несколько сложнее, чем прочитать файл хидера и запомнить, что __suxx_bloated_struct_size = size_of(*void)

yyk ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.