- Dynamic and strong typing
- Everything is an (expando) object
- Prototypal inheritance
- First-class functions
- CLR interoperability
- Cross-platform (Windows, OSX, Linux)
func fib( n ) {
n <= 2 ? n: fib( n - 1 ) + fib( n - 2 )
}
print( "n: " );
var n = readln();
println( fib( n.to_number() ) );
read();
func memoize(f) {
var cache = {
member_missing: func() { null }
};
return func recur(n) {
cache[n] || (cache[n] = f(recur, n));
};
}
var m_fib = memoize(func(recur, n) {
n < 2 ? 1 : recur(n-1) + recur(n-2);
});
Bike.Function.curry = func( *args ) {
if ( args == null || args.size() == 0 ) return this;
var me = this;
return func( *more ) {
if ( more != null )
args.add_all( more );
me.call( this, *args );
};
};
func add( a, b ) { a + b }
var addTo2 = add.curry( 2 );
println( addTo2( 3 ) );
obj = {
member_missing: func(name) {
if (name == "add") {
return func(a, b) { a + b };
}
}
};
println(obj.add(1, 2));
load 'System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a';
load 'System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089';
var btn = System.Windows.Forms.Button();
btn.Text = "Click count: 0";
btn.Size = System.Drawing.Size( 100, 30 );
var count = 0;
btn.Click += func() {
this.Text = "Click count: {0}".with( ++count );
};
var form = System.Windows.Forms.Form();
form.Text = "My Dialog Box";
form.Controls.Add( btn );
form.ShowDialog();
load 'gtk-sharp, Version=2.12.0.0, Culture=neutral, PublicKeyToken=35e10195dab3c99f';
Gtk.Application.Init();
var lblHello = Gtk.Label();
var btnHello = Gtk.Button("Hello");
var count = 0;
btnHello.Clicked += func() {
lblHello.Text = "Hello World ({0} {1})".with(
++count, "time" + (count == 1 ? "" : "s"));
};
var btnQuit = Gtk.Button("Quit");
btnQuit.Clicked += func() {
Gtk.Application.Quit();
};
var box = Gtk.VBox(false, 10);
box.PackStart(btnHello, true, true, 0);
box.PackStart(lblHello, true, true, 0);
box.PackStart(btnQuit, true, true, 0);
var win = Gtk.Window("Hello World");
win.DeleteEvent += func() {
Gtk.Application.Quit();
};
win.Add(box);
win.Resize(300, 200);
win.ShowAll();
Gtk.Application.Run();
I don’t update the Mac OSX and Windows installers frequently, except for major releases. So to access latest features, you should follow these steps:
- Fork or download code
- Build (with
VS.NET
orMonoDevelop
, if you’re on Mac OSX) - If you use Windows, run
[code_folder]/src/Bike.Console/bin/Debug/bike.exe" -h="[code_folder]" bike_file.bk
- If you use Mac OSX, run
/usr/bin/mono "[code_folder]/src/Bike.Console/bin/Debug/bike.exe" -h="[code_folder]" bike_file.bk
Notes:
- You should configure NotePad++, TextMate or whatever code editor to runbike
based on the above commands
- NotePad++ users can use this file to enable syntax highlighting (View > User-Defined Dialog > Import)
- I will upload a TextMate bundle later
- Prerequisite: Mono 2.10.2 (not tested yet with earlier versions)
- Download
bike.pkg
ininstallers/osx
- Run
bike.pkg
to install Bike - Open the Terminal and type the followings
cat > hello.bk println('Hello World'); Ctrl-D bike.sh hello.bk
Notes:
- If you didn’t install Mono or Bike to their default folders, modify/usr/local/bin/bike.sh
to use correct paths
- If you want to double-click to execute a Bike file inFinder
, associate the.bk
extension toApplications/bike/bin/bike.app
- Prerequisite: .NET 4.0
- Download
bike.exe
ininstallers/win
- Run
bike.exe
to extract and install Bike - Create a file named
hello.bk
with this contentprintln('Hello World');
- In the cmd, type
bike hello.bk
to execute it. Alternatively, you can double-click a Bike file in Windows Explorer.
The setup program also makes the following changes to your system:
-BIKE_HOME
env variable pointing to the installation folder
- Append[installation_folder]bin/
toPATH
env variable
- Associate.bk
extension withbike.exe
In OSX, Bike is installed to Applications/bike
. In Windows, Bike is installed to Program Files/bike
. The structure of the Bike folder is as follows:
bin
: binaries and dependencies andbike.app
(OSX only): the app you can used to associate with.bk
files so that they are executable via Finderbike.action
(OSX only): theAutomator
action code used to createbike.app
, feel free to customizebike.sh
(OSX only): the shell script used to run Bike (the same file also exists in/usr/local/bin
)
lib
src
core
: Library source codetest
: Test for librarytools
: Bike doc and unit tools
doc
: API documentation
samples
: Sample programs, most notable isspec.bk
resources
(Windows only)np.xml
: Syntax highlighting file for NotePad++ (in NotePad++, select View > User-Defined Dialog > Import)
LICENSE
- Want to learn more about Bike? Take a look at sample code in samples. The file
spec.bk
should give you a good overview. - Want to contribute? There are many things you can do to help:
- Implement features (see Issues tab)
- Suggest new features
- Report or fix bugs
- Document code or features
- Add unit test cases
- Email: buunguyen@gmail.com
- Blog: www.buunguyen.net
- Twitter: @buunguyen