This is a read-only snapshot of the ComputerCraft forums, taken in April 2020.
LeDark Lua's profile picture

Programming Language JaC - Compiler

Started by LeDark Lua, 11 October 2015 - 12:20 PM
LeDark Lua #1
Posted 11 October 2015 - 02:20 PM

JaC Programming Language


From where did the name come from?
DemHydraz: It looks like Java and C# had a love child behind C's back.



Summary:
JaC is C# and Java type language. It was focused to have Methods, Classes and some C# elements.

TutorialNote: Starting your code:
If you have a method and want to start code from that package, you need to have package - "Main", inside of it class - "Main" and inside of the main class a Main function.
If you don't have packages in your code then you need to have a class named "Main" and inside of it function "Main"
Semi-colons are important!
Constructors don't do this in this version:

class Test {
public function Test() {
  return this;
}
}
The constructor does it automatically!
And thats out of the way, everything is like Lua :)/>

How to start off:

class Main {
public function Main(args) {
  print(args[1]);
}
}

//Input: tutorial.lua Hello,World!
//Output: Hello,World!
How to create a package:

package <name> {
...
}
How to create a class:

class <name> {
...
}
Function types:

public function <name>(...)
// or //
private function <name>(...)
How to declare a variable:

var <name>=<value>;
Comments:

//This is a one line comment.

/*
This
is
a
Multi-line
comment.
*/
How to use other packages:

using <name>;
How to use other classes and extend into them:

class Tutorial extends Lua {//Extending
...
}
class Tutorial {
var lua = new Lua();//Using
}
CraftOS:

class Main {
using CraftOS;
var term=new Term();
var shell=new Shell();
var os=new OS();
var paintutils=new Paintutils();
var fs=new FileSystem();
}
For loops:

for(i=1,maxNumber,addNumber) {
  //...
}
//Another example:
for(i=1,maxNumber,--) { //or : ++
   //...
}
Other stuff:

//Added:
i+=1;
i-=1;
i*=1;
i/=1;
i++;
i--;
Lambdas:

//1
var lambda=x->x*2;
print(lambda(2)); //output: 4
//2
var lambda;
lambda = x -> x*2;
print(lambda(2)); //output: 4
//3
public function Test(arg, input) {
   return arg(input);
}
print(Test(x->x*1, 100)); //output: 0

How to use the compiler

Type:
1. -o  | outputs the file to the specified path
2. -f  | Compiles a file ( if no -o is inputed then the file will be: test.jac => test.lua )
3. -r  | Compiles and runs a file directly.


Where do I download it?
Run this code:
pastebin run exSCtn9q -f
OR:
pastebin get exSCtn9q JaC

Old version: here


To run it [ Type in your Computercraft computer ]:
JaC -f [ -p … ]


If you found any bugs, paste them here, THANKS!
Edited on 28 November 2015 - 10:49 AM
Creator #2
Posted 11 October 2015 - 05:22 PM
Can you write a more detailed tutorial, because it is kinda confusing.
LeDark Lua #3
Posted 11 October 2015 - 07:41 PM
Tutorial section updated. Hope this helps more now.

EDIT: Did you try it?
Edited on 11 October 2015 - 05:42 PM
Creator #4
Posted 11 October 2015 - 08:07 PM
I still don't see why packages'd be useful.
LeDark Lua #5
Posted 11 October 2015 - 08:07 PM
Well packages are like API's.

In future I will add so that it will compile the packages to like:

JaC -f file -p package1 package2
Edited on 11 October 2015 - 06:08 PM
Creator #6
Posted 11 October 2015 - 08:09 PM
What does JaC add to standard Lua?
LeDark Lua #7
Posted 11 October 2015 - 09:03 PM
With JaC you can code like in Java, object orriented programming.
Creator #8
Posted 11 October 2015 - 09:15 PM
It is possible with lua:


--Class Neuron
function Neuron(args)
--private
local one = 1
local two = 2

--public
local self = {}
self.a = "A is public"
function self.b()
print(one+two)
end
--constructor
blob = args
return self
end

That is the class Neuron.
Edited on 11 October 2015 - 07:15 PM
SquidDev #9
Posted 11 October 2015 - 09:58 PM
It is possible with lua:

