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.

One Language for all development.  As of July 25, 2017 we must use 3 or 4 different development systems to write any application of any size. I am using 6 (HTML, JavaScript, c++, assembler, VS, and batch files) just for the compiler, and this would increase to over 10 environments by the time I finish, if I had not planned to bootstrap my own compiler, this will reduce all future development of Jane to one environment, one language with no limitations and a single syntax.

These extensions are to the syntax of the language, no functions were called during the making of this movie...

  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 = [10 feet, * 14.3 inches, + 2 constant]
  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...
  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. URL and file type alert(c:/temp/test.csv);  show file's content
  25. loop statement loop m(a,b,c,value) { ... }
  26. Bits object b = new Bits(1:6,12,20:50)
  27. sub-range object b = a[3:7] or b = a[9:-7]
  28. assembler functions (direct hardware access) 
  29. binary functions (to work on binary structures)
  30. remove closure, use bind
  31. A in ( list ) a in (12,13,15,19)
  32. A like ( wildcard-list ) a like ('a*','b*');
  33. A contains ( wildcard-list ) 
  34. all values are objects  a = "clif";  a.type='person';
  35. a "world" object (all machines)  alert(world.Collins Software.employees)
  36. blanks in variable names  my database = world.Mircrosoft Access.db1.mdb;
  37. a "local" object (local machine)
  38. a "user" object (user specific)
  39. undeclared variable event
  40. expanded alert output: values, objects, arrays, matrix, files, and URLs  alert(a,b,c);
  41. locals of functions as an array a = 12; return locals
  42. call stack access,  a = parentLocals
  43. "this" propagates to sub-functions of parent
  44. library card (all known knowledge, is it sorted, what is the height/width, does it exist )
  45. delayed fetch of value until actually needed
  46. IC technology (Infinite Continuous) segmented data fetch
  47. tokens / compile / link functions
  48. qualified function names function car.print()  function prototype linkage
  49. integer, counting numbers, and real numbers  a = 12; b = 12.0   a is integer,  b is  real, propagates thru math operations
  50. create / change / delete events, (triggers)
  51. index constants, (enumerated variables) constants a = [apple,pear,banana]  apple = 0, pear=1, banana=2 (a is an array of names)
  52. bit mask constants  masks b = [apple:4,pear,banana]  apple = 0x0F, pear=0x10,banana=0x20 (b is an array of integers )
  53. Math expressions (trace, log and evaluation)
  54. Access to call stack, and calling routines
  55. JavaScript compiler / parser a = compile('b = 1; c = 4; alert(b*c)');  a.run();
  56. Time units kept, GMT,  UTC (GMT +/- seconds),  Time zones (GMT +/- hours)
  57. Time units to femtoseconds 10-15
  58. Time and Date duration infinite (as GMT or UTC (GMT +/- seconds))
  59. Calendar Date infinite independent of time (no fuzzy dates)
  60. prompt specific dialogs (file, files, save-as, find-replace, color, font, folder)
  61. prompt similar to MessageBox
  62. confirm qualifiers,  confirm.yesno('continue ?')  yes-no, abort-retry, ok, yes-no-cancel, abort-retry, help, abort-retry-ignore
  63. 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)
  64. hybrid compiler, emulator for JavaScript logic when required, assembler CPU instructions used otherwise
  65. Access to ALL CPU instructions using JavaScript syntax R0 = 12;  R0 << 2;  if (! overflow)  a = R0;
  66. Math Expressions and Equations
  67. Chemical Expressions and Equations
  68. System Objects:
    1. World
    2. Global
    3. Local
    4. User
    5. Array
    6. Date
    7. String
    8. Number
    9. Math
    10. Devices
    11. Network
    12. File
    13. Folder
    14. Matrix
    15. Font
    16. Form
    17. Graphic (vector, surface)
    18. Image
    19. Person
    20. Place
    21. Thing
    22. Idea
    23. classified objects,  employee=person{}; contractor = employee{contractor:true}
    24. Units
    25. Chemical
    26. Art
    27. Music
    28. Equations (math, chemical)
    29. Expressions (math, chemical)
  69. Aggregate functions (sum, average, minimum, maximum, count, frequency,...)  a = average(employees.(children).payrate)
  70. Hierarchical search  (term based: (mother, father, brother, sister, aunt,...) (company, division, department,...)  a = this.(brother.oldest)
  71. Network Objects (node based: Interstate-10 entrance ramps)  I10.wirt road.entrance.east bound.flow = 1605 average cars per hour;
  72. Connectivity Objects (junction based: transformer to transformer)  a = houston.(transformer=134529).amperage load per day;
  73. Segmented Objects (by value: i.e. year, month, age, company, ...)  a = Invoices.2017.July;
  74. 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)
  75. 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)
  76. Music orchestras and scores programming
  77. Compile-able objects  a = {*  ... *}  (a cg2 formatted string that attaches to a known or unknown term)
  78. Insert-able JavaScript (browser's) <script> ... </script>
  79. optional "then" in an if statement  if (A) then ...  else ...
     

Suggestions for future enhancements

  1. extending the programming character set  ∑√∫∡∠⎾⏌⦅⦆⦃⦄∞⇦⇧⇨⇩∓℄∈∃≅⌆⌁⌱⍾♪♫
  2. case insensitive
  3. no reserved keywords
  4. Intelligent search / replace / extract  A = B next line;  A = B[0:"A"]; C = B[*:next line,...];
  5. natural language Assembler,  if (carry)  jump to A
  6. multiple function entry points   A.apples(a,b,c);
  7. function having an object constructor A.new(d);  A();  (global bind)
  8. N dimensional object values  (currently one name, one value) (I want one name, multiple values / multiple names)