Chris Oliver has been working on
F3 ("form follows function"), a new scripting language for the java platform. Here is a
detailed description of F3's features.
It is already in heavy development but not yet released, and there are plugins for both Netbeans and Eclipse. Some of its functionality and the examples Chris has shared indicate it could be an alternative to Flash and processing.
Summary of some of its features:
- It is case-sensitive and uses curly braces, so it is very java-like.
- It is statically typed with type inference (like boo). It uses "var" for type inferenced declarations (var x = 3;), like in groovy or C# 3.0.
- It supports a JSON-like declarative syntax for building GUIs (as opposed to XML or YAML).
- Has a ".." range literal: var result = sum([1,3..100]);
- Supports SQL notation for querying arrays:
var squares = select n*n from n in [1..100];
//another example:
var titleTracks =
select indexof track + 1 from album in albums,
track in album.tracks
where track == album.title; // yields [1,4]
- You can also embed the JSON-like syntax in code (or vice-versa):
var chris = Person {
name: "Chris"
children:
[Person {
name: "Dee"
},
Person {
name: "Candice"
}]
};
- Supports expressions inside strings:
var answer = true;
var s = "The answer is {if answer then "Yes" else "No"}"; // s = 'The answer is Yes'
- Supports "do" or "do later" for code that either allows background events to occur or runs in a background thread itself:
import java.lang.System;
var saying1 = "Hello World!";
var saying2 = "Goodbye Cruel World!";
do later {
System.out.println(saying1);
}
System.out.println(saying2);
- It may be using a MultiVM technique where different applications run in the same JVM instance, saving memory and improving start-up time.
- All methods and attributes of a class have to be declared first (like in C and C++, yay), and then the implementations are written outside the class body (like in nice).
- Instead of constructors and setters, F3 uses "triggers":
import java.lang.System;
class X {
attribute nums: Number*;
}
trigger on new X {
insert [3,4] into this.nums;
}
var x = new X();
System.out.println(x.nums == [3,4]); // prints true
Recent comments
27 weeks 1 day ago
27 weeks 1 day ago
27 weeks 1 day ago
49 weeks 3 days ago
1 year 1 week ago
1 year 3 weeks ago
1 year 3 weeks ago
1 year 5 weeks ago
1 year 10 weeks ago
1 year 10 weeks ago