LINUX.ORG.RU

собираемся портировать компилятор Си на Common Lisp

 , ,


0

7

Мы с Монком начали портировать portable C compiler на Common Lisp. Получится тот же самый компилятор, но написанный на лиспе. Есть желающие подобровольничать? Репозиторий здесь

★★★★★

Есть. Но с CL я сильно на вы, вам нужны пуллреквесты от новичков? Было бы здорово завести на проекте issue с тегами по сложности. Да и readme файл с общими правилами ведения проекта не помешал бы. Но в целом проект забавный, я бы поучаствовал.

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

думаю, из за отсутствия идей, при нездоровом чесании рук:) Отсутствие творческой мысли,так сказать, порождает чудовищ бесполезные телодвижения

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

Закончил уже что-ли?

От тебя этот вопрос особенно забавно выглядит.

i-rinat ★★★★★
()
Ответ на: комментарий от portquest2016

думаю, из за отсутствия идей

Скорее из-за нежелания воплощать толстые идеи =)

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

Но с CL я сильно на вы, вам нужны пуллреквесты от новичков?

Знание CL требуется минимальное. Актуальней знание Си. Нужны.

За исходник берётся ftp://pcc.ludd.ltu.se/pub/pcc/pcc-20161026.tgz Помощник нужен на каталог cc/cpp. В результате должен получится препроцессор Си.

Файлы ожидаются cpp.lisp, cpp-cpc.lisp, cpc-token.lisp.

Алгоритм переносится 1-в-1. Перенесённый кусок (пока не запускается): https://github.com/Kalimehtar/pcc — можно посмотреть стиль перевода.

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

Если честно - не хочу говорить, но в целом, хотим экспериментировать с различными расширениями, бекендами, генерить FFI и пр. В этом случае выгодно написать компилятор на языке более высокого уровня, чем Си.

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

а жены ваши не против этого ?

anonymous
()

О, а почему бы не портировать GCC? :-) Лол :-)

Если серьёзно, была у меня такая идея :-) Только вот я не нашёл аргументов зачем это надо :-) Копирование уже чего-то существующего - это всегда отставание в общем :-) Потому что пока кто-то что-то копирует, кто-то другой создаёт что-то новое :-) Дело, конечно, ваше :-) Желаю вам удачи! :-)

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

Спасибо, знаем. В Си можно сделать настоящие корутины, а в лиспе - нельзя, поэтому нельзя написать транслятор Си в высокоуровневый лисп.

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

На самом деле пока только monk этим занимается, я так, на подхвате, так что обращайся к нему в основном.

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

Это? Типа аналог llvm?

Можно и так сказать.

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

Почему не на Racket?

Заказчика нет :-). После обкатки на CL, возможно будет версия и на Racket.

Сейчас главное не сломаться, а то я балдею от конструкций в коде вида

typedef struct node {
        int     n_op;
        union {
                int _reg;
                struct regw *_regw;
        } n_3;
#define n_reg   n_3._reg
#define n_regw  n_3._regw
        TWORD   n_type;
        TWORD   n_qual;
        int     n_su;
        union {
                char *  _name;
                int     _label;
#ifdef LANG_CXX
                union   dimfun *_df;
#endif
        } n_5;
        struct attr *n_ap;
        union {
                struct {
                        union {
                                struct node *_left;
                                CONSZ _val;
                        } n_l;
                        union {
                                struct node *_right;
                                int _rval;
#ifdef LANG_CXX
                                struct symtab *_sp;
#endif
                        } n_r;
                } n_u;
                void *_dcon;
#if 0
#ifdef SOFTFLOAT
#ifdef FDFLOAT
                /* To store F- or D-floats */
                struct softfloat {
                        unsigned short fd1, fd2, fd3, fd4;
                } _dcon;
#else
#error missing softfloat structure definition
#endif
#else
                long double     _dcon;
#endif
#endif
        } n_f;
} NODE;

#define n_left  n_f.n_u.n_l._left
#define n_val   n_f.n_u.n_l._val
#define n_slval n_f.n_u.n_l._slval
#define n_right n_f.n_u.n_r._right
#define n_rval  n_f.n_u.n_r._rval
#define n_sp    n_f.n_u.n_r._sp
#define n_dcon  n_f._dcon

И дальше p.n_rval подразумевает p.n_f.n_u.n_r._rval

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

Это значит, что пора спать.

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

В этом случае выгодно написать компилятор на языке более высокого уровня, чем Си.

задача выше среднего конечно
но лозунг - даешь компиляторо-строение а массы - весьма актуален

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

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

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

У меня есть старый учебник С, у которого в конце есть сорцы компилятора, написанные на С. Могу отдать в СПб.

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

Спасибо, но Си развивается и старый компилятор уже устарел. Хотя если скажете, как книжка называется, может быть, мы посмотрим.

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

Это бессмысленно. Ничего не выйдет.

Вот когда ты прав - ты стопудово прав %)

tailgunner ★★★★★
()
Ответ на: но зачем? от anonymous

Зачем корутины или что? Корутины нынче в моде.

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

а потом они этим компилятором будут компилять компилятор лиспа на С... и так далее.

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

а что вы собрались потом делать с этим компилятором

В GNU C есть __asm__ { ... }. А у нас в CL будет (cc ...). Вставки на Си удобней делать.

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

В GNU C есть __asm__ { ... }.

А в sbcl есть VOPы.

А у нас в CL будет (cc ...). Вставки на Си удобней делать.

Вставкам на Си придется договариваться с ГЦ - это непросто. Или выделять в образе отдельную область, неподконтрольную ГЦ, как в ЛиспВорксе.

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

FFI в любой реализации как-то решён.

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

Копирование уже чего-то существующего - это всегда отставание в общем

скажи это линусу

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