BLAST is the compiler that everyone has been waiting for, since the first advertisements appeared back in May. Billed as 'the first fully compatible optimising BASIC compiler', capable of compiling 'ANY BASIC PROGRAM, without alteration' into 'super efficient code capable of running at up to forty times the speed of BASIC'. Other advertised goodies included 'many extensions', 'genuine integer variables', 'debugging facilities', and 'a comprehensive toolkit '.
With a billing like that, we couldn't wait to get our hands on 'the complete BASIC programmer's package' . Sadly, the reality was rather different from the hype.
BLAST is supplied in a large Plastic box, about the size of two Betamax video cassettes. Inside the box is a 30 page typeset handbook, of roughly A5 size.
Three sides of corrections, on separate sheets, convey the first disappointment the 'MANY EXTENSIONS' touted on the lid, have not been implemented 'due to lack of memory'. As compensation, some extra features have been added to the toolkit.
The manual's content once you've made the corrections and crossed out the pages which are now irrelevant is quite interesting. Unfortunately there are no examples and the organisation is poor; the manual skips back and forth between subjects and contains several irritating forward references. The spelling and grammar are erratic.
The box also contains a 'protection' grid, which you are asked to refer to whenever the compiler is loaded it contains about a thousand coloured dots.
You have to identify four of them to prove that you have good eyesight and a legitimate copy of BLAST. If you make a mistake, the program crashes and you have to reload all 48K from scratch.
The other side of the tape contains the BLAST toolkit, which offers all the usual facilities trace, search, copy, renumber, delete, list variables and so on. As with Colt, many BASIC programmers will already own such utilities.
There were signs that the toolkit had been thrown together in rather a rush it was possible to crash the machine by careless use of Search and Replace, for instance. The special 'BLAST save' option, which writes files in small sections so that they can be read piecemeal by the compiler, does not check its parameters until after it has printed the START TAPE prompt, giving a jumbled display. There is no wait for a key press before saving begins.
The BLAST renumber command can't cope with more than 643 lines, unlike other toolkits. Most annoying is the fact that search and replace does not cope with the 'hidden numbers' in all Spectrum programs. ZX BASIC keeps the binary form of numbers stored after the text, though you can't see it when you type LIST. BLASTcan't see it either, so an attempt to replace one number with another changes the text but not the value you see the new value when you type LIST, and the old one when you run your program!
BLAST generates two types of code machine code, which is fast but verbose, and p-code symbolic code which is concise but runs more slowly. There is lust 2V2K free once the compiler has been loaded, so you can only compile tiny programs without recourse to tape or microdrive. The toolkit is 5K long (the manual says 2K), so you can't load it at the same time as the compiler.
We tested BLAST with the eight standard benchmark programs. The machine code timings obtained are shown in the benchmark table. BLAST code is slightly faster than that from Softek's FP compiler, substantially slower than that from Mcoder 3, the other 'full' compiler, and much slower than the integer-only compilers. These results were a little surprising an 'optimising' compiler ought to be able to make mincemeat out of the benchmarks.
We tried using the p-code instead of machine code, and found that the results were up to twenty percent slower than when machine code output was selected, The big shock came when we specified that some variables were to be treated as integers it made no difference at all.
Without this option, it is hard to believe that the promised speed up of 40 times could be achieved in real programs. An Oxford employee admitted on the 'phone that the optimisations advertised and documented in the manual were missing. We were promised a succession of upgrades, but none arrived after several weeks and repeated requests.
3BLAST's user-interface is rod, with no need of the RAND USR calls of the compilers reviewed last month. To compile a program you type one two-character command; to run it you type another. As programs are compiled, the screen memory is used as a temporary storage area, producing a riot of flashing dots and cascading colours, which helped to pass the time during compilations, which took place at a rate of a couple of lines per second.
As a simple test of BLAST's error-detection, we gave it a program containing a spurious NEXT statement. The error was not detected as the program was compiled; when we ran the code the value sixty million million was mysteriously printed and an 'out of memory' error occurred, with no indication of the type or location of the error. To be fair, we tried the same incorrect program on the other compilers. They coped rather better, either skipping the extra NEXT or reJjecting it with a 'NEXT without FOR' message.
We then limbered up our microdrive, and prepared to compile some real programs. Our first attempt came to an end after about a minute and a half, when BLAST spat out the message 'VARS TOO LONG' and crashed as soon as a command was entered. We 'phoned Oxford to ask what this meant, but they wouldn't say. Another upgraded copy of the compiler was promised, but, a fortnight later, it hasn't turned up.
We tried the same thing again, and found a rather silly bug BLAST crashes if the file which it is asked to write already exists. After re-loading, looking up the colours and so on, we checked that the compiler acted sensibly if the input file was missing. It didn't it crashed, again.
We tried another published BASIC game, which Mcoder 3 had compiled successfully. After 852 seconds (they said BLAST worked in 'seconds') the compiler stopped, complaining SYSTEM ERROR 1'.
It was a relief to find a simple Program (Spectrum Autosonics, published by Buttercraft way back in 1982) that BLAST was able to compile. Or at least, BLAST chugged all the way through the code and produced an output file. When we tried to run it, following the instructions to the letter, guess what? The machine crashed.
We couldn't find a single, nontrivial program that BLAST would compile.
In case you haven't already got the drift, the performance of BLAST is pretty shocking; we wonder what those who have already paid £24.95 for a copy must think. The program seems to have been launched almost totally untested the documentation and the advertising bear little relation to the product.
Not so much a BLAST, more of a Phut.