A nap képe: az elavult forráskód kikommenteléséről

 ( trey | 2019. június 30., vasárnap - 15:00 )

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Amúgy nem is értem. Nálunk az ilyen olyan -2-t kap gerrit review-n, hogy füstöl. :DDD
--
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." John F. Woods

Nem, ez nem a kikommenteles. Ez az, amikor a regi design divjere rapozicionalid az uj design divjet. A kikommenteles nem latszik.

+2 Looks good to me, approved

-------------------------
Roses are red
Violets are blue
Unexpected '}' on line 32

Egy kikommentezett kódnak lehet információ tartalma.
Igaz, a fenti képnek is: Mekkmester ügyködött.

Sőt van: "Nem ismerem a verziókezelő fogalmát és/vagy nem (is) akarom használni ®™"

Tuti nincs más lehetőség. Főleg, ha te mondod.
Az ilyen fantáziadús okoskák miatt lehet az, hogy a legújabb gcc-ben van jó pár algoritmus, amit egyszerűen nem lehet úgy megírni, hogy ne pampogjon a fordító.

Lehet, hogy ott az algoritmussal van a baj, és a fordító csak előzékenyen figyelmeztet, hogy hülyeséget akarsz :D

Az esetek jelentős részében, és mi van a többi esettel. Egyszerű példa:
Keresés, egy ciklusban. Ha megtaláljuk amit keresünk, örülünk kilépünk return-al visszaadva az eredményt. Ha nincs találat az fatális hiba. A ciklus után dobunk egy kizárást, vagy hívunk egy függvényt ami nem tér vissza. Ekkor ha van return a függvény végén, akkor az IDE is és a fordító is ugat, hogy minek, ezt nem hívja meg senki. Ha nem rakok a végére return-t, akkor az a baj hogy miért nincs return, az mindig kell a függvény végére, ha az visszaad valamit.
Igaz, le lehet ezt írni úgy is, hogy se a fordító se az IDE ne ugasson, de hosszabb, semmivel sem olvashatóbb, és nem is hatékonyabb (bár az optimizáció miatt valószínűleg mindegy).
Több mint 10 éve kezdtem bele egy project-be. Mindig baromi kényes (voltam) a warning-okra, de ahogy "fejlődik" az ide és a fordító, egyre reménytelenebb a helyzet, egyre több olyan warning van, amit csak teljesen értelmetlen módon tudok eltüntetni, vagy a kompatibilitást veszítem el.

Ezt érdekesnek találom. Adott a következő kód:


const int* find(const int* begin, const int* end, int value)
{
for (const int* it = begin; it != end; ++it)
{
if (*it == value) { return it; }
}
throw int(0);
}

(throw int az egyszerűség kedvéért)
Kipróbáltam két fordítóval (clang, gcc), két standarddal (-std=c++03, -std=c++17), warningokkal (-Wall -Werror -Wextra), és egyik sem panaszkodott, ahogy azt én megszoktam.

Csak kíváncsiságból, milyen platform, milyen fordító?

