doc • release • 2.99.4

Gambas 3 RC4

What's new

This release is the fourth release candidate of Gambas 3.

More that 60 bugs were fixed, and the following new features were added:

  • Better support for LXDE.

  • A trick that allows the interpreter to watch existing file descriptors obtained through external function calls.

  • Many interpreter optimizations, especially in the String class.

  • Support for connections to local sockets in the gb.db.mysql component.

  • Clean-up of the following components:, gb.pdf, gb.v4l.

  • Catalan, spanish and french translations were updated.

As usual, please report any compilation and packaging problem on the mailing-list!

Thanks in advance.


* BUG: When hitting F11 to show the console, the console parent tab is now
  automatically made visible.
* BUG: When converting a Gambas 2 project, the IDE now checks that the
  project is not already opened somewhere else, and does not leave the
  backup project locked if the conversion has succeeded.
* BUG: Fix desktop detection in the system information dialog.
* BUG: Recent projects are correctly filtered now the second time the 'open
  project dialog' is opened.
* BUG: Ignore ValueBox.MaxLength property when converting a Gambas 2 form.
* BUG: Now just print a warning when creating the project directory icon is
* BUG: When converting a Gambas 2 project, do not try to convert symbolic
* BUG: Do not use Editor.ShowCursorPosition flag anymore.
* BUG: In the menu editor, pasting menus works correctly now.
* BUG: Selecting the movie of a MovieBox control only allows to select a
  path located in the project.
* BUG: Selecting a virtual class in the help browser tree now correctly
  shows its documentation page.
* BUG: TRY is taken into account now when converting a Gambas 2 OPEN
* BUG: Don't crash if a library cannot be found.
* NEW: Catalan translation updated.
* NEW: Update Catalan tips.
* NEW: When inserting an existing module, class, form... the file view
  automatically show hidden files so that the ".src" directory inside
  Gambas projects is always visible.
* NEW: Languages are sorted in the help browser's language menu.
* NEW: The help browser now shows an animation while loading a page.
* NEW: Add support for LXDE terminal in option dialog.
* NEW: Display a big message in the library tab of the project property
  dialog to tell that library must be stored in the same directory as the
  project using them.
* NEW: Spanish translation updated.
* OPT: The contents of a project item is loaded from disk only if the
  project item is visible.

* BUG: Fix the english TODO page showing not-documented symbols.
* BUG: Symbol syntax for array writing has been fixed.
* NEW: Do not use the cache anymore.
* NEW: Updated Catalan translation.

* BUG: Fix some form layout in the Database example.
* NEW: Updated WebBrowser Catalan translation.
* NEW: Updated TreeView Catalan translation.
* NEW: Update example project titles.
* NEW: AnalogWatch has been rewritten with the Paint class.
* NEW: Apply the gb.pdf changes to the PDFViewer example.
* NEW: Fix video examples according to the last changes in gb.v4l.

* BUG: Fix a type transitivity bug in Trim().
* BUG: DateAdd() does not raise an overflow error anymore when used on a
  time value.
* BUG: Really fix the way Trim() handle null strings. Now there is no
  memory leaks anymore.
* BUG: Fix a crash in stack backtrace management.
* BUG: Fix Byte[].FromString() method.
* BUG: Remove the deprecated Object.LastEventName property.
* BUG: Now incrementing or decrementing a boolean raises an error.
* BUG: Fix the declaration of SizeOf() syntax.
* BUG: When opening an existing file descriptor, correctly check the mode
* BUG: Fix String.Pos(), and String.InStr() with a third argument.
* BUG: Arrays of classes exported from a component or a library are now
  automatically exported too.
* NEW: New syntax for GB.AddString() and GB.ExtendString() interpreter API.
  Do not pass the string by reference anymore.
* NEW: GB.AddChar() is a new API for adding just a char to a string.
* NEW: Split System and Application class implementation in two different
  source files.
* NEW: A trick to watch existing file descriptors: opening ".XX" in direct
  mode, where "XX" is the file descritor value.
* NEW: When opening an existing file descriptor, check that it is opened
  with a compatible mode. Otherwise raise an "Access forbidden" error.
* NEW: When opening an existing file descriptor, check its validity
* NEW: Param.All is a new property that returns all extra arguments as an
* OPT: Optimize some string functions by not using arguments passed by
* OPT: Integrate the "=" operator function into the main execution loop to
  save one function call.
* OPT: Optimize string comparison functions on x86 and x64_64 architectures
  by comparing eight bytes in one shot.
* OPT: Don't use glibc memcmp() to compare strings. My own routine is a
  little faster according to valgrind.
* OPT: The UTF-8 String class routines Left(), Mid() and Right() have been
  optimized. The positions of the first 256 characters of the last string
  processed by the String class are cached.
* OPT: Some native methods can be called like any other native subroutines.
  But that can be used only inside the interpreter, not in a component.
* OPT: The '&' operator is faster now when it takes two arguments only (the
  most frequent case).
* OPT: A little optimization in string allocation.
* OPT: Optimize returning from a function.
* OPT: A little optimization in conditonal jump.
* OPT: Optimize case insensitive string comparison. Hash table code is
  consequently a bit faster.
* OPT: Optimize the inequality comparison operators by putting them into
  the gbx_exec_loop.c source file.
* OPT: Internal conversions between unicode and utf-8 have been optimized.
* OPT: String.UCase(), String.LCase() and String.Chr() have been optimized.
* OPT: Some optimizations in date formatting.
* OPT: Now() has been optimized when run multiple times during the same
* OPT: Some little optimization in natural comparison routine.

* BUG: Fix compilation of function calls having more than 32 ByRef

* BUG: DataBrowser is correctly updated now when its DataSource changes.
* NEW: Updated Catalan translation.

