I just located my copy of PC-SPITBOL for the IBM PC, 8086, circa 1983. This is a 16-bit version.
It can be downloaded here.
Here are some pictures of the manual and a screenshot showing PC-SPITBOL starting up:
I did comparative runs of PC-SPITBOL 8086, SPITBOL/386, and CPython, using Cygwin on Windows XP:
CPython 55 seconds
SPITBOL/86 15 seconds
SPITBOL 8086 22 seconds
The numbers speak for themselves. PC-SPITBOL, written in 1983, is almost three times faster than CPython. SPITBOL/386, created over a decade ago, is more that four times faster than CPython.
Here are the test programs:
Python:
def add(a,b): return a+b def sub(a,b): return a-b n = 0 limit = 1000000 limit = limit * 50 trips = 0 for i in xrange(0, limit): m = add(n, 1) n = sub(m, 1) trips += 1
PC-SPITBOL, 8086, 16-bit:
&stlimit = -1 define("add(a,b)") :(add_end) add add = a + b: (return) add_end define("sub(a,b)") :(sub_end) sub sub = a - b: (return) sub_end * repeat for limit1 * limit2 * limit3 n = 0 * limit = 1000000 * limit = limit * 50 * variant for 16-bit spitbol, need to keep numbers small limit1 = 10000 limit2 = 100 limit3 = 50 trip3 = 1 lp3 trip2 = 1 lp2 trip1 = 1 lp1 m = add(n, 1) n = sub(m, 1) trip1 = trip1 + 1 le(trip1, limit1) :s(lp1) trip2 = trip2 + 1 le(trip2, limit2) :s(lp2) trip3 = trip3 + 1 le(trip3,limit3) :s(lp3) output = limit1 " " limit2 " " limit3 end
SPITBOL/386, 32-bit:
&stlimit = -1 define("add(a,b)") :(add_end) add add = a + b: (return) add_end define("sub(a,b)") :(sub_end) sub sub = a - b: (return) sub_end n = 0 limit = 1000000 limit = limit * 50 trips = 0 lp m = add(n, 1) n = sub(m, 1) trips = trips + 1 le(trips, limit) :s(lp) output = trips end
There is a bug in the “sourcecode” function in that right parenthesis followed by a colon is deemed to be a “smiley face” and so rendered as an image. I find this so charming that I have left it in.