Az ide QtCreator a fordító g++ 7.4. Az opciókat nem néztem, az van, amit a QtCreator alapértelmezetten beállít.
A project kb. 3 évvel ezelőttig fordult warning-ok nélkül, aztán jöttek csőstül. A Windows VC szigorúbb volt, de azért ott is meg tudtam oldani, régebben.
Az igazsághoz hozzá tartozik, hogy a fordítási opciók, és pragma-k megadásával eltüntethetőek a warningok legtöbbje, de a francnak van ideje még ezzel is vacakolni. Van enélkül is éppen elég probléma. (Itt éppen off.: most azért kell átírnom az egyik tool-t mert a HW gyártók az SNMP-ben egyszerűen képtelenek betartani az ajánlásokat. Kivétel-kivétel hátán, most inkább átírok minden lekérdezett értéket felülbírálhatóra, mert verzióról verzióra más f@szságot találnak ki. A project: https://github.com/csikfer/lanview2 )
És az is igaz, hogy a szigorodás leleplezett pár hibát is, de több olyan megoldást is megfújolt, amivel nem igazán értem mi a baja, vagy mi köze hozzá (pl. a hibakezelő makróim).

A te barátod:
__attribute__((noreturn))

Aztán miért?
(Csak gcc -nél, VC esetén "__declspec(noreturn)".)
Meg van adva, pont ez a baj. Enélkül, a végére biggyesztett (amúgy felesleges) return esetén legalább hallgatott.
Ja, és volt olyan gcc verzió, ami leszarta ezt az attributumot.

Nem feltétlenül. Akad sok forrás, amit a gcc-5.x simán lefordít (esetleg warningol), a gcc-7.x.x pedig errorral leáll. Az algoritmussal nincs baj, mert a gcc-5.x-el lefordított program hibátlanul működik.

-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.

Elismerem, fel szoktak bosszantani az olyan emberek, akik mindent kizártnak tartanak, amiről Ők nem tudnak, nem jutott eszükbe, vagy most éppen ilyet nem tudnak elképzelni. Az élet mindig bonyolultabb/összetettebb annál, mint amiről már hallottunk, eszünkbe jutott, vagy amit el tudunk képzelni.
Van erre egy egy szavas jelzőm, de azt most nem írom ide, mert az tényleg személyeskedés lenne.

Elismerem, engem is fel szoktak bosszantani szemelyeskedo idiotak.

Eppen ezert most inkabb visszafogott leszek, remelve a pozitiv fogadtatast a konstruktiv kritikara es tukor tartasara.

Ismerem Panthert szemelyesen nehany eve. Elismerem, neha vannak agymenesei, amitol 1:1 falnak megyek.

Viszont most konkretan a kovetkezo tortent: hozzaszolt egy ertekes es erdemit a temahoz. (Megneztem, nem recseg folottem a plafon!)

Erre te leoltod. Ugy hogy kozben meg az oltasod is netto baromsag.

Sehol nem irt olyat, hogy az "az egy ut van" amit o irt. O hozzaadott a temahoz egy surun elofordulo antipatternt. Relevans. Temabavago. Hianypotlo kiegeszites a reszerol.

Erre te ezt beallitottad ugy, mint ha valami baromsagot ex cathedra kinyilatkoztatott volna es raadasul, nem hogy nem vetted a lapot, meg el is mentel durvan a szemelyeskedes iranyaba.

Ezert innen a part szelerol az lenne a tiszteletteljes tanacsom, hogy tarts nemi onvizsgalatot, esetleg kerj elnezest az erintett feltol es probalj meg fejlodni az esetbol. Jol jonnek az ilyen soft-skillek a szakmaban, ha az ember kepes elismerni a tevedeset es azt utana megfeleloen helyen kezelni.

Nekem úgy tűnik, nem értünk egyet, több állításod tekintetében sem.
Visszafogott vagyok, lenyugodtam.
Amin igazándiból felbasztam az agyam (semmi köze a témához), azt megoldottam. Eközben kitöröltem egy kikommentezett kódrészt a programomból (az itt elhangzottak hatására). Majd elcsesztem némi időt azzal, hogy visszakeressem a verziókövetőből, mert mégis csak kellet. Több ilyen van a programomban, és nem fogom kitörölni. Hónapok múlva előfordulhat, hogy egyáltalán nem emlékszem arra, hogy volt ilyen kód, ezért nem játszik a visszakeresés, viszont, ha ott van a forráskódban, akkor az egyben egy emlékeztető is. Emlékeztet arra, hogy valamire volt egy alternatív algoritmus, vagy megoldási kísérlet valamire, amit jelenleg nem kezelek. Erre lehet mondani, hogy szenilisedem, de szerintem egy több mint 10 éves közel 100e soros project-nél megesik, hogy nem fér az egész a fejünkbe. (Na jó, legyen 90e sor, a tök felesleges kikommentezet sorok miatt.)
Talán az ilyen esetekre jobb megoldás lenne, ha a kikommentezés helyett #if - #endif -ek közé zárom a kódot. Hatása ugyan az, de mégse komment. Van ahol így zárok ki kódrészeket.

Meh...

Lehet, hogy lenyugodtal. De mar abbol amit leirsz messzirol latszik, hogy sem nem vagy tapasztalt fejleszto, sem nyitott erdemi javaslatokra.

Persze lehet ezt magyarazni avval, hogy "nem ertunk egyet".

De amint egyszer egy szakmailag hozzaertobb csapatban kell dolgoznod, ugy hajtanak el a francba, vagy tesznek ra egyszemelyes projektekre, mint a huzat. Ott mar nem nezik el ezeket a szakbarbar takolos, hozzanemertos, dirty-hackes szarokat, mint amiket itt most leirtal, es meg ugy tunik hogy buszke is vagy ra, hogy milyen ugyesen megoldottad.

Lassuk be, azert csinalod ezeket a workaroundokat es egyeb tiszteletkoroket, mert a verziokezelokkel kapcsolatos ismereteid az alapszintnek is alatta vannak. A korlataid felismeresevel is problemak vannak. (Lasd meg Duning-Krueger szindroma)

Vegul, amikor valaki ugy altalanossagban megjegyez egy antipatternt (ebben az esetben Panther, es tette mindezt mindenfele szemelyeskedes nelkul, csak egyszeruen a te hozzaszolasod ala irta be a meglatasat, mert ahhoz a szalhoz kapcsolodott leginkabb az eszrevetele), akkor te atmesz szemelyeskedesbe es alpari bunko hangnemben elkezded kioktatni.

Nagyszeru lehet veled egy kornyezetben dolgozni! Irigylem a kollegaidat.

Ebből most két dolog következhet:
Te egy látnok vagy, én meg jobb, ha elhúzok Taigetoszra, ugrani.
vagy
...

Gyu jól leírta: egyelőre még nincs meg a rutinod a verziókezelővel kapcsolatban, ami nem gond, bele kell jönni.
Viszont az biztosan rossz megoldás, hogy if 0-ba teszed, vagy commentbe: már a következő patched is eltörheti, vagy eltelik valamennyi idő, és teljesen megrohad - semmi nem működik benne már, esetleg a sok refactor hatására az a kódrészlet amúgyis értelmét veszti.

Sőt, nagyobb kódbázisnál, ahol többen dolgoznak a kódon, kifejezetten visszás: évek múlva abszolút érthetetlen lesz az a commentben lévő kód. Sőt, olyat is láttam, hogy a sok git rebase és egyebek hatására az eredeti helyétől messzire elmászott egy-egy megjegyzés (a git elég intelligens, hogy feloldja az ütközéseket), am miatt nehezen lehet kitalálni, mire gondolt az eredeti költő.

Felhívnám a figyelmedet a "Jól leírta" és a "Van benne igazság" fogalmak közötti igen jelentős különbségre.
Valóban nem vagyok túl nagy GIT vagy CVS zsonglőr, és projektjeim jelentős részét egyedül írtam. De azért Gyu megemlített néhány ezen túlmutató következtetést is.
Elfogadom, hogy okozhat problémát a kikommentezett kód. De akkor mi a teendő? Mit kezdjek egy kódrésszel, amit (jelenleg) ki akarok zárni, mert problémás, de fontos, vagy fontos lehet? Ott van a verziókövetőben, visszakereshető, de senki nem fogja visszakeresni, mert már senki sem emlékszik rá. Sajnos előfordult nem egyszer (most lehet, magam alatt vágom a fát, és trollt etetek), újra megírtam egy metódust, ami már évek óta ott van az API-ban. Igyekszem rendes dokumentációt írni (ami idő hiányában nem mindig sikerül), ezt elkerülendő, de ha egyáltalán nem emlékszem rá, akkor nem keresek rá (több mint 10 éves, és közel 100e soros projektről van szó, gondolom nevezhetjük nagynak).
Az, hogy egy komment elmászik a helyéről, az elég gáz, és nem csak akkor lesz értelmetlen, ha az történetesen egy kód.
Továbbá: Ha feltételezzük, hogy a kommentek esetleges vándorlása csak blokkon belül lehetséges, és nem írunk kilométeres blokkokat (mert ugye nem írunk), akkor túl messze nem juthat az a szerencsétlen komment. Ha pedig nem egy blokkon belül van, akkor kvázi ez egy önálló blokk, vagyis a forrás fájlon belül nyugodtan vándorolhat, mert ugye kilométeres fájlokat sem csinálunk. Ha tévedek, akkor annak az oka tényleg érdekel, az ez alapján meghozott ítéletek pedig nem.

Mintha valamelyik IOCCC nyertes műben lett volna olyan, hogy ha kitörlöm a kommentet, mást csinál a kód :-)