Whilst everything here is possible with normal Lua, it often is nicer/more fun to have a custom syntax for creating classes. Another project which has tried this was LuaLua, which had a far more ugly odd syntax than this. I'm also currently working on a Lua compiler with the aim of adding types to it. Also: since when has anything written in CC really had a point to it :)/>.

I would question the Java-esq (and C# truth be told) requirement for packages/classes - I feel they should be an additional feature rather than a requirement - as in you can write programs in JaC without having to wrap everything in a class. I'm also not sure about the idea of private variables within functions - people are used to using local and I'd try to follow the Principal of Least Astonishment: what do people expect. I know you are trying to go for an OOP style of code, and for class members private makes sense, but for variables it doesn't. For this reason, I'd also suggest removing the semicolon requirement - you should be able to parse without it.

Other than that though: I'm pretty impressed! Speaking of C# features though: if you could get lambdas that would be awesome!
Creator #10
Posted 11 October 2015 - 10:25 PM
Impressed by what?
What are lambdas?
ElvishJerricco #11
Posted 12 October 2015 - 12:01 AM
Impressed by what?
What are lambdas?

Making a language is impressive. I've made a few and it's always really interesting. This language is useful because packages encapsulate your code, and in-language classes serve as an infinitely more elegant solution to OOP than the hacky, manual, strange OOP system you have to construct in ordinary Lua. Yes all of this is possible in Lua, but it's clunky and annoying in Lua.

Lambdas are anonymous functions.


doSomethingWithCallback(function() ... end) -- pass a lambda as a parameter

Anyway, about this project: It looks really good. Is it possible to use the "using" syntax to import packages from other files? Also, I took a look at your parser. You might want to do some reading on abstract syntax trees (ASTs) and their construction. It makes defining the language a lot easier and eliminates potential bugs.
LeDark Lua #12
Posted 12 October 2015 - 01:14 PM
Thanks for the great response guys.

Today I will add a feature of adding packages from files,
Lambdas, I will add them but not today :D/>, this will need a bit more work to be done,

The semicolon and private variables, when compiling to Lua I make private to local, semicolon is needed to check for a end-of-possible-(function variable etc…).
Edited on 12 October 2015 - 11:14 AM
ardera #13
Posted 12 October 2015 - 01:41 PM
Looks awesome!

It is possible with lua:
It is possible to write reallife Operating Systems in assembly - but they're coded in highlevel languages like C++. Why? Because it's a lot easier, it looks better, and you don't lose track. (and it's easy to compile to other processor architectures)
Same goes with this: Of course you can use Lua to achieve object-orientation, but this (JaC) makes your OOP coding a lot easier, it looks better, and you don't lose track. Also, Lua is not really made for object-orientation, JaC is.
Edited on 12 October 2015 - 11:50 AM
LeDark Lua #14
Posted 12 October 2015 - 02:18 PM
Looks awesome!
Thanks!
LeDark Lua #15
Posted 12 October 2015 - 02:35 PM
JaC Update

Added: adding packages from other files: JaC -f file -p pack1 pack2 …

Added: Multiline comments.


Updated: Tutorial section!


LeDark Lua #16
Posted 15 November 2015 - 04:19 PM
I'm remaking this compiler and I will use It in my OS for creating APP's and stuff :)/>
Awe2K #17
Posted 15 November 2015 - 06:59 PM
Wow, that's, maybe, the most amazing thing I've ever seen for CC:
You can code in Java/C-like syntax, easily use objects/classes (lua is pain for me after using Java), thanks guy!
Keep it up.
LeDark Lua #18
Posted 15 November 2015 - 07:20 PM
Wow, that's, maybe, the most amazing thing I've ever seen for CC:
You can code in Java/C-like syntax, easily use objects/classes (lua is pain for me after using Java), thanks guy!
Keep it up.
Thanks.

Little update and point out:
The classes and packages in this version work a bit buggy. So I created new ones and I will release it with the new compiler that works better than this one!

Packages are replaced with methods!

In the new version you can create classes outside the methods:

class System {
 //System class
}

Ohh, one thing, the Compiler will be done tomorrow or next this Friday because it's coming along nicely and working better than this version.
クデル #19
Posted 16 November 2015 - 10:17 AM
Looks awesome!

It is possible with lua:
It is possible to write reallife Operating Systems in assembly - but they're coded in highlevel languages like C++. Why? Because it's a lot easier, it looks better, and you don't lose track. (and it's easy to compile to other processor architectures)
Same goes with this: Of course you can use Lua to achieve object-orientation, but this (JaC) makes your OOP coding a lot easier, it looks better, and you don't lose track. Also, Lua is not really made for object-orientation, JaC is.

