Jane's Language Extensions

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 qualities into the system.

These extensions are to the syntax and to the logic of the language...  The extensions do not change the JavaScript syntax in any way, they only add capabilities to the transport and storage of information. The syntax was extended but it still compiles standard JavaScript, C++, and Assembler. The capabilities of JavaScript were extended without the use of "functions" for example A = B[0:5] replace the "substr" and "substring" functions, this was a FORTRAN syntax. I extended this even more A  = B[0-5,10-13], the objective of the "Jane" compiler is to not make any assumption on how it will be used and to make it as open as possible; that is, remove all the limitations on everything.  I took syntax from every language I know, anything that works. Assembler, FORTRAN, C++, Python, Objective-C, COBOL, Pascal, PL/1, ... and created a hybrid compiler, one that can shift between run-time and compile-time logic when the system "Jane" and the human think it is required. I extended the language to maintain all human knowledge, not just numbers. Give you complete access to compiler, database, browser, operating system, device driver, and hardware logic without you having to write or learn them.

Using JavaScript as a base I made the following changes: (I will also add these to C++, C# and Java)

  1. emulated and compiled JavaScript
  2. A hybrid compiler, performs both emulation and compiled instructions simultaneously
  3. IPhone, Android, ARM, Windows, and console executables, (8,16,32 , and 64 bit machines)
  4. Windows forms (dialogs, components and subsystems)  a= new Form();  a.re = new Richedit();  a.open()
  5. browser statements
  6. assembler CPU instruction set statements R0 = a; R0 <<= 3;  if (overflow) alert('overflow');
  7. binary memory value access  a = c:/temp/test.obj; b = a~address;  alert(b.N2[0:7]);
  8. goto statement  goto 10
  9. no database, I/O, network, O/S, forms requires (all handled by Jane)
  10. block comment as a string a = /* hello */;
  11. block comment with a unique tag a =  /*~any~ .... ~any~*/;
  12. dynamic language extensions a = b cross c;
  13. natural language extensions height is fifteen feet
  14. units a = 10 feet * 14.3 inches;
  15. 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)
  16. dynamic properties a = 10 feet; a~units = inches dynamic converts units, feet to inches 
  17. remove the need to declare local variables  a = 10;  alert(a) (local)
  18. force explicit .vs. implicit global declarations  window.a = 10;  alert(a);  (global)
  19. SQL   a = select name from employees where...   complete syntax (group by, order by, joins, aggregate functions, top, selects of selects ...) 
  20. variable length binary values ***
  21. mutable strings A ="clif";  A[0] = 'C';
  22. Matrix object m = new Matrix(2,4,4);
  23. Matrix math m *= 15
  24. String Templates evaluations   a = "Hello from {{name}}".eval;  b = "Hello {{name}}"; alert(b.eval);
  25. URL and file type alert(c:/temp/test.csv);  show file's content
  26. loop statement loop m(a,b,c,value) { ... }
  27. Bits object b = new Bits(1:6,12,20:50)
  28. sub-range object b = a[3:7] or b = a[9:-7]
  29. assembler functions (direct hardware access) 
  30. binary functions (to work on binary structures)
  31. remove closure, use bind
  32. A in ( list ) a in (12,13,15,19)
  33. A like ( wildcard-list ) a like ('a*','b*');
  34. A contains ( wildcard-list ) 
  35. all values are objects  a = "clif";  a.type='person';
  36. a "world" object (all machines)  alert(world.Collins Software.employees)
  37. blanks in variable names  my database = world.Mircrosoft Access.db1.mdb;
  38. a "local" object (local machine)
  39. a "user" object (user specific)
  40. undeclared variable event
  41. expanded alert output: values, objects, arrays, matrix, files, and URLs  alert(a,b,c);
  42. locals of functions as an array a = 12; return locals
  43. call stack access,  a = parentLocals
  44. function name locals.functionName;
  45. "this" propagates to sub-functions of parent
  46. library card (all known knowledge, is it sorted, what is the height/width, does it exist )
  47. delayed fetch of value until actually needed
  48. IC technology (Infinite Continuous) segmented data fetch
  49. tokens / compile / link functions
  50. qualified function names function car.print()  function prototype linkage
  51. integer, counting numbers, and real numbers  a = 12; b = 12.0   a is integer,  b is  real, propagates thru math operations
  52. create / change / delete events, (triggers)
  53. index constants, (enumerated variables) constants a = [apple,pear,banana]  apple = 0, pear=1, banana=2 (a is an array of names)
  54. bit mask constants  masks b = [apple:4,pear,banana]  apple = 0x0F, pear=0x10,banana=0x20 (b is an array of integers )
  55. Math expressions (trace, log and evaluation)
  56. Access to call stack, and calling routines
  57. JavaScript compiler / parser a = compile('b = 1; c = 4; alert(b*c)');  a.run();
  58. Time units kept, GMT,  UTC (GMT +/- seconds),  Time zones (GMT +/- hours)
  59. Time units to femtoseconds 10-15
  60. Time and Date duration infinite (as GMT or UTC (GMT +/- seconds))
  61. Calendar Date infinite, independent of time (no fuzzy dates)
  62. prompt specific dialogs (file, files, save-as, find-replace, color, font, folder)
  63. prompt similar to MessageBox
  64. confirm qualifiers,  confirm.yesno('continue ?')  yes-no, abort-retry, ok, yes-no-cancel, abort-retry, help, abort-retry-ignore
  65. 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)
  66. hybrid compiler, emulator for JavaScript logic when required, assembler CPU instructions used otherwise
  67. Access to ALL CPU instructions using JavaScript syntax R0 = 12;  R0 << 2;  if (! overflow)  a = R0;
  68. Math Expressions and Equations
  69. Chemical Expressions and Equations
  70. 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)
  71. Aggregate functions (sum, average, minimum, maximum, count, frequency,...)  a = average(employees.(children).payrate)
  72. Hierarchical search  (term based: (mother, father, brother, sister, aunt,...) (company, division, department,...)  a = this.(brother.oldest)
  73. Network Objects (node based: Interstate-10 entrance ramps)  I10.wirt road.entrance.east bound.flow = 1605 average cars per hour;
  74. Connectivity Objects (junction based: transformer to transformer)  a = houston.(transformer=134529).amperage load per day;
  75. Segmented Objects (by value: i.e. year, month, age, company, ...)  a = Invoices.2017.July;
  76. 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)
  77. asynchronous function calls (performs result assignment and re-continues to next statement when function finishes)
    1. Wait Until Done b = a.wait();   (blocked execution)
    2. Return When Done  b = a.return(); (unblocked execution)
  78. Music orchestras and scores programming
  79. Compile-able objects  a = {*  ... *}  (a cg2 formatted string that attaches to a known or unknown term)
  80. include JavaScript (browser's) <script> ... </script>
  81. optional "then" in an if statement  if (A) then ...  else ...
  82. inline include statements,  include "./apple.js";
  83. conditional compile  #if  #define  #end  #else  #then
  84. "alert" displays objects in a tree view
  85. function trace events  compiler~onfunctionenter = myOnFunctionEnter;  compiler~onfunctionexit = myOnFunctionExit
  86. trace logging log('enter function', functionName);
  87. Jane emulation with complete access to DOM model
  88. sub-functions in prototype of constructor
  89. sub-object for events and n-dimensional objects
  90. actionable objects   a = count:{ files:{*.js}, type='function' }
  91. "switch" statement with mini-function case evaluation,   case 1,2,3:  case in A:...  case >=0 && <=10 && ! (5,7) :...  case like "A*" && ! like ("Apple*") :
  92. "search" statement,  search (file:{"test.htm"}) { case "<" ...">": alert(result);  continue; }
  93. "exit" statement,  bypass call stack and clear all memory usage
  94. "process" statement,  exit executable code to update DOM model, then return
  95. "thread" create alternate process threads (simulated) run during "process" a statement ( really an event "onprocess")
  96. cascade assignments,  A~units = feet;   A.B = 10;  (A.B = 10 feet)    A~units=meters;  (A.B = 3.048 meters)
  97. singular / plurals  count = 5;  a = "{{count}} {{row^s^count}} were affected".eval;   5 rows were affected
  98. integrated system commands  delete files{jc://*.jpg}
  99. nested Logical  define jc = "user$current://projects/compiler/"
  100. compare operators A ==? B (ignore case with trim) A ==?? B (without trim) <?, <=?, >?, >=?, ==?, ===?    A ==# B (numeric compare) <# <=#, >#, >=#, ==#, ===#
  101. other compare operator in? like? in# like# also as functioncall A.sort#();
  102. switch statement numeric range case 1-100,202,203:
  103. 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)
  104. compiler directives #A = 123;  #language='JavaScript';  instructions to the compiler and are also available at run-time
  105. #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);
  106. 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
  107. language dependent statement for the management of "JavaScript" and "JC"  //~jane~ #language=JavaScript  treats source code as JavaScript until changed
  108. allow try finally without a catch, permit any order of catch finally
  109. visualization of program structure for determination of nesting relationships during debugger, performance analysis and program layout. Might be useful for error reporting
  110. 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
  111. 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
  112. assembler bits register subrange A[61:63] bit 61 to 63 of register "A" a 64 bit register
  113. assembler keywords StackPointer, BasePointer, StackIndex, DataIndex, Flags, Carry, Zero, Parity, Overflow, Adjust, Direction, Identification, AllRegisters , CPUID, CR0, DB0,  X0 - X15 (xmm0 to xmm15)
  114. CPUID types: Processor, Vendor, Cache, SerialNumber, Thread, Features, Brand, L1, L2, Power, Address, AMD
  115. Externalize hardware registers CR, MS, DR, TR, DTR,...:  Registers.cpu[0], Registers.controls[0].protected,... Registers.debugs.breakpoints[0],... , Registers.feature.longModeEnabled,...
  116. extended math, 80bit floating point, 128 bit integers, infinite byte integers, BCD
  117. assembler register and JavaScript values in same expression, (values are automatically mapped to byte storage)  myValue = 167;  B4 = 4;  A4 = myValue * B4; alert(A2);
  118. machine independent numbering systems, 8 bit to 512 bit machine instructions same result, whole number, float, and fixed decimal numbers, variable length numbers (characters)
  119. #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
  120. 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
  121. number representation are now variable length, 0 to infinity digits, as well as strings, dates and floating points
  122. track constants A = 34 (constant whole number) , A = -34 (constant integer)
  123. 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")
  124. 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)
  125. 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
  126. optimization reporting, stupid human reporting of alternate / optimized solutions
  127. 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)
  128. infinite fixed bit size number array,  a = number~64bits:[ 1,2,3,4 ];  a[5] = 34; b = integer~1byte:[ -45, 56 ]; b[1] = 65;
  129. infinite size bit character array, a = text~32bit:[ 'Clif' ];  alert(a[0]);  C   alert.number(a[0])  68
  130. 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
  131. "having the ability"  the concept of including actions that are both known and unknown to the compiler
  132. file and url units  a = "c:/temp/HelloWorld.tmp" file;  alert(a);  displays the content of the file.
  133. file read, write and append  a = "hello.txt" file;  a = "Hello World"; a += "\nfrom Jane"; alert(a);
  134. listing of files and folders in user server root folder, alert("" files); alert("" folders);
  135. compile time global constants, #name = "clif" strings, number #name = 10, and identifier #name = window.screen ,  if (#name) ...
  136. 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
  137. 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
  138. 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;
  139. addition of arrays.  B = [0,1,2,3,4,5]  B += [6,7,8,9];
  140. addition of objects; A = {name:'Clif'} B = {age: 12, dob: ''}  A += B;
  141. variable name attached to value  a = new Object(): alert(a);  listing contains a = <object> ...
  142. case insensitive text.  A = "Clif";  A~keyword = true;  if (A == "CLIF") alert(true);
  143. attributed text (trim, case= ('upper', 'lower', 'proper') ,compress, keyword, editable)  A~compress = true; A~upper=true ; A = " Clif      Collins   ";  // "CLIF COLLINS"
  144. 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);
  145. 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);
  146. infinite number of vertical and/or horizontal partitions
  147. infinite depth on horizontal partitions (i.e. company.department.project.year,month.day.hour);
  148. externalized vertical and horizontal partitions  horizontal partition example: "index(http://index/2016/Jan.cg3)"
  149. security possible on every vertical and horizontal partition
  150. version, format, structure, depth, and granularity independent of partitions
  151. concatenation of "undefined" and "string", make "undefined"  blank
  152. permit the function variable "this" to be changed,  this = new Object();
  153. allow dynamic format change, any size (bits or bytes) integer, number, or real array A = "clif"  A.~.format = 13 bit integer;
  154. allow access to binary structure A.~.binary = true;
  155. absolute control over program flow
  156. asynchronous wait, either blocked a = b.wait(), or unblocked a = b.return();
  157. parallel asynchronous statement execution; a = get.continue(1);  b = get.continue(2);  continue wait;
  158. enter points with a function callable from called functions, two way communication between functions
  159. emulate threads, permit screen refresh from any function;   function a() {  for (i=0; i<100; ++i)   { progressBar(i);  refresh; } }
  160. Jane server, solicited and unsolicited web socket communication to multiple servers
  161. Local Jane server ( for reading / writing local resources  A = local["c:/temp/myImage.jpg"];  local["c:/temp/hello.txt"] = 'Hello World";
  162. Jane database tied directly to compiler,  A = Employees; where Employees is a table/object on a local and/or remote server(s)
  163. on-demand loading of server resources, A = Employees; alert(A[0]);  only the first employee is actually read from server
  164. server reading and writing tied directly to compiler,  A = Employee["Clif Collins"]; A.age = 12; server immediately updated
  165. transaction processing, begin Transaction;  Employees.add({name:"BOB"});   commit; (or rollback)
  166. 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
  167. 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
  168. FPGA logic added to assembler with output and/or simulation, (software implemented in hardware)
  169. 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
  170. compiler forms, emulated in all browsers, and compile-able in Windows and Linux
  171. compiler forms using a simplified html format, simple in language not in functionality
  172. compiler forms with graphics 2D & 3D language, math equation language, and macros
  173. device object A = new Device(); A.clif = "Hello" A.clif.file = c:/temp/myData.txt; a physical or ram storage device
  174. hardware device B = new Hardware();  B.Clif  = A; a physical hardware device
  175. remove the need for an install utility, every program is immediately known, defined and movable
  176. application modes, Production, Testing, Training, Replication, Backup,...
  177. Jane scripting tied to forms with direct process to process communications.
  178. scripting makes no distinction between form and console applications
  179. self tagging devices. Mouse, Keyboard, Monitors,... known to the system, with changeable names, locked to an internal network (unlock-able)
  180. infinite memory, A = new Memory(2 byte integer); A[8 GB] = 12; B = A[9 GB];  B is null
  181. 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
  182. screen management system as part of the form management system, with this higher resolution take advantage of it...
  183. park-able, resize-able, drag-able screen regions, split screen into regions to park applications, forms, and sub-forms
  184. web addressable screens, attach any number of screens to an application, A = myScreen_1, B = myScreen_2, C = http://raspberry_pi_1/screen_1;
  185. 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"
  186. 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);
  187. device characteristics are dynamic, meaning they are always refreshed from the current operating system's settings
  188. 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';
  189. parent / child inner process communication,  A = new Program(myTest);  function myTest() { this.(up).send = 'Hello World'; }  function send(value) { alert(value); }
  190. alter function flow to be linear
  191. interchangeable client / server (master / slave) roles. (client) A = myServer.print(myObject);  (server)  B = myClientObject.copy();
  192. allow orphan catch and finally blocks, it assumes a global try
  193. 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
  194. onLoad: onEnter: onFailure: onUnload: onReturn: onExit: onNotFound: event entry points
  195. event entry points in "main" are global for every function
  196. "break" statement to exit a try, catch, and finally blocks, add a label if within a loop
  197. finally block are always executed, except on an "exit" statement, use an onExit: entry point label in this case
  198. 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"
  199. extend alert to qualify arguments Apple = 'Red Delicious';  alert.withname(Apple);  output is "Apple = Red Delicious"
  200. search command, A = "Hello World";  B = search A for word starting with "W" and ending with "d" ;  alert(B.preceding);
  201. split command,  B = split A as CSV;  alert(B); 
  202. replace command  B = replace ((split A as JavaScript) where type = id and value = "myData") with "Apple";
  203. 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
  204. 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
  205. 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
  206. 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
  207. Object operators as functions,  .__operators. [+,-,/,*,!,**,&&,&,||,|,^,%,~,<,<=,>,>=,>>,<<,=,==,!=] every object can define operator functions.  A.__operators['+'] = addFunction;  A  = B + C; (Hello Python)
  208. 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)
  209. In place operators, operators that work on the contents of an object  this._operators["..sort"] = mySort;  ..sort A;
  210. operator arguments ..sort.order = 'ascending';   ..sort A;
  211. All methods are separated into a "methods" partition  a.run = runFunction;  a..methods.run = runFunction; (same)  (Hello Debugger)
  212. 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
  213. 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
  214. operators in the "for" statement, for (i in 50)  {...}   (index 0 to 49)
  215. dollar, cents, currency, and comma formatted numbers A = X.dollar();  B = X.dollarAndCents();  C = X.dollarOrCents();  D = X.currency('yen');  D = X.comma(); 
  216. "for in" statement values in range  for (i in 1 to 21 by 3) { ... }  returns 1,4,7,10,13,16,19,21
  217. "for in" statement characters in string for (C in "Apple");  returns ''A','p','p','l','e'
  218. "for in" statement, return object's values not name for (value in {name:"clif", age:12})  { ... }  returns "clif", 12
  219. object properties A..name extends every value to contain run-time / compile-time properties A..properties is the container of all properties
  220. system defined object properties: name, units, type, loaded, modified, locator (parent, index, location, sortTable, verticalPartition, horizontalPartition, hashTable) (some are built on reference)
  221. system defined object event properties onchange, oncreate, ondelete, onload
  222. universal name space, known common terms: drives, hardware, local, server, registry, pictures, videos, tables, databases, people, employees, friends, my, logs, ...
  223. 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,...
  224. location types, file://, http://, https://, ftp://, mail://,...
  225. location run-time string parse syntax:  A = new Location("file://c:/temp/mydata.txt");   alert(A.content);
  226. 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) { ... }
  227. 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)
  228. compile-time includes of locations: A = quoted { include file://c:\temp\file_extensions.txt; };   recompile => hourly,  nightly, weekly, monthly, yearly, onchange...  for updated tables
  229. complex objects: points, lines, polygons, text, symbols, secondary annotation, labels, fonts, grids, faces, math equations, animation,,...
  230. overloaded  "get" and "set" operators   function x$() { this..operators.get = function () { return 'hello world' }; }   A = new x$();  alert(A);
  231. 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]
  232. new overloaded dot operator "." function Apple() { this.name = 'Red Delicious'; this..operators['.'] = function (name) {  return this[name.toLowerCase()];}  fruit = new Apple();  alert(fruit.Name);
  233. new overloaded operators ? \ @  #  @=  #= ?= \= |= ;  String..operators['#'] = function (A,B) {  return A.toLowerCase() + B.toLowerCase() } ; alert('CLIF' # 'Collins');
  234. unary overloaded operators,  function x$() { this.value = -33; this..operators['unary+'] = function (operator) {  return Math.abs(this.value); };  }  A = new x$();  B = +A;
  235. extend unary operators for * / % # @ ! ? \   String..operators['unary%'] = function (operator) {  return trim(this.value); };  }  A = '       Clif Collins    ';  B = %A;
  236. 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);
  237. 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);
  238. "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;
  239. is operands, object names, or in search path operands:  window..operands.is = quoted{include Jane..operands.is}.split(','); this..operands.is = 'cg2'.split(',');
  240. 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
  241. permit assignment to a function result  A(1) = 45;  along with the bracket [] and brace {} syntax.
  242. 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};
  243. change syntax of JSON to be the same as JavaScript A = JSON.parse(" 'name:'clif',age:12");
  244. 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;
  245. JSON to stringify by vertical and horizontal partition B = JSON.stringify(A.sort.2018);
  246. 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
  247. Vertical partition attributes: constructor, destructor, isExportable (permits segregation of system values and run-time values from stored values)
  248. 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);
  249. extend "parse" logic into "search" statement, A = search B for '<proper name> <comma> (color)'
  250. 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
  251. 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
  252. 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)
  253. plural hierarchy selection filters:  Employees.selections.common = company => division => department => supervisor => group;  mySelectionDiv.innerHTML = Employees.selections.common.HTML;
  254. 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;
  255. 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;
  256. load and unload on demand of logic. logic management system for the loading and release of objects and functions.
  257. 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
  258. 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
  259. qualified value variable  a = 'a,b,c,d'; b = csv{text.id{a}};   format acceptable as windows and unix file names and database content
  260. 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
  261. 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)
  262. 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)
  263. "@" 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)
  264. superimpose common global names to the universe of names, @.global.boynames = @.listof.boynames;  put @.my.global and @.global in the search path  a = boynames;
  265. compiled global names, the compiler will resolve world names at compile-time and at run-time
  266. 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}
  267. 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{}};
  268. 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
  269. 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)
  270. 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
  271. qualified value resultant value: text, Integer, number, real, or object.  a = integer{10};  b = array{csv{1,2,3¶4,5,6}};
  272. 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{¶}}};
  273. 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.
  274. universal qualified values @.user{} defined as current logged in user, me = @.user{} declares an alias,  include @.aliases;
  275. value reference, a = 'clif collins' b = a.reference[0-4] c = [1,2,3,4]; d = c.reference[0,2];
  276. flow control - multiple threads on multiple machines 
  277. Jane server logicals,  logicals.jane = "c:/temp/";  logicals.scratch = "jane.scratch";  a = filename{scratch.test)  a.value = "Hello World";
  278. 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»";
  279. rewrite the keyboard driver
  280. 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
  281. 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;
  282. 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
  283. content delivery system (CDS) commands. this.functionsName = serverExecute('CDS_DAILY{command=files&path=www:file/functions/}'); cache results on server by command text
  284. content delivery system unique permanent identifier, id = CDS{serverExecute('command=files&path=www:file/functions/')}.identifier;  this.functionsName = CDS[id]
  285. 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
  286. 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
  287. 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.
  288. Remap keyboard scan codes to include extended programming characters,  all the teletype control characters can be used.
  289. 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"
  290. object constructor, A = {name:expression for name,value in B};with conditionals A = {name:expression for name,value in B if value < 10};
  291. value constructor, A = (expression for [name,value] in B);  with conditionals (like above),  example: A = (average(receipt.total) for receipt in receipts);
  292. 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] ;
  293. value constructor aggregate functions: minimum, maximum, average, count, mean, mode, range, median;
  294. object constructor aggregate functions: stats; (all value aggregate functions)  A = {stats(value) for value in myList};
  295. 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];
  296. 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)
  297. array, object, value constructors using LOOP statement C = [a[i,j] loop top 100 B(i,j,a) if a < 10] limit 5;
  298. 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)
  299. named complex data structures in cg2,  *define:person, name; *define:person.cars[],make,model;  person,clif;  person.cars,chevy,truck; order dependent unless indexed
  300. 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;
  301. complex numbers,  a = 10.7i
  302. 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
  303. a separate physical public network on the jane server for read / write access to the web (requires 2 NIC cards)
  304. Jane to only use and store Metric Units, other units will need to be explicit
  305. 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)
  306. file management, database and transport handled by jane  A = file{filename{c:/temp/test.dat},text{}}  B = A.lineCount;  C = A[1:B]; 
  307. 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
  308. 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...
  309. permit name, value specification in the  "FOR IN " statement  for (name,value in myList) {text += name + ' = ' + value}
  310. for statements treats text as an array of characters:  for (c in "Clif") { list.push(c); }
  311. 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
  312. string or number (A) to Array (B) Operators,  C = A in B, C = A not in B,  B += A, B -= A,  B |= A 
  313. 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');
  314. 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
  315. jane known values,  local, server, www
  316. jane "local" and "server" values,  user, users, aliases, operators, robots, devices, operatingSystem, hardware
  317. 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];
  318. subtraction of text,  a = 'clif collins' - 'Clif'  (case insensitive)
  319. 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'
  320. compile time and run time, and jane directive,   global (outside a function) and local (inside a function)
  321. compile time directives, %compile.caseSensitive = true;  %compile.keywords = true;  %compile.language = javascript;  %compile.showErrorCount=1;
  322. run time trace directives,  %trace.statements = true;  %trace.functionEnter = true; %trace.functionExit = true;  %trace.valueChange = test.count;   %trace.valueCreate = windows;
  323. run time event directives,  %on.statements = onStatement;   %on.functionEnter = onFunctionEnter;
  324. run time directives,   %trycartch = off;  (debugging break)
  325. jane server(s) compile time directives,  %jane.local.readonly = true; %jane.server.caseSensitive = false; %jane.name = Samual
  326. 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)
  327. a linked object value type,  A..wnf = object{jane.local.user.aliases}  wnf (When Not Found)  load on demand
  328. 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.
  329. jane font application,  a simplified definition language,  centerline expansion, fillets, and line cap algorithms. (output web fonts and TTF)
  330. an enhanced error handler and recovery system. two types of error, internal (a programming error) and external (user induced) a server based exception handler...
  331. regular expressions? N compilers with N variations... combine and simplify... ECMAScript, JavaScript, Python, PHP Oracle,..,40 variations: create  a compile-able statement
  332. add regex commands,  (?=<name>...re...)  store ...re... into value "name",  (?+...re...)  up to and including  (?-...re...) up to and excluding a = /<div>(?=<value>(?-</div>))/gi
  333. add regex qualifier q (csv) and Q (escaped) exclude single and double quoted values from search a = /<div>/q  will not find <div> in the string ' this is a sample text of "<div>" that is ignored'
  334. add regex commands \q (csv formatted strings)  or \Q (escaped strings)  (single or double) a = /\Q/  will find the string  ' John\'s yard is 56\'-10" '  a = /\q/  ' John' 's yard is 56' '-10" '
  335. add regex commands \N  any number formatted text, -10.0e-45 (scientific) , 0x00FF (hex) , 0O0377 (octal), 0B0100110 (binary),  two hundred and thirty five (text)
  336. add regex commands  \P  any proper name , The Washington MonumentAdrian of Avalon
  337. add regex commands  \T any date/time formatted string  10/15/2018,  Jan 10, 2018 10:34 PM,
  338. add regex commands  (?@myList)  match any expression in an array variable  a = ['mon','tue','wed','thur','fri','sat','sun'];   b = /(?@a)/i  or b = /(?[mon,tue,wed,thru,fri,sat,sun]/
  339. add regex commands  (?=<value>...)  mark everything up to the following search  a = /<div>(?=<value>...)</div>/i
  340. add regex commands  ... search for the next expression  a /<div...>/i  search for "<div"  then search for ">"  

Suggestions for future enhancements
  1. extending the programming character set (keypad keyboard mapping):  ■□►◄√∫∞∓℄∈∃≅⌆⌁⌱⍾♪♫
  2. case insensitive
  3. no reserved keywords
  4. natural language Assembler,  if not carry  { ... }