=====
tl;dr
Egy-két mondatban leírnátok, hogy lehet ellopni egy bitcoin-t?

igen nekem is a mekkmester ugrott be elsőre.
Kicsavar 3 csavart, a 4-et benne hagyja és arra felakasztja az újat.
Feltételezve hogy a régi konzolját 4 csavar tartja és az új olyan, mint a sooter's órák voltak.

--
GPLv3-as hozzászólás.

Ráadásul a legacy megoldás volt a jobb, ahogy sok újraírás esetében is lenni szokott!

Nobody: ...

fiatal kódninja: régi szar kód (ráadásul Pascalban van) írjuk újra!

this

Tévedés, felhasználta a régi kód interfészét a fallal...

Üdv,
Marci

Mindannyian tévedtek, ez nem code style bug, hanem feature!

Ha jól megnézitek a képet, akkor 3 órát láttok, a három legfontosabb idővel.
A felénk néző kettőből egyik óra a naptári órákat méri, ami mondjuk pont senkit nem érdekel amíg tart a kávé, de a másik a scrum órákat méri, ami viszont fontos, mert a manager ennek múlásával emeli a hangerőt*.
A másik oldalon lévő óra a projekt végéig tartó órákat méri, mint a halál 50 órájában, és ez is fontos, mert utána átmegy Bansky -ba**.

