mend0za: (karate)
[personal profile] mend0za
Под бодрящие звуки Steppennwolf с воодушевлением, обострённым близким дедлайном, ломаю первую, вылизанную и оттестированную версию своего кустарного кодогенератора.

В настоящий момент дикий мужчина делает полиморфизм и reflection на Plain C + AWK + С Preprocessor.

Да содрогнется любой заказчик от недо-функциональщика на бреющем полёте метапрограммирования.
Cрезающего сосны под корень. Потом верхний слой почвы. Следом гранит. Но в итоге выходящий на около-земную орбиту.

BORN TO BE WIILD! Пусть сдохнут все кто нас не любит.


Гнусные подробности



Есть пространство переменных, имеющих имя и ID, могущих быть 5-ти типов (битовое поле, uint8, uint16, uint32, string и массивы из перечисленных). Их писать и читать. IPMI Config Variables, если кому-то что-то говорит.

Пространство переменных определено в ортодоксальном текстовом CSV-файле. Переменные физически могут быть дьявол знает где. Большая часть - 16KB двоичная область на NVRAM EEPROM, в упакованном двоичном формате. Остальное размазано по системе как джем по бутерброду пенсионера. Legacy формат, окаменевшее дерьмо бронтозавра , нечестивой своей киркой не трожь.

В CSV файле есть директивы препроцессора (ifdef, комментарии), дающие рудиментарное управление конфигурациями. Я заманчиво пообещал заказчику возможность редактировать раскладку переменных из Excel, но пока соскакиваю с темы. Пусть правят CSV руками.

По CSV скриптом на AWK генерятся развесистые данные, описывающие весь этот переменный бред в понятиях мест хранения и представления.

Библиотека на выходе даёт простейшее API вида set_variable_value(), get_variable_value(). И ей начхать на размер хранимых данных, место хранения, организацию и порядок.

А ещё наверху FUSE бантиком (опциональным). Чтобы показать красоту и благолепие. И была ночь, и был день шестой, и закачик сказал "это хорошо!". До того у него ехала крыша от устного и графического материала, сопровождавшего разработку, намечалась истерика от словосочетания "кодогенерация".

Наблюдательный персонаж скажет "ASN.1"! И будет почти теоретически прав. Самопальный, предметно ориентированный, ASN.1 PEP-подобный чугунный самокат с квадратными колёсами из массива ольхи.

Промышленное чугунное литьё самоката сопровождалось починянием примуса в NVRAM EEPROM драйвере. Авторы нашего Linux BSP как на подбор - резиновые изделия N2 размера XXXL. Гондоны и лицензия-суходрочеры, кто не понял.




Особо гнусные подробности



Эмуляция ООП на структурах и указателях функций. Самодельное RTTI. Кустарный Reflection (пригодился в FUSE).

Насладитесь тестовой обвязкой, эмулирующей анально-ориентированный мир MTD в Linux.


EEPROM_IMAGE=eeprom.backup

ifeq ($(ARCH),i686)
$(MTD):
cp $(EEPROM_IMAGE) /tmp/$(EEPROM_IMAGE)
-sudo losetup $(LOOP_DEVICE) /tmp/$(EEPROM_IMAGE)
-sudo modprobe block2mtd block2mtd=$(LOOP_DEVICE)
endif

test: $(BINARY_TEST) $(MTD)
@rm -f *.gcda
./$(BINARY_TEST) $(MTD)

clean:
rm -fv $(OBJ) $(OBJ_TEST) $(DATA_FILE) $(BINARY) $(BINARY_TEST) *.gcda *.gcno core
ifeq ($(ARCH),i686)
-sudo rmmod block2mtd
-for i in /dev/loop*; do sudo losetup -d $$i; done
-rm -fv /tmp/$(EEPROM_IMAGE)
endif


Особенно хороши unit-тесты на Check + --coverage. Покрытие кода тестами предыдущей версии близко к 100%. В ggcov смотреть обожаю, радует глаз.


This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

mend0za: (Default)
mend0za

June 2023

S M T W T F S
    123
45678910
11 121314151617
18192021222324
252627282930 

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 15th, 2025 02:34 am
Powered by Dreamwidth Studios