Kinda off-topic, but its really interesting to write systems in assembly. I wrote a basic system with assembly, and even wrote a small portion of it in machine code, which was really only for testing purposes.

Also, this language is hella awesome. :D/>
LeDark Lua #20
Posted 16 November 2015 - 02:10 PM
Looks awesome!

It is possible with lua:
It is possible to write reallife Operating Systems in assembly - but they're coded in highlevel languages like C++. Why? Because it's a lot easier, it looks better, and you don't lose track. (and it's easy to compile to other processor architectures)
Same goes with this: Of course you can use Lua to achieve object-orientation, but this (JaC) makes your OOP coding a lot easier, it looks better, and you don't lose track. Also, Lua is not really made for object-orientation, JaC is.

Kinda off-topic, but its really interesting to write systems in assembly. I wrote a basic system with assembly, and even wrote a small portion of it in machine code, which was really only for testing purposes.

Also, this language is hella awesome. :D/>
Thanks, and thank you all for this kind of support, this really makes me more and more motivated to work on this project.
And I'm happy to say that the new and better compiler is 50% DONE!
Creator #21
Posted 16 November 2015 - 02:25 PM
May I suggest more modularity for this project? Each function, like parse and tokenize gets its own file. It will allow you to have a better organization.
DannySMc #22
Posted 16 November 2015 - 02:32 PM
This just errors for me, how do you compile exactly? I copied your hello world code and saved it and did:
jac -f test.jac

but it just says compiling error….
LeDark Lua #23
Posted 16 November 2015 - 02:40 PM
I suppose your code is like this:

package Main {
  class Test {
		public function printIt(...) {
		  print(...);
		}
  }
  class Main extends Test {
		public function Main() {
		  Test.printIt("Hello, world!");
		}
  }
}
otherwise wait for the new version, it will be soon!

May I suggest more modularity for this project? Each function, like parse and tokenize gets its own file. It will allow you to have a better organization.
Well in the new version I tokenize/parse line-by-line, so Its a great idea, but I will not use it in this compiler, because that would need some prototyping and implementation would slow down the process of development.
Edited on 16 November 2015 - 01:44 PM
Awe2K #24
Posted 16 November 2015 - 06:44 PM
Is there ability to run code directly, without compiling it (something like: compile it, and run as lua from memory)?
Edit: also, how is constructor defined? does it look like Java or Lua?
Edited on 16 November 2015 - 06:20 PM
LeDark Lua #25
Posted 17 November 2015 - 12:31 PM
Is there ability to run code directly, without compiling it (something like: compile it, and run as lua from memory)?
Edit: also, how is constructor defined? does it look like Java or Lua?
Oh thanks for the idea of compiling and running it directly.

Constructors you ask?

class Cool {
 public function Cool(...) {
  args={...}
  return this
 }
}
Awe2K #26
Posted 17 November 2015 - 01:40 PM
As I think, a good way to implement direct JaC code running is to create temporary file, save compiled result to it, and then run it.
Also, I have one more question: does compiler support nested packages? That would be great if it does. (I think you should probably make some documentation, so we can know all features)
LeDark Lua #27
Posted 17 November 2015 - 02:23 PM
I will do the documentation when I'm done with the new version. But I think you are talking about:

using <packageName>;

NEW VERSION IS 90% DONE! There is a great chance that i will release it today!
Edited on 17 November 2015 - 01:23 PM
Awe2K #28
Posted 17 November 2015 - 03:45 PM
I will do the documentation when I'm done with the new version. But I think you are talking about:

using <packageName>;

No, I meant package names like "javax.swing", "org.lwjgl.opengl", etc.


NEW VERSION IS 90% DONE! There is a great chance that i will release it today!
Wow, can't wait to get it :)/> Sure it'll become a huge success (I've been coding in Java and C for a long time, so it'll be very nice to have C-like lang. for CC).
LeDark Lua #29
Posted 17 November 2015 - 04:55 PM
So if I:

using System.paintutils; //This implements System.paintutils class?
paintutils = new paintUtils();
Awe2K #30
Posted 17 November 2015 - 06:52 PM
So if I:

