Vill lära mig programmering! HJÄLP!

Permalänk
Datavetare
Skrivet av tufflax:

Hm, hur kan detta vara sant? Jag måste erkänna att jag inte har skrivit några jättelånga program. Men jag fattar inte hur t.ex. Java och Clojure skulle kunna konvergera mot samma längd. Varje liten del av programmet borde ju bli mycket kortare i Clojure, precis som i ett litet program. Dessutom: I ett stort program borde det förekomma en del upprepning/boilerplate, så makron borde kunna utnyttjas mer i stora program.

Det som händer i stora program är att du får väldigt domänspecifika API:er. Om du jobbar mycket med listor i C så kommer du tillslut skriva ett API som kanske ser ut så här:

my_list *filter(my_list *list, bool(*pred)(my_list *))

Att då spara alla element som uppfyller ett visst predikat blir då

my_list *odd_elem_list = filter(list_head, is_odd); /* använd odd_elem_list */

vilket inte är längre än eller mer komplicerat än

(let [odd-elem-list (filter odd? list_head)] ; använd odd-elem-list)

Kod-basen på vår produkt är totalt sett miljoner rader C-kod och det finns väldigt mycket "högnivå" funktioner för att göra just det vår produkt är tänkt till så kunderna behöver inte skiva speciellt mycket kod för att göra väldigt avancerade saker.

Just C är svårt att få riktigt lika kort som språk som har GC eller annan form av automatisk minneshantering (som t.ex. C++ och ObjC) då man aldrig kan få bort explicit tillbakalämnande av resurser. Men explicita anrop till free() och liknande lär knappast vara hälften av alla rader i ett program.

Men för små (<10.000 SLOC) och eventuellt medelstora program (<50.000-100.000 SLOC) så kommer ju koden man måste skriva för att lyfta ett språk som C till samma (abstraktions-) nivå som Clojure att göra C programmet signifikant större. Men i fallet C++ finns redan väldigt mycket högnivå funktioner i STL, som har blivit mycket mer "funktionellt" i C++11 tack vare closures och lite annat smått och gott. Väldigt många som jobbar med C++ använder även boost som innehåller väldigt mycket funktioner.

Java och C# har båda enorma standardbibliotek som man kan luta sig mot.

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer