projekt:battre-c
Table of Contents
Bättre C
Bjarnis idéer
- Mer flexibelt typsystem, så att man fritt kan ange egenskaper för typer istället för att vara bunden till en handfull fördefinierade typer som i C.
- Inbyggt stöd för multiple precision-typer.
- Enklare att skapa tillfälliga data som parametrar till funktionsanrop och sedan få dem automatiskt uppstädade efter anropet, i stil med hur det funkar i typiska skriptspråk.
- Nån typ av enkelt arv för struktar kanske vore trevligt?
- Möjlighet att ange i en deklaration var variabeln ska placeras i minnet, för att underlätta åtkomst av hårdvaruregister av olika slag utan att man behöver skapa pekare och dereferera dem eller använda länkskript för att ge variablerna adresser etc.
- Något enkelt sätt att använda carryn vid addition/subtraktion.
- Packning/uppackning, t.ex. för att ta två returvärden från en funktion:
{foo, bar}=bazfunc();
- Eventuellt nån typ av tillfälligt-namespace-funktionalitet så att man slipper prefixa en massa namn med namnet på en struktvariabel i en bit av koden där man gör en massa saker med medlemmarna i samma struktvariabel.
- Stöd för parallellisering, t.ex. så att man kan uttrycka addition av elementen i två arrayer utan att skriva det som en loop, och på så vis både göra koden enklare och underlätta för kompilatorn att optimera om det finns t.ex. SSE.
- Nånting relaterat till teckenkodning som gör en glad.
- Nästlade namnrymder för symboler? Kan användas till modulsystem, och kanske till sånt som nästlade funktioner…
- Nästlade funktioner? :)
- Anonyma funktioner?
do-while
ochwhile
tycker jag ska vara samma sak:do stmt while(cond) stmt
- Ska vi ha nån sorts exceptions?
- Ett stort fett standardbibliotek med alla tänkbara hjälpfunktioner, allihop med vettiga namn. Exempel på saker som passar i ett standarbibliotek: listor, stöd för funktionell programmering (map, zip, osv), dictionaries…
- Gör brejsarna runt funktionskroppar till en del av kropparna, så att en funktionskropp blir ett normalt statement.
- Hum, nån sorts iteratorer? Coroutines, generatorer?
sizeof(funktion)
ska fungera.- Trevligt om man kan lägga till medlemmar i enums efter hand:
struct instr{enum INSTR type; char *mnemonic;}; struct instr instructions[]={ {enum INSTR MOVE, "mov"}, {enum INSTR ADD, "add"}, {enum INSTR SUBTRACT, "sub"} };
Martins idéer
- Ingen automatisk skräpsamling, inbyggd concurrency eller annat krafs. Körtidssystemet, om något alls behövs, ska vara enkelt. Meningen är att koden ska kunna köras på metallen precis som C.
- Typer läses från vänster till höger, som allt annat: char *x[5] blir x *[5]char. Då är det lätt att läsa typen högt för sig själv: “x är en pekare (*) till en array med fem element ([5]) av typen char”.
- Typdefinitioner introducerar en ny typ på riktigt, inte bara ett alias. Explicita kast krävs mellan den nya typen och den underliggande typen.
- Moduler/paket med inspiration från Python, Java, Erlang mfl. Bör gå att välja vilka symboler som exporteras ur paketet.
projekt/battre-c.txt · Last modified: 2014/10/05 04:57 by bjarni