using System.paintutils; //This implements System.paintutils class?
paintutils = new paintUtils();

Almost what I meant. For example, including class/package:

using Package1.Package2.Package3.Class;

And defining:

package Package1 {  // Main package

package Package2 { // Second-layer subpackage

package Package3 { // Third-layer subpackage

class Class1 { // Class
...
}

}

}

}

Can this be achieved in your compiler?
Edited on 17 November 2015 - 05:55 PM
LeDark Lua #31
Posted 17 November 2015 - 07:56 PM
Well right now you can't achieve it. But maybe in the near future? But if I started to work on this right now, It would slow down the process of the development. So we'll say that the compiler is 60% done. Because I will try to implement method nesting.
Awe2K #32
Posted 17 November 2015 - 08:26 PM
Alright. Waiting for the compiler to come soon :)/>
LeDark Lua #33
Posted 18 November 2015 - 04:44 PM
The new compiler is DONE! I updated everything on the main post, so check it out.

To download JaC run this in your ComputerCraft computer: pastebin get JaC exSCtn9q

There is a section on how to use the Compiler.

Features are the same but packages are methods :)/>


THANKS FOR USING JaC.


I will try to make method nesting, because this version doesn't have it.

Lambda's? i will think about that.
LeDark Lua #34
Posted 20 November 2015 - 06:47 PM
Hey guys, I fixed some bugs in the compiler.
pastebin get exSCtn9q JaC
timia2109 #35
Posted 21 November 2015 - 11:22 PM
Hey, if I'm try to start it I get: "test.lua:151: Index expected, got nil".
My code:

class Test {
public function Test(inita) {
  init = inita;
  return this;
}
public function put() {
  print(this.init);
}
}
class Main {
public function Main(args) {
  var x = new Test("a");
  var y = new Test("b");
  x.put();
}
}

What's the problem?
But a nice idea!
Creator #36
Posted 21 November 2015 - 11:29 PM
Hey, if I'm try to start it I get: "test.lua:151: Index expected, got nil".
My code:

class Test {
public function Test(inita) {
  init = inita;
  return this;
}
public function put() {
  print(this.init);
}
}
class Main {
public function Main(args) {
  var x = new Test("a");
  var y = new Test("b");
  x.put();
}
}

What's the problem?
But a nice idea!

The thing is that the interpreter/compiler transforms this code into Lua code so the error messages will not give you correct line numbers.
LeDark Lua #37
Posted 22 November 2015 - 08:33 AM
Hey, if I'm try to start it I get: "test.lua:151: Index expected, got nil".
My code:

class Test {
public function Test(inita) {
  init = inita;
  return this;
}
public function put() {
  print(this.init);
}
}
class Main {
public function Main(args) {
  var x = new Test("a");
  var y = new Test("b");
  x.put();
}
}

What's the problem?
But a nice idea!
Your code should look like this:

class Test {
var init;
public function Test(inita) {
  init = inita;
  //If you read the main thread, it does this automatically.
}
public function put() {
  print(init);
}
}
class Main {
public function Main(args) {
  var x = new Test("a");
  var y = new Test("b");
  x.put();
}
}


JaC Update


Bug fixes with Class declaration in/out of the method

Some "for" loop fixes.
Bug fixes with var n = new N(math.random(5)); //In early builds, this would compile as: n=addClassCodeHueHue(math.random5)

And ability to: n = new N("aYe");
Edited on 23 November 2015 - 12:18 PM
timia2109 #38
Posted 23 November 2015 - 05:51 PM
Hey, if I'm try to start it I get: "test.lua:151: Index expected, got nil".
My code:

class Test {
public function Test(inita) {
  init = inita;
  return this;
}
public function put() {
  print(this.init);
}
}
class Main {
public function Main(args) {
  var x = new Test("a");
  var y = new Test("b");
  x.put();
}
}

What's the problem?
But a nice idea!
Your code should look like this:

class Test {
var init;
public function Test(inita) {
  init = inita;
  //If you read the main thread, it does this automatically.
}
public function put() {
  print(init);
}
}
class Main {
public function Main(args) {
  var x = new Test("a");
  var y = new Test("b");
  x.put();
}
}


JaC Update


Bug fixes with Class declaration in/out of the method

Some "for" loop fixes.
Bug fixes with var n = new N(math.random(5)); //In early builds, this would compile as: n=addClassCodeHueHue(math.random5)

