Отговори на тема  [ 2 мнения ] 
Автоматично викане на C функция от командния ред 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пон Мар 13, 2006 12:59 pm
Мнения: 3855
Местоположение: Габрово
Мнение Автоматично викане на C функция от командния ред
Да кажем че имаме 1 или повече C функции със скаларни аргументи. Има ли инструмент/библиотека (нещо готово) което да wrap-не този код и да получим готов инструмент за командния ред?
В смисъл нещо което да хване типовете на аргументите, да формулира подходящ синтаксис за командния ред, да направи main() който да обработи argv/argc и/или stdin/std:cin (scanf-подобно) и да повика първоначалната функция? Може да е скрипт, код генератор и магия на модерно cpp.
Use case-а е примерно за тестване - ако имаме някакъв тонаж готови функции и трябва да се дадат на маймунки да ги тестват. Или ако има ценни алгоритми които да могат да се закачат на команден ред (pipe-ване) и да си работят.
Някаква аналогия са FFI подходите за връзки между различни езици, или RPC с разните IDL описания.
Идеята идва от една щуротия, с която се занимавах скоро - docopt парсер за командния ред:
https://github.com/docopt/docopt.cpp

Принципно първото ми ровене беше в друга посока и ще питам и него да не пускам друга тема. Търся добра библиотека за cpp (най-добре само хедър) за правене разни инструментчета от команден ред. Това има два аспекта:
- обработка на аргументите (argv/argc) - тук за момента тоя docopt ме радва, има и други идейни неща (CLI11)
- по-важното - работа със стандартния вход std:cin и сие - говоря за инструменти които мога да се закачат към дълъг стрийм от входни данни - примерно cat testcases.csv >> mytool.exe >> mynexttool.exe; в тоя файл може да има хиляди редове примерно, или файла да идва директно от изхода на curl/wget, или пък от tar на някакъв мулти-гигабатен файл
Това второто иска да се парсират по някакъв обявен формат/граматика идващите данни (примерно от оня csv файл, но може и да е нещо бинарно). Очакваният формат в някаква степен си е определен от функцията (или функциите) които са в тоя тул, но за просота да кажем че е само една функция.
Какво в C мога и трябва да интегрирам библиотечни функции и да ги викам в някакъв flow, така искам да мога лесно да го имам и на командния ред.

Та оттам идва и първото ми питане - както при RPC целта е да се хване прототипа и да се знае как да се повика, та и тук търся нещо подобно. Общо взето всеки формат за сериализиране на данни си има приложение за RPC - независимо дали ще е protobuf, msgpack, cbor или по-дървените xml. json.
Със сигурност има дълъг път в който да се анализира C-то, да се извади описание, да се кодгенерира нещо - ама се надявам че "модерното" cpp има нещо хитро в арсенала...

Edit: да допълня - очаквам "нещото" като си знае синтаксиса от прототипа да парсира stdin-а, като намери очаквания ред с данни за викането да викне моя код (синхронно - блокиращо), след което да си продължи да лапа байтовете от stdin-а и пак да се обади като обработи следващия ред и т.н. Т.е. event парсер по подобие на SAX.
Преди време рових доста по темата и бях набелязал няколко подходящи неща, но тогава приоритет беше парсирането на бинарни данни и тия "находки" съм ги затрил. Едното беше Kaitai struct, имаше и разните ANTLR и подобни.


Вто Ное 12, 2019 10:08 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Пет Юни 03, 2005 8:39 pm
Мнения: 1954
Мнение Re: Автоматично викане на C функция от командния ред
https://github.com/argtable/argtable3

_________________
Определянето стойността на дадена величина се нарича ИЗМЕРВАНЕ!


Сря Ное 13, 2019 8:00 am
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 2 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни