A NEW KIND OF COMPUTING - PART 2
by BERNARD A HODSON
This part of the paper gives some additional information which will, hopefully, give a clearer understanding of how the concepts work. The text first discusses an application translator which will be made available for persons to view (or they can develop their own) in mid May 2005. It also illustrates two simple examples in more detail.
The translator
One objective of the approach is to be ethnic language independent, which is achieved by using a language table such as follows:
Table 10,'deflooping',5,'arith',7,'looping',10,'defineloop',8,'binarray'
10,'storearray',8,'getarray',8,'putarray',4,'keep',6'tofile'
7,'addfree',7,'testneg',9,'stopclear',6,'clears',7,'readtxt'
8,'testzero',6,'sqroot',4,'ceil',6,'screen',7,'isfalse'
10,'readnumber',4,'sine',6,'cosine',7,'tangent',9,'cotangent'
6,'arcsin',6,'arctan',3,'exp',4,'logn',10,'createfile',5,'skips'
8,'openfile',8,'readunit',5,'cases',8,'makefile',11,'movetofixed'
7,'storeit',8,'readfile',6,'record',6,'testeq',6,'testlt'
6,'testle',6,'testgt',6,'testge',6,'testne',4,'crlf',6,'textin'
7,'addtext',8,'notinuse',5,'addon',8,'textedit',6,'bypass'
7,'textout',8,'setgraph',9,'rectangle',4,'quad',8,'triangle'
6,'circle',3,'zzz',3,'pie',7,'notused',5,'reset',7,'bitmapp'
7,'include',6,'getlib',4,'exit',10,'prntscreen',10,'readscreen',0
This table can be in any Western based language, but should also be adaptable to languages such as Arabic and Hebrew.
The translator simply looks at the relative position of each language element in an application and gives an associated relative number (e.g. looping is 2, getarray is 6). As new language elements are added they are simply tagged on to the end of the table.
In developing a Java run system a table was developed corresponding to the Java byte codes, although the nature of the Genetix run system was such that it was not necessary to have a table element for each Java byte code. The same could be done for Forth, APL, Fortran, Cobol, Algol etc. While it may appear that there is a limit of 256 language elements this is easily overcome.
Each language element is associated with a language element string of numbers in the run system, as was indicated in Part 1. This will be outlined in more detail shortly.
Development language
The actual detail of the language will not be given at this time, just a summary being included. Considerable expansion of these language elements will take place. Brief descriptions of a couple of applications using the language will be given following the syntax, which is presented in alphabetic order.
| addon |
attaches current variable to end of record |
| addtext |
adds additional text |
| arc |
drawing of arc |
| arcsin |
calculates arcsin |
| arctan |
calculates arctan |
| arith |
performs arithmetic operations |
| binarray |
creates array with initial values |
| bitmapp |
generates bitmap image |
| cases |
transfers to case specified |
| ceil |
calculates ceil |
| clear |
clears the screen and proceeds |
| cosine |
cosine of a into b |
| cotangent |
cotangent of a into b |
| createfile |
creates a new file on hard drive |
| defineloop |
establishes parameters for a named loop |
| deflooping |
operates on the named loop |
| exit |
returns to operating system |
| exp |
exponentiation |
| field |
gets fixed fields |
| getarray |
get value array |
| getlib |
create library group |
| include |
bring in library group |
| isfalse |
checks for false condition |
| keep |
stores variable in a list for later processing |
| library |
rings in library group |
| logn |
logn |
| looping |
increment starting value until it reaches end value |
| makefile |
creates a file structure |
| movetofixed |
moves field to fixed area |
| openfile |
opens existing file |
| prntscreen |
transfers text to the screen at designated location |
| putarray |
insert value in array |
| readfile |
brings in record |
| readnumber |
reads a number |
| readscreen |
accepts data at designated place on screen |
| readtxt |
reads text |
| readunit |
accepts a digit |
| record |
moves fields to variable locations |
| rectangle |
drawing of rectangle |
| reset |
back to text mode |
| screen |
places data on screen |
| setgraph |
sets graphics |
| sine |
sine calculation |
| sinewave |
temporary sinewave generation |
| skips |
transfer control |
| sqroot |
square root calculation |
| stopclear |
halts processing and clears the screen |
| storearray |
store value in array |
| storeit |
files current record |
| tangent |
calculates tangent |
| testeq |
test for equality |
| testge |
test for greater or equal |
| testgt |
test for greater than |
| testle |
test for less than or equal |
| testlt |
test for less than |
| testne |
test for inequality |
| testneg |
test for negative |
| testzero |
test for zero |
| textedit |
edit a text |
| textin |
bring in a text |
| textout |
transfer a text to file |
| transf |
transfers data to work area |
Note that not all these language elements are included in the translator demonstration to be made available in May, just the ones shown in the table previously presented. Many additional language elements are also being developed and this external language will be considerably expanded as the needs of potential users are explored. In particular it is expected that specific vocabularies for specific industries will be established so that workers in those industries can understand what their application does without reference to programmers (see the work of the University of Waterloo Risk Research Institute, including the work of Dr. Siddall on the EM language).
Application statement line
The other function of the translator is to compress the statements to (wherever possible) single byte strings. Again this is accomplished by a relative reference number. One such statement might be as follows:
Screen ^d, h and sum is^ d h sum
Which places on the screen the edited values of variables d, h and their sum. The compression might be !3482. In this case ! has been used instead of the up and down arrow for 18, the relative position of language element screen, 3 would indicate the third literal, 4,8,2 the fourth, eighth and second variable it had found in translating the application. The literals are placed at the end of the compressed string. This would apparently limit the system to 256 variables but such is not the case, although a study has shown few applications have more than 256 unique variables.
A statement involving transfer of control might be:
Testzero Toyota #a #8
Which might compress as %429, where % has been used for the sun shaped 15 representing testzero, 4 indicates the fourth variable found in the translator, and 2 and 9 are the second and ninth transfer points found.
The translator indicates any errors in the statements of an application and only generates a compressed string that conforms to all rules.
This essentially completes the activity of the translator so it is now useful to examine a trivial item plus a couple of simple applications.
Each language element is associated in the run system with a small string of numeric codes which relate the internal functions that need to be called to carry out the function. These internal elements are themselves numeric codes which either call other internal elements or the virtual processor segments. The hierarchical structure of the internal elements leads to a very compact overall system.
Some of the current internal elements are:
| apprun |
starts the application run |
| branch |
finds where to go next |
| clear |
clears the screen |
| cleara |
sets a to zero |
| clearb |
sets b arithmetic location to zero |
| clearr |
sets result area to zero |
| close |
closes the current file |
| convert |
converts decimal number to internal format |
| create |
used to create file |
| cursorx |
manipulates cursor on screen |
| def1 |
auxiliary function |
| def1a |
auxiliary function |
| def2 |
auxiliary used in define |
| definet |
used in defining loop |
| exits |
returns control to operating system |
| edit |
edits numeric data |
| getar |
gets arithmetic variable |
| getbinarr |
used for initialising binary array |
| getbinary |
gets the binary values for loop control |
| getconst |
finds required constant |
| getdigit |
single digit to binary |
| getloops |
arranges for the loop branches for a define loop |
| getnumber |
converts digits to internal representation |
| getputarray |
used in array operations |
| gettext |
finds requested text record |
| offsett |
gets variable offset |
| opens |
opens a record |
| varfind |
finds location of variable name |
| variable |
gets variable |
| varput |
stores variable |
| varputa |
stores arithmetic values |
WORLD
batip01
\this application places a simple message on the screen\
screen ^hello world out there^ ^are you happy?^
exit
zend
While the 'Hello World' application is trivial, ubiquitous and stupid it seems to be the Holy Grail for new systems, so is included.
Note that we have a 'magic' string as does Java, all applications being started with batip01. The 01 represents the version number.
All applications have as their last line the statement zend.
The statement exit may appear anywhere in the application.
Comments are begun and ended with \.
Apart from the two literals the compressed version would be !01”@ where ! is used for the language element screen, “ is used as a statement terminator and @ is used for the statement exit. The 0 and 1 would be in their binary bit form.
CELC temperature conversion
batip01
arith fahr = 68
screen ^Fahrenheit Celcius^
#2 arith celcius = fahr - 32
arith celcius = celcius / 9 * 5
screen fahr ^ ^ celcius
arith fahr = fahr + 18
looping 68 18 248 #1 #2
#1 exit
zend
In this case fahr would be variable 0, celcius variable 1, #2 would be transfer point 0 and #1 transfer point 1. Constants 32,9,5,18,68,248 are converted to their binary or floating point format as appropriate, preceded by a symbol indicating which type is being used.
The above example would compress to about 32 bytes plus the literals and constants, for presentation to the run system.
Binary constants use whatever bits are necessary, floating point constants require a minimum of 4 bytes, three of which are for the length, sign and exponent. This length is extended to 32 bytes for the single length format, allowing for a number 10 to +/- 128.
The actual compressed byte code cannot be printed on my printer or on my screen, To give a verbal definition of the byte stream would only be confusing.
FACT calculation of factorials
batip01
#5 arith up = 1
arith start = 1
screen ^enter number less than 30^
readnumber number
arith number1 = number
testneg number #1 #a
#a testzero number #1 #2
#1 exit
#2 arith number = number + 1
screen ^entered factorial for ^ number1
#4 arith start = start * up
arith up = up + 1
arith number1 = number1 - 1
testzero number1 #3 #4
#3 screen start
skips #5
exit
zend
This application asks the user to enter a number n and then gives as a result factorial n n! It illustrates, in particular, the accuracy of arithmetic multiplications.
Variables 0,1,2,3 are up, start, number, number1
Transfer points 0,1,2,3,4,5 are #5,#1,#a,#2,#4,#3
This application would generate 65 bytes plus literals and constants.
Bitmap
This experimental application will not be reviewed at this time. It generates a JPEG image.
An example of a language element is zcalc which is associated with the arith statement. Edited to remove superfluous items it would be:
zcalc: zichvind,0,128,addcode1,1,zddcode1,c7,2,addcode1,1,zgetar
zddmsgline,v,0,zddcode1,st5,2,code1query,253,4,16,zddv,r,32
zstoreno,addcode1,1,endline,zddcode1,st6,2,addcode1,1,zgetar
zddmsgline,v32,0,zactcalc,code1query,253,6,clrst6,156,addcode1,1
endline
zcalc is one of the longer language elements and each of the addcode1, zddcode1, etc. is in fact a number. This number gives exact information to the run system as to what is required to perform an arithmetic operation. Most of the activity refers directly to run system modules but zgetar, zstoreno, zactcalc refer to other internal elements in the hierarchical linkage, while endline is a control word.
The number of modules in the run system is quite small and can be defined for use, thus far, with a number from 0-65535. The basic categories for the number system are:
;33280 msgs
;33792 keys
;34304 functions
;34816 adding
;35328 subing
;35840 multing
;36352 diving
;36864 addctl
;37376 subctl
;38400 zdd ops
;38912 zero2
;39424 zdi ops
;39936 zid ops
;40448 zii ops
;40960 zichmove
;41472 offquery
;41984 matchis
;42496 matching
Within the message module 5 items as used at present are:
;msgs 33280
appnmsg = 33280
invalidmsg = 33281
msglinemsg = 33282
codesmsg = 33283
while one of the movement modules has 12 items, the first 5 being:
;39936 ; zid in run system
zidtestno = 39941
zidst1 = 39968
zidst2 = 39969
zidst3 = 39970
zidst4 = 39971
Another module has as its first seven:
;40448 zii in run system
ziist1 = 40480
ziist2 = 40481
ziist4 = 40483
ziist5 = 40484
ziist12 = 40491
ziicode1 = 40501
ziic6ind = 40523
In this example the zii base of 40448 takes the run system to the module that moves data from one location defined indirectly to another indirectly defined location. The difference between the base and the element code used indicates the variable to be used in this operation. For instance 40481 refers to the 33rd variable in a variable name table (st2) while 40501 refers to the 53rd variable name (code1).
Benefits and use of the revised system
The obvious question to ask is ‘why is this revision to the usual architectural concept of value’. There are many advantages which will now be illustrated.
The "vision" is that a single program will be used for all application activity. This does not imply that the maximum code will be used in every case (e.g. it would be useless to have graphics on a smart card) but that module patterns are available for platforms of interest (which have already been debugged for other platforms), and which in any case are so small that debugging is a trivial affair.
Functionality can be added or removed as necessary, enabling a much greater opportunity for customisation. This is particularly important when the same software is used on many platforms as, for instance, software to transfer from a host system to a smart card, where only a few of the available modules are needed on the smart card.
It was proven in an earlier version, that GENETIX could do anything that Java could do, in a much more compact form, without the complex baggage associated with all Java run systems. This is now even more so with the numeric system.
The situation for Java is actually a lot worse than indicated because the run system based on the numeric technology does not have to cater to such things as Exceptions, various methods ancillary to those of the application, and multi threading, which tend to bloat Java applications.
By having the same software on all platforms it means that any platform can be a host or receptor. This is important, particularly in the area of telecommunications, where an alternate system can take over in the event of failure of another system, in some ways reflects the situation that exists with Internet.
|
|