And ability to: n = new N("aYe");
Great thanks! Now it works :)/>

But how do I use for-Loops? I try the "Java" way (
for (var i=0;i<10;i++)
), but it's not translated.
And I would like the short formes

i++; i+=5
i--; i-=5
i*=5
var i = (true) ? "Yes" : "No";


Thanks :)/>
LeDark Lua #39
Posted 23 November 2015 - 06:16 PM

//Coming soon:
i++;i--;
//There is:
i+=1;
i-=1;
i*=1;
i/=2;
//For loops:
for(i=1,maxNumber,addNumber) {

}
timia2109 #40
Posted 23 November 2015 - 08:59 PM
Awesome! But you should mention that in your tutorial, so that we can know that :)/>
LeDark Lua #41
Posted 26 November 2015 - 09:59 AM
Lambdas are coming:

var lambda = x -> x+100;
lambda(1);
And some other neat stuff:

var str = "String";
for(i=#str,1,--) {// -- : -1 | ++ : +1
   print(str:sub(i,i));
}
//or
var = 1;
i++;
print(i); //2
i--;
print(i); //1

JaC Updated!

JaC supports Lambdas! See tutorial section for more info!

Added: "i++" and "i–"

Awe2K #42
Posted 27 November 2015 - 08:08 PM
What's about specifying when should increment/decrement be done in loop:

