2006-04-23
 
spuug ii
HELSINKI - Het GObject-systeem maakt het mogelijk om object-georiënteerd (OO) te programmeren in C. Een flink deel van de OO-gereedschappen is beschikbaar, zoals inheritance en encapsulation. Daarnaast is er een 'main-loop' en een signal-systeem beschikbaar. Na enige tijd besteed te hebben aan het programmeren van GObjecten lijkt het bijna elegant... Een van de pijnpunten blijft het handmatig definiëren van nieuwe classes. Omdat C niet 'out-of-the-box' komt OO-faciliteiten, moet er veel, heel veel boilerplate code geschreven worden. (Maar misschien is dat ook wel goed: het zorgt ervoor dat je eerst nog eens diep nadenkt...)

De oplossing? Eenvoudig: geen C gebruiken. Programmeer in Ruby, Python of C++, die goed werkende bindings hebben voor GObject/GTK+ enzo, en waarbij het meeste vervelende werk automatisch gedaan wordt. Überhaupt wordt C nog te vaak gebruikt. Voor veel applicaties is Ruby een veel betere keuze.

Maar goed, soms is het toch het beste om C te gebruiken. Niet alleen omdat ik zo'n masochist ben, maar bijvoorbeeld omdat de bestaande code in C is. Of omdat andere talen toch niet alles ondersteunen wat ik nodig heb. Daarom heb ik spuug geschreven. Je geeft aan wat voor gobject-class je wilt maken, en spuug spuugt alle boilerplate code uit -- voor een simpel object is dat meer dan 150 regels code. spuug kan zelfs (unit) test-code genereren, GInterface-code. Enzovoort.

Voor wie iets uitgebreiders zoekt: er is natuurlijk codegen dat werkt vanuit UML Class Diagrams: je tekent een plaatje en de code wordt gegenereerd. Daarna is het feest echter voorbij - je kunt niet nog even een functie toevoegen aan je UML en opnieuw genereren (zonder je oude code te verliezen), noch wordt je UML bijgewerkt als er iets in de code wijzigt. Dat is natuurlijk ook behoorlijk lastig. spuug geeft dat ruiterlijk toe, en doet dan ook niets meer dan op een zo eenvoudige mogelijke wijze de boilerplate-code genereren. Daarna moet de arme programmeur het werk toch weer op de vertrouwde wijze doen met zijn of haar favoriete teksteditor. Dat moet ook bij codegen, maar bij spuug hoef ik in ieder geval geen tijd te besteden aan het tekenen van diagrammen -- en dat kan een voordeel zijn of een nadeel.

Oh ja, in het algemeen zijn code generators natuurlijk een slecht idee. Behalve dan die, die je zelf geschreven hebt :-)

spuug is van alpha-kwaliteit en slechts lichtjes getest. Het programma doet de nodige moeite om te 'raden' wat de programmeur wil, en zal daarbij soms fouten maken; da's niet zo erg als het klinkt, tenslotte is de boilerplate slechts het begin.

Hoe dan ook, hier is spuug.


2 Reacties:

GOB2? ;-)

By Anonymous Ikke, at 23/4/06 13:02  

Hehe... nou, "spuug" is een beetje minder ambitieus... en da's een voordeel :-)

By Blogger djcb, at 24/4/06 19:19  

Een reactie plaatsen


Emacs, the UberEditor Powered by Blogger