LINUX.ORG.RU

Альтернативы штатному препроцессору Си

 ,


3

5

Собственно, сабж. Си, в отличии от многих других языков, обладает весьма скудным встроенным макроязыком (и С++ тоже, но там хотя бы есть куча штатного сахара из коробки + шаблоны). Возможно, существуют какие-то проекты по исправлению этого недоразумения?

Мне нравится концепция Vala. «Компилятор» этого языка по сути конвертирует ООП-код в plain C. Но, увы, он гвоздями прибит к glib, что очень плохо. Нет ли подобных проектов, но без привязки к каким-либо библиотекам?

Мои хотелки - некоторый уровень синтаксического сахара. Хотя бы наследование структур. В идеале, конечно, классы с виртуальными методами. Всяких исключений, множественного наследования, RTTI и т. д. не нужно.

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

★★★★★

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

этот человек, который Java ставит в один ряд с Qt, судя по всему, мало в чём разбирается. накатал полтора приложения на коленке и решил попробовать ООП на контроллерах. да, оно проканает для задачек типа школьной лабораторки. но не более. хотя бы потому, что в контроллерах основная работа висит на прерываниях, а там не до развесистой клюквы. да и просто не нужно, как показывает практика.

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

Не очень хороша. Почему? Ну сравни информацию об ошибке, которую выдает компилятор, когда она в простом коде и когда в макросе.

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

Aroop предлагает использовать свою библиотеку как альтернативу glib. Профиль POSIX использование glib не убирает.

Мне понравилось то, что получается если использовать Compact-классы. Вот только бы убрать #include <glib.h> и использование всяких gint и g_new (есть же stdint.h и calloc). Меня полностью устраивает отсутствие исключений, асинхронных методов и прочих вещей, которые требуют специальных библиотек.

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

Как-то совсем урезано получается без библиотек и с Compact-классами. А статически нельзя линковать?

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

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

и почему именно ООП или сахару хочется, и какого (на уровне фич).

и да, может что-то в духе kencc из Plan9 (или расширений GCC для расширений из Plan9) подойдёт?

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

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

Хочу всю периферию запихнуть в классы для удобной работы. А потом написать классы для всяких датчиков, серв и прочего. Причём, хочу активно использовать полиморфизм. То есть, условно говоря, I2C расширитель портов должно быть можно использовать точно также, как и обычные GPIO (в том числе передавать во всякие другие классы, которые принимают GPIO-пины как параметры).

Сейчас я использую С++, но я понял определённую бесперспективность данной затеи - если я захочу пойти дальше самых жирных микроконтроллеров типа STM32 в сторону AVR и 8051, например, то меня ждут большие проблемы (хотя памяти вполне может и хватить - не хватит поддержки компиляторов). Получается, что мне нужно в итоге получать сишный код, ибо компилятор Си есть везде.

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

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

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

Так ООП не проканает, потому что подходит только для простых задач, или не нужно, потому что задачки простые? %)

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

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

Без шаблонов и типизации хотя бы уровня Си++ это не даст значительного профита.

tailgunner ★★★★★
()
4 мая 2016 г.

Но, увы, он гвоздями прибит к glib, что очень плохо. Нет ли подобных проектов, но без привязки к каким-либо библиотекам?

posixvala

CYB3R ★★★★★
()

Для полноты картины: cog

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