Vala Genie Intro
What is this?
An introduction to using the Genie Programming language under Puppy Linux
Main features:
- A true compiler
- A "Hello world" console executable is 2.9KB, a GTK GUI "Hello world", with a OK button thrown in, is 5.8KB
- Easy Python-like language
- Easy GTK programming
- Link directly with the system shared libraries
- No huge binding libraries, nothing required at runtime. No bloat!
- Library support
- Compile-time bindings available for most shared libraries.
- Plain-C intermediate code
- Only needs Gnu C compiler -- so can be compiled for any operating system and CPU.
- Object oriented
- Objects are not "bolted on" as for some languages that started life as procedural-only. But Genie code can be non-object-oriented if you wish.
- Programs written in Genie should have have similar performance and resource usage to those written directly in Vala and C
- Genie has none of the bloat and overhead that comes with many other high level languages which utilize a VM (Eg Python, Mono, et al)
- Classes in Genie are actually gobjects so Genie can be used for creating platform code like widgets and libraries where gobjects are required for binding to other languages.
- The generic nature of Glib means that you can use Vala/Genie for any kind of programing, but Glib/Gobject does make it particularly easy for GTK coding.
What is the difference between Vala and Genie?
Vala is more like C/Java, Genie like Basic.
Who Created Genie?
Jamie McCracken created Genie,
Jürg Billeter and Raffaele Sandrini are the main developers of Vala.
When were Vala and Genie created?
Vala came first in mid-2006, with a C#-like syntax.
Genie followed in mid-2008 influenced in part by Python and Delphi.
These languages use the same compiler and support all the same features
How do I use Genie in Puppy?
Check here
Is Genie a good language to start programming with?
Being like Python it forces an easy to use spaced format with a simple modern syntax. It is more consistent and flexible than BASIC and logo or other languages recommended for beginners. However be aware: Documentation in English is available, but not redundant and not always beginner-friendly. Documentation in other languages, is almost inexistant.
Is it suitable for professionals?
Code is compiled to C, making it fast and efficient. Linux uses C as its main language and the Gnome project is developing Vala
Basic Concepts
Files
Genie code must be written in files with the *.gs extensions. Vala codes must be written in files with the .vala extension.
When you want to compile Genie code, you give the compiler a list of the files required, and Genie/Vala compiler will work out how they fit together.
Syntax
Genie's syntax mixes features of several high level languages including Python, Boo, Delphi and D
Genie is case sensitive as a result of it being compiled into c code - so be careful when mixing case in your code.
An identifier is defined by its name and its type, e.g. i:int meaning an integer called i. In the case of value types this also creates an object of the given type. For reference types these just defines a new reference that doesn't initially point to anything.
Genie has a mechanism called Type Inference, whereby a local variable may be defined using var instead of giving a type, so long as it is unambiguous what type is meant.
Genie support is now in Gtksourceview:
Where can I find out about String handling in Genie?
http://puppylinux.com/blog/?viewDetailed=00609
Genie strings page:
http://puppylinux.com/blog/?viewDetailed=00608
Just to remind to install the gtksourcefile pet as well as the Valide one
Mark has kindly prepared
http://dotpups.de/puppy4/dotpups/Programming/Vala/
Especially Glib is important.
For example the string functions in Genie are the GLib functions:
http://valadoc.org/?pkg=glib-2.0&element=string
A bit difficult to find when you are new, but very essential!
Where is valide code saved?
cd /root/valide/Genie
./Genie
Or:
/root/valide/Genie/Genie
How do you compile code?
valac -C v5.gs
valac -C v4.vala
This just creates v5.c and v5.h.
Can the code be used in other Linux distributions?
Yes
Is Vala available for Windows?
Yes
http://dotpups.de/puppy4/dotpups/Programming/Vala/Vala-for-Windows/
Where can I find out about Valide?
http://valaide.blogspot.com/2009/03/genie-support.html
Code example Vala
class Demo.HelloWorld : GLib.Object { public static int main(string[] args) { stdout.printf("Hello, World\n"); return 0; } }
random method
from GLib.
http://valadoc.org/?pkg=glib-2.0&element=GLib.Random
Example:
Code:
// return a random value from 1 to 9 a:int a = GLib.Random.int_range(1,10) print("%d" ,
Infinite Monkey theorem
// Infinite Monkey Theorem // Lobster and Shadow, March 2009 LGPL // use from command line // imt ["search text"] // generates random characters and searches for a given pattern eg 'in the beginning was the world' // warning strings longer than "in the" may take minutes or hours to find // program demonstrates: // basic functions // passing parameters in command line // random character generation // constant [indent=3] def getRandomNumber(RangeFrom:int, RangeTo:int) : int /* function to create random number between range */ return GLib.Random.int_range(RangeFrom,RangeTo) def getRandomChar() : char /* function to generate ascii codes from a-z and space (32) */ num:int = getRandomNumber(0,27) if num == 0 num = 32 else num = num + 96 return (char) num def addRandomChar(myText:string) : string /* function add text from command line */ var retText = new StringBuilder retText.append(myText) retText.append_c(getRandomChar()) return retText.str init USAGE:string = "Usage:\n\t ./imt \"some text for monkeys to generate\" " theText:string = args[1] if theText == null theText = "" theText = theText.down() /* change any text input to lower case */ myText:string = "" if theText != "" do do myText = addRandomChar(myText) while theText.len() != myText.len() print("%s" , myText) if theText != myText stdout.printf("\n") myText = "" while theText != myText stdout.printf("\n") else print("%s" , USAGE) /* this appears if program run without text */ a)
Links
http://live.gnome.org/Genie official genie site
http://puppylinux.com/genie/ Barry's site
http://valadoc.org/?
http://www.vala-project.org/doc/vala/
http://live.gnome.org/Vala
http://live.gnome.org/Vala/Tutorial
http://library.gnome.org/devel/glib/