LINUX.ORG.RU

Ищу гайдлайны по написанию C-API

 ,


0

4

Нужно написать API к либе на Rust (ну или C++, суть не меняется). Проблема в том, что в сишке я 0. Посоветуйте хорошие гайдлайны по написанию API.

Интересует:

  • именование структур, полей, функций
  • кто должен отвечать за выделение/освобождение памяти? Нужны ли свои init/destroy или пусть человек сам мучается?
  • какие типы лучше использовать? int vs int32_t.
  • как возвращать ошибки?
    • void method(char **error)
    • const char* method()
    • int/char/enum?
  • нужны ли фукнции для инициализации нетривиальных структур?
  • и тд.

Нужно чтобы сишники камнями не закидали.

★★★★★

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

если первичное применение API - «растовскую либу из Qt дёргать» то соглашения об именах разумно брать Qt-шные и танцы вокруг ошибок тоже в их стиле (не надо взрывать мозг программисту внезапными решенями).

Напишите простой семпл(2-3-4шт) на Qt который дёргает ваше API и крутите туда-сюда интерфейс пока не он не перестанет глаза резать и не станет удобным. Хотя как вы это сделаете с «0»-вым знанием C/C++ совершенно не понятно

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

При чём тут подходы Qt, если «прослойка» на сишке?

У меня нулевое знание С, а не C++.

2 примера использования у меня уже есть.

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

вот с ссылок на свой проект и надо было начинать, а не спрашивать про неведомые «гайды по API строению» :-)

у вашего проекта есть «предок» с устоявшимся API - вот так и делайте. Максимально насколько можно близко, чтобы можно было сравнивать и портировать. А одновременно сверху Qt-шные(С++) классы как принято в Qt.

PS/ делать на Rust библиотеку чтобы потом через C-ABI использовать её в Qt - это стильное развлечение :-)

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

делать на Rust библиотеку чтобы потом через C-ABI использовать её в Qt - это стильное развлечение

Это только один вариант использования. Ну и кроме раста такую либу не на чем писать.

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

Ты же знаешь, что файловый дескриптор не обязательно относится к файлу?

ога, именно поэтому он называется файловый дескриптор. Файловый, джонни, файловый.

капча Seestraße Avenida. what can I say...

anonymous
()

Нужно написать API к либе на Rust (ну или C++, суть не меняется). Проблема в том, что в сишке я 0. Посоветуйте хорошие гайдлайны по написанию API.
Нужно чтобы сишники камнями не закидали.
Проблемы сишки меня мало волнуют. В расте у меня error-chain, то есть там простыня может быть.
Зачем так сложно? У меня C-API для галочки. Сомневаюсь что оно кому-то, кроме меня, понадобится.
Если уж понадобится моя либа - пусть на расте лабают.

Прелестно))

Deleted
()

Ну и чо? Си не нужен да. Переписал всё на ржавом.

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

Тут я уже ничего не скажу, крайний выбор за тобой.

deep-purple ★★★★★
()
Ответ на: комментарий от RazrFalcon

В туалет по-большому сходи. И выкинь из башки дурь!

Есть С, он годится абсолютно для всего на свете. Есть С++, он годится для требующих ООПщину задач. Больше ничего не нужно!!!

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

Эдди, ты? Не будь таким категоричным. make и sh тоже языки, хз как не потеряв в удобстве заменить их c/c++

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

Это несколько иное.

Скажем, LaTeX — тоже язык программирования. Тьюринг-полный. Но никто на нем программы не пишет. Естественно, я латехом пользуюсь, т.к. больше никаких вариантов сверстать документы нет.

И жабоскриптом приходится пользоваться, хотя жабоскрипт — говно!

Но всякие перлы-пхытоны-расты-го и т.п. муть — это уж перебор! Зачем на все это говно программеров распалять, если можно было бы дать этим укуркам ломом по башке и заставить писать исключительно на С/С++! Представь, какой выхлоп тогда был бы.

А они, уроды, сидят и велосипеды на очередном говноЯПе переписывают вместо того, чтобы сделать мир лучше!

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

Какое счастье, что не приходится жить в «мире лучше» по версии Эдди.

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

Но никто на нем [LaTeX-е] программы не пишет

Смотря что подразумевать под программой. Преобразование некоторых данных в другой формат согласно заданному сценарию - тоже программа. Таким образом, программы на LaTeX всё-таки пишут. Ты же не считаешь, что под программой можно понимать только нативный бинарь?

javascript

Ну и да, представь вэб на C и Segmentation fault браузера при попытке исполнения кривого кода с сайта

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

Ага, по процессу на страницу) А потом вот это: buy more memory :-) Не суть, ты же понял, о чём я - vm даёт некоторые возможности по контролю, причём без привязки к аппаратуре

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

Если бы браузеры писали люди, то и 1000 процессов того же огнелиса или хромоногого выжрало бы от силы пару сотен мегабайт!

Если что, неактивные «спящие» вкладки можно сразу кэшировать на диск, высвобождая память. А неактивные вкладки с действиями (где какой-нибудь скрипт что-то делает или же видео/музон играет) — кэшировать частично.

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

неактивные «спящие» вкладки можно сразу кэшировать на диск

Хм... Это тот же своп получается, только ещё медленнее, ибо совсем не ленивый :-) Хотя, может я не совсем понял, о чём ты

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

Не влезет.

Можно сделать как в винапи. Функция возврата строки, принимает char*, возвращает int - количество символов, включая \0. Если указатель на входе null - просто возвращает размер, иначе заполняет буфер. Соответственно 2 вызова, между ними аллокация буфера достаточного размера.

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