Fudgets utmärkande egenskaper
Lätt att komma igång. Många komponenter i biblioteket har parametrar med standardvärden. Det gör dem lätta att lära sig men ändå flexibla och anpassningsbara.
Kodstorlek. Fudgetprogram är vanligen kortare än motsvarande program skrivna i ett imperativt språk. Därför går det åt det mindre tid för att skriva dem och de innehåller färre buggar.
Snabb prototyputveckling [1]. Fudgets har ett automatiskt, adaptivt layoutsystem som låter programmeraren skapa en första fungerande version av ett program utan att alls fundera på layouten. Det omvända är också möjligt: man kan börja med att skapa ett användargränssnitt med en specifik layout och senare lägga till funktionalitet.
Hierarkisk struktur. Det är i princip ingen skillnad mellan de enklaste byggblocken och kompletta program. Detta betyder att man enkelt kan ersätta enkla saker som knappar med större samansatta objekt, eller återanvända existerande program som delar i nya program.
Utökningsbarhet. Komponenter i biblioteket kan lätt kombineras med programmerarens egen kod för att skapa nya komponenter som kan användas på samma sätt som andra komponenter i biblioteket. Man kan på så sätt skapa utökade bibliotek anpassade till olika tillämpningsområden.
Deklarativ stil. Även om det är möjligt att använda existerande imperativa GUI-programmeringsbibliotek direkt även i ett funktionellt språk, så innebär det att användargränssnittet måste programmeras i en imperativ stil. Med fudgets kan man skriva hela programmet, inklusive användargränssnittet i en deklarativ stil.
Inkapslat tillstånd. Robusthet. Användning av globala variabler har sedan länge konstaterats vara en källa till många fel i program. Programmering med fudgets liknar objektorienterad programmering på det sättet att tillståndsinformation är inkapslad och skyddad från godtycklig åtkomst och felaktig användning. Komponenterna som motsvarar objekt kallas fudgets. Tillståndsinformation kan ändras bara genom att skicka meddelanaden till den fudget som hanterar den.
Samverkande parallela processer. Fudgets liknar också processer i parallela språk med samverkande processer. En fudget är en process som körs parallelt med andra fudgets och interagerar med sin omgivning genom att skicka meddelanden. Fudgets är samtidigt lätta att kombinera, som funktioner i funktionella språk.
Klient/serverprogramming & nätverkskommunikation. Biblioteket innehåller fudgets för kommunikation via Internet. Att skapa en nätverksanslutning till en annan process (på samma eller en annan dator) är lika lätt som att skapa en knapp i ett användergränssnitt.
Utmärkande egenskaper hos funktionella programmeringsspråk
Många av fördelarna med Fudgets beror på att de är implementerade i ett lat funktionellt språk.Högre ordningens funktioner och parametrisk polymorfi. Dessa två tillsammans är ett utmärkt verktyg för modulär programmering och gör det lätt att skapa återanvändbar programvara på ett sätt som är mer flexibelt än subtyper och klasshierarkier i objektorienterade språk.
Lat evaluering gör att inga beräkningar utförs i onödan. Detta bidrar också till att göra kod med modulär [2], t ex genom att göra biblioteksfunktioner mer kraftfulla. Ett enkelt exampel: en funktion som letar i en lista och returnerar alla element som uppfyller ett visst sökvillkor kan användas även om man bara behöver hitta det första elementet som uppfyller sökvillkoret. Resultatlistan beräknas bara i den utsträckning den faktiskt används. Man behöver därför inte känna till två olika biblioteksfunktioner för att söka i listor.
Automatisk minneshantering. En funktionell programmerare behöver inte fundera på när/hur minne ska allokereras och frigöras, vilket sparar tid och undviker en vanlig källa till fel. Det inbyggda stödet för dynamiska datastrukturer i funktionella språk gör det enkelt och naturligt att jobba med listor och trädliknande datastrukturer.
Typsäkerhet och minnessäkerhet. Typesytemen som används i moderna funktionella språk är tillräckligt kraftfulla för att det mesta ska gå att typkontrollera statiskt. Detta gör att många fel upptäcks redan när program kompileras, vilket är en stor fördel jämfört med äldre språk, som C, där men ofta måste kringgå typsystemet genom att använda okontrollerade typkonverteringar och pekare av typen
void *
. Detta betyder att man inte får någon hjälp från kompilatorn att hitta fel och att fel därmed inte upptäcks förrän man kör programmet och det krashar på grund av "Segmentation fault
". Detta är den dominerande källan till säkerhetskritiska fel i program skrivnna i språk som C. Man har liknande problem i dynamiskt typade språk som Tcl/Tk, Perl, LISP, Scheme, PHP, Python, JavaScript, etc.Koncis notation. Att skapa en ny funktion i Haskell kräver väldigt lite kod jämfört med de flesta imperativa språk. Detta gör att programmerare oftare skapar små lättlästa funktioner i ställer för stora svårgenomträngliga kodmassor.
Referenser
- Paul Hudak & Mark Jones: "Haskell vs. Ada vs. C++ vs. Awk vs. ... An Experiment in Software Prototyping Productivity" (1994)
- John Hughes: "Why Functional Programming Matters". (1984)