LINUX.ORG.RU

Кодогенерация C

 , ,


2

2

Не далее чем вчера, находясь под впечатлением от http://www.computerra.ru/65749/steps/ (в частности, TCP стек в 160 строк), я озаботился поиском вменяемых средств кодогенерации с выводом в сишку и не обнаружил особого разнообразия. Конечно, есть просто обалденные bison, ragel, да тот же protobuf, наконец — но какого-то generic решения я не нашел.

Точнее говоря, есть autogen и m4, но они настолько инопланетными, что идея запилить свой транслятор на сишке, используя bison + flex, не кажется чем-то диким.

Может многоуважаемый all подскажет что-то новое?

P. S. основное пожелание: чтобы входной DSL был легко читаем и модифицируем без изучения тотально нового языка.

Ответ на: комментарий от Solace

golang вообще отличный потомок С

С так же относится к условному пдп11

как golang относится к условному amd64

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

потому что теория - это теория, а физика - это физика.

то что Вы называете физикой, есть не объективная физика, а плод членов в голове некоторых конкретных «физиков». То что развитие железа пошло не по естественному и адекватному пути — пути масштабирования, а по идиотскому — наращиванию тактовой частоты, это не есть что-то природное, и это не значит, что нельзя проектировать железо по другому в принципе.

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

слушай. прекрати позорица

Твое мнение очень важно для меня.

и Пайк и Кей стороники разных но совместимых парадигм.

qulinxao> Кей хочет перейти от римских цифр к арабским

Пайк> ООП - римские цифры

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

продолжай развлекать меня.

ну давай начнём вообще со знаменитого

Кей:«когда я открыл обьектно[ориентированный] подход я не подразумевал С++»

Пайк:ты сам знаешь цитату.

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

что и Пайк и Кей очень критичны к попытке всё и всегда реализовать через «односортную алгебру»((с) Степанов и его утверждение о необходимости наличия многосортной алгебры в основе языка программирования)

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

ну давай начнём вообще со знаменитого

...баттхерта

Кей:«когда я открыл обьектно[ориентированный] подход я не подразумевал С++»

Кей не любит Си++. И? Какой именно вывод ты из этого делаешь и как он относится к DSL и кодогенерации?

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

возможно, но лично для эволюции моих(который я не получал гуманитарного ни классического обучения) взглядов( и не только в программировании но и в целом мировозренчески) я рад что давным давно наткнулся вот на сей абзац:

Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств. Только когда найден набор подходящих доказательств, лишь тогда на этой основе выводится аксиома. Т.е. в математике вы заканчиваете аксиомой

и в дальнейшем также через него знакомство с текстом Мортимер Адлер «как читать книги» и вообще ценность&полезность некоторых мохнатых текстов.

да и вообще https://en.wikipedia.org/wiki/Primary_source

------------------------------------------------------ ну и например знание что Илиада&Одисея были в «Византии» общеобязательным учебным текстом в «школах» оказалось не только забавным фактом но и прояснило(возможно) любопытный факт о некотором пионере(один пионерлагерь) который к 12 годам уже знал в полном обьёме Илиаду&Одисею.

ну и вообще что часто цивилизация и культура воюют друг с другом.

Ж)

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

не соскакивай.

ты попытался макнуть противопоставив Кея и Пайка и негативно меня атрибутировать на основнании того что я их не противопоставляю

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

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

И твои личные «познавательные эмоции» в данном контексте не имеют никакой значимости.

Так же, как и незнание того, что в высших школах до сих пор преподают латынь. Некоторые читают того же Вергилия и того раньше. В дополнение к современным знаниям.

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

Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств. Только когда найден набор подходящих доказательств, лишь тогда на этой основе выводится аксиома. Т.е. в математике вы заканчиваете аксиомой

Вообще, это не особо верное утверждение. Можно сказать, что аксиомы подразумеваются, а затем лишь уточняются. Строить доказательство без аксиоматики вообще невозможно. Этот принцип хорошо и наглядно описал льюис керролл в «Аххилесе и черепахе»

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

ты попытался макнуть противопоставив Кея и Пайка

Не совсем так. Как ты выражаешься, я «макнул» тебя с цитатй. И да, из нее следует, что у Кея и Пайка - противоположные взгляды.

теперь ты меняя тему пытаешься перейти в позицию допрашивающего

