Jane Compiler Extensions (773)
Take ANY compiler and remove ALL functions, what is left is the
compiler... My objective is to remove the need for functions.
When functions are no longer required then, and only then, will we
have a complete compiler. Or to put it another way, we will have a
language we can use to communicate with the computer to perform actions.
Functions require documentation, the primary objective of "Jane" is to remove
the need for documentation. Documentation only provides facts not expertise or
craftsmanship, I hope to put these attributes into the system. This list
of enhancements are
simple syntax changes to the compiler. The real enhancement is in phrase
compilations to reflect reality in our code, which is not listed here.
Show With Examples Only
Enhancements by Year:
2022
2021
2020
2019
2018
2017
2016
2015
Moving closer to a 100% table driven compiler, single
application running
across all machines using natural language and multiple computer
languages, in all software and hardware environments..
Enhancements (rough ideas, vocabulary and syntax
may take 4 or 5 rewrites each, some repeat)
2022 top
06/05 Function Call return arguments can now be expressions
if (test(1,2,3) :(a[0],b[0],c[0]])) ,
assignment is always performed
06/05 Extend multiple return arguments to be assigned to an expression
a[i],a[i+1],a[i+2] = test();
05/31 logical devices, DEFINE logical name = ...text...
DEFINE scratch =
create if it does not exist localhost(disk).%user%.A/scratch/;
DEFINE sample = scratch.sample text, A.more text;
alert(sample);
2021 top
11/28 the alert function has multiple formatted text display, copy,
save, and edit capabilities (text, html, csv, binary, ...)
11/28 run-time and compiler-time natural language syntax statements
extension to the compiler
11/27 relative numbers, A = 23;
B is relative to A; B = 1;
10/30 access by resource type A.user
= new person('clif'); B = A..resource type.person;
alert(B.name);
10/30 parent access by resource type. P =
new Persons(); A = new person('clif'); P.add(A);
C = A..resource type.(up).Persons;
10/21 to / from tabbed ruler formatted text
ruler:(10,20,30) A = "A\tB\tC"; B = A..value;
alert(A,B);
10/21 enhance JSON to qualify Objects and Arrays, also standardize
to JavaScript syntax. A = JSON.parse('{name:'clif'}:employee);
10/20 maybe allow function names to use @ as a convention of optimized
"this" update functions
10/20 @name function / cast work on "this" value instead of returning a
copy of "this", A.@trim(); same
as A = A.trim();
10/18 change multiple assignment of a = b = 12 ;
to a, b = 12;
10/18 change boolean compare from == to
=
10/18 change text equality logic , = as case insensitive, == as
case sensitive A = 'clif';
B = 'CLIF'; (A = B) ( is true)
( A == B) (is false)
8/31 multiple if conditions, then, else,true, false, failed,
handled, next ,... ; function
Apple() { return handled; }; Apple() if handled {
alert('condition handled'); } if successful { ...};
8/13 continue statements, i =
0; while (true) { if (i == 4) break; if (i == 2) continue *;
alert(i); }* i += 1; }
8/2 Triggers, events applied to a value.
trigger function Apple.onCreate(value) {
alert('apple created')}; A = new Apple();
8/2 Trigger: onCreate, onInitilize, onClear, onChange, onLock, onUnlock,
onDelete, onNotFound, onSearch, onReferenced, onCompress, onExtend,
onLoad, onUnload
8/1 context using an expression <{expression}>
name = "Clif Collins"; A =
<{name}>.Email;
8/1 logical context operators: and , or, grouping
( ) A = <javascript parse
function or c++ parse function>.getVariable('"');
7/31 context (addressing by value) identifier <context-name> for a variable.
A = <javascript parse function>.getVariable('"');
7/18 plurals variables of arrays, objects and tables.
A = [ {name:'Clif'}, {name:john} ] , B =
A.names; B = ['Clif', 'John'];
7/18 cast value's known parameters always available
A = <integer>:().known.values.names; B =
<integer>:().known.values.defaults;
7/18 compile time declaration statement: define
<Integer 16> as <integer>:(123) {bits=16, unsigned, type=counting
number}; B = <Integer 16>;
7/18 compile time cast values, A =
<integer>:(123) {bits=16, unsigned, type=counting number, constant}
7/18 combined cast and qualified values (any
combination) A = integer:(234)
{bits=23}
7/16 fraction datatype A = <fraction>:(1 / 2);
alert(A.numerator + " " + A.denominator); Alert(A);
7/16 access to bind values, A =
apple.bind(this,'clif'); alert(A.name + ' ' + A.this +
' ' + A.arguments[0]); A.arguments[0] = 'John';
7/14 datatype castValues and qualifiedValues
A = <real>:([1.2,1.2],[45.2,67.5]){rows=2,
columns=2, by Row, bits=128};
7/14 tolerance compare operators if ( A <
+/- .0003 B)
7/14 structure datatype A =
<structure>:(name:A32,age:I4)
7/13 table datatype
7/2 file storage organization re-designed into machine partitions,
vertical partitions, horizontal partitions, and blocked at physical
record boundaries
7/2 re-design the Disk Operating System from Folder / File organization
to a Classified Project organization.
6/13 multi-dimensional arrays, A[1,2]
= 23;
6/13 Basic storage: change from a fixed block size to a variable
Buffer size, A Buffer to have a variable or fixed
number of complete units, (i.e. lines of text, objects, records,...)
6/11 Parser look ahead to next state to see if the token type of keyword will be the correct choice.
function = 2; (could be a keyword or a variable name,
but determined by the equals sign)
6/11 context based parsing. Parser evaluation based on the LR1 shift /
reduction table. This will remove the need to reserve
keywords. This syntax will be okay: function
function(A) { ... }
6/10 directory based documents. Project based editor.
6/10 compound words and characters. Treat some characters as unique
terminating identifiers. Treat some as overlay characters.
Apple´ A´´
à Ā A3
5/30 multiple programming languages FORTRAN.77 {
... } JAVASCRIPT { ... } C++ {... } ASSEMBLER.IBM {
... } , COBOL { ... } ...
5/30 compiler's inline syntax function: compiler function MySpecialSyntax(script) { return script.replace('times','*')
} ... C = MySpecialSyntax{ A
times B }; compiled as C = A * B;
5/30 word based text documents. A benefit to spelling out words in
programming. "Reference", "Referee",
"Refer", "Refrigerator", .... instead of
"REF" (there are about 40 words that start with "REF")
5/29 100 Character Size Units = 1 Millimeter or 2,540 Character Size Units per
Inch
5/29 Switch CASE for keyboard events,
switch (event.keyCode) { case
keyboard.alphabet(ctrl+shift+alt): ... case keyboard.numbers: ...
}
5/23 Re-designated character sets: Language
Characters (<nationality>), Language Words, Language Terms,
Numbers, Punctuation Symbology, Math Symbology, Programming
Symbology, Control Symbology, ...
5/22 Print document, remove the need for printer specific control languages and
formats
5/18 non-essential functions, functions that are not required to
exist or to even execute without failure.
5/14 declare statement, a set of definitions of "Value Types" and
"Qualified Value Types", declare {
Whole Number = Integer:{minimum value=0}; }
5/14 variable statement, defines a value type of a
variable (use the delete statement to erase),
variable A is a Whole Number; A = 1;
4/9 system cast value "program" to create a compiled / transferable
program. program = program:(share
readonly file:('c:/temp/sample.file');); alert(program);
4/9 program op code randomize (183 opcodes, unique to a specific
user/machine) . program. location =
localhost; program.randomize('op codes'); alert(program);
4/9 program statement order randomize. (unique to a specific
user/machine) program. location =
localhost; program.randomize('statements'); alert(program);
4/9 program encrypt all text; program.encrypt('text');
4/8 Cast Values are permanent, can be replaced by a forced
assignment. A.height = treeHeight:[13 feet];
A.height = 15; (forced assignment)
A.height := 'Clif';
4/7 CAST name:(value) A =
Whole Number:(12);
4/7 CAST name:{qualifiers} B =
integer:{value=<A>, bits=(1:4,8:8)}
4/7 CAST name:[expression] name = 'clif';
A = empolyee:[name]
3/27 - change template literal calling conventions. from
(parts,...values) to
(parts, values)
3/12 -
known values, A = 1; A..parent,A..children,A..history,A..classification,A..type,A..units,A..partitions,A..structure,A..characters,A..words,A..bytes,A..template
3/12 -
add most ECMAScript enhancements with added enhancements.
first="Bob"; last="Smith"; alert(`~~Hello World from ${first} ${`Another
template ${last}`}~~`..template);
3/10 - add tagged text (~...~) to all types of text values,
alert("~myMessage~"Hello World"~myMessage~");
B = `~~`A Template Literal ${name}`~~`;
3/8 -
multiple child assignment, A = {}; A.(name='Clif',age=12);
qualified reference, A = template:(`Hello World from ${first} ${last}`); B = A.(first='Clif',last='Collins');
editor case value, A = editor:(); B =
localhost.sample math equations; A(B); font case value,
A = font
sort:([0:0,50:0,50:50,50:0], name="box"); B = C %box% D; polygon cast value compiler operators and logic
A = polygon:([0:0,100:100,200:0]); alert(A.area);
alert('Sample Polygon',A.display); B = A | rectangle:(0:0,200:50); editable logic, A = the logic of delete employee;
alert(A.source code); extensive color capabilities,
A = red.30%
+ blue.70%, A.red as HSL, B = A as
CMYK, C = A as Hue Saturation Brightness (HSB);
no-space , All words are separated by a space, unless preceded
by a no-space indicator. font generation, screen management, forms, and editor in the compiler geometric logic,
near, find, inside, fill,
DDA (pixelate), intersect, rotate, transform, ... geometric opcodes:
snap, break, polygon trace,
network, connectivity, ... user defined fonts as part of the editor / compiler smallest units of information moved to the "word" / "term" category
A = true; (internally 102,34,342) Real number precision.
A..precision =
3 decimal places; Variable
alias name assignment, A or B = 123;
boolean, true, false or maybe
if (A) then alert(true ) else alert(false )
otherwise alert(maybe )
event triggers, on change, on reference, on maybe trigger, on... propagate search along parent / child relations
A = {name:'clif'}; A.B = {age:12}, alert(A.age, B.name) loop symbolic language,
Summations ∑, Loop
2020 top
String functions,
compress , compress1 ,
name = " apple
orangles "; A = name.compress() ; B =
name.compress1(); A = "appleoranges" B =
"apple oranges"
"as" keyword as a classifier,
A = 12 Inches
as Height; box[A.%class] = A;
"of" keyword to describe person, place, or thing
A = 12 boxes of #2 pencils; B = 7 3/8 inches
as height of pencils;
opcode inline function, opcode
math.*([integer,real] as height of pencil, [integer,real] as radius of
pencil) with units {...} A = 7.125 inches as
height of pencil; B = 0.5 inches as diameter of pencil; C = A * B;
opcodes container of opcode inline functions by computer
language, opcodes JavaScript { ... } opcodes FORTRAN { ... } opcodes Python { ... } opcodes C {
... } opcodes x86 { ... }
cast and qualified values in global namespace
A = height of a box of pencils; B := width of a box of pencils;
A = run-time evaluation B := compile-time
evaluation
dual mode statement execution, standard statements (emulated) and
opcode statements (direct execution)
customizable compilers, encrypt to individual user, selectable compiler
executable statements, and alter opcodes per application
disable all compiler statements opcodes not used in an application,
(security issues)
opcode selection based on datatype, parentage, classification, and/or
units opcode math:+([integer,real] as
height, [integer,real] as width) { ... } A = (10 ft as width * 30
inches as height) sq feet; A = 25 sq ft (width: 10 ft,
height 2.5 ft)
value to object operator
"=<" A = 30
ft as height; Pole =< A;
alert(Pole.height);
two type of opcodes, "native" as compiler level code, and
"script" as a Jane inline function.
logical
or operator if (name ==
"Clif" or "Collins") ...
rename array
length variable to nextAvailable , add
array count variable (sparse arrays required), add to array and
object a keys to return list of keys and indexes
keep the knowledge that an array is sparse.
A = [], A[5] = 6; if (A is
sparse) ...
conditional line and block comments
//Jane
only ..Jane code...
/*Jane only ...Jane code... */
assume a then condition
if (false)
else alert(true); or maybe an if not
if not (false) alert(true); I would use this while testing, but it would
come in handy and still is readable.
return arguments from a new function call
A = new person('Clif Collins')(index);
complex number
x = «13 + 23i»;
x.a = 13; x.b = 23;
point coordinate N-dimensional point, a vector, or Tensors,
p = «3,45,0»; p.x = 3, p.y = 45,
p.z = 0 T = «p,p,p» recursive Tensor or Matrix
cached function values. values that once set through a function call
remain set for a given set of arguments.
cached function user(name) { ... }
A = user('Clif'); B = user('Clif');
A loads value, B uses cached value;
change JSON syntax to mirror JavaScript syntax.
A = '{"name":"Clif"}'; A = "{name:'clif'}";
both are valid
change JSON to accept all data types
text = JSON.stringify('Clif Collins'); A =
JSON.parse(text);
math addition of undefined or null text is treated as an empty string
formatted text or number functions .left (50), .right (20),
.center (20), .currency (20), .comma (20)
J ane
function statement defines a function that will be run a Jane
service Jane function devices() {
return global.devices() }; or at a specified URL
A = devices() at 'http://CollinsSoftware.com';
J ane
keyword, to run a function that exists on a Jane service from the client
Jane's drawSphere();
Adam
function statement, to run a function that exists on the main
application. Adam function showTable(table)
{ ... } showTable(employees);
Adam
keyword, to run a function or access variables that exists on the main
application from a Jane service status =
Adam's confirm('Keep Looking');
Requester keyword, to run a function or access variables that
exists on the calling client. A =
Requester's location;
location statement location Apple is
'http://myOrchard.com'; B =
Apple's prices
where , group by , sort keywords,
A = table where index < 50 sort by name;
validation functions for valid URL, Email, Address, Date, Name, File,
Folder, Password; A =
"http://CollinsSoftware/".url; if (! A) throw "not a valid URL";
multiple datatype values, values that can be have multiple datatypes. An
integer that can also be text, if (typeof(A)
== 'string' && typeiof(A) == 'integer') where both are true
differentiate the parts of a
URL [
protocol:// [Address [ Location [ [ domain [ subdomain, domain name ], :
port ] ] , path, file ] ?parameters #bookmark ]
separate objects into multiple parts, those that are the object from
those that are information about the object.
c++ datatypes:
int, double, float, string,
char, bool, double, void
other datatypes:
complex, text, date, character,
word, phrase, bits(n), bytes(n), integer(n bytes |
bits), whole number(n bytes | bits), imaginary, real, fraction
c++ arrays:
int values[4] = { 1, 2, 3, 4};
c++ dynamic array
int value[*] = {1,2,3,4}; value.push(5); value[5] = 6;
(maybe index by 1)
c++ output
cout << values[0] << eoln;
c++ union
statement, union A { int x, bits(32) y}
c++ template
statement, template <A,B,C> { ... }
(remove the keyword class and typename keywords not
needed)
c++
struct
statement, struct Car { string Name;
int: Age; Car(){ ... }; ~Car(){ ... }; void Print() {
... } } with constructors, destructors ,
and methods
c++ pointers ??? struct, objects, and arrays are pointers
Jane Name Server, to identify the location and information about
all registered
remote Jane servers. (propagated to every local Jane server nightly)
Adam is the name for the location of the localhost Jane Service,
propagated throughout the network, IP address resolved.
location Adam = http://156.222.0.12:77101
Eve is the name of the location of the Running Application.
Permits all satellite Jane services to send requests back to the main
application, even when the request come from a nested service.
File structure Object,
B = File Structure
url{http://sample.dll}; alert(B.structureNames);
for reading and writing known file binary structures
c++ datatype, structures and union. overcome JavaScript and C++
size limitations of "string" both in count and character size, and
integer size
price and prices datatype, prices += $1 for 1 or
$6 for 10 of cream cheese in US dollars; A = 34; Total Cost
+= price of A cream cheeses;
"word problem" compiling. A = average
age of class divided by teacher's salary.
unit opcodes functions, tied to opcode and units:
units_opcode math:* ([amps, ohms], [ohms, amps])
{ ...result volts..}
unit conversion functions, Fahrenheit to Celsius
convert function fahrenheit_to_celsius(A) {
... }
known unit equations
amps = sqrt(
power / ohms) , A = 100 Newton meter/second; B = 45 ohms; C = amps
produced by A and B;
numeric name
qualifiers myList.5 = 'happy'; same as myList[5] = 'happy';
template functions , change C++ template statement, Run-Time,
Based on Argument Types, "smart",
template function Apple(a,b) {
<A> count, <B> total ... } A = Apple(1,1); B = Apple('clif',1)
rename "goto" to "continue", simply permit the continue to go
anywhere (maybe do this)
user defined units,
pencils A = 10 pc;
units
pencils {scale=1, type=pencils, tag=p}; units pencil boxes
{scale=10,type=pencils,tag=pb}, units pencil cartons
{scale=240,type=pencils,tag=pc};
searchable, changeable text object,
Text, Integer, Real, Date,
Object, Array, system independent A = textObject{`o Fruit `| Apple `v Red Delicious 'e}; B =
A.Fruit; A.Fruit = 'Pear';
o = Type Name (required), | = new record (Name field) v=value
field t=type field u=units field e=end of object (soft) (name,
value, [type]) type is Optional
toT ext
and toObject functions: A = "`o Fruit
`| Type `v Apple `| Name `v Red Delicious `e"; B = A.Name; C
= A.toObject(); D = {Name: 'Red Delicious'}.toText();
text object nested to any depth. Datatype can be a function name (i.e.
the object constructor called when converting to Object).
A = "`o Fruit"; B = A.toObject();
function Fruit () { this.Name = "Apple" }
large text objects are indexed on first random access
Text Binary Array Objects A = "`o Integer Array `|`v 12;13;14;13
`" (international use semi -- colon as separator -- free to use
comma in real numbers and currency)
Text Array Object A = "`o Array `| `v Clif `v Rachel `v John `e";
Names are optional, only needed for sparse arrays
mode driven state transition system parameters. Specifically needed for
format and nationality mode constants.
compiler syntax
shortcut function , system defined
shortcuts: shortcut function "{...}"(value) {
return 'new Object(' + value ')'} ; user defined shortcut
function " ╟ ... ╢"(value) {
return 'table:{' + value + ' }' } file AKA, recursive resolve (case insensitive),
aka localHost = ' ws://127.0.0.1:7710 ';
aka A = 'localhost:scratch/engineering'; B = A:Sample.txt;
temporary global scope global ; global
pos, index { ... } pos and index are global names
until the grouped statements are finished or existed, the names are also
local to the function case insensitive variable names. All reserved words are case sensitive.
CELL qualifiedValue,
GRID qualifiedValue, N-dimensional array of a single datatype.
A = new Grid(cell); TABLE qualifiedValue, N-dimensional array of single cell
declaration per column. A = Table:{columns=columns}; COLUMN qualifiedValue, an array of cell declarations
A = column:{name=name,type=text} CATALOG castValue fractions,
A = 1 // 2; castValue without units,
A = 10 as
Height; units become "units". All operations of unit
conversions, then all values musts be of type "units" Cell FLAGS, %hidden, %system, %working, %locked, %copy,
A = Fruits[%system].search("someName");
B.Fruits[%copy].parent = window; qualified IF statement; exists, blank, zero, null, undefined,
positive, negative, <class name>
if exists (A) alert(A); if blank(A)
inline template operator, #1 = B + 1;
A = #1;
fraction syntax A = 1 // 3 ; expression syntax A := 1 / 3 * Angle
in Radians; B =A(angle=45 degrees);
2019 top
floating point number representation maintained from source. Purpose:
to keep accurate data representation when listing and moving source
data. secure transport of information. A modified SSL / TSL
connection using Jane. An unpublished rolling encryption scheme.
(without public keys) an append-able source or destination. the "stdin"
and "stdout" are two such variables. Web sockets and streams also would
also be of this type.
three types of compiled code, emulated (in a browser), p-code
(browser compiled, sent to a service to run), and as an executable
(machine instructions, .exe)
math equation programming...
program
directly in formatted equations. This requires new fonts, encoding, and
editors get rid of operator precedence wherever possible as part of
math equations. This is an artificial convention for the human to
describe the order in which operations are performed
rational numbers. A = 3 1/3; B = 2/3; C = A +
B; D = C / 5; whole number with remainder over divisor (3
part numbers) plus units prime numbers: A =
prime numbers[1-5]
(2,3,5,7,11) ; prime factors:
B = prime factors of 578; (2,17,17)
logic over design. Determine all possible requirements for each
given data structure. example csv : columns -
minimum/maximum/average size, size/format frequency count, default/user
headers/formats/selected, indexes, ... language syntax from logic,
B = the maximum column sizes of A; C = the
column size frequency of A; D = The row index of A; Date
format: month day, year hh:mm:ss ampm timezone
A = Jan 3, 2019; B = January 1, 2019, C =
Sept 4 2019 10 AM Zulu;
timer block:
timer { call translate(); } progress
(n, total, percent, duration) { progress.update(percent, duration); } finished (n, total, percent, duration) { progress.stop(); }
failed { (n, total, percent, duration) { } sub-range
replace
A = "Clif Collins"; A[5] = "ford L. ";
result "Clifford L. Collins"
sub-range delete A = "C Collins"; A[1:2] = "";
result "Collins" sub-range insert A =
"Clif Collins": A[5*] = "ford" result "Clifford Collins" sub-range multiple assignment
A = "1 2 3 4 5"; A[2,4,6,8] = '-';
result "1-2-3-4-5"; a combined singular and plural object constructor
using entry points;
function persons () { ... entry
person() { } } employees = new
persons( ); me = new employees.person('clif');
compound units: A = 24 barrels of crude
oil {carbon:83.4407%, hydrogen:11.3452%, nitrogen:0.1342%, other:*}; text value as double back quotes;
A = ``Clif``; with template
qualifiers B = ``Hello from {name}``;
and qualifier delimiters;
C = `any` Please use double back quotes `` `any`;
No escape characters D =``c:\temp\sample.txt``; minimum foot print compiler for arithmetic and boolean expression
evaluations, with extensive and custom variable name resolution
capabilities compiler function use determination. Can it be
determined if a function is to return a value, or work on itself, or
BOTH ==>
sort(A); (work on itself) or
B = sort(A); (return a result)
extended String Object built-in functions for CSV, JSON, Math and
Boolean expression parsing extended Date Object built-in functions
for adding Years, Months, Weeks , Days, Minutes, Seconds, and
Milliseconds extended RegExp Object expressions for extended standard
logic and formats dates, addresses, phone numbers,
numbers, comments, quotes,... Compiler generated logic
templates... for qualified values,
A = TrueTypeFonts{ arial.ttf } SQL
Select statement in a "for" statement;
for (select table from main.tables where
table.name = 'cmap' order by table.name) { ... } plurals in
"for" statements
for (tables) { alert(table.name) } replace boolean equality == with single equals sign "=", replace
identity equality (triple equals ===) with "is" ;
if (A = B) and if (A
is B)
(mutable) set text attributes by character / range: upper, lower,
normal, bold, italic, underline, negate, strike, color, slant, font,
size, language, highlight, justified A[1-4] are red; A is bold;
Clif Collins text tab ruler,
left and right margins, tab column setting and justification: left,
right, center, period. A..ruler = ruler{
units=inches, margin-left=0.5, margin-right=7, tabs=(1,3,5:center)};
A..value = "Clif\tCollins\tHouston"; alert(A); text reference
A = "Clif Collins";
B = A..value; B += " is a dummy";
B is an Object so it can be passed as an argument to change A,
A is now "Clif Collins is a dummy" SQL
statement to work on Arrays, Object, Tables, Matrix, and Qualified
Values, a = Select * from csv{
file{employees.csv}} order by name; Numeric Accuracy, define
the standard uncertainty of a constant,
h = 6.6260693(±11)E-34 joule * second; //
Planck's constant Indirect Addressing; A
= "Clif"; B = %reference(A); Value sub-range
A[min-max,...] B = A[new bits(0,5,2,7)]; A[insert(1)] = "Clif", B
= A[row(1)]; C = A[range(1:1,3:4)]; D = A[column(1)];
E=%ref(A[rows(1-5,8),columns(2-3),D3(4,6)]) storage
declaration; A:Integer:1 = 2;
A:CountingNumber:2 = 1; A:WholeNumber:4 = 1; A:real:8 = 1; A:date:{year:Integer:2,month:wholeNumber:1,day:wholeNumber:1}
= Jan 1, 1989 N-dimensional reference A[1,1,4] Sub-Range Reference A{1:5,7} Content Reference,
row(n), column(n), A{name='clif'} B
= A{rows{2:5},columns{1:4,7}} keyword bracket reference,
first, last, middle, random, next , insert(n), compressed(0),
compressed(1), trim B = A[first];
A[insert(5)] = "Apple"; Assignment and non-assignment function
reference, A.sort(); B = A.sort();
A.sort = function sort() { }; A.sort = subroutine sort(){ }; Object assignment entry point. A = new
person$(); A = 'clif collins'; function person$() {
... entry on.assignment(value) { ... } }
Flow control: asynchronous function calls --
function-name.wait(...); wait for sync or async function to
finish
Flow control: wait function; wait(time);
delay execution
Flow control: refresh function; refresh();
same as wait(0);
Flow control: parallel asynchronous
function calls -- function-name.continue(...);
multiple statements then,
waitForEvents(timeout)
Flow control: flow between functions --
reenter entry-name(...) to caller
resume (...) to statement after reenter,
resume entry-name(...) to a named enter
point. With out without arguments
Flow control: try catch recovery
-- try { ...} catch (e,...) { resume('ok') }
... result = throw('error');
Internal property variables; .%value (address of value (read /
write) , .%type (value type read / write) , .%units
value units (read / write) , .%events (array of events), .%allocated
(memory allocation (read / write) internal property
%inf (if not found) to replace the __proto__ object, the name
resolution linked list internal property %length to reference
/ replace the Array Length, Move all of the internal information out
of the name resolution of the primary cell .
extend closure to include function entry points, not just sub-functions,
A = test(); A.next(); function test()
{ count = 0; return test; entry next(); alert(++count);
} function properties; test = 0; while (test(count))
{....} function test () { count = 0; property set (value) {
count = value; } property get() { if (count <= 0 return false;
return true,++count; } } object constructor
property
get and set ; A = new test('apple');
A = 'clif'; alert(A); function test(name) { this.name = name;
return; property set(value) { this.name = value; } property get()
{ return this.name; } } object constructor call
property; A = new test(); B = A('get count')
;function test() { this.count = 1; property call(command) { if
(command == 'get count') return this.count }; object
constructor
assign
property; A = new test(); A = 'Hello World';
function test() { property assign(value) { this.name = value; } named arguments
A(name='clif', type=32) function A(type,
name) { ... }
Using closure to create a "class";
A = test(); A.hello(); function test() {
name = 'Clif'; return test; function hello() { alert(name) }
}
Permit a "class" to be treaded as an "object"
A = text(); A.anotherValue = 10;
do forever statement; do forever {
... }
qualified value's functions, use a flattened name space for the
entire nested qualified values structure
default assignment statement, conditional assignment only if
existing value is null, undefined, blank, of zero, default size = 10;
rename "do " and "for " statement to "repeat "
statement, the words "do" and "for" do not explicitly imply
"repeat" (maybe not in all cases ???) dual Qualified Value
replacement text, «...» for
immediate value substitution (when assigned), and
‹...› delayed value replacement (during evaluation) declare
statement of 1 or more variables,
declare A,B,C as {size=8 bits, type=whole number,
allocate{increment=4000 bytes, preallocate=0 bytes, Maximum
Size=infinite}, units=feet, dimensions{rows{}, columns{}}} "declare" qualified value, integerArray =
declare{type=integer, size=64 bits, dimensions{rows{}}}; declare A
as integerArray; remap and union a variable,
B = A.%value as {type=16 bits}; A and B tied together with
the same values in 2 different structures (synchronized by the system) copy and remap a variable
B = A as {type=16 bits};
B is a Copy of A in a different structure never abbreviate
anything qualified value content: name{~~ ...text anything.... ~~}
or name{content{~~...text
anything...~~}, ...} qualified value assignment values and
nested qualified values
name{value_1=..., value_2=..., nested{...},
...} flow control -- interrupts , standalone functions
that get called immediately upon hardware and software interrupts.
interrupt mouse (event) { ... } interrupt
network(event); interrupt timer(event);
change conditional equality from "==" to "=" add conditional
(aliases) "equals" or "==", "and" for &&, "or" for || , "xor" for
"~", "not" for "!";
if (a = b) ...; c = a equals b; list conditionals;
if (A in [2,4,32])..., if
(A not in [5,6,7])... alias conditionals "is identical
to" alias for "===" if (A is identical to B)
, "is not identical to" alias for "!==",
if (A is not identical to B) ... add conditional "is"
if (A is B) same object,
leave "=" for value equality and for assignment logical assignment
statement, compile time and run time:
A = logical (a = b);
(compile time) A = logical
("a = b"); (run time) -- arguments 2 & 3: on search,
and search object with __proto__ arithmetic assignment statement,
compile time and run time: A = math(a * 55);
(compile time) A = math("a * 55");
(run time) -- arguments 2 & 3: on search, and search object
with __proto__ programming font -- soft (contained in the document)
and hard (controlling the document) control characters, unique comment
characters,
Line
comment... and
...Block comment...
alias statement, F = alias require
one [form, canvas, popup] of type "qvalue"
this is an assignment statement, selection, and an exception if
it fails (does not exists, only one, or not of the specified type)
alias statement qualifiers,
unique, first, last, random, one, required
bind statement is to treat multiple cells as one entity with
non-unique names
union statement is to treat multiple arrays as one with unique
names for objects and continuous index.
remote values, values and functions accessible on demand,
A = localhost.Employees; B = wait for select
* from A where name='clif'; server based logic, pause until
complete or not (a separate thread or process)
remote buffering, values can be declared as remote single or
multiple buffered on the localhost or on a remote server:
declare A as {type=text, allocation{ on=localhost,
buffered=4 KB, buffer count=3}}; A = space(5 TB);
qualified values used, unused and orphan reference parameters;
A = sample{A=1, B=2, C=3};
alert(A.%not referenced, A.%not used, A%orphaned);
qualified values variable names are case insensitive, style
insensitive:
B = A{Pie Type = Apple} alert(B.pie_type,
B.Pie Type, B['p-i-e t-y-p-e'], B.PIETYPE); all spelling and
syntax the same
E of type E, extract all values of a specified type from a
cell; A = [1,2,3,"A","B"] of type "string";
if (A[0] of type "number") ...
E = E(name) join E(name); C = (A.B_key
join B.B_key).C_key join C.C_key alert(C); left
join, right join, full join, inner join
JavaScript Array, change sparse storage structure and length value,
A = []; A[5] = "clif";
A.length is equal to 6; one plus highest numeric index, change to "A.availableIndex "
(6) and "A.length" to number of elements (1) read,
A = file{"c:/temp/sample.data"}; B = A;
A = url{"./sample.data"}; B = A; write,
A = file{"c:/temp/sample.data"}; A += "Hello
World"; subscripts in programming.
R1
= 123, Ai = "Apple", Bij
= 45;
relative numbers and offsets, A[i] =
++10;
for in statement optional "key and value" in arrays and objects
A = {first_name:'clif',last_name:'Collins'};
for (name, value in A) { alert(name + ' = ' + value) };
for (index, value in [5,4,3,2,1]) { ...}
for in statement optional "key, character and number"
for text values for (index,char,num in 'Clif') {
... } expression values.
pc = «activeFunction.baseAddress +
activeFunction.pc»; alert(pc + 1) ; Hello
From = «"Hello World from <value>»; alert(Hello From
'Clif');
orphan catch and/or finally blocks. Assume the
statements prior to is contained in a try block.
function A() { a = 1; catch (e) { ...}
finally { ...} }
a "finally block" without a catch will always be executed and will
propagate the catch to the next higher try block
catch multiple arguments; try { ... }
catch (a,b,c) { alert(a,b,c) } exit all statement
will unwind the call stack and execute any and all
finally
statement blocks, the exit statement will performs
no other statement, it is an immediate exitalert page layout,
alert.document = document{page layout{size=letter,
layout=landscape, margin{left=1 inch, right=7 in}},
ruler{tabs{20;40;50}, units=pixels, font{size=10 points} };
alert ruler,
alert.ruler = ruler{tabs{'40;5 right;16'}, units
= characters; gutter=2}; alert('Name\tAge\tDOB','Clif\t12') ; alert buffer; alert.buffer('Hello ');
alert.buffer( 'World'); alert();
named formatted object bits statement,
bits:(0:1,5:2) skip 0:set 1, skip 5: set 2,...
bits cast value subscripts, A =
[1,2,3,4,5,6,7,8,9,10]; B = A[bits:(0;2,0:2)];
alert(B);
match cast value subscripts, A =
[1,2,3,4,5,6,7,8,9,10]; B = A[match:(is
Prime)]; (inverted logic) calling sub-functions,
A = B.C(); where C is a
sub-function of B qualified sub-function names
function A() {...} function A.B() { }
where function B is a sub-function of A, this keeps from having to nest
braces, which are hard to locate if missing
extended random values, random.integer(min,max); random.real(min,max,dec);
random.fruit(); random.name();
random.name.boy(); random.occupation(); random.phone()
list of expression, A = list of boy names;
B = list of occupations; C = list of all lists; D = list of
['fruit']; E = list of 10 girl names; F = list of northern
states; list of expression assignment, temporary and
permanent, can be an Array, String, or
Object list of my products on localhost = ['A','B','C','D'];
random list of expression, A = list of 10 random boy names; list of classifiers
A = list of boy's lists; B = list of my lists compound
knowledgeable variable names, beside hierarchical, units, and
conventions, we need other relationships, taxonomic, 17 known
classification systems, 142 sub classifications classification syntax
nomenclature, human =
classification:(Animals, Chordates, Mammals, primates, hominids, homo,
homo sapiens); A = "Clif Collins" Human IUPAC
nomenclature A =
3-methylhexane ;
programming in color, style, language, and any other
characteristic we wish to introduce at the editor level
% operator for a
specific assignment representation of a value. A =
34.2; alert(A.%english); "thirty four point two"
alert(A.%french); "trente quatre
point deux", alert(A.%F8.2)
" 34.20" %saveas
operator, set the external storage representation of a value,
A.%saveas(real.bytes(4)) = [12,5,8,33,105];
% operator, set the internal storage representation of a value;
A.%complex.real.bytes(8) = [1,2];
% operator is different between value
get and set: A.%real.decimals(2) = 23;
(set value as a real) alert(A.%integer);
(get value as an integer)
declare formatted numbers,
A = Math.PI; B = A.%f(15.2);
C = A.%e ; D = A.%g;
declare % directives
for text formatted: Number, Currency, Date, Complex, Text,
Character, Objects, Arrays, Matrix
declare % directives for numeric format of any size: integer,
real, counting numbers, whole numbers, rational, p-adic, complex
numbers
A.%complex.real.bytes(8), A.%Integer.bits(32); A.%english;
declare % base units,
A.%binary; (base 2)
A.% o ctovigesimal;
(base 38), A.%base(16); maybe --- division
A = B
÷ C;
rational numbers A = 1//2;
move all the Math functions to the top level search
path: A = sin(32);
move "this" children to the top level search path;
this.Apple = 'Red Delicious" ; alert(Apple);
change default angle units from radians to degrees,
A = sin(180); or force explicit units A =
sin(180 °);
B = 180 degrees; sin(B); D = sin(PI);
forward assignment operator => A => B;
save time in assignment edits.
A = B; ... A => B; single
character change to move value back and forth (especially for a long
list of assignments)
function permanent values,
function test () { alert(name) };
test.name = 'clif'; test();
function statistics kept, function-name.calledBy , function-name.calledByLine log complete program execution function calls with time stamps, produce
on request a detailed execution analysis
function hierarchy using qualified function names
function test() {...} function test.A()
{...} same as brace nested coding function
test() { ... function A() {...} }
AKA: alias names for a function,
function test.A () aka(Do Something) {...}
Do Something(); permit complex internal names to be
aliased.
permit functions to be called without the parentheses if a semicolon is
give before AND after. Do Something;
note: the start of the program assumes a leading semicolon.
function has access to the name used to be called as,
function test() { alert(' function was called as
' + calledAs) } A = test; C = test;
test(); A(); C(); called as "test", "A" and "C" (same
function 3 names)
AKA using wildcard characters: function
test() aka(Show *); { alert (calledAs) }
Show Company(); Show Invoice(); Show History();
calling the same function with an infinite number of names
same name assignment copy [content of] A to B where names
match; (case insensitive) copy identical named values
from one cell to another. clone
assignment
B = clone of A where type = 'text' B becomes an identical new
cell of typeof(A) with the contents of A copied that match the where
clause copy assignment copy [content of] A to B
two existing cells, copy content of cell B
(maybe a Form) into an existing A (maybe an Object) function
qualifier .bind without parameters for function reference, if
this is done then all others could be a call to the function,
function test() { } A = test;
(run function, see 551) B = test.bind();
(assign function to B) derived information: from a given set of
information, derive knowledge. For example: given DOB (date of birth)
then "AGE" can be derived. Also if dead, or possibility of living, grade
level, knowledge base, all kinds of probabilities... common and
uncommon facts: some way to identify facts, and to derived facts
about facts: "date of manufacture" "date of inception"
"startup date"
subfield selection assignment. products = [ {name: 'Apple', price: $1.40 per pound}, {name: 'Pear',
price: $0.34 each}]; B = products..(name); B =
['Apple', 'Pear']; currency quantities and counts.
A = $1.34 per pound; B = $0.34 each;
C = $1 for 3; D = $12 per square foot;
E = $45 per box of 100, alert([A,B,C,D,E]..(name,value,count,quanity)); conditional units and quantities,
A = $1 each or $3.59 for 5; derived
value and logic syntax.
extended phrase, word, and character conditionals based on style,
content, language, class, and attributes A = "Clif".{style=(bold,blue,underline),class=Person
Name,Nickname For=Clifford, AKA=Clifford L. Collins};
get [ brace | parentheses | bracket | <> ] function : get
function Apple.price(value) { this.price = value };
Apple.price = $1.23 per pound;
set [ brace | parentheses | bracket | <> ] function :
set function Apple.price() { return this.price };
alert(Apple.price); verb function :
verb function Apple(verb) { if (verb.name == 'print') ... }
print details of Apple;
search function : search function
Apple(name) { if (! this[name]) this[name] = "" }
B = Apple.unknown;
does not exist function : does not exist function Apple(name) { return name[1-*].%integer;
} alert(Apple.N23);
location value: all children inherit "location & security" by
default: location:{localhost,shared,device=C,secure{readonly}}
A = 'Hello World'; B = A location:{localhost,user=someone};
C..location = location:{here}; roles and privileges: (cell
level security) A..security += secure:{user='clif',role=supervisor,
password=1234, privilege=(read, write, delete, update)}
classification, taxonomy, relationships, see, see also, ownership,
history, aliases, indexing, uses, used by, and evolution
constructor name for all objects: A = new
Apple(); alert(A.%context) "Apple"
indexOf and lastIndexOf to accept regular
expressions as the search argument: A =
"Clif Collins".IndexOf(/c..f/i); list of caller's function
entry points,
A = caller.%entryPoints;
regular expression's functions as String Object functions (match,test,split,replace,search)
list = "Clifford L. Collins".match(/[C]/g); regular expression's "exec" function moved to the String object function
"locate". list = "Clifford L.
Collins".locate(/[C]/g); String functions: quote, unquote,
escape, unescape, compress, compress1:
A = "Hello World('Here I am')".quote(); B = "Hello
World".compress1();
cell functions: cg2 , cg3 ,
json, csv, tsv: A = new
Cg2({a:1,b:2,c:3}); cg2 the read only editable text
representation of an object:
alert(A[1].a); cg3 the read only
binary transportable / storage representation of an object:
alert(B[1].a); Object derived value indicator,
"?"
A = { dob: new Date(1920,5,1), age: ?}; Move JavaScript properties,
value.%configurable, value.%enumerable, value.%writable,
value.%get, value.%set
ensure all the browses' functions exist. Implement all missing
functions in the running browser, IE does not have "Object.entries"
so add it to the prototype of "Object" alter the Enumerable logic
syntax, make it easier to implement Change all font characters
uppercase i and zero as ==> "I "
and "0 "
variable %events to set variable actions: get, set, search,
not found, create, delete, modify, A.price.%events = events{get=getPrice, set=setPrice };
alert(A.price.%events.get()); or alert(A.price)
function %events call, return, exit, enter, fail
alert.%events += events:{call=debugAlert};
prototype %events Function.prototype.%events
= events:{enter=logAllCalls} truth
tables with outputs of ==>
Karnaugh Maps , Boolean Expressions , Circuit Diagrams cg2 compiler program execution, A text based
compiled program
multiple CPU and Process program execution from the same source code
plural qualified value, employees =
plural:{singular=employee, id=employee_id}; a = new employee('John
Doe'); A new employee is automatically added to and deleted
from "employees" inline function , run function without leaving
active function, call stack not changed inline
function price(A,B) { return A + B }; A = 10; B = 20; C =
price(A,B); operator function , functions that execute hardware instructions,
a macro that looks like a function but is expanded into primitive hard
typed value instructions (required for table driven opcodes)get rid
of the 214 heteronyms,
words spelt the same but pronounced differently, Wind (air
movement), Wind (to crake) -- to determine context is a little
over the top (for now), possibly add Diacritics
Object's "nameValuePair" as "value" only parameter;
apple = "Red Delicious"; pear="Barlett"
fruit={apple,pear}; same as fruit={apple:apple,
pear:pear};
Timeline of when a variable is: Created, Changed, and/or Deleted,
A = 1; timeline mark "after A"; B = 1;
timeline mark "after B"; C = 1; alert(timeline);
robot compiler primitive, maintained offline as a standalone folder,
load on demand: house lights on; ./robots/house.js = "robot house () languages:{ language{lights, {turn}
on, {turn} off} } { ... };"
robot qualifier phrases,
Rachel's house turn on lights; robot house () phrase:{language{my},value=user.current}
house.phrases += phrase:{language{Rachel's}, value=user{Rachel}};
robot context,
robots context add context:{lights, alias{house
lights turn on}};
random phrase lists
phrase{random(lights,turn,on|off),
random(on|off,lights) };
Possessive parts of speech to language and syntax -- Possessive
A djectives
(at, on, in, but,...)
Possessive
Pronoun (my, your, his,...) Possessive Nouns (kids', Jennifer's,
companies', ...)
compound robot language -- permit one sentence to reference multiple
robots. (might not be practical)
compile time assignments
:=
A := lookupTable:{csv:{file{c:/temp/states.csv}}};
alert escapes sequence --
\(cn) tab to column n,
alert(\(c20)Apple \(c40)Pear);
change the meaning of a boolean value of a numeric 0 to "true". Loop
logic to determine increment direction and boundaries,
loop index (1 to -10 by 2) { ...}
what and units
A = 10 ft as width; B =
312 inches as height; C = A * B; C = 260 square feet
(10 ft width (A) by 26 ft height (B))2018
top addition of objects; A = {name:'Clif'} B =
{age: 12, dob: ''} A += B;
variable name attached to value a = new
Object(): alert(a); listing contains a = <object> ...
case insensitive text. A = "Clif";
A~keyword = true; if (A == "CLIF") alert(true);
attributed text (trim, case= ('upper', 'lower', 'proper') ,compress,
keyword, editable) A~compress = true;
A~upper=true ; A = " Clif Collins
"; // "CLIF COLLINS"
horizontal partitioned arrays and matrix: A =
new Array(); A~partition.horizontal = function () { return
this.value[0,1].toUpperCase() }; A += "Clif"; A += "John"
alert(A.J);
vertical partitioned arrays and matrix: A =
new Array(); A~partition.vertical = {[ name:'index',columns:'name'],
[name:data,columns:"*"]} A += {name"clif", age:12,
address:''}; alert(A.index);
infinite number of vertical and/or horizontal partitions
infinite depth on horizontal partitions (i.e.
company.department.project.year,month.day.hour);
externalized vertical and horizontal partitions
horizontal partition example: "index(http://index/2016/Jan.cg3)"
security possible on every vertical and horizontal partition
version, format, structure, depth, and granularity independent of
partitions
concatenation of "undefined" and "string", make "undefined"
blank
permit the function variable "this" to be changed,
this = new Object();
allow dynamic format change, any size (bits or bytes) integer,
number, or real array
A = "clif" A.~.format = 13 bit integer;
allow access to binary structure A.~.binary =
true;
absolute control over program flow
asynchronous wait, either blocked a = b.wait(),
or unblocked
a = b.return();
parallel asynchronous statement execution; a =
get.continue(1); b = get.continue(2); continue wait;
enter points with a function callable from called functions, two way
communication between functions
emulate threads, permit screen refresh from any function;
function a() { for (i=0; i<100; ++i)
{ progressBar(i); refresh; } }
Jane server,
solicited and unsolicited web socket communication to multiple
servers
Local Jane server (127.0.0.1) for reading / writing local resources
A = local["c:/temp/myImage.jpg"]; local["c:/temp/hello.txt"]
= 'Hello World";
Jane database tied directly to compiler, A = Employees;
where Employees is a table/object on a local and/or remote
server(s)
on-demand loading of server resources, A =
Employees; alert(A[0]); only the first employee is actually
read from server
server reading and writing tied directly to compiler,
A = Employee["Clif Collins"]; A.age = 12;
server immediately updated
transaction processing,
begin Transaction; Employees.add({name:"BOB"});
commit; (or rollback)
addition assignment of string/integer/number/real to undefined value
get initialized to blank or zero A += "Clif"
on first assignment A is initialized to blank, no need to initialize A
of operator, to generate a percentage a
= 10 of 100; a = 10 percent ++a
increments percentage counter not the percentage value,
loop a (index,value) { ... } loop through
the percentage
FPGA logic added to assembler with output and/or simulation,
(software implemented in hardware)
compiler forms, a hybrid form generation tied directly to the
compiler. win32 forms, html, and pdf styles (pages, printable,
index-able, scale-able graphics, 3D) as a single language on all
hardware
compiler forms, emulated in all browsers, and compile-able in
Windows and Linux
compiler forms using a simplified html format, simple in language
not in functionality
compiler forms with graphics 2D & 3D language, math equation
language, and macros
device object
A = new Device(); A.clif = "Hello" A.clif.file =
c:/temp/myData.txt; a physical or ram storage device
hardware device
B = new Hardware(); B.Clif = A;
a physical hardware device
remove the need for an install utility, every program is immediately
known, defined and movable
application modes, Production, Testing, Training, Replication,
Backup,...
Jane scripting tied to forms with direct process to process
communications.
scripting makes no distinction between form and console applications
self tagging devices. Mouse, Keyboard, Monitors,... known to the
system, with changeable names, locked to an internal network
(unlock-able)
infinite memory,
A = new Memory(2 byte integer); A[8 GB] = 12; B =
A[9 GB]; B is null
CAN BUS infinite nodes, change for wider use: car to car , car to
facility, communication, I want to see what is in front of the 18
wheeler, no versions ever required, get rid of traffic lights, absolute
security
screen management system as part of the form management system, with
this higher resolution take advantage of it...
park-able, resize-able, drag-able screen regions, split screen into
regions to park applications, forms, and sub-forms
web addressable screens, attach any number of screens to an
application, A = myScreen_1, B = myScreen_2, C =
http://raspberry_pi_1/screen_1;
more on flow control: event transfers, the transfer of control to a
sub-event,
if (new_section) this.subEventName();
the event can transfer control back with a "reenter" statement , or
finish with a "return"
compiler has access to all local and remote hardware
characteristics,
alert(hardware.monitors.length); width =
hardware.screen.virtual.width;
alert(raspberry_pi_1.hardware.devices);
device characteristics are dynamic, meaning they are always
refreshed from the current operating system's settings
inner-process communication, extreme packet size (unlimited)
communication with action packet handling. A
= new Program(sender); B = new Program(reciever);
B.(sibling).sender = 'Hello World';
parent / child inner process communication,
A = new Program(myTest); function myTest() {
this.(up).send = 'Hello World'; } function send(value) {
alert(value); }
alter function flow to be linear
interchangeable client / server (master / slave) roles. (client)
A = myServer.print(myObject) ;
(server)
B = myClientObject.copy();
allow orphan catch and finally blocks, it assumes a global try
permit try and/or finally without a catch, An orphan try -- jumps to
the end on exception, An orphan finally, always executes before a
return
onLoad: onEnter: onFailure: onUnload: onReturn: onExit: onNotFound:
event entry points
event entry points in "main" are global for every function
"break" statement to exit a try, catch, and finally blocks, add a
label if within a loop
finally block are always executed, except on an "exit" statement,
use an onExit: entry point label in this case
the names of a "function arguments" are available.
Apple = 'Red Delicious'; list(Apple); function list(p1) {
alert(argumentNames[0] + ' = ' + p1) } output is "Apple =
Red Delicious"
extend alert to qualify arguments Apple = 'Red
Delicious'; alert.withname(Apple); output is "Apple =
Red Delicious"
search command,
A = "Hello World"; B = search A for word starting with "W" and
ending with "d" ; alert(B.preceding);
split command, B = split A as CSV;
alert(B);
replace command
B = replace ((split A as JavaScript) where type =
id and value = "myData") with "Apple";
custom compilers
A = new Compiler(statements); A.compile('alert("Hello
World")').run(); default compiler, can add your own statement
syntax, select from supplied statements, output to JavaScript or as an
Executable
programming character set, get rid of regular expressions in strings
(backslash), Tab character (09) = □ New
line character (13) = ■ escape code = ◊, I will remap keyboard to
accept Unicode programming codes
Language parser;
date = new Language(new date$());
c = date.parse('jan fifth two
thousand and eighteen'); alert(c + '\n' + c.toValue()); date is a
user defined language
System defined Languages, date$, file$, url$,
address$, email$, properName$, number$, csv$, html$, javascript$, cpp$,
... these will parse and validate syntax, allows for specific
formatting by country name
Object operators as functions, .__operators.
[+,-,/,*,!,**,&&,&,||,|,^,%,~,<,<=,>,>=,>>,<<,=,==,!=] every object can
define operator functions. A.__operators['+']
= addFunction; A = B + C;
(Hello Python)
Dynamic Operator function ".name." for two operators, ".name" for
one operator
this.__operators.[".cross."] = crossProduct;
C = A .cross. B; B = .invert A (separate with blanks, Hello
almost FORTRAN)
In place operators, operators that work on the contents of an object
this._operators["..sort"] = mySort; ..sort
A;
operator arguments
..sort.order = 'ascending'; ..sort A;
All methods are separated into a "methods" partition
a.run = runFunction; a..methods.run = runFunction; (same)
(Hello Debugger)
re-entrant functions, "yield value " not
used, need something a little more obvious,
for (value in A.reenter()) ... (see above,
155, 185) better flow control, any function can be used, can pass more
values to entry point
extend "for in" statement to include re-enter-able and
non-re-enter-able functions
reenter function A() { i = 0; while (i < 5)
return i; }; for (i in A()) alert(i); for
non-re-enter-able functions, while i <> null
operators in the "for" statement, for (i in
50) {...} (index 0 to 49)
dollar, cents, currency, and comma formatted numbers
A = X.dollar(); B = X.dollarAndCents();
C = X.dollarOrCents(); D = X.currency('yen'); D = X.comma();
"for in" statement values in range
for (i in 1 to 21 by 3) { ... } returns 1,4,7,10,13,16,19,21 or
for (index,value in [1:21:3])
"for in" statement characters in string
for (C in "Apple"); returns ''A','p','p','l','e'
"for in" statement, return object's values not name
for (value in {name:"clif", age:12}) { ... }
returns "clif", 12
object properties
A..name extends every value to contain
run-time / compile-time properties A..properties
is the container of all properties
system defined object properties: name, units,
type, loaded, modified, locator (parent, index, location, sortTable,
verticalPartition, horizontalPartition, hashTable) (some are
built on reference)
system defined object event properties onchange, oncreate, ondelete, onload
universal name space, known common terms: drives, hardware, local, server, registry, pictures, videos, tables,
databases, people, employees, friends, my, logs, ...
location objects compile-time (late binding) A
= file://c:\temp\mydata.txt; A.content = "Hello World"; C =
http://collinssoftware.com; alert(C); properties = size,
dates, versions, backup, type, sortTable,...
location types,
f ile://, http://, https://, ftp://,
mail://,...
location run-time string parse syntax: A
= new Location("file://c:/temp/mydata.txt"); alert(A.content);
location container types (late binding),
folder://, machine://, device:// network://, database://,
project://, robot://
A = folder://c:\temp\; for (file in A)
{ ... } for (device in machine://local) for (folder in
device.folders) { ... }
remove language syntax characters from all location values,
+ - * , ; ( ) [ ] { } use encoding for these characters,
for example: %28 "(" %29 ")"
A = file://c:\temp\file %28Copy 1%29.txt;
(only for inline coding)
compile-time includes of locations: A = quoted
{ include file://c:\temp\file_extensions.txt; }; recompile =>
hourly, nightly, weekly, monthly, yearly, onchange... for
updated tables
complex objects: points, lines, polygons, text, symbols, secondary
annotation, labels, fonts, grids, faces, math equations, animation,,...
overloaded "get" and "set" operators
function x$() { this..operators.get = function ()
{ return 'hello world' }; } A = new x$(); alert(A);
new overloaded operators (...) [...] {...}
function x$() { this..operators['(...)'] =
function () { alert(arguments.length) }; A = new x$(); B =
A(1,2,3,4); permits the syntax A(n) A{n} and/or A[n]
new overloaded dot operator "." function
Apple() { this.name = 'Red Delicious'; this..operators['.'] = function
(name) { return this[name.toLowerCase()];} fruit = new
Apple(); alert(fruit.Name);
new overloaded operators ? \ @ # @= #= ?= \= |= ;
String..operators['#'] = function (A,B) {
return A.toLowerCase() + B.toLowerCase() } ; alert('CLIF' # 'Collins');
unary overloaded operators, function x$() {
this.value = -33; this..operators['unary+'] = function (operator) {
return Math.abs(this.value); }; } A = new x$(); B =
+A;
extend unary operators for * / % # @ ! ? \
String..operators['unary%'] = function (operator) { return
trim(this.value); }; } A = '
Clif Collins '; B = %A;
extend pre and post unary operators (prefix with optional "pre" or
"post" ) // ## @@ %% ^^ .. ~~
String..operators['pre##'] = function (operator) { return
this.value.toUpperCase() }; } A = 'Clif Collins';
alert(##A);
is operator validates type and/or format of the content:
if (A is 'string') alert('A is a string'); if (A
is 'date') alert('A is a date: ' + A..date);
"what is" operator, search all know types for found object name or
content type of a string
A = 'Jan 5, 2012'; alert('A is a ' + what
is A); A is a date;
i s operands, object names, or in search
path operands:
window..operands.is = quoted{include
Jane..operands.is}.split(','); this..operands.is = 'cg2'.split(',');
overloaded keyword "delete" Hello (c++)
A = new x$(); function x$() {
this..operators.delete = function () { ... }; delete A;
("new" does not need to be overloaded, it already is) this allows for
remote delete operations
permit assignment to a function result A(1) = 45;
along with the bracket [] and brace {} syntax.
parameters of the parentheses () is an array of values, for brackets
[] is an array of name, number, and/or a range "n-m", for braces {} is
an array of "name":value B = A(1), B = A[1-20], B
= A{name:'clif'',age:12};
change syntax of JSON to be the same as JavaScript
A = JSON.parse(" 'name:'clif',age:12");
extend JSON to declare object type and vertical partition
declarations A = JSON.parse(' Person{name:'clif',age,12,year:2018,sort.index:1}
' } horizontal partitions are created by the Object content;
JSON to stringify by vertical and horizontal partition
B = JSON.stringify(A.sort.2018);
JSON full resolution "fullStringify" function, to augment Objects
and Functions to JSON text, A = new
Person('clif'); function Person(name) { ... } ; B =
JSON.fullStringify(A); C = JSON.parse(B); A and C are clones
Vertical partition attributes: constructor,
destructor, isExportable (permits segregation of system values
and run-time values from stored values)
globally unique terms and identifiers, every world object is
uniquely identifiable
A = new Person$('Clif'); Employees.add(A);
B.person = A; C = JSON.fullStringify(B); D = JSON.parse(C);
alert(D.person.name);
extend "parse" logic into "search" statement,
A = search B for '<proper name> <comma> (color)'
CG2 and CG3 objects
A = new Cg2(value); B = new Cg3(value);
cg2 is human editable / readable object, cg3 is machine readable,
storable and transportable object, both are query-able and self valued
Plural objects.
persons = plural of Person; x = new
Person('clif'); y = persons['john']; x and y point to
the same object, there is always only one Plural of an Object type
select statement of a plural results in a view of a plural.
Employees = plural of Employee;
houstonEmployees = Select * from Employees where division = 'Houston';
(late binding)
plural hierarchy selection filters: Employees.selections.common
= company => division => department => supervisor => group;
mySelectionDiv.innerHTML = Employees.selections.common.HTML;
clone operator, as an Object is assigned a clone is created.
A = new Object(); A..operators.clone =
function (obj) { this.name = obj.name }; B = A; A and B
are two Objects;
linked data, large dataset reference address A
= 'Clif Collins' B = A..reference; alert(B[1:10]);
A and B both point to the same string value;
load and unload on demand of logic. logic management system for the
loading and release of objects and functions.
qualified value content a =
persons{csv{ascii{file{file.id{c:\temp\test.txt}}}}} ; b =
json{name:'clif'} c = csv{1,2,3,4\n5,6,7,8}
unique terminators
something{~xxx~ anything ~xxx~} compiler validate content / load on demand
qualified value distinguish "content" from an "identifier to the
content". file.id{...} is a file
identifier (filename), file{...} is content
of a file (bytes), folder.id{...} is a file
folder identifier, folder{...} is the
content of a file folder
qualified value variable a = 'a,b,c,d';
b = csv{text.id{a}}; format acceptable as windows and
unix file names and database content
qualified value as an array a = csv{
text{name,age,dob,address}, spanish{Ascii8{file{file.id{c:\temp\test.dat}}}}
}; to have the ability to augment / combine multiple data
sources
assignment to qualifier text content file{file.id{c:\temp\test.txt}} = "Hello World"; a =
file{file.id{c:\temp\test.txt}}; a = "hello world";
(on demand read / write, "a" is just qualified value with get/set
properties)
qualified value hierarchical structure a =
file.id{c:\temp\test.txt}; b = a.parent is folder.id{c:\temp\};
siblings, parent, children, firstChild, nextSibling
c = a.parent.children;
folder{folder.id{c:\temp\}} (load on demand)
"@" everything world object a = @.collins_software.employees
b = @.my.network; c = select 10 random *
from @.listof.boynames; @.my.projects += compilerProject;
The permanent database (local port 7710)
superimpose common global names to the universe of names,
@.global.boynames = @.listof.boynames;
put @.my.global and @.global in the search path
a = boynames;
compiled global names, the compiler will resolve world names at
compile-time and at run-time
qualified value functions are handler objects for named qualified
value values. They are in their own namespace and only accessible as
qualified value operations. qualified_text
function person(){ ... } a = person.id{Collins, Cif}
Table object with cascading "qualified value" attributes from parent
=> Table => Column => Cell A = new
Table(); A.format = cg3{}; A.columns[0].id = integer{row.id{}},
A.columns[1].name = personname{text{}};
the hierarchical structured "qualified value" objects have a
flattened namespace that are cascaded upward.
a = persons{csv{ascii{file{file.id{c:\temp\test.txt}}}}};
b = a.parent; c = a.csv.parent; b = parent of a, c = parent of
file.id
define qualified value attributes as an array
a = csv{file{file.id{c:\temp\x.dat},file.lines{1-20,30-40}}}
This permits the description of content, logic and optimization.
(file.lines is filtered at the server, where csv.rows is filtered
at the client)
qualified value as text b = "csv{file{file.id{c:\temp\x.dat},file.lines{1-20,30-40}}}}";
a = qualified_text{b}; permitting externalizing of content, logic
and optimization as a universal description
qualified value resultant value: text, Integer, number, real, or
object. a = integer{10}; b =
array{csv{1,2,3¶4,5,6}};
csv - first line as named qualified value column headers, a =
persons{csv{lines{text{~~name{}, age{}, dob{},
address{}, department:text{}¶ 'Collins, Clif',12,,'7710 Janak
Drive¦Houston, Texas 77055',Software Development ~~},lines.seperator{¶}}};
add qubits and quantum logic gates to the syntax. This should
include the probability, entanglement, and uncertainty properties along
with the math required for complex numbers, and n-dimensional
transforms.
universal qualified values @.user{}
defined as current logged in user, me = @.user{}
declares an alias, include @.aliases;
value reference, a = 'clif collins' b =
a.reference[0-4] c = [1,2,3,4]; d =
c.reference[0,2];
flow control - multiple threads on multiple machines
Jane server logicals, logicals.jane =
"c:/temp/"; logicals.scratch = "jane.scratch"; a =
filename{scratch.test) a.value = "Hello World";
language added characters, «field-name»
(0xAB and 0xBB) keypad 4 and 6, tab character
§ (0xA7) keypad 0, line feed
¬ ( 0xAC) keypad +, A
= "name§= «person.name»¬age§= «person.age»¬address§= «person.address»";
rewrite the keyboard driver
change operator precedence (bitwise operators), and a review of all
others, a = 2 & 6 + 5; ( a should =
7) (a now = 2) bitwise AND and OR change to same precedence
as PLUS and MINUS, the "C" language set these, not sure they were
correct
compiler aliases, a.bytes, a.length,
a.size, a.byteCount, a.count validate aliases during compile
time, define aliases once, and resolve at run-time, this is for
external references. a.bytes:length:size:count = 10;
duplicate NTFS as CG3 formatted sectors. This permits the sector
number to be a unique identifier and used as a database access index.
Provide complete access to hardware disk content
content delivery system (CDS) commands.
this.functionsName = serverExecute('CDS_DAILY{command=files&path=www:file/functions/}');
cache results on server by command text
content delivery system unique permanent identifier,
id = CDS{serverExecute('command=files&path=www:file/functions/')}.identifier;
this.functionsName = CDS[id] binary parsing structure
(as a domain specific function) a =
structure{n:I2,name:A[n]; alert(name)}; b = a.parse(myByteArray);
functionactions "S" skip bytes, "A" Alpha, "I" integer, "N"
Number, "B" bit, "R" real, "D" date, "SI" swapped Integer, "SN" swapped
number, "IBMR" IBM real, "VAXR" VAX real union of sets
C = A not B { return A.name == B.name };
where A and B are of any type.
A not B; A and B; A or B; A in
B; A not in B; the inline match function is optional. "A"
and "B" are the names of the function arguments, "in" is a boolean
result Redesign all character fonts to make every character unique.
specifically the upper case "i", lower case "L", one "1", zero
"0", oh "O". Fix the characters that cannot be distinguished from other
characters.
Remap keyboard scan codes to include extended programming
characters, all the teletype control characters can be used.
array constructor, A = [expression for [name,]value
in B] with conditionals A = [expression for [name,]value in B if value <
10]; B can be a "string", "object", "array", "table",
"matrix", "qualified value" or "select statement" object
constructor, A = {name:expression for
name,value in B}; with conditionals A = {name:expression
for name,value in B if value < 10}; value constructor,
A = (expression for [name,value] in B); with conditionals (like
above), example: A = (average(receipt.total)
for receipt in receipts);
permutations and combinations of arrays A =
permutations([1,2,3],3); [123, 132, 213, 231, 312, 321]
B = combinations([1,2,3],2) [12, 13, 23]
; value constructor aggregate functions:
minimum, maximum, average, count, mean, mode,
range, median ; object constructor aggregate functions:
stats ; (all value aggregate functions)
A = {stats(value) for value in myList}; array constructor
aggregate functions: histogram, difference, collection or unique,
permutations ;
A = [histogram(name,value) for name,value in B];
A = [difference(value) for value in B]; due to IC
technology: (the ability to scan an infinite number of values), array,
object, value constructors require two limits, a loop limit and an
insert limit, C = [ floor(a / 10) for top 100 a in
B] limit 20; (top, bottom, middle, random)
array, object, value constructors using LOOP statement
C = [a[i,j] loop top 100 B(i,j,a) if a < 10] limit 5; setting
a large limit will force the use of IC technology to store the result
onto temporary server file system. Actually an automatic IC threshold
could be set as values are inserted. (maybe 4k bytes, then double
buffered and stored on disk) named complex data structures in cg2,
*define:person, name; *define:person.cars[],make,model;
person,clif; person.cars,chevy,truck; order dependent
unless indexed
geographic mapping projections (Mercator, Lambert, state plane, utm,
...:) B = 29.7969925 latitude, -95.4917892
longitude, 10 feet; xy = B state plane 4024; point =
12342674 x, 7830930 y state plane 4204 nad83;
complex numbers, a = 10.7i local
and network jane server, a shared / user based network server, and a
private local server for each machine / user with full access on a
private network. With only read only access to the public web a
separate physical public network on the jane server for read / write
access to the web (requires 2 NIC cards) Jane to only use and store
Metric Units, other units will need to be explicit numeric division
of units by a factor of N / 10 digits
1:5 = 1 + 5/10,
23:005:034 meters = 23 + 5/1000 + 34 / 1000000 meters (use
colon instead of period or comma to be nationality independent) file
management, database and transport handled by jane A = file{filename{c:/temp/test.dat},text{}} B = A.lineCount;
C = A[1:B];
change array index from zero to one, do we need a programming
paradigm for indexing if we eliminate the need to type in "<=" , reserve
zero as non-existent, we can use counting numbers and double our number
size, and use zero as false date's month as characters only, jane
will not produce or accept numeric months "ever"
10/3/1999 means nothing (no guessing) dates
are not system clocks, we need infinite time... permit name, value
specification in the "FOR IN " statement
for (name,value in myList) {text += name + ' = ' + value}
for statements treats text as an array of characters:
for (c in "Clif") { list.push(c); } Array to Array operators, C = A - B, C =
A + B, A < B, A > B, A == B, A
!= B, A union B (A + B), A not in B, A exclude B
string or number (A) to Array (B) Operators, C = A in B, C = A not in B, B += A, B -= A, B |= A
line / arc to line / arc snap , line / arc / polygon clip, point
inside polygon; A = polygon{0:0,10:20,20:0},
B = point{5:6}; if (B inside A) alert('inside'); multiple
return values:
a, b = test() ; function test() { return 10, 'clif' }
if one value a = test() then a
= [10,'clif'] if more a,b,c = test()
then a = 10, b = 'clif',
c = undefined jane known values, local,
server, www
jane "local" and "server" values,
user, users, aliases, operators, robots, devices,
operatingSystem, hardware substring to be inclusive not
exclusive (index 1) a = 'clif collins'.substring(1:4);
also as a = 'clif collins'[1:4];
and as a = 'clif collins'[1-2,3-4]; subtraction of text, a = 'clif collins' -
'Clif' (case insensitive) text find operator
a = 'clif collins'; b = a find 'c' or 'i';
c = a split(b);
d = a replace(b,'_'); e = a - b;
c is ['l','f ','oll',ns'] d is '_l_f _oll_ns' e
is 'lfollns'
compile time and run time, and jane directive, global
(outside a function) and local (inside a function) compile time
directives,
compile.caseSensitive = true;
compile.keywords = true;
compile.language = javascript;
compile.showErrorCount=1; run time trace directives,
trace.statements = true; trace.functionEnter
= true; trace.functionExit = true; trace.valueChange = test.count;
trace.valueCreate = windows;
run time event directives, on.statements =
onStatement; on.functionEnter = onFunctionEnter; run time directives,
trycartch = off; (debugging break
on error)
Jane server(s) compile time directives, Jane.local.readonly
= true; Jane.server.caseSensitive = false; Jane.name = Samual linked prototype values across servers,
A ==> B ==> C
aliases ==> jane.local.user.aliases ==> jane.server.user.aliases ==>
jane.local.aliases ==> jane.server.aliases (load on demand) a linked
object value type, A..inf =
object{Jane.local.user.aliases} inf (If Not Found)
load on demand jane FONTS, a text based font description
a = font{A,(0:0:M,100:30:D,0:60:D,10:15:M,45:15:M);}
to include: lines, arcs, splines, bulges, circles,
insertion point, base, ascent, descent, offset, ... all vector polygon
filled / stroked.
jane font application, a simplified definition language,
centerline expansion, fillets, and line cap algorithms. (output web
fonts and TTF) an enhanced error handler and recovery system. two
types of error, internal (a programming error) and external (user
induced) a server based exception handler... remove "REGEX" from the
language... an unnecessary complexity... replace with a more
complete information parse language... a hierarchical description for
all digital structures (text and binary) "for in" index and value,
for (index,value in a) { ... }
"for in" loop of "String", "Array", "Object", "Number" and Date
(number index 0) name = "Clif";
for (char in name) { ... }; for (i in 50) { ... }
compiler.language = 'javascript'
enforce JavaScript language conventions
Jane Personal Local Server, LAN Jane Server, and WAN Jane Servers to
perform secure local operations (as services)
Jane, Jane.LAN, Jane.WAN, Jane.WWW run
Python, C++,C#,VB,DOS,PowerShell,... from the browser, allow debugging
of these processes Jane modes, Development,
Production, Testing, Quest, Read Only, Remote, ... Jane
Roles and Privileges, to files, objects, and services SQL and
Jane capabilities temp = Select filename
from Jane.C.temp.files() WHERE extension in ('.dat','.log')
OFFSET and INDEX
switch statements, search for value in Object, Array, and Table.
boys= ['bob','sam']; switch ('bob') { case
(in) boys: return name + " is a boy's name" }
c"..." csv style quoted text, no escape characters in the text,
(double the quotes inside text) A =
c"4' by 8"" room" r"..." raw quoted text, multiple lines, no
escape characters or same quotes in the text,
A = r"4 ft by 8 in room" e"..." escaped
text, multiple lines,
A = e"apple \n oranges"; (default) (I will probably make
"raw" as the default) formatted text a = "%s
%d" using [name, age] (positional)
b = template{Name «name», Age «age:hex4» }
(template -- multiple lines)
switch statement operator (in) (like) (<) (>) (<=) (>=) (!=) (==)
(===) case (in) boyNames: return
"this is a boy's name";
name search standardization, PascalCase,
camelCase, Snake_Case, Kebab-Case, lowercase, UPPERCASE: Case Independent searches
(as if lower case and remove underscores, dashes and blanks) Jane
keyboard and editor, Jane character sets (hard and soft control
characters in the font, single character "A" code (no more lower case
character codes) switch to case control by character characteristics Separate "font" technology for the "character" technology (logically) Per Character characteristics:
Upper, Lower, Bold, Underline, Negate,
Italic, Color, Background Color, Language, Slant, Alpha, Numeric,
Symbol, Control, Punctuation distinguish between "language
characters" and others as a "Common", "Drawing" , "Christmas",...
non-language picture characters get rid of ALL case-sensitive text
compares (as the default) Add a new CHARACTER case compare operator
=bold || upper | lower || not || italic ||
underline || color:red:50% || bkcolor:black:50% || language:Spanish ||
slant:-15deg || Alpha || Numeric,...= (opacity :50%) a new
TEXT case compare operator =pascal | snake |
camel | kebab || bold || not || italic || underline || color:blue ||
bkcolor:white= (with "OR" || and "AND" &&)
(all characters in TEXT must match) distinguish between a binary number and a binary character at the
hardware level 2017 top Add a character characteristics element {{..}} to the
language, A = 'Clif'.{{bold,color:red,not}}
variable dot notation for character characteristics
A = {{bold}} set A to the characteristic
Bold, A. = {{bold}} set the characters of A
to Bold, A. += {{underline}}
add underline to the characteristics of A character
characteristics compare operator if (A. ==
{{bold,!color:red,alpha}}) ... (== match if these
conditions are set, === match if only these conditions are set) I
have named this new element a "cast ", it can be used for all
Object types not just text need to improved font functionality, of
Upper, Not, Underline, Color, Background Color, Slant, Stroke cases variable dot notation
A. The cast
is a text representation of binary structures within the parent. There
is no validation on the names, values or syntax. The casting to
text modifies the binary representation of each character
casting get and set functions String.inf.castSet(object) {...} String.inf.castGet();
{...} A
= "Clif".{{bold,underline,color:red}} if (A == {{bold}}) { ... } ;
alert(A.); cast operators, + (combine two casts) -
(subtract one cast from another) A =
{{bold}}; B = {{lower}} C = A + B; (C = {{bold,lower}})
D = C - B (D = {{bold}})
cast assignments A = {{bold,not}}; B = {{color:red,underline}};
C = 'Clif' + A ; D = 'Collins' + B (Clif
Collins ) E =
C. + D. (E = {{bold,color:red,not,underline}}) text cast
characteristics are changeable (mutable)
A = "clif Collins"; A[1] = {{upper,color:red,bold}};
C lif Collins (index 1)
(EVERYTHING can be changed, the use of the word "mutable" is now moot) APL -- The ∇ Nabla and the
∆ Triangle symbols might be useful for thread
management, or for synchronous and asynchronous management or for
reentrant function calls (i.e. python yield statement)
language verbs , define a set of verbs for the
compiler , verbs, ('print ', 'run ',
'open ',
'cross' );
using an Object's entry points:
process print() { ... } ; usage is then;
print person; new keyword
process, a sub function of a Object's constructor that defines
system events (onEnter, onExit, onSearch...) , opcode overloaded
operators ( - + / * < >..., )
Object's process entry point events:
process on.search(name) { } defines
and Object's event process, Events call on these events: search,
create, delete, modify, enter, exit
Object's process operations (overloaded
operators) process this=A { }; to
overload all existing operators (math, logical, boolean) plus add any
new named operator process this cross
A { } Process operators syntax
process this- { ... }
(post unary -)
process -this { ... } (pre unary -)
process this+A { ... } addition
with argument "A" Process operators using unknown keywords and
characters. process this cross
A { ... }; process this ● A { }; A = B ●
C; D = A cross B; Making keywords and
operators known, process.operators =
['cross','●']; execute prior to
any use of these operators, or add them to the compiler.
Process use of ( ), [ ], { }
process this.on.call (A) { ... } process
this.on.index (A) { ... } ; process this.on.brace (A);
A(3) = B; C = A[3-4,6]; D = A{apples, oranges}; (remember A is an Object or a Function)
keep the "with " statement and extend it to
manage both local and global names (i.e. window), be able to set modes
globally with.insert(Development as Mode)
or with.insert(Production as Mode)
altered local with statement syntax ,
extend name searches within the "with" statement to include the .name
syntax (name will be created is it does not exist)
a = {} with (a) { .apple = 5 } alert(a.apple)
global with statement,
G = {Company:'Collins Software'} ;
with.insert(G); A(); function A() { alert(Company) } right now it's
with.insert(window) as the default
global with statement management
with.insert(G,0) ; place G at the top
of the search stack, with.remove("G");
with.disable("G"); with.enable("G");
with.appendTo("G",H); with.move("G" top);
global with statements only last as long the
function that set it remains active, unless the ".permanent" qualifier
is added with.enable.permanent("G"); Add Common Phrases
, number of records | bytes | characters | columns
| rows in A, maximum | minimum | average | sort order | selection
| sort index of A (standardize common names of values)
if (number of records in A > 100) { ... }; B = maximum of A;
for (i,value in selection of A) { ... } phase ... of list:
Siblings, Next Sibling, All Siblings, First Child, Last Child,
Parent, Cast, Columns, Rows, Number of <name>, Address, Copy, History,
Location, Functions, Constructor, Name, Names, Values, ... verbs .. list:
Print, Run, Open, Export, Import, Close, Edit, View,
Cancel, Abort, Wait Here, Return Here, Don't Wait, Tell me about,
Show me how, What is is statement conditional:
if (E is an Integer) { ... }
B = is E an Integer; C = is E a child of
B; Integer, Date, Number, Real, Text, Object, Matrix,
null, undefined, object-name, positive, negative, zero, an Index
view, as
statement assignment, B = view of A as a
binary byte number array; T = A as a four column table; set statement,
loop function initialization :
set E as reentrant; while (E()) { ... }
(first call begin at top of function, all others re-enter just
after the last executed "return" statement, "until return is the last
statement")
set A as the exception handler for F; set B as
the startup function for F; set C as the wrap up function for F; set 10
seconds as the time limit for F; set reentrant limit 10 for F
(forces a false return and a reset)what statement,
perform an information request from an object.
B = A what is your parent's name, C = A what is
your purpose, D = A what is your server location, E = Company what is
your tax number dynamic extendable compiler, attach a table
of:
overloaded operators, phrases, robots, verbs, and prototype functions
to the compiler. (does not require a re-compile) (the system extensions
are recompiled) Static extensions to the compiler to add new
statements. Requires a re-compile of the compiler. (only at the system
level) Phrases, Verbs, Robots and Overload Operators are compiler
runtime directives that can be loaded at compile time or at runtime
(means they can be dynamic). These can be compiled and optimized. Natural Language Statements...
The, Is, Has, As, Set Natural Language Statement Prefix,
Tell Me, Show Me, Where, Who, Order, Group, Select
reentrant function A (value) { ... }
to save the context between calls. resets when return statement
is the last line of the function, or a clear A;
statement is executed before the first call values of a reentrant
function are available after the call:
while (A(10)) { alert(A.count) };
reentrant function A(max) { count = 0; while
(count < max) { return true; } return false }; undefined
or null valued operations, text operator + is '' , number +
is 0, number * or / is 1, date is now(); A = undefined;
C = A + "Hello World";
(A = '') D = 12.3 * A;
( A = 1)
E = 100 / A (A = 1) the balance scale,
logical versus (productivity + benefits + cost + easy to
remember) , Always use the scale to make design decisions. (never a
lemming mentality, but never change if it exists) contains, boolean
search statement,
if (A contains "Apple" followed immediately by
"Pear") { ... }
function pass back arguments ;
function A(a) { b = 'apples'; c = a * 20; return b,c }
if ( A(5) (name,value) ) alert(name + ' = ' + value); distinguish between functions that modify the parent object and those
that return a value; A.sort(); B =
A.sort(), move the modifier verb "sort" to the front,
sort A; B = A.sort() define
verb function keywords, verb function sort() { ...
}, function sort() { ... } define "result" as a
function's default return value, by default it is now undefined,
function A() { result = 1; return; } function B(); {
result=2; return 1; }
both functions return 1 "exit" statement, return to multiple
entry points, or complete program;
function A() { alert(B(1)); return;
entry failed(reason) { .. } } function B(n) { if (n != 1)
exit failed("invalid argument"); return "clif" } multiple call
stacks common misused terminology, "Percent" not quite ready for
prime time. Fuzzy language use, no word for the decimal percent
representation. also Kilo-Byte Mega-Byte (KB, KiB, MB, MiB)
not really
fixed binary n-dimensional structure manipulation. R and
Python type language extensions without needing any documentation inline select, group by, order by and aggregate functions
A = {name:'clif',age:12,address:'7710 Janak'}; B
= A where value = 'clif';
getting rid of the
Object and
Array data types . All variable are the same; same arguments,
same functions, same capabilities, same structure, same addressing. adjustable n-dimensional table coordinate system. By default table
coordinate reference is top-left index 1.
A = matrix{csv{1,2,3,4\n 5,6,7,8\n 9,10,11,12},
origin{bottom right), index{0} }; alert(A[0,0] ) = 12 cell dimensional names.
A[4,2,6] = 1; A..dimensions[1].name = 'row:rows';A..dimensions[2].name
= 'column:columns'; A..dimensions[3].name = 'layer:layers';
alert(A.columnCount); to have a capability to handle
exceptions and return with a solution recover statement. call stacked recovery entry points by name,
recover fileNotFound(args) ... similar to
the throw statement except to a named entry point with or without
a recovery solutionsolution statement returns a solution from
a recover entry point, much like the switch statement.
recover fileNameFound('c:/temp/test.js') { solution ignoreFile(args) ...
solution blankFile(args) ... } capture statement, call
stack recovery capture reentry points.
capture fileNotFound(filername) { reenter
ignoreFile(); } visualization of program structure for determination of nesting
relationships during debugger, performance analysis and program layout.
Might be useful for error reporting
8 byte integers (12, 16, 24, 32,.. byte integers). 4 byte value
(signed) followed by 1 or more low order 4 byte integers (unsigned)
value = 132`0xFFFFFFFF
or x = 132; y = 4562; z=9005; value =
x`y`z
assembler registers A-M, a-m (skip L) Uppercase = Signed
integer, Lowercase = Unsigned integers, Suffixed with byte length 1-8,
or H as in AH, BH, CH, DH, def length = 8 A
= 132`0xFFFFF
assembler bits register subrange A[61:63]
bit 61 to 63 of register "A" a 64 bit register
assembler keywords StackPointer, BasePointer, StackIndex, DataIndex,
Flags, Carry, Zero, Parity, Overflow, Adjust, Direction, Identification,
AllRegisters , CPUID, CR0, DB0, X0 - X15 (xmm0 to xmm15)
CPUID types: Processor, Vendor, Cache, SerialNumber, Thread,
Features, Brand, L1, L2, Power, Address, AMD
Externalize hardware registers CR, MS, DR, TR, DTR,...:
Registers.cpu[0], Registers.controls[0].protected ,...
Registers.debugs.breakpoints[0] ,... ,
Registers.feature.longModeEnabled ,...
extended math, 80bit floating point, 128 bit integers, infinite byte
integers, BCD
assembler register and JavaScript values in same expression, (values
are automatically mapped to byte storage) myValue
= 167; B4 = 4; A4 = myValue * B4; alert(A2);
machine independent numbering systems, 8 bit to 512 bit machine
instructions same result, whole number, float, and fixed decimal
numbers, variable length numbers (characters)
#12,000.00 or $5,400.00
CR number format, also 24 currency symbols, dollars, yen, pound
sterling,... allows commas, variable sensitive place holder;
thousands (comma)
A=45; B=19; C = #A,B.00;
C = 45,019.00
distinction between INTEGERS and WHOLE NUMBERS (A
= -34 Integer, B = 56 whole number
C = A + B (integer), independent of value,
can it go negative?: Yes in this case, so integer
number representation are now variable length, 0 to infinity digits,
as well as strings, dates and floating points
track constants A = 34 (constant whole
number) , A = -34 (constant integer)
dual access Objects, provide name and numeric access to Object
properties A = { name.3: "clif' }
alert(A[3] + ' = ' + A.name); default = sort order
dependent, (maybe get rid of "Array")
numeric bits access J = 127; A =
J[7:8] ; J[9:12] = 3; alert,hex(A); 0x7F
alert.hex(J); 0xE7F (see also: constants and masks,
items 53 & 54)
logical assembler coding. overcomes all hardware
implementation limitations and logic mov al, xmm0
forces a 64 bit register into an 8 bit register or any other not
implemented hardware task, use a logical task
optimization reporting, stupid human reporting of alternate /
optimized solutions
Object externalized name modification tagging. A method to
determine run-time name resolution as being static or dynamic (99.99% is
static, the 0.01% forcing 100% run-time name resolution)
infinite fixed bit size number array, a =
number~64bits:[ 1,2,3,4 ]; a[5] = 34; b = integer~1byte:[ -45, 56
]; b[1] = 65;
infinite size bit character array, a =
text~32bit:[ 'Clif' ]; alert(a[0]); C
alert.number(a[0]) 68
logical numbers not physical (i.e. 64bits), by default "Jane"
numbers have infinite length, infinite precision but can also be defined
as any fixed bit size
a = number~19bits; b = number~7bytes
"having the ability" the concept of including actions that are
both known and unknown to the compiler
file and url units a = "c:/temp/HelloWorld.tmp"
file; alert(a); displays the content of the file.
file read, write and append a = "hello.txt"
file; a = "Hello World"; a += "\nfrom Jane"; alert(a);
listing of files and folders in user server root folder,
alert("" files); alert("" folders);
compile time global constants, #name = "clif"
strings, number #name = 10 , and identifier
#name = window.screen , if (#name) ...
compiled programs are cache-able. Programs can now be run as p-code
to protect your intellectual property rights. no longer need to send
JavaScript to the client
splintered objects, independent dependent values of an object.
A.name = "Clif", A.SSN~HR = "111-44-6666"
physically separated / secured values of the same object
kedge , is my term to anchor knowledge to a value. Information
about or pertaining to a term. The qualitative and quantitative
values relating to a term.
a~isSorted; a~hasSecurity; a~external;
a~loaded; a~modified;
addition of arrays. B = [0,1,2,3,4,5]
B += [6,7,8,9]; 2016 top
confirm qualifiers,
confirm.yesno('continue ?') yes-no, abort-retry, ok,
yes-no-cancel, abort-retry, help, abort-retry-ignore
search parent objects, a =
b.(up).companyName;
search all parent paths for company name, also includes search criteria (by default search child objects, this includes parent objects into the
search path)
hybrid compiler, emulator for JavaScript logic when required,
assembler CPU instructions used otherwise
Access to ALL CPU instructions using JavaScript syntax
R0 = 12; R0 << 2; if (! overflow)
a = R0;
Math Expressions and Equations
Chemical Expressions and Equations
System Objects: World, Global,
Local,User,Array,Date,String,Number,Math,Devices,Network,File,Folder,Matrix,Font,Form,Graphic
(vector, surface),Image,Person ,
Place ,Thing ,Idea ,classified objects,
employee=person{}; contractor = employee{contractor:true} ,
Units,Chemical,Art,Music,Equations (math, chemical),Expressions (math,
chemical)
Aggregate functions (sum, average, minimum, maximum, count,
frequency,...) a =
average(employees.(children).payrate)
Hierarchical search (term based: (mother, father, brother,
sister, aunt,...) (company, division, department,...)
a = this.(brother.oldest)
Network Objects (node based: Interstate-10 entrance ramps)
I10.wirt road.entrance.east bound.flow = 1605
average cars per hour;
Connectivity Objects (junction based: transformer to transformer)
a = houston.(transformer=134529).amperage load per
day;
Segmented Objects (by value: i.e. year, month, age, company, ...)
a = Invoices.2017.July;
In-line data types (a = b~integer) (a = b~real)
(a = b~wholenumber) (a = b~text) (used for assembler coding
- run-time and compile-time resolved)
asynchronous function calls (performs result assignment and
re-continues to next statement when function finishes)
Wait Until Done b = a.wait();
(blocked execution)
Return When Done b =
a.return(); (unblocked execution)
Music orchestras and scores programming
Compile-able objects a = {* ... *}
(a cg2 formatted string that attaches to a known or unknown term)
include JavaScript (browser's) <script> ...
</script>
optional "then" in an if statement if (A) then
... else ...
inline include statements, include "./apple.js";
conditional compile #if #define
#end #else #then
"alert" displays objects in a tree view
function trace events compiler~onfunctionenter = myOnFunctionEnter;
compiler~onfunctionexit = myOnFunctionExit
trace logging log('enter function',
functionName);
Jane emulation with complete access to DOM model
sub-functions in prototype of constructor
sub-object for events and n-dimensional objects
actionable objects a = count:{
files:{*.js}, type='function' }
"switch" statement with mini-function case evaluation,
case 1,2,3: case in A:... case >=0 && <=10 && ! (5,7) :...
case like "A*" && ! like ("Apple*") :
"search" statement, search (file:{"test.htm"}) {
case "<" ...">": alert(result); continue; }
"exit" statement, bypass call stack and clear all memory usage
"process" statement, exit executable code to update DOM model,
then return
"thread" create alternate process threads (simulated) run during
"process" a statement ( really an event "onprocess")
cascade assignments, A~units = feet;
A.B = 10; (A.B = 10 feet)
A~units=meters; (A.B = 3.048 meters)
singular / plurals count = 5; a =
"{{count}} {{row^s^count}} were affected".eval; 5 rows
were affected
integrated system commands delete
files{jc://*.jpg}
nested Logical define jc = "user$current://projects/compiler/"
logical operators A ==? B (ignore case with
trim) A ==?? B (without trim)
<?, <=?, >?, >=?, ==?, ===? A
==# B (numeric compare) <# <=#, >#, >=#, ==#, ===#
other compare operator in? like? in# like#
also as functioncall
A.sort#();
switch statement numeric range case 1-100,202,203:
replace ternary with a "condition" statement,
a = condition (A) a,b,c; (neg, 0, pos) or
a = condition (A) then a else b; or b
= condition (A) 1,5; (true / false) (optional then and else)
compiler directives #A = 123; #language='JavaScript';
instructions to the compiler and are also available at run-time
#if and #end statements, conditional compilation (global)
#A = 1; #if A; alert(#A); #end; not case sensitive and used by the compiler
#language='JavaScript' and at runtime
alert(#language);
macro statement @a alert("%p1%"); a@;
a('clif'); may not be needed; the assembler and other
subsystems might require it for speed at the hardware level or for
development speed
language dependent statement for the management of "JavaScript" and
"JC" //~jane~ #language=JavaScript
treats source code as JavaScript until changed
allow try finally without a catch, permit any order of catch finally
2015 top
emulated and compiled JavaScript
A hybrid compiler, performs both emulation and compiled instructions
simultaneously
IPhone, Android, ARM, Windows, and console executables, (8,16,32 ,
and 64 bit machines)
Windows forms (dialogs, components and subsystems)
a= new Form(); a.re = new Richedit();
a.open()
browser statements
assembler CPU instruction set statements R0 =
a; R0 <<= 3; if (overflow) alert('overflow');
binary memory value access a = c:/temp/test.obj;
b = a~address; alert(b.N2[0:7]);
goto statement goto 10
no database, I/O, network, O/S, forms requires (all handled by Jane)
block comment as a string a = /* hello */;
block comment with a unique tag a = /*~any~
.... ~any~*/;
dynamic language extensions a = b cross c;
natural language extensions height is fifteen
feet
units a = 10 feet * 14.3 inches;
expressions a = a + 2; a~expression has
the array values of [{op:"=", value:10 feet}, { op:"*",
value:14.3 inches}, {op:"+", value:2 constant}] (items 14 +
15)
dynamic properties a = 10 feet; a~units =
inches dynamic converts units, feet to inches
remove the need to declare local variables
a = 10; alert(a) (local)
force explicit .vs. implicit global declarations
window.a = 10; alert(a); (global)
SQL a = select name from employees where...
complete syntax (group by, order by, joins, aggregate functions, top,
selects of selects ...)
variable length binary values ***
mutable strings A ="clif"; A[0] = 'C';
Matrix object m = new Matrix(2,4,4);
Matrix math m *= 15
String Templates evaluations a =
"Hello from {{name}}".eval; b = "Hello {{name}}"; alert(b.eval);
URL and file type alert(c:/temp/test.csv);
show file's content
loop statement loop m(a,b,c,value) { ... }
Bits object b = new Bits(1:6,12,20:50)
sub-range object b = a[3:7] or b = a[9:-7]
assembler functions (direct hardware access)
binary functions (to work on binary structures)
remove closure, use bind
flatten operator "... " search an object for a variable name or a
value. b = a...age; b = a..."chevy";
A in ( list ) a in (12,13,15,19)
A like ( wildcard-list ) a like ('a*','b*');
A contains ( wildcard-list )
all values are objects a = "clif";
a.type='person';
a "world" object (all machines)
alert(world.Collins Software.employees)
blanks in variable names my database =
world.Mircrosoft Access.db1.mdb;
a "local" object (local machine)
a "user" object (user specific)
undeclared variable event
expanded alert output: values, objects, arrays, matrix, files, and
URLs alert(a,b,c);
locals of functions as an array a = 12; return
locals
call stack access, a = parentLocals
function name locals.functionName;
"this" propagates to sub-functions of parent
library card (all known knowledge, is it sorted, what is the
height/width, does it exist )
delayed fetch of value until actually needed
IC technology (Infinite Continuous) segmented data fetch
tokens / compile / link functions
qualified function names function car.print()
function prototype linkage
integer, counting numbers, and real numbers
a = 12; b = 12.0 a is integer,
b is real, propagates thru math operations
create / change / delete events, (triggers)
index constants, (enumerated variables) constants a = [apple,pear,banana]
apple = 0, pear=1, banana=2 (a is an array of names)
bit mask constants masks b =
[apple:4,pear,banana] apple = 0x0F, pear=0x10,banana=0x20
(b is an array of integers )
Math expressions (trace, log and evaluation)
Access to call stack, and calling routines
JavaScript compiler / parser a = compile('b =
1; c = 4; alert(b*c)'); a.run();
Time units kept, GMT, UTC (GMT +/- seconds), Time zones
(GMT +/- hours)
Time units to femtoseconds 10-15
Time and Date duration infinite (as GMT or UTC (GMT +/- seconds))
Calendar Date infinite, independent of time (no fuzzy dates)
prompt specific dialogs (file, files, save-as, find-replace, color,
font, folder)
prompt similar to MessageBox
Other Suggestions for future enhancements
extending the programming character set (keypad keyboard
mapping):
■□►◄√∫∞∓℄∈∃≅⌆⌁⌱⍾♪♫
ⱥ ⌂ ♦ ☼ Ω ● ∆
░ ▓ ↔ ‡ Ʌ Ø ÷ » « ¶ ¦ Ʉ Ѻ
₪
₸ ₥
₩ ‰ Φ
►
₪
¶
■
♦
●
« »
├ ┤
keypad 0
keypad enter
keypad 5
keypad 7
keypad 4
keypad 1
keypad / and *
keypad 8 and 9
soft tab
soft new line
soft new paragraph
soft new section
soft new record
soft new field
template replace quantity
more quantity brackets
0x11 (17) <DC1 - device control 1>
0x12 (18) <DC2 - device control 2>
0x1D (29) <GS - group separator>|
0x1F (31) <US - Unit separator>
0x1E (30) <RS - Record separator>
0x0B (11) <VT - vertical tab>
0x0E (14) <SO - shift out> ...
0x0F (15) <SI - shift in>
0x02 (02) <STX - start of text> ... 0x03 (03) <ETX - end
of Text>
need a new font to use the existing control characters
case insensitive
no reserved keywords
natural language Assembler, if
not carry { ... }