( TCH | 2019. 08. 12., h – 12:47 )

> Inkább arra, hogy a Makefile (vagy valami olyasmi) nem "csak" annyiból állna, amit a szabvány leír, hanem lennének plusz "nyelvi" lehetőségei - mint ahogy a GNU is megcsinálta a maga make-jét (ami elvileg minden szabványos Makefile-t szabvány szerint értelmez, és ezt egészítette ki néhány okossággal), meg pl. a BSD (FreeBSD) make is megeszi a szabványt, viszont abban is van for-ciklus, if-else-lehetőség, string-manipuláció, stb. Azaz nem mindenféle plusz teszteket hívogasson (pl.

./configure

), hanem több nyelvi lehetőség lehetne benne.

Nem értek egyet. Két okból is.

Egyfelől ez akár egy bloatbuild system történetének kezdete is lehetne: a

make

nem tud eleget, ezért ki "kell" bővíteni; apróságokkal indul a dolog, mint alap programozási dolgok, elágazások, ciklusok és alapvetően ezzel talán még nem is lenne akkora baj, csak úgyis lesz, akinek ez kevés lesz, aztán mindig minden kevés lesz, mert XY problémát még nem lehet benne megoldani és ez oda vezet, hogy egyre több minden lesz belezsúfolva, minek következtében egyre nehezebb lesz az alap környezettel megoldani és akkor jön az, hogy akkor írjuk át C++-ra, vagy rosszabb esetben Pythonra az egészet... Hát nem, a

make

és társai pont azért jók, mert csak arra jók, amire kitalálták őket: az egyszerű buildre. Nem arra, hogy programozz benne. Ha a programod olyan bonyolult, hogy a fordítása maga is elég komplex ahhoz, hogy csak programozottan lehessen megoldani, akkor programozd le az aktuális rendszer shelljében a build folyamatot. Nincs univerzális build system, nem is lehet. Tudod, ami jó mindenre, az nem jó semmire.

A másik ami miatt nem értek egyet, az pont a GNUMake. Rettenetesen tudok "örülni", amikor kiderül egy

Makefile

-ról, hogy ez nem is Makefile, hanem GNUMakefile. Ez persze Linux alatt nem gond, mert ott alapból az van

make

helyett, de pl. Solaris alatt már külön kell telepíteni (

gmake

néven és akkor kezdődik a symlinkekkel való rettenetes gányolás) és akkor még nem is beszéltünk azokról az egyéb platformokról, ahol esetleg egyáltalán nincs ilyen. Nem arról van szó, hogy a GNUMake extra feature-jei ne lennének hasznosak, vagy arról, hogy attól a pár szerencsétlen

if

-től, meg

for

-tól már bloated lenne, hanem arról, hogy ez minden csak nem hordozható; látszólag csak egy

Makefile

van, de aztán kiderül, hogy ez rohadtul GNU-dependens, azaz a portabilitást sikerült vele jól seggberakni, ez már nem crossplatform. A Make az Make, az mindenütt ugyanaz, mert nem lehet más: a POSIX leírja, hogy mit kell tudnia. Ez a lényege. Ettől lesz hordozható. Ha ettől eltérsz, lábonlövöd vele a forrásod hordozhatóságát. Megint csak azt tudom mondani, hogy ha egyéni igényeid vannak, akkor azt programozd le a rendszer shelljében. Az is hordozható. Shell mindenütt van, még AmigaDOS, vagy MS-DOS alatt is. Ha valami nagyon kell: csináld magad és ne függj mindenféle Linux és/vagy GNU-dependens vacaktól. (A Python-dependens kulatengerekről meg inkább ne is beszéljünk...)

> Pl. a saját statikus honlapgenerátoromban is igen jól jött, hogy van lehetőség for-ciklusra.

A honlapod egyébként kurwa jó, nekem nagyon bejön. :) Főleg az, hogy nincs JS. (De a saját programok még mindig 404, az két év óta még mindig WIP? :) )
Viszont azért ne keverjük össze egy személyes honlap makróalapú felépítését, komplex C/C++ projektek buildelésével, mert nem ugyanaz a kategória.

> Én is így értettem. Értem, hogy szívás, de ettől szerintem még a szoftver lehet korrekt és jól megírt, csak a felhasználási környezete (dokumentáltan) megszabott (mint ahogy lentebb írtad a TCC-t).

Hát azért van egy kis különbség a C fordítóktól elvárt minimumot simán teljesítő TCC és egy az ICCCM szabványt leszaró, WM-dependens program között. :) Az utóbbi egészen pontosan hogyan is lehetne korrekt és jól megírt, ha egyfelől szembemegy a direkt az egységesség kedvéért lefektetett protokollal, mert ő jobban tudja, másfelől meg csak egy WM alatt megy? Nem, akkor lehetne korrekt és jól megírt, ha ICCCM compliant lenne, ahogy az elvárható és minden WM alatt menne, ahogyan az elvárható, de ez mellett ki tudná használni a "szívügy" WM cuccait. A "megyek mindenütt, de XY alatt jobban/gyorsabban", az oké, a "csak XY alatt megyek", az nem oké. Ez a különbség. A TCC-nél nem elvárás, hogy mindenben jobb legyen, mint a GCC, vagy a CLang. Az az elvárás, hogy C-t tudjon fordítani és ezt tudja is.