Nb++ - system budowania, alternatywa dla Make, CMake, Ninja, Meson itd.

3

Witam,
Chciałbym zaprezentować swój projekt, nad którym ostatnio pracuję. Jest to system budowania projektów, który nie używa żadnego języka skryptowego, a przepisy na skompilowanie programu pisze się w C++.

Dlaczego?
Popularne systemu budowania (np. te wymienione w tytule i jeszcze więcej) używają autorskich języków skryptowych do definicji procesu kompilacji projektu. Uznałem, że jest to ciężki proces - parsowanie tekstu nie jest najprostsze, a większość dystrybucji Linuxa i Windows mają już zainstalowany kompilator C++ - języka, który już spełnia kompletność Turinga. Nb++ jest tak naprawdę bibioteką zawartą w jednym pliku nagłówkowym, która daje użytownikowi tz. "przydasie" do skompilowania projektu. Instalacja biblioteki jest banalna! Wystarczy pobrać plik nagłówkowy i zaincludować w swoim programie, który jest odpowiedzialny za kompilację. Sam system budowania działa jak Make - może budować każdy język programowania, więc może być też alternatywą dla np. Cargo lub Ziga.

Jestem ciekaw, co sądzicie o tym projekcie? Czy może on zyskać jakieś praktyczne zastosowanie? Pomysły na nowe funkcjonalności?

Projekt: https://gitlab.com/kamkow1/nbpp
Przykładowy program (kompilacja managera okienek DWM dla X11): https://gitlab.com/kamkow1/nbpp/-/blob/master/examples/dwm/nb++.cpp?ref_type=heads

0

Jest dużo minusów, odpalasz komendy zwykłym system("g++ ...") gdzie ręcznie trzeba podać stringa nazwy kompilatora.
Normalnie to się robi tak, że tworzysz nowy projekt i masz wszystko gotowe do używania i także zależności pobrane jeśli projekt z innych projektów korzysta.
Jeśli mam odpalić zwykłe g++ na jakimś pliku to mam binda pod to, nawet by mi się nie chciało specjalnie C++ programu robić, który tylko std::system wywoła.

Raczej powinieneś iść w kierunku, że twój projekt można łatwo zainstalować jakimś istniejącym package menadżerem, apt, npm, pip.
Potem np. nb create <nazwa projektu> i powinien ci się utworzyć projekt C++ gdzie już jest stworzony pod strukturę plików system budowania i tylko wpisujesz nb build i gotowe.

Jeśli miałbym specjalnie pobierać jakiś projekt kompilować podawać, wpisywać mu nazwy binarek, które ma użyć do skompilowania projektu.
To raczej bym z tego nie skorzystał.

Dodatkowo musisz poradzić sobie z zewnętrznymi zależnościami, pobierać z githuba zewnętrzne biblioteki użyte w programie.

Ja rozumiem jakby to był rok 1990, to wtedy kiedyś tak się budowało projekty.
Teraz w modzie jest prostota.

0

Moim zdaniem to niczego nie upraszcza tylko stwarza nieskończoną liczbę problemów.

4

Jako prototyp w porządku, jeśli chciałbyś żeby to było faktycznie przydatne do czegokolwiek to potrzebne są dodatkowe cztery rzeczy.

  • Uniezależnienie implementacji od biblioteki standardowej i kombatybilność do C++11. Albo najlepiej do C99.
  • Zrównoleglanie budowania
  • Wsparcie dla prekompilowanych nagłówków
  • Wsparcie dla unity builds (nie mylić z silnikiem 3D)

Bez trzech ostatnich zwykły make będzie dużo szybszy także nie będzie można uznać Twojego projektu za realną alternatywę. Na Twoim miejscu zacząłbym od przyzwoitego wsparcia dla unity builds i zrównoleglania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1