Ну это ты предложил с чего-то там начать, но почему-то не продолжаешь. Или твоя глубина понимания идей Кея и Пайка (хотя какие нафиг идеи у Пайка, смешно) сводится к словосочетанию «односортная алгебра»?

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

то есть, иными словами, чтобы строить доказательство, тебе нужны допущения. Например, известный дедуктивный вывод: Все люди смертны. Сократ человек. --> сократ смертен. Как ты мог бы сделать такой вывод, если бы не принял за аксиому, что все люди смертны? Никак. Степанов не прав.

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

что у Кея и Пайка - противоположные взгляды.

если ты их спроецируешь на прямую - а ещё нужным образом сцентрируешь шкалу.

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

qulinxao ★★☆
()

Генерик-решением был бы парсер сишки, который может в двухуровневую сишку — обычную и метасишку. В режиме метасишки было бы доступно AST уже собравшихся модулей, при этом метафункции (макросы, да) могли бы брать их и менять/расширять/декорировать по своему усмотрению прямо где-то между компил- и рантаймом, в одном из серии разворачивающих проходов. При этом прямо на той же сишке, только времени сборки.

#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <meta-c.h> // func_t, struct_t, meta_*

static void __compiletime add_int_serializer(func_t *, const char *); // forward

static func_t __compiletime
make_serializer(struct_t *s)
{
    func_t *f = meta_func_new_for_proto("void *()(%t s, size_t *size)", s->type);
    meta_func_add_source(f, "char *buf = NULL; size_t sz = 0, p = 0;");

    for (int i = 0; i < s->n_members; i++) {

        if (s->members[i].type == meta_get_type("int")) {

            if (!strstr(s->members[i].name, "_tmp")
                add_int_serializer(f, s->members[i].identifier);

        }
        else if (...) {
            ...
        }
        else {
            meta_abort("unknown type %s of member '%s'", s->members[i].type->name, s->members[i].name);
        }
    }
    meta_func_add_source(f, "*size = p; return buf;");
    return f;
}

static void __compiletime
add_int_serializer(func_t *f, const char *id)
{
    meta_func_add_source(f, "while (p+sizeof(uint32_t) > sz) buf = realloc(buf, (sz += MAX(16, sz)));");
    meta_func_add_source(f, "*(uint32_t *)buf = htonl(s->%s);", id);
    meta_func_add_source(f, "p += sizeof(uint32_t);");
}

struct my_struct {
    int x;
    int y;
    int z_tmp; // not serialized
};

// showtime

void *my_struct_serialize(struct my_struct *, size_t *size) = make_serializer(meta_get_struct("my_struct"));

int
main(int argc, char *argv[])
{
    struct my_struct s = { 1, 2 };
    size_t size;
    void *buf = my_struct_serialize(&s, &size);
    int fd = open(...);
    write(fd, buf, size);
    close(fd);
    return 0;
}

Никакого инплейс-шаблонизирующего крестоговна и декларативных танцев с бубном. *_tmp особый случай? Взял да вписал, епт. Естественно этот кошмар можно причесать и выкатить uniserial-meta.h на github. Вот тебе скачать бесплатно фреймворк по автосериализации любых типов с блекджеком и байт-ордерами без боли без операции. Еще можно прикрутить к этому мета-фреймворку Scheme/Lua/JS и выгонять немыслимые ранее конструкции прямиком в компилятор на этапе компилирования. Простым скриптиком (или библиотекой на 10Кб). Можно втыкать ассерты, аспекты, генерить автотесты, трансформировать любой код по-всякому.

Автогены и м4 не работают на уровне AST, поэтому носят лишь регулярно-синтаксический характер и способны на многое только при героических усилиях по парсингу. Усилиях на том, что предназначено не для семантического анализа, а наоборот, для вывода по шаблону.

Я джва года ждал этот метакомпилятор.

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

На самом деле, не особо важно, противоположные взгляды у них были или или нет. Исторический масштаб сильно разный. Один участвовал в разработке оси и некоторого ПО, а другой кардинальным образом повлиял на CS и AI.

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

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

--------------------

вопрос вообще не за эрудицию. повторюсь благодаря не_совершенному Степанову как проводнику - я ознакомился с вполне целостной картиной мира которая имхо более приспособленна для автономного мышления чем штатная картина мира что у школоты СССР, что у школоты США(при всём там разнообразии и отсутсвии явных общеобразовательных стандартов) что у прочей другой школоты.

и повторюсь

https://en.wikipedia.org/wiki/The_Marching_Morons

https://en.wikipedia.org/wiki/Nightfall_(Asimov_short_story_and_novel)

https://en.wikipedia.org/wiki/Anathem

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

Целостная картина мира - это одна фраза «я ничего толком не знаю». Все остальное - всякого рода секты. Ну и видео Степанова без боли смотреть нельзя, прокол на проколе.

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

Что-то я не слышал, чтобы ты ныл конкретно об этом. Рассказы о прототипировании Lua-программ на Си помню, про метакомпилятор - не помню.

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

Целостная картина мира - это одна фраза «я ничего толком не знаю»

Но если ты толком ничего не знаешь, то откуда ты толком можешь об этом знать? Это аналог парадокса лжеца:) Подобная логика уходит корнями в труды Нагарджуны, великого древнеиндийского философа. То есть, следующий шаг после этого — абсолютный релятивизм, или нигилизм. Собственно, наглядно демонстрирует тот факт, что логика — это ни что иное, как переливание из пустого в порожнее:) Никакой самостоятельной ценности она не несет:)

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

