[NAME]
ALL.dao.tutorial.basics

[TITLE]
Basics

[DESCRIPTION]

This tutorial will cover some basics of Dao programming. We will start with the 
traditional hello world example.

 0.1   Hello World!  

To simply write "Hello world!" to the screen, one can use,
     
   1  io.write( 'Hello world!' )
     
In this simple example, the built-in io module is used to access the IO functionalities 
of the module. write() is a method provided by the io module to write outputs on to the 
standard output (the screen in this case). In Dao, string can be quoted with a pair of
single quotation marks or with a pair of double quotation marks. Semicolons are optional
at the end of statements.

 0.2   Running Scripts  

There are three ways to run codes in Dao. The most typical way is to create a script file
(e.g. hello_world.dao), and put the codes into this file, and then run dao using this 
file as argument,
     
   1  $$ dao hello_world.dao
     

But if you just want to run the codes once, you can simple run them from command line
using,
     
   1  $$ dao -e "io.write( 'Hello world!' )"
     

For learning Dao, it may be the best to run codes in interactive mode. Invoking dao 
without any argument will start an interactive shell,
     
   1  $$ dao
   2  
   3    Dao Virtual Machine 2.0
   4    Built date: Jun 16 2013
   5    Changeset ID: FOS.a019d384dd7c
   6  
   7    Copyright(C) 2006-2013, Fu Limin
   8    Dao is released under the terms of the Simplified BSD License
   9    Dao Language website: http://www.daovm.net
  10  
  11  (dao)
     


 0.3   Accessing Online Help  

If you have the Dao help properly installed, starting dao in interactive mode will 
automatically load the help files and print out the following information,
     
   1  Module Help is loaded.
   2    Now you may run "help()" to list all the available help entries;
   3    or run "help('help')" for detailed information about the help system.
     
If you are reading this tutorial from a webpage, and want to access it from the
interactive command line, you can simple run,
     
   1  (dao) help( 'dao.tutorial.basics' )
     

Such online helps come in two languages: English and Chinese. Currently the English
version is more complete. To choose the language, one can define an environment variable:
     
   1  DAO_HELP_LANG = EN  # for English;
   2  DAO_HELP_LANG = ZH  # for Chinese;
     
Or simply run Dao with,
     
   1  DAO_HELP_LANG=EN/ZH dao ...
     


 0.4   Commenting Codes  

It is always a good idea to comment your codes. Dao supports both single line comments
and multiple line comments. A single comment starts at a # (not followed by a left curly
bracket {), and ends at the end of the current line. And a multiple line comment (or 
just part of a single line) opens by #{ and closes by #}. For example, 
     
   1  # This is a simple demo:
   2  io.write( "Hello World!" #{ comment inside codes #} );
   3  #{
   4  Here are multi-lines comments.
   5  Here are multi-lines comments.
   6  #}
     


 0.5   Declaring Constant and Variables  

Dao supports the explicit declaration of constants, local variables and global variables.
Constants are declared with keyword const, 
     
   1  const DEFAULT_INDEX = 123
   2  const DEFAULT_NAME  = 'abc'
     
Constants can only be initialized with constant expression. Constants that are declared 
at the top lexical scope are global constants. Global constants can also be declared
inside nested lexical scopes by preceeding the const keyword with global.

Keyword global will declare global variables, 
     
   1  global current_index = 456
   2  global current_name  = 'def'
     

By default, in Dao all variables are implicitly declared as local variables. When a
variable need to be explicitly declared as local, to avoid messing with global variables
or local variables in the upper lexical scopes, one can use keyword var, 
     
   1  var temp_index = 789
   2  var temp_name  = 'ghi'
     

Note: in interactve mode, all variables are automatically declared as global variables.