* Alapból hallásküszöb alatt megy az irodában Lagzi Lajcsi végtelenített mulatós trombitálása, de a projekt csúszásával egyenes arányával nő a hangerő, és bár ezt nem tiltja a genfi egyezmény, de akkor is durva. Senki nem mer késni, mert a többiek megverik.

** A ledarálós festménykeretére gondolok, csak ez a bónuszkeretet csócsálja el projekt késés esetén. Nem vicces!

MÁV-nál is van hasonló :D

https://i.imgur.com/hFztt48.jpg

Nemrég hosszú idő óta először végigvonatoztam a Balaton déli partján, és nem győztem ámulni, hogy a MÁV területek milyen szépen meg lettek csinálva. A vonat pedig pont olyan halkan siklott végig, amilyen halk vonatot először Hollandiában hallottam, és keleti túristaként csodálkoztam, hogy ilyen is lehetséges. Úgyhogy lassan, de van fejlődés a MÁVnál is.

Kiszivárgott a helyszínről egy hangfelvétel, két karbantartó beszél rajta, itt a leirata:
[...]
- Pista fiam, ne szarozz, ott az adapter, tedd rá 24 voltos akkupakkot a kis fúróra, úgy jobban viszi! (Cé-szissz)
- Béla bá, ez nem így megy! Hát szétégeti egyből!
- Francokat. (Glugy-glugy) Fiatal koromban mindent túlhúztunk, 386, 486, nem volt menekvés. (Böf) Oszt minden ment tovább, elhiheted.
- Én elhiszem, de a világ megváltozott. Most már nem lehet ilyeneket csinálni.
- Dehogynem. Én bármit túlhúzok, érted-e? (Glugy-glugy)
- Tényleg, Béla bá!? Még órát is a falon?
- Nem hiszed? (Böf) Na fogd csak meg a söröm!
- Ááá, Béla bá mi csinál?! Nem lesz ennek jó vége! (placcs)
- Na! E! Pöpec, mi? Ez az igazi Overclocking, nem a viagra! És ne lötyögtesd már ki, hallod?!
[...]

nini, átálltak nyári időszámításra :D

amúgy a kikommentezéssel semmi gond... baj akkor van, ha másegyéb nem történik.

a kép amúgy csal, a sima kikommentezés inkább az lenne, ha az órát lefújják festékszóróval, hogy az idő ne látszódjon. (az új funkció neve: "Fix színnel kitakart pontosidő")

-fs-
Az olyan tárgyakat, amik képesek az mc futtatására, munkaeszköznek nevezzük.