Re: While en for lus
Geplaatst: vr 10 okt 2008, 16:01
zie ook Tail call optimization (Een goede wiki voor programmeurs btw)
Java gaat gewoon van het grootst mogelijke getal naar het kleinst mogelijke getal.
Dit gedrag staat als dusdanig beschreven in The Java Language Specification, Third Edition. Zelfs al zou je processor nog niet aan een overflow toe zijn dan nog moet een JVM dit gedrag wel zo toepassen.Eigenlijk is dat java niet die dit doet maar je processor.
Zelfs al zou je processor nog niet aan een overflow toe zijn dan nog moet een JVM dit gedrag wel zo toepassen.
Ook dat niet. Dat Java specificeert dat een int 32 bits bevat (1 sign bit + 31 bits voor de waarde), zegt niks over hoe die 32 bits daadwerkelijk worden opgeslagen. Of je nu Java runt op een 8, 16, 22, 531 danwel geen-bits-systeem, of je nu intern voor elke bit 1 register van 64 bits gebruikt, het maakt allemaal niet uit. In alle gevallen zal de JVM hetzelfde moeten doen. De specificatie bepaalt het gedrag. Dat de specificatie gebaseerd is op zekere historische gronden doet hier niks aan af.Elke processor kan die 'overflow' aan. Het is gewoon een logisch gevolg van het geheugensysteem.
Maar JVM houdt echt niet bij welke int je als 32 bits hebt opgeslagen, of welke als 16bit. Dat is iets dat je OS bijhoudt.Ook dat niet. Dat Java specificeert dat een int 32 bits bevat (1 sign bit + 31 bits voor de waarde), zegt niks over hoe die 32 bits daadwerkelijk worden opgeslagen. Of je nu Java runt op een 8, 16, 22, 531 danwel geen-bits-systeem, of je nu intern voor elke bit 1 register van 64 bits gebruikt, het maakt allemaal niet uit. In alle gevallen zal de JVM hetzelfde moeten doen. De specificatie bepaalt het gedrag. Dat de specificatie gebaseerd is op zekere historische gronden doet hier niks aan af.
Dat hoeft ook niet. Dat is het hele punt. Java specificeert dat een int 32 bit is en dat als je bij het grootst mogelijke getal 1 optelt je op het kleinst mogelijke getal uitkomt. Dat heeft helemaal niks met de hardware te maken. Elk argument dat verwijst naar hardware is dus niet van toepassing.Maar JVM houdt echt niet bij welke int je als 32 bits hebt opgeslagen, of welke als 16bit.
Java specificeert dat een int 32 bit is en dat als je bij het grootst mogelijke getal 1 optelt je op het kleinst mogelijke getal uitkomt.
Het is een keuze en die is op een bepaalde manier gemaakt. "Raar" vind ik dan ook niet het juiste woord in deze context.Vind niemand hier het raar dat een moderne programmeer taal dit soort implementatie details merkbaar laat zien?
Je mist het punt. Java specificeert het gedrag in zijn taalspecificatie (zie het voorbeeld hier). Het gedrag heeft niks met het OS of de hardware te maken.Ik geef persoonlijk de voorkeur aan programmeertalen die Java geeft door naar je OS dat het om een signed 32 bit gaat.
Je mist het punt. Java specificeert het gedrag in zijn taalspecificatie (zie het voorbeeld hier). Het gedrag heeft niks met het OS of de hardware te maken.
Performance. Je CPU werkt nu eenmaal met dat soort begrensde integers.Vind niemand hier het raar dat een moderne programmeer taal dit soort implementatie details merkbaar laat zien? Laat een integer gewoon een geheel getal zijn ongeacht de grote. Waarom zou er een MAXINT zijn?
Dat is in geen enkele fatsoenlijke taal verplicht toch? Maar dan nog, zonodig kun je er dummy statements neerzetten, bijvoorbeeld int NegeerMij=0 voor A, en NegeerMij+=0 voor CVladimir Lenin schreef:niet wanneer je verplicht dat er ook iets bij A, B en C staat.
akkoord dan kan je je for-lus in een while lus omzetten, maar het is nog niet gezegd dat je daarmeel iedere while lus in een for-lus kan omzetten.