* NEW: If the connection host starts with a slash, then we supposed that we
  are connecting to localhost, and that the host is actually the path of
  the socket to use.

* BUG: Fix ignored system call return values.

* BUG: Fix ignored system call return values.

* BUG: Fix ignored system call return values.
* BUG: Fix some error messages.

* BUG: Eval() correctly returns a value again.

* BUG: FileView now ignores unreadable directories.
* BUG: FileView works correctly again.
* BUG: Fix the management of the ShowHidden property in FileView.
* BUG: Fix how FileView settings are saved and restored.
* BUG: Fix InputBox layout.
* NEW: DirView.Settings is a new property that allows the Settings class to
  automatically save or restore settings through its Read and Write
* NEW: Add a Click and a Change event to the DateBox control. The Click
  event is raised when the popup is closed.

* BUG: Workspace with bottom orientation correctly shows its tabbar again.
* BUG: Fix the shortcut editor dialog.
* NEW: Action.ConfigureToolbar has been hidden as Action._ConfigureToolbar.

* BUG: Fix initial window position.
* BUG: Do not crash if a null key is used for a stock picture. Just return
  a null reference.
* NEW: Action.Register has been hidden as Action._Register.
* NEW: Setting the current GridView row to a valid value now automatically
  set the current column to zero if there is no current column.

* NEW: Remove the Net.MaxPathLength constant.

* BUG: Disable error code constants for unsupported curl features.
* BUG: Disable pointless constants inherited from Net class.
* BUG: Add missing error opcodes in old curl libraries.
* BUG: Really fix compilation on old versions of libcurl.
* NEW: Update CURL error codes and add some missing constants.
* NEW: Curl.ErrorText is a new property that returns the error string
  associated with the error code returned by the curl library. If
  Curl.Status is positive, then a null string is returned.
* NEW: Disable other error code constants.
* NEW: A lot of code clean-up.

* BUG: Fix the retrieveing of index titles.
* BUG: Some fixes in classes description.
* BUG: Remove a debugging message and fix the return value of the Find()
* NEW: Add a PdfRect class systematically used for returning the
  coordinates of page elements or search results.

* BUG: GridView: Fix how the Change event is raised in single selection
* BUG: GridView: Fix automatic column resizing when the Resizable property
  is TRUE.
* BUG: Fix TextArea.Foreground property.
* NEW: Action.Register has been hidden as Action._Register.
* NEW: Setting the current GridView row to a valid value now automatically
  set the current column to zero if there is no current column.

* BUG: Remove unused Editor.ShowWord() method and two unused flag
* BUG: Fix a crash in folding procedure, by strictly folding between
  procedure limits, and by not trying to be clever with comments.
* NEW: Change the keyboard shortcuts for moving between lines having the
  same indentation. Now they are CTRL+ALT+UP and CTRL+ALT+DOWN.

* NEW: Updated Catalan translation.

* BUG: Disable Cursor handling, as it is buggy and incomplete. Only default
  cursor is available.

* BUG: Settings.ReadWindow() and Settings.WriteWindow() are now private.
* NEW: Remove the useless Settings.Array() method.

* BUG: Remove some unused local variables.
* BUG: Fix all Contrast, Hue, Bright, Color and Whiteness properties in
* BUG: Remove the VideoDevice.Features property.

* BUG: WebPage class is not exported anymore.
* BUG: Support for posted requests whose charset is specified in the
  "Content-Type" header.


To compile Gambas, you must install the following libraries on your system :


Compilation gcc g++ automake autoconf libtool > 2.0
Interpreter libffi
gb.cairo cairo
gb.gtk All GTK+ libraries >= 2.10 cairo gdk-pixbuf
gb.image.imlib imlib
gb.opengl gb.opengl.glsl,
gb.qt4 gb.qt4.ext gb.qt4.opengl gb.qt4.webkit All qt 4 libraries >= Qt 4.5
gb.v4l,,Video4Linux >= 2.0
gb.xml libxml-2.0
gb.xml.xslt libxslt

And do not forget to install all related development packages!

Try to always use a recent version of these libraries.

In order to compile the development environment, you have to compile the following components:

You must have the right to write to /tmp, otherwise Gambas will not work.

This package was done with the following versions of GNU tools on Ubuntu 10.10:

  • automake 1.11.1

  • autoconf 2.67

  • libtool 2.2.6b

Compilation & Installation

Check installation

First, check that you installed all the needed libraries, and especially all the development packages.

Do not forget to look at the Compilation & Installation page. Maybe you will find important information specific to your distribution.

Source package configuration

When you are sure that everything is installed, type the following magic sentences in a shell.

'$' represents your shell prompt, and '...' are the messages printed during the configuration and compilation.

First, type that to create the configuration scripts.

$ ./reconf-all

Then type that to analyze the current system and configure the package:

$ ./configure -C

If a library or a development package is missing, then you will be warned that some components are disabled.

There are more 'configure' specific explanations in the INSTALL file located in the top-level source directory. I invite you to read them.


If everything is configured without error, then run this command to compile the program:

$ make


If everything compiles without error, then enter this command to install everything:

You must be root to install Gambas on your system.

$ su -c "make install"
Password: <Type the root password here>


$ sudo make install
Password: <Type your password here>


If you did several successive compilations, after having updated the source from the subversion repository for example, and if something fails during all this process, you can try to "reconfigure" the configuration scripts by typing the following command:

$ ./reconf-all

Then you can run ./configure -C again

If it does not work, I need to know what happened exactly. To do so, type the following command :

$ ( ./configure -C; make; make install ) > output.txt 2>&1

And send me the file "output.txt" by mail, with every other detail about your computer and your distribution you find useful.

Running Gambas

If everything was fine, type "gambas3" to run the development environment.

Enjoy it !

See also