Před 30 lety byl Fortran základ u nás řekněme na minipočítačích řad ADT4500, SM4, případně na mainframech.
Mimo východní blok už dávno frčel také UNIX a VMS. Céčko už hrálo dost zásadní roli.
Ale před 40 lety Fortran základ byl. Najdete jej dodnes a mnoha dnešním lepičům by kurz jeho základů neškodil. Je užitečné mít nadhled - ale k tomu musí člověk dospět...
Fortran prinasa nespravne programatorske navyky. Bol to de facto prvy vseobecne pouzivany programovaci jazyk a navrhari este celkom dobre nevedeli co robia. Teoria jazykov este bola v plienkach (ak nejaka bola). Rozne chyby v navrhu sa mohli identifikovat az potom, ako vznikol fortran.
Fortran sa oplati vediet ako kuriozitu, podobne ako sa oplati vediet citat staroveku aramejcinu. Na priucenie sa niecomu je bezcenny.
Spis by kazdej mel vedet, ze ve vysledku je z ty jeho patlanice strojak ... a mel by povine aspon 50 radku svyho kodu do nej rucne prepsat, aby se na vlastni voci presvedcil, jakou prasarnu to vlastne vytvoril.
Ccko je paradni predevsim v tom, ze co z toho ve finale vyleze je pomerne jasny uz ze zdrojaku.
Tak tady je spis otazka kde je chyba :). Sice jste neuvedl konkretni pripad operace. Ale od jakehokoliv trochu inteligentniho prekladace, ktery vy pro jaky hw kompiluje bych ocekaval podobne optimalizace automaticky. Pokud se nedeji je chyba v prekladaci a ne v programatorovi.
Osobne jsem zastancem ze kazdy usetreny takt ma cenu, ale ne za cenu prehlednosti kodu (az na vyjmecne pripady). Takze napriklad nasobeni dvema urcite nebudu nahrazovat bitovim posuvem. Operaci modulo budu sice optimalizovat, ale to jen tak aby to davalo smysl, aneb operator modulo pouziji, jen se postaram o to aby ve statisticky nejcastejsich pripadech se jednalo o deleni/modulo konstantou.
Jsem se samozrejme upsal. Na konci jsem chtel zminit ze vyuziji vlastnosti ze pokud kompilator vi jakou hodnotou se provadi modulo, tak se muze vyhnout deleni a kdyz vim ze se nakonec deleni nevyhnu z duvodu nasledujici ci predchazejici operaci tak se podle toho zaridim (a i to lepsi prekladac zvladne)
Narazal som na:
"Spis by kazdej mel vedet, ze ve vysledku je z ty jeho patlanice strojak ... a mel by povine aspon 50 radku svyho kodu do nej rucne prepsat, aby se na vlastni voci presvedcil, jakou prasarnu to vlastne vytvoril."
To ze kompilator vytvori spagetti kod, ktory bezi na konkretnom procesore, rychlo je v tomto kontexte irelevantne.
Dnešní překladače tam, za běžných podmínek, bitový posun nanejvýš pravděpodobně dají.
Ale o to já se nepřu. Prostě nevidím nic špatného na takové konstrukci, pokud jsem si vědom, že zrovna na tomto místě to má být rychlé(pravděpodobně to pak trkne i toho, který to někdy po mně bude číst a upravovat). Poznámka v kódu pak odstraní případnou nejasnost.
Udržovatelnost zabíjejí daleko spíš čuňata, která se neobtěžují dodržovat domluvenou nomenklaturu a z identifikátoru proměnné pak na první pohled není vidět, zda jde o argument funkce, lokální či globální proměnnou a také nejde odhadnout co v ní je(jde li třeba o bitové pole, čítač, hodnotu signálu atd...). O tom, že jsou třeba ještě schopni se z funkce vracet na několika místech raději nehovořit...
No to je teda objev, ze k prasarne existuje jeste vetsi prasarna a ze k tezko udrzovatelnemu kodu existuje jeste hure udrzovatelny kod...
(Na druhou stranu zrovna madarska konvence a varianty, coz pocitam to, co v nejake podobe navrhujes, dneska je ponekud za zenitem, protoze IDE a moderni jazyky...)
Jasne, mnohem lepsi je mit mikroptimalizovany kod (coz je pro vetsinu prekladacu vec, ktera spise uskodi nez zlepsi), ktery je navic hure citelny a udrzovatelny, ale co kdyby to tam nahodou prekladac nedal :-D
Nehlede na to, ze o optimalizacnich algoritmech soucasnych prekladacu evidentne nic nevis