// Here, decrement will be performed before checking loop condition
for (i=#str,1,--i) // Or maybe something like that
Also, if I want to help, do you have an GitHub page (or maybe other way to collaborate)?
LeDark Lua #43
Posted 27 November 2015 - 08:14 PM
What's about specifying when should increment/decrement be done in loop:

// Here, decrement will be performed before checking loop condition
for (i=#str,1,--i) // Or maybe something like that
Also, if I want to help, do you have an GitHub page (or maybe other way to collaborate)?
For loops:

for(i=#str,1,--) //Subtract by one
-
for(i=#str,1,++) //Add by one
-
for(i=#str,1,anyNumber or -anyNumber)
And GitHub, I will make one, but tomorrow.
H4X0RZ #44
Posted 27 November 2015 - 10:25 PM
There is a (in my opinion) big bug that forces you to use "bad" indenting. Somehow this throws a "no colon found." error

class Main {
  public function Main(args) {
	print(args[1]);
  }
}

but this doesn't

class Main {
public function Main(args) {
  print(args[1]);
}
}

//Edit:
Also it looks like it doesn't like lines without any whitespaces at the beginning too.

class Game {
var t = false;
public function Game(test) {
t = test;
}

public function print() {
print(t);
}
}

class Main {
public function Main(args) {
var game = new Game(args[1]);
game.print();
}
}
This throws an ArrayIndexOutOfBoundsException. Is it possible that my build script is the reason?

if not fs.exists"src" then fs.makeDir"src" end
if not fs.exists"out" then fs.makeDir"out" end
local m = fs.open("out/raw.jac","w")
local function recursive(loc)
  local list = fs.list(loc)
  for k,v in pairs(list) do
    if(v ~= "main.jac") then
	  if(not fs.isDir(fs.combine(loc,v))) then
	    print("adding "..fs.combine(loc,v))
	    local h = fs.open(fs.combine(loc,v),"r")
	    for line in h.readLine do
		  if(line:sub(1,1) == " ") then
		    m.write(line:sub((line:find("%S"))))
		  else
		    m.write(line)
		  end
		  m.write("\n")
	    end
	    m.write("\n")
	    h.close()
	  else
	    recursive(fs.combine(loc,v))
	  end
    end
  end
end
recursive("src")
print("adding src/main.jac")
local h = fs.open("src/main.jac","r")
for line in h.readLine do
  if(line:sub(1,1) == " ") then
    m.write(line:sub((line:find("%S"))))
  else
    m.write(line)
  end
  m.write("\n")
end
m.close()
shell.run("jac -f out/raw.jac -o out/main.lua")
--fs.delete"out/raw.jac"
It basically takes every file inside "src" and puts them into one file which then is compiled with JaC.

Also, it seems like you messed some terms and that stuff up. Extending, for example, doesn't mean adding the class to the environment. When Class2 extends Class1, Class2 will inherit everything (methods and fields) from Class1. Also, a method isn't a namespace/package/whatever. A method "is" a function.

Now, after complaining (sorry for that); here are some ideas:
  • Add interfaces
  • Don't make "var <something>;" evaluate to "<something> = nil" because that's basically like not setting it at all.
  • Maybe static typing?
  • (not sure if that's already possible) function overloading
  • The ability to load not-compiled files at runtime (that would allow you to load plug-ins, or stuff like that, without restarting)
  • Maybe annotations (like in java)?
  • Something like Reflection maybe?
Edited on 27 November 2015 - 10:02 PM
LeDark Lua #45
Posted 28 November 2015 - 11:46 AM
There is a (in my opinion) big bug that forces you to use "bad" indenting. Somehow this throws a "no colon found." error

class Main {
  public function Main(args) {
	print(args[1]);
  }
}

but this doesn't

class Main {
public function Main(args) {
  print(args[1]);
}
}
Fixed!
//Edit:
Also it looks like it doesn't like lines without any whitespaces at the beginning too.
class Game {
var t = false;
public function Game(test) {
t = test;
}

public function print() {
print(t);
}
}

class Main {
public function Main(args) {
var game = new Game(args[1]);
game.print();
}
}
This is a bug with print, print is global so it errors because you call print within itself ex:

function print(...)
   print(...) --VM error
end
Also, it seems like you messed some terms and that stuff up. Extending, for example, doesn't mean adding the class to the environment. When Class2 extends Class1, Class2 will inherit everything (methods and fields) from Class1. Also, a method isn't a namespace/package/whatever. A method "is" a function.
Do you mean I should remove:

class Test extends TestGod {
   public function Test() {
      TestGod.print(); //This should be a normal print?
   }
}
And I will rename methods to packages then.
Konlab #46
Posted 28 November 2015 - 06:26 PM
(Not sure if it's just the tutorial not using it) but:
Are statics possible?
I really like the idea of making a compiler for a more advanced OOP language.
LeDark Lua #47
Posted 28 November 2015 - 06:30 PM
Do you mean in this language? Like You make a language in JaC?
H4X0RZ #48
Posted 28 November 2015 - 07:00 PM
Do you mean I should remove:

class Test extends TestGod {
   public function Test() {
	  TestGod.print(); //This should be a normal print?
   }
}
Umm… Not exactly. (I didn't read the whole compiler (or how a compiled program is structured) so I might be wrong sometimes)

Extending is nice and all, but it works different (atleast that's how it works in Java AFAIK):

class Human {
  var name = "";
  public function Human(n) {
    this.name = n;
  }
  public function sayHi() {
    print("Hi! My name is "..this.name);
  }
}

class ExtendedHuman extends Human {
  var age = 0;

  public function ExtendedHuman(name,age) {
    super(name); //Call the constructor of the class it extends.
    this.age = age; //Set new value not defined by Human.
  }

  public function sayHi(){
    super.sayHi(); //call .sayHi() from parent class on ExtendedHuman object. It HAS to work, because all the fields will be present thanks the inheritance.
    print("I am "..this.age.." years old."); //Add new print exclusively for ExtendedHuman.
  }
}

class Main {
  function Main(args) {
    eh = new ExtendedHuman("Deep Thought",42);
    eh.sayHi();
  }
}
LeDark Lua #49
Posted 28 November 2015 - 07:13 PM
H4X0RZ I was trying to make a simpler language so thats why extending is like that

JaC Updated!

Fixed string declaration with " and '

Better error catching.



GitHub repo: here
LeDark Lua #50
Posted 03 December 2015 - 03:46 PM
Now, after complaining (sorry for that); here are some ideas:
  • Add interfaces
  • Don't make "var <something>;" evaluate to "<something> = nil" because that's basically like not setting it at all.
  • Maybe static typing?
  • (not sure if that's already possible) function overloading
  • The ability to load not-compiled files at runtime (that would allow you to load plug-ins, or stuff like that, without restarting)
  • Maybe annotations (like in java)?
  • Something like Reflection maybe?
After reading this and having my mute away, I can say that I can add:

var num test = 15 || 15.5; //integers, floats, doubles, longs, ...
var string test = "Hello, world!" || 'Hello, world!'; //Strings
var table test = {}; //Tables
var Term term = new Term(); //Classes
Static typing as:

var num test = 15;
var string test = """; //Remove this line?
Ability to laod not compiled files like:

using file.jac; //or using file; | this would check files like: file, file.jac