Funkcionális programozás C++-ban(!) by John Carmack (!!)

 ( mkristof | 2012. április 27., péntek - 11:42 )

Újabb példája annak, hogy egy kis gondolkozással és az extremitások gondos elkerülésével milyen jó dolgokat lehet elérni.

http://www.altdevblogaday.com/2012/04/26/functional-programming-in-c/

Kedvenc idézet: "We are a “Get ‘er done” sort of industry, and I do not see formal proofs of whole program “correctness” becoming a relevant goal, but being able to prove that certain classes of flaws are not present in certain parts of a codebase will still be very valuable. We could use some more science and math in our process."

John Carmackot talán nem lehet egy lépésben berakni az elefántcsonttoronyba, de nincsenek kétségeim afelől, hogy valaki ezt is meg fogja próbálni.

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ő.

"John Carmackot talán nem lehet egy lépésben berakni az elefántcsonttoronyba..."

Hogy mit nem lehet vele csinálni?!

Ez olyan, mint az "elszállt fölötte az idő vasfoga", vagy tényleg van ilyen az angolban?

---
Science for fun...

Nagyon filózofikus :) Megjelenése óta utálom az objektum orientált programozás című bűvszót. Már megjelenésekor kikiáltották univerzális omnipotensnek. Szerintem a feladat kell, hogy megszabja az eszközt.
Ha az "Armadillo Aerospace" elnevezésben az "Aerospace" nem csak egy hangzatos szó, akkor ez a kódolás/programozás egy másik szintje amit nálunk nem tudom hányan képviselnek, és ezeknek általában nincs idejük a neten lógni. Ide sziklakemény kód kell, nem ritka még az assembly sem. A compiler pedig ne csináljon sem többet sem kevesebbet mint amit mondok neki - az objektum orientált programozás bűvöletében a srácok el is felejtik a malloc/alloc/calloc és hogy mi van mögötte.
A C szerintem/számomra egy nagyon fejlett és univerzális assembler, közvetlenül tudok beszélgetni a processzorral és a ráaggatott perifériákkal de volt, hogy még így is meg kellett túrnom a közbülső kódot, hogy megértsem mit is okoznak a pragma -k.

* Én egy indián vagyok. Minden indián hazudik.

Az OO segít abban, hogy egy más absztrakciós szinten tudjuk kezelni a problémákat. Ettől még egy OO kód nem lesz jobb/rosszabb mint egy strukturális/funkcionálisan megprogramozott,
mégis, a tapasztalatom azt mutatja, hogy sokkal szebben/olvashatóbban lehet megoldani problémákat, rövidebb idő alatt, ráadásul az eredmény általában könnyebben fejleszthető, javítható. Sokszor az alacsony szintű nyelv hiányosságai miatt jönnek be olyan problémák, amiket nyelvi szinten kellett volna már nagyon régen megoldani, fordítási időben.

+1.

Már várom, mikor kerül elő itt is a Java meg a memory alignmentek meg a mikrocontrollerek.

----------------
Lvl86 Troll - Think Wishfully™

Na ebben egyetértünk. Én jó párszor belenéztem már assembly kódba, amit oo firdító generált, és egy nyamvadt objektumot sem találtam benne.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Ha ebből ti azt olvastátok ki, hogy az OO rossz, debezzeg a C-s alacsony szintű gányolás milyen csodás, akkor olvassátok el még egyszer. Bár gyanítom ez lesz az első alkalom...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee." -- Ted Ts'o

Ez nem igaz, mert pl Gui írásra az oo szemlélet sokkal könnyebben kezelhető foráskódot eredményezhet. De ettől függetlenül szerintem az oo, a rém egyszerű logikus valóság túlbonyolítása, és misztifizálása. Egyszerűen egy logikus gondoloatmenettel, nincs rá szükség.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

"Egyszerűen egy logikus gondoloatmenettel, nincs rá szükség. "

Bizonyos bonyolultsági szintet meg nem ütő feladat esetén nincs, ahogy bizonyos szint alatt szubrutinok alkalmazása helyett gotoval ugrálás is jó ötletnek tűnhet.

Szerintem programozófüggő, hogy ki mit lát át, és hogyan. Én még mindig azt mondom, hogy számomra egy C kód sokkal átláthatób, mint egy oo kód, mert minden ott van előtted, nincs túlkspirázva so osztájokkal se örökléssel se semmivel ami a gépben "ne lenne benne hardveresen". De embere válogatja mindenki azt használ amit tud, és akar.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

"Szerintem programozófüggő, hogy ki mit lát át, és hogyan."

Lehet zseni egy programozó, akinek ez az ideológiai alapja, és tudhat nagyon jó programokat összehozni - éppen csak nem munkahelyre való.

Senki nem beszélt misztifikálásról. Másrészt az OOP nyelvek túlnyomó része is a meglévő imperatív modellre épít rá és inkább a program struktúrájának, adatszerkezetének és működésének átláthatóbb, kezelhetőbb, rugalmasabb felépítésérére szolgál.