Так же, как и незнание того, что в высших школах до сих пор преподают латынь.

тонко. кто-бы этого не знал , верно то что

в данном контексте не имеют никакой значимости.

---------------------------------------------------------------

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

некоторый бурмохи зябы.все зябы быхи. есть ли бурмоха быха?

qulinxao ★★☆
()
Последнее исправление: qulinxao (всего исправлений: 2)
Ответ на: комментарий от Iron_Bug

в стандартах нет битых пакетов, хреновых каналов, перепосылок,

Феерическая чушь. Открываем RFC793 и грепаем по словам retransmit и checksum.

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

Но если ты толком ничего не знаешь, то откуда ты толком можешь об этом знать?

Через эмпирический опыт. Когда модель, которую выстраивает мозг, не совпадает с реальным положением дел.

И тут не надо даже никуда лезть ради такого вывода. Тем более предаваться демагогии. Реально, думал с нашим шизофреником и прочими будет интересно говорить под веществами, но даже тут это сплошная демагогия.

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

Ага. А потом мы восстанавливаем исторический контекст, вспоминаем про греческий национализм Византии, да улыбаемся и машем. Нет ничего «тайного» во владении Гомером.

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

Через эмпирический опыт.

ты исходишь из неявной посылки об объективности действительности(на основе которой можешь по получить опыт эмпирически)

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

дело не в этом. Нужно четко разделять опыт и логику. Логика претендует на то чтобы быть объективной, соответственно независимой от опыта. Там эмпирический опыт, как раз таки заменяется аксиоматикой. Поэтому, любые рассуждения будут напрямую зависеть от аксиоматики. Проблема в том, что в простых задачах аксиоматику адекватную реальности, довольно легко, но в нетривиальных случаях, это как раз и является основной проблемой. Логика — это по сути, свойство ума, любая бабушка на базаре не ошибется с выводами. Человек почти всегда переоценивает значение логики в решении реал-задачь. Построить логическую систему несложно, сложно построить систему адекватную реальности, которая будет работать.

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

кому как.

я же вижу общее

с фразами:

  • программирование это способность видеть/думать задачу на нескольких уравнях абстракции
  • мышление это способность видеть ситуацию на разных уровнях детализации
  • всякое затруднение в программировании можно решить добавлением ещё одного уровня косвенности. (дополнение) кроме инфляции числа уровней косвенности.
  • ранее указанное/замеченное отличие научного факта как такового(что бы это и какой бы комплекс явлений не обозначало) и возможность повторить(реплицировать) этот факт.
qulinxao ★★☆
()
Ответ на: комментарий от Solace

ты слишком рефлекторен. отказ от априорной обьективности действительности не ограничивает мировозрение только солипсизмом.

общеизвестны труды кое какого иследователя который как раз таки вполне качественно пытался получить путём рассуждений объективность.

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

эээ категория нации не применима к доколумбовым временам. сорри.

до определи. или ты про нацосвобод 19 века байрона и прочее?

qulinxao ★★☆
()

Думаю, тему кодогенерации Си можно считать закрытой. Кому хватает скора, могут проследовать в толксы.

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

А неинтересно тебе это, потому что ты этого не понимаешь. Это краеугольный камень данной темы, это именно то, от чего куча великих мыслителей посходило с ума. Ничего интереснее этого для человека интересующегося данным вопросом просто быть не может

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