Fórumok
Sziasztok!
Tudtok ajanlani olyan konyvet, ami a C programozas okoszisztemaval foglalkozik (Linux alapokon)? Olyan konyvre gondolok, ami altalanosan hasznalt eszkozoket, es praktikakat reszletezi. Pl. Build eszkozok (CMake, Makefile), unit teszt konyvtarak, bevalt konyvtar struktura stb.
Egyik feltetelem, hogy ne legyen IDE specifikus.
Magat a C nyelvet nem kell kifejtenie, arra van mas forrasom :)
Hozzászólások
Pere László: Unix – GNU/Linux – Programozás C nyelven
Koszi az ajanlast, de nem ilyen jellegu tankonyvre gondoltam.
Olyan tankonyvet keresek, ami a Javas JUnit/Maven/Gradle eszkozok C nyelvu megfelelojerol szol.
Lambda calculus puts the fun into functional programming
Azt a C-t rust -nak hivjak ahol ilyesmit talalhatsz.
Nincs elterjedt kozosen hasznalt resz ezekre.
A C libeket linux distrok terjessztik, nincs egyseges elterjedt cargo.
Unit testeket mindenki ugy csinal ahogy akar.
Fordiasi flagak segitesere van a pkg-config.
Forditas managelesere sok tool van, Autotools talan legosibb viszonylag elterjedt.
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
Anno beleneztem a Rust-ba, es igazad van. Annal az okoszisztema majdnem a kezdetektol fogva jol definialt.
Igazabol a kivancsisag is hajt, hogy milyen egy jol megirt C program, illetve, hogy kepes vagyok-e menedzselni egy nagyobb projektet ezen a nyelven.
Eddig amiket irtam C-ben, az nem volt tobb par ezer sornal, es nagyjabol egy lepesben keszult egy vegrehajthato fajl.
A tervem, hogy egy modularis projektet irok, es a lehetoleg szeretnem jol elkezdeni.
Az autoconf-rol erintolegesen olvastam egy kb 10 oldalas leirast, hogy hogyan mukodik, de a Makefile generalasnal (compiler cserelesnel) tovabb nem nagyon jutott. Ha jol gondolom kicsit tobbet tud ennel.
Szerinted a CMake-kel vagy az autoconf-al erdemes inkabb foglalkozni?
Lambda calculus puts the fun into functional programming
https://mesonbuild.com/Simple-comparison.html
https://mesonbuild.com/Comparisons.html
autotools sok tanulast igenyel es lassu, de sok "regi" project hasznalja, mert sok-sok platfrom tamogatasa eseten ez egy jart ut.
Erdemes megnezni, mert valoszinuleg bele fogsz futni es lehet valamit bele is kell javitani.
Ha vegtelen +1 platfrom tamogatasa nem a fo cel, akkor massal probalkoznek.
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
Nézd meg ezt: https://bazel.build
Szerintem jobban jársz vele, mint a CMake-kel vagy a Mesonnal.
man make
make-ügyi érdekesség: https://accu.org/journals/overload/14/71/miller_2004/
Erdekes cikk.
Az en strategiam az, hogy azokat a reszeket, amik egyseget alkotnak azokat egy-egy .so fajlba rakom. Kb egy alprojekt lenne a projektben.
Az .so fajlra hivatkozo al- vagy foprojekt meg fuggeni fog az .so fajltol (de nem modositasi datumatol), es annak a fajlnak a publikus fejleceitol (vagyis nem mindegyik headertol).
Az kerdeses szamomra, hogy a modositasi datumot ki lehet-e iktatni a Makefile-ban, de ennek meg utananezek.
Lambda calculus puts the fun into functional programming
Valami ilyesmire gondolsz?
https://doc.lagout.org/operating%20system%20/linux/Beginning%20Linux%20…
(én ezt használtam, időnként még most is előveszem)
> Sol omnibus lucet.
Igen, hasonlora. Foleg a 9. fejezet (Development Tools) es a 10. fejezet (Debugging).
Lambda calculus puts the fun into functional programming
Akkor talan ez is erdekel:
http://ptgmedia.pearsoncmg.com/images/013147751X/downloads/013147751X_b…
Mastering the Art of Problem Determination
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
Koszi a linket.
Jo konyvnek tunik. Olyan teruletekkel foglalkozik, amikrol ugyan tudtam, hogy leteznek, de nem foglalkoztam melyebben veluk.
Kifejezetten hasznosnak tunik az strace fejezet, illetve a gdb-be is ugy tunik melyen belemegy (legalabbis gondolom, ha 80 oldal csak arrol szol)
Erdekel az is, hogy mi az ELF es a PIC (utobbirol nagyjabol csak annyit tudok, hogy kell az .so letrohozasahoz)
Lambda calculus puts the fun into functional programming
wow. Köszi, ezt lopom
Mentettem, köszi...
> Sol omnibus lucet.
Wow, ez egy egész jó könyv. Jól össze van szedve benne, minden egy helyen. Bár azért vannak benne elavult dolgok, Gtk+-t kb. senki se használ már, de nem tartom kizártnak, hogy az ott írtak egy része használható még Gtk3-4-en. Ezen a ponton el is értük, amiért hozzászólok: az ilyen linuxos és fejlesztési témákat nem ajánlott könyvből tanulni. Ez egy régi világból visszamaradt beidegződés, hogy mindent könyvből, egy helyről összeszedve. Ma már olyan gyorsan változik, bővül ez az IT szakma, hogy a könyvek egyszerűen nem tudják tartani ezzel a lépést, mire a szerzők átírják, lektoráltatják, a nyomda tördeli, kiadja, terjeszteni, az évek kérdése, addigra elavul az update is benne. Ezt netről érdemes tanulni, meg gyakorlati példákat nézni, hogy pl. nagyobb projekteben hogy szól a Makefile, mit hogy oldanak meg.
Még ha valami elméleti alapról lenne is szó, pl. programozás alapjai, algoritmusok, C nyelv, azokat lehetne könyvnől, mert maga az elméleti alap nem nagyon változik, de a gyakorlati vonatkozások, meg ezeken felüli rész állandóan.
“A computer is like air conditioning – it becomes useless when you open Windows.” (Linus Torvalds)
Jól össze van szedve... aha.. "Querying the CD Database" Just what I need :D
Irany a gitlab/github es keress ezekre lib-eket, ha jo fej a fejlesztije szeo doksikat utott ossz a hasznalatarol
elso talalat a google-ben arra hogy "c unit test library" https://en.wikipedia.org/wiki/List_of_unit_testing_frameworks#C
unit -test frameworkot osszedobni xUnit outputal nem egy olyan dolog amiert egy C koder a szomszedba megy.
Ha konyvet irnal melyiket tenned bele ?
Melyik az elterjedt ?
BTW, coverage:
https://gcc.gnu.org/onlinedocs/gcc/Gcov.html
BTW, Van olyan C project ahol teszteket masik csoport irja , es nem is C -ben.
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
Oszinte leszek, nem irnek rola konyvet, de ha irnek is nem emelnek ki egyetlen frameworkot sem (talan a munit-ot hasznalnam peldanak), mert pont hogy nem a framework a lenyeg, hanem az elmelet/filozofia.
Es igen, egy nagy projektnel joesetben van kulon test team aki megirja nem csak a unit de az autotesteket is. Sot meg csak nem is ok tesztelik hanem a ci pipeline.
De en arra irtam hogy ha tanulni akar, akkor akkor egyszeruen felmegy a googl-re/github-ra/gitlab-ra es kivalaszt egyet es hasznalja. Jok a konyvek, de kb csak a tesztelesrol lehet irni egyet es van is sok. Es akkor nem beszeltunk mas kerdesekrol. Mert a fejlesztes ma mar nem csak annyi hogy kodot irok, ot van a teamwork, a scrum, ci/cd, sot a mai fjelesztok jo ha kepben vannak a containerekkel, felhokkel, tudja mi a queue management, stb., stb.
Elmultak mar azok az idok, amikor egy fejleszto megirt egyedul egy SAP-hoz hasonlo rendszert monolitikusan egy vastagkliensben evek alatt.
De éppen azért kellene legalább egy útról könyv, hogy meg lehessen tanulni úgy, hogy nem kell ezer féle forrásból kitúrnod, hogy mit hogy kell csinálnom, ami ugye egy kezdőnek rémálom. Ugyan ezen okból kellene könyv a buildről is. Ezek olyan területek, amiken - lássuk be - egy sokat megélt profi is próbálkozgat, meg addig tákolja ameddig éppen nem kezd el működni, meg maga sem érti az éppen használt toolok teljes lelkivilágát.
Kezdőnek még rosszabb, nekik kellene egy kijárt út, amin csak végig kell menni. Aztán amikor már abban eligazodik, akkor megismerheti a többit is.
Hat erre vannak az egyes cegeknel a ramp-up-ok meg a mentoring. Magadtol megtanulni ezeket a dolgokat szinte mission impossible. Raadasul nem is biztos hogy kell, mivel megtanulsz valamit aminek majd a munkad soran semmi hasznat nem veszed. En azt mondanam, hogy inkabb olvass cikkeket a teged erdeklo temakban (dzone, medium) es majd ha kell akkor celiranyosan megtanulod amire tenyleg szukseged van. Vagy mar en vagyok tul oreg ahhoz hogy olyanba tegyek bele effortot aminek nem latom a megteruleset a befektetett energia alapjan :D
Azt gondolom hogy a filozofiaval es best practice-ekkel kell tisztaban lenni, a tobbi jon magatol, kenyszerusegbol :D
Ugy erzem van jelentosege annak, hogy milyen teszt keretrendszerrel kezdi a csapat a fejlesztest,. Kulonosen a C nyelvnel ugy latom, hogy rengeteg parameter van, amit figyelembe kell venni. Pl. van-e heap protection, leak detection, segfault handling, vagy egyeb modon kell a memoriat ellenorizni.
Tesztelestol fuggetlenul rengetegszer talalkoztam olyan projektel (Nem feltetlenul C) aminel utolag derult ki, hogy egy framework nem tamogat bizonyos muveleteket, vagy egyenesen szabotalja a fejlesztest.
Github/Gitlab/stb. projektek olvasasa, vagy a lmgtfy szamomra nem segit a megfelelo eszkoz kivalasztasaban, ezert nyitottam ezt a forumtemat.
Per pillanat sajat keszitesu teszt frameworkkel dolgozom, ami implementalja az xUnit alapveto fuggvenyeit (assertTrue, assertEquals, setUp/tearDown), meg valgrind-al ellenorzi a memoriat, de optimalisabb lenne egy rendes teszt kornyezet.
Van rengeteg konyvem arrol, hogy mit kell elernem, hogy egy projekt sikeres legyen (Agilitas, Task/card management, CI/CD). Ezek mind hasznosak abban, hogy megertsem mi az ami hianyzik a projektbol, de minden programnyelvben mas eszkozoket kell hasznalni, hogy a konyvben leirtakat alkalmazni is lehessen.
Lambda calculus puts the fun into functional programming
Koszonom a tippet a Gcov-ra. Nem is sejtettem volna, hogy van megoldas coverage meresre olyan nyelvekben, ami gepi kodra fordul. (Ahogy latom ez is csak gcc-vel es optimalizacio nelkul)
Lambda calculus puts the fun into functional programming
https://llvm.org/docs/CommandGuide/llvm-cov.html
Nem csak coverage reporta jo,
ez (szomszedai) alapjan maga a fordito is tud optimalizalni, illetve neked is van egy profil-od arrol hogy merre megy el az ido.
https://en.wikipedia.org/wiki/Profile-guided_optimization
Amit nem lehet megirni assemblyben, azt nem lehet megirni.
Nem könyv, de hasznos lehet ez is:
https://mesonbuild.com/Manual.html
Nem tudtam, hogy letezik projekt CMake, autoconf meg make osszefogasara. Mindenkepp belenezek.
Van esetleg arrol tapasztalatod, hogy ez a flow leirhato-e benne?
- build .so file
- unittest .so files
- generate report
- build executable (combine .so files)
Valamint a unit teszt eseteben a fuggosegek mockolasara van-e lehetoseg mondjuk az LD_LIBRARY_PATH allitgatasaval?
Lambda calculus puts the fun into functional programming
Hasznos lehet ez is, ha ki akarod nyomtatni az egészet és be akarsz gyújtani vele...
Könyvet nem tudok ajánlani, de nálunk kb. az alábbi van. (FW project vagyunk, de van egy linux API shared library -nk, és pár linux demo és teszt alkalmazásunk is.) Sajnos a C/C++ régi nyelv. A modern nyelvek alapból integrálják az évtizedes tapasztalatokat, ez itt nyilván hiányzik.
Open-source project vagyunk, igyekszunk nyílt toolokat használni. Nem állítom, hogy nincsenek jobb toolok a fentinél, de open-source -ban jelenleg ez egy élhető rendszer.
Biztos kihagytam ezt-azt, de nagy vonalakban ez a "szabvány" környezet.
Pár további gondolat:
- Egy csomagkezelő nyilván erre is jó lehet.
- A yocto tud ilyet, csak nem tudom meg lehet e úszni a teljes ökoszisztémát.
- Valójában a ccache is hasonló, esetleg rá lehetne gányolni a célra, ha fölé tennénk egy szkript réteget.
sub