PowerBASIC Gazette #25 (Nederlands)14 February 2002 *** Waarschuwing ..... Windows
Bug *** Welkom bij de volgende Gazette van PowerBASIC! Vandaag willen we u een waarschuwing geven voor een redelijke ernstige fout in Windows. Maar met een eenvoudige manier om het te vermijden natuurlijk. Leest u aub verder. We hebben bevestigd dat in ieder geval een aantal versies van Win2000 (en misschien ook nog andere versies) een ernstige tekortkoming hebben in het gebruik van de numerieke coprocessor. De Windows API functie MESSAGEBOX() zal bij uitvoeren de inhoud van de Numerieke Processor (de 80x87) kunnen veranderen. Natuurlijk gebruikt ook het MSGBOX commando en functie deze aanroep van de WINAPI MessageBox(), met dezelfde fatale bijverschijnselen als mogelijk gevolg. Dit probleem treedt op bij elke programmeertaal, dus niet alleen PowerBASIC. Zodra MessageBox() wordt uitgevoerd op één van de systemen met deze tekortkoming,
worden alle interne registers op de nul-waarde ingesteld. Het precisie-nivo van alle
berekeningen worden teruggezet naar een 54-bits mantissa (dit is overeenkomstig dubbele
precisie). Dit is een grove schending van 'De Regels' van hoe een besturingssysteem zich
zou moeten gedragen, en wordt hopelijk door Microsoft in de nabije toekomst worden
gecorrigeerd. Dus wat betekent dit voor u? In enkele gevallen: niets. Als u geen extended precisie variabelen gebruikt in uw programma, u slechts een 54-bits mantissa nodig heeft (ipv 64 bit). Dat is meestal geen probleem. Maar het andere deel van het probleem kan veel serieuzer zijn. Vaak slaan hogere programmeertalen zoals ook PowerBASIC één of meer tijdelijke variabelen op. De numerieke processor registers zijn daarbij een perfecte keus, aangezien ze een optimale snelheid bieden, dus de meeste betere compilers gebruiken deze technique vaak. Als deze waardes (of zelfs floating point register variabelen) ineens op nul worden gezet, is dit rampzalig voor uw programma. Is het mogelijk uzelf te beschermen? Gelukkig is het antwoord een duidelijk 'JA'. Hier is de te gebruiken techniek.....
Waarom is het zo eenvoudig op te lossen met powerBASIC? Nou, om de hoogste snelheid en efficiency te behalen stelt PowerBASIC automatisch alle tijdelijke variabelen in de numerieke processor veilig bij aanroep van een andere SUB of FUNCTION en herstelt deze bij terugkomst. En aangezien er slechts totaal acht registers zijn, behoren alle acht registers ter beschikking te zijn voor de aangeroepen functie voor optimale prestatie. Indien dit niet gedaan zou worden, moet de functie misschien wel vergaande compromissen maken. Natuurlijk biedt niet elke compiler dit niveau van veiligheid en efficiëntie, maar we zijn blij deze eigenschap voor alle huidige PowerBASIC compilers te bevestigen. Als u de techniek zoals aangegeven gebruikt, zal het probleem meteen verholpen zijn. De overige tekst is reclame voor andere producten van PowerBASIC, die deels al eens eerder is gestuurd
|
|