Re: Beginselen van programmeren
Geplaatst: za 03 nov 2007, 17:28
Nee, het is beschermen. GC wordt gedaan om o.a. memory-leaks te voorkomen. Veel programmeurs kunnen namelijk niet de discipline opbrengen om zelf netjes met geheugen om te gaan.GC is geen bescherming, het automatiseren.
Het probleem is dat je een heel specifiek idee hebt van 'misplaatst'. 'final' past bij java en is binnen die context volledig logisch. Als het niet is wat jij wilt dat het is, gebruik dan geen java. Dit is echter niet een zwakte van java, net zoals het geen zwakte is van een hamer dat je er geen schroeven mee kan uitdraaien.Wat ik bedoeld is misplaatst beschermen
Ja, daar ben je goed in... in 'maar voorbeelden'. Elke keer als ik je vraag om te concretiseren dan grijp je naar deze uitspraak.(CPS was maar een voorbeeld.
Ten eerste is dat niet wat ik vroeg (ik vroeg waarom je CPS in java wilde) en ten tweede lijkt me Scheme leren overbodig (CPS zou je zelfs in javascript kunnen doen als je echt zou willen). CPS is bij functionele talen vooral nodig om ervoor te zorgen dat ze nog enigzins efficient kunnen zijn (vooral als de taal lazy is, anders is je stack zo op...) met als trade-off dat de boel een stuk onleesbaarder wordt. Deze efficientie wordt voornamelijk veroorzaakt doordat de compiler het CPS formaat kan optimaliseren (of doordat de interpreter gedwongen wordt te evalueren). CPS zou niet nodig zijn als compilers 'slimmer' zouden zijn...Als je wilt weten wanneer je CPS gebruikt is moet je Scheme leren.
Sommige compilers zijn dit kennelijk ook. Ik heb voor de gein even twee keer hetzelfde programma geschreven in Haskell (bepaal de som van de getallen 1 t/m n), een met tail recursion en een zonder. Die zonder heeft een te kleine stack voor n = 1000000, die met niet. Echter als ik bij het compileren de optimalisatie flag meegeef dan worden beide omgezet naar ongeveer dezelfde code. Kennelijk is in dit geval de compiler dus 'slim' genoeg (en is de moeite van CPS dus voor niets).
Mag ik dan daaruit de conclusie trekken dat je er niet mee gewerkt hebt?Om het te begrijpen moet je er mee gewerkt hebben.)