(És a tapasztalat az, hogy nem kevés ember úgy húzza le az OOP-t, hogy igazából sosem értette meg, hogy miért jó az. És alapvetően inkább azért húzza le, mert nem érti, mintsem mert rossz lenne.)

----------------
Lvl86 Troll - Think Wishfully™

GUI-ra pont nem, de nem baj. Az OO altalaban pont arra jo, hogy a valosagot egyszerubben le tudd kepezni. Mindegy.

----------------------
while (!sleep) sheep++;

"GUI-ra pont nem, de nem baj"

Jaj...

Nem tudom, en szivesebben hasznalok deklarativ leironyelvet GUI-hoz, mint mybutton.setOnClick+=this.onClickHandler jellegu dolgokat. Lehet, hogy ezzel te mashogy vagy.

Altalanossagban egyebkent az szokta fikazni az OO-t (vagy barmi mast), aki nem ert hozza. Abszolut megvan az oka, hogy az OO miert olyan elterjedt, es annak is, hogy mikrokontrollerre miert nem OO-ban irsz programot (vagyis mostmar ez is valtozik).

Kivancsi volnek, hogy mondjuk egy kereskedesi platformot miert es hogyan irnal meg (marmint emberk) proceduralisan, vagy hogy indokolnad, hogy deklarativ nyelvek helyett miert hasznaljunk C-t (vagy OO-t) GUI-hoz. A funkcionalis programozas megintcsak jo dolog, de alapvetoen ugy, ahogy Carmack mondja (azaz nem silver bullet), nem pedig fanatikusan, mindenhol.

----------------------
while (!sleep) sheep++;

Én alapvetően "matematikát szoktam kódolni". Tuti van olyan munka, ahol én is visítva szaladnék a C-től mert 3-hét 3 nap helyet.... Abban tudok nyilatkozni amiben én dolgozok. Alapvetően pl gui-t sem szoktam írni sokat, mert nincs rá szükségem. Nekem a Gui-írás általában abból áll, hogy kirakok egy load data gombot, ha van valami megjeleníthető, akkor kelle egy show is, és ezt megjeleníteni valahogy. Remélem kereskedelmi (mármint kereskedéssel foglalkozó) programot soha nem kell írnom, maradok a fizika-szimulációknál.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Megertelek. Ellenben fentebb arra +1-eztel, hogy valaki buvszonak tartja / utalja az OO-t. Ha numerikus szimulaciot csinalsz, akkor valoban nem fetletlen idealis az OO, de van, ahol igen.

----------------------
while (!sleep) sheep++;

"Bűvszónak" azért soroltam, mert mikor megjelent akkor mindenre rá akarták húzni. A feladat szabja meg az eszközt. Persze, ahogy Murphy -óta tudjuk, ha szükséges minden kalapács!

* Én egy indián vagyok. Minden indián hazudik.

Sosem voltam elfogult, és rosszul fogalmaztam ezek szerint, mert alapvetően nekem mindegy hogy ki miben kódol, weblapot sem fog senki írni asm-ben, alapvetően azt akartam kifejezni, hogy az oo szemléletnek semmi köze, a számítógépek működéséhez, sokkal közelebb áll a C, az én munkámat, pedig csak fölöslegesen elbonyolítaná.

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

Bocs! Sem bántani, sem vádolni nem akarok senkit. Legkevésbé pedig személyeskedni.
Az oo programozás, és sok más technológia ami manapság használatos mind jó és fontos a maga helyén és nevében.
A véleményemet nyilvánítottam ki (talán itt megtehetem). A különféle technológiák alkalmazása egyébként is nagyban függ a használójától és hogy az mire is használta (vagy éppen kellett használnia).
Szeget kalapáccsal vagy ács szekercével tessék beverni.

* Én egy indián vagyok. Minden indián hazudik.

+1

Van egy embertipus, aki fikazza, amihez nem ert.

Szivesen varok barmifele ertelmes ervet, hogy miert jobb a proceduralis programozas az OOP-nel.

Lehet, h. nem ertek a proceduralis programozashoz :)))

Legalább egyvalaki elolvasta!

Köszi!

-----------
"Generally, Russian technology assumes dumb machines and smart humans, not the other way around." -- The Russian Tea HOWTO

Én jó párszor belenéztem már egy lefordított binárisba hexa editorral, amit egy ASM fordító generált, és egy nyamvadt MOV vagy JMP szöveget sem találtam benne.

Szóval akkor most mi van? Azért vannak a fordítók, hogy valamiből (jelen esetben OOP kódból) valami mást (jelen esetben lefordított ASM kódot) gyártson.

/o\

----------------
Lvl86 Troll - Think Wishfully™

Végtére is igen:) De visszafordítottam disassembler-el. Mert memóriacímet vadásztam :)

------
3 fajta matematikus létezik. Aki tud számolni, és aki nem.

dafuq did i just read

sub