Revision [21653]
This is an old revision of ValaGenieintro made by CrustyLobster on 2012-05-24 10:13:57.
What is this?
An introduction to using the Genie Programming language under Puppy Linux
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/