doc • release • 3.3.0

Gambas 3.3.0

What's new

This new release fixes more than 250 bugs and adds more than 250 new features.

Here are the main changes... Enjoy Gambas!

Development environment

  • A far more reliable packager.

  • Automatic local variable declaration.

  • TODO/FIXME/NOTE comments listing.

  • Bookmarks in text and code editor.

Interpreter & compiler

  • Support for complex numbers based on a new gb.complex component.

  • Arithmetic operators now can be act on number classes like Complex, Polynomial, Vector and Matrix.

  • Background tasks.

  • UTF-8 strings optimizations.

  • Compilation warnings on unused variables, unused functions and overridden symbols.

  • New WebPage syntaxes.


  • is a new component that adds new container datatypes to Gambas.

  • Lot of fixes in the gb.db.form component.

  • Support for LXDE and Mate desktop in the gb.desktop component.

  • Stock icons now can use any installed icon theme, and has support for the LXDE desktop.

  • Support for tablets and pens in GUI components.

  • The gb.gsl component now implements polynomials, matrices, vectors and complex numbers completely.

  • gb.mime is a new component that allows to encode and decode MIME messages.

  • is a new component that implements a POP3 client.


* BUG: When a top-level source directory actually has several components,
  compile the sub-components *after* the main components. This is
  especially important with gb.xml and gb.xml.rpc.
* BUG: Fix configuration issue for gb.qt.ext
* BUG: Fix the component template script.
* BUG: Do not distribute '.action' directories in source packages.
* NEW: Add support for the MacPorts distribution.
* NEW: Add a search path for OS X.
* NEW: Enable silent compilation.
* NEW: Standardize the help text of all command-line tools.
* NEW: Add component.

* BUG: Do not apply the Ignore property in form editor.
* BUG: In form editor and form hierarchy window, correctly ignore controls
  that are edition helpers (handles, ghost frame...).
* BUG: Fix rectangular selection in form editor.
* BUG: Correctly ignore ghost frame and arrangement icons when saving a
* BUG: Ghost frame and arrangement icons are now correctly updated when the
  mouse leaves a form editor.
* BUG: Do not crash when a component required by a library is missing.
* BUG: Do not display spurious 'missing component' messages in the project
  property dialog.
* BUG: Array of classes exported by a component are now correctly handled
  by the component interface analyzer.
* BUG: In the open project dialog, the project icon on the right pane is
  correctly refreshed now.
* BUG: Fix automatic completion of project classes that reimplements
  another class.
* BUG: Fix a selection error when removing a container while keeping its
* BUG: Fix symbol scan of project classes with no parent.
* BUG: Fix some spurious errors when refreshing classes and symbols
* BUG: Fix a circular reference.
* BUG: Fix form editor selection frame when scrolling.
* BUG: Fix crash when hitting CTRL+A in form editor.
* BUG: Fix some error messages and french translations.
* BUG: Creating a component package now works correctly when the component
  project has control icons.
* BUG: Fix insertion of predefined environment variables in the project
  property dialog.
* BUG: If a library or a component exports a form, then the special
  properties ('_IsForm' and '_HiddenControls') are not taken into account.
* BUG: Creating a directory in the project treeview should not segfault
* BUG: Moving a source file now correctly refreshes the project treeview.
* BUG: Project treeview popup menu now is correctly filled on directories.
* BUG: Using drag & drop on the project treeview now correctly initializes
  folder contents.
* BUG: Do not display a thumbnail for images too large or too high.
* BUG: No margin for the output console.
* BUG: Fix a possible crash in form editor arrangement icons managemnt.
* BUG: Fix profiling of Eval() calls.
* BUG: Packager: library executables are installed with the '.gambas'
  extension, but not the standard executables, where the extension is
* BUG: Packager: ArchLinux packager now compiles the project correctly.
* BUG: The code pretty printer now preserves breakpoints and bookmarks.
* BUG: Bookmarks do not prevent project conversion anymore.
* BUG: Ubuntu and Debian packager now create a correct desktop file.
* BUG: Take the Translatable virtual property into account when saving a
  MultiContainer control.
* BUG: Signature of methods with a variable number of arguments are
  correctly generated now.
* BUG: Moving, renaming or deleting a source file now should correctly
  refresh the search list, the breakpoint list and the task list.
* BUG: Fix all detected warnings.
* BUG: Function signatures now support the new syntax that allows to put
  braces around arguments to let the compiler ignore them.
* BUG: Renaming a control now should only rename accurate symbols in source
* BUG: Don't crash when computing the size of a project item.
* BUG: Support for the "Unfinished" string in component description file.
* BUG: Be more clever when searching the gambas IDE executable to launch it
  for opening a project in another window.
* BUG: Save the ChangeLog file before creating the package.
* BUG: Fix binary file detection that made file browsing sometimes ignore
  some text files.
* BUG: Project 'Save as' now preserves symbolic links.
* BUG: When saving a project with another name, the ExecPath and SourcePath
  options of the target project are reset, and the target project is
  cleaned up.
* BUG: Indent & unindent buttons now work in text editors.
* BUG: Opening a project in another window should work in all cases now.
* BUG: Don't try to refresh the search list if we are closing the project.
* BUG: Fix inheritance management in projects that are the Gambas part of
  an existed component, or a component entirely written in Gambas.
* NEW: Draw a ghost frame around the current hovered control in the form
* NEW: Some redesign in the way ghost frame, red containers frame and
  arrangement icons are drawn.
* NEW: Allow to save and open a profile file.
* NEW: Display the signal description when the interpreter has crashed.
* NEW: New gb.complex component.
* NEW: Hitting ENTER in the project filter box opens the current selected
* NEW: Using arrows keys in the project filter box now moves the project
  tree cursor.
* NEW: CTRL+L now sets the focus back to the project filter box.
* NEW: Hitting ESC in the project filter box now resets the filter.
* NEW: Add support for gb.gsl component in the project creation dialog.
* NEW: PageUp and PageDown keys now work as expected in the project filter
* NEW: When a library is added to project dependencies, the other libraries
  it depends on are added too recursively. And a library cannot be removed
  if another one depends on it.
* NEW: Highlight KML files with HTML highlighting.
* NEW: Each comment anywhere in the source code beginning with 'TODO:',
  'FIXME:', or 'NOTE:' is automatically listed in a new tab named 'Tasks'
  in the bottom debugging panel.
* NEW: Hide the search list tab when it is not useful.
* NEW: Controls having translatable properties (like 'Text') now get a new
  virtual "Translate" property. If this property is FALSE, then the
  translatable properties will not be translated.
* NEW: New tool menu entry that sends a source archive of the projet by
  e-mail. It is based on the Desktop.SendMail() method.
* NEW: Unchecking a component in the project property dialog now shows a
  message box that allows to automatically uncheck all other components
  that depend on it. It does not work with libraries. You must uncheck them
  by hand.
* NEW: Translate all parts of error messages.
* NEW: Spanish translation updated.
* NEW: An option for hiding editor folding symbols.
* NEW: Make the packager wizard dialog smaller for small screens.
* NEW: Automatic local variable declaration.
* NEW: Automatic local variable declaration is disabled by default.
* NEW: Support for bookmarks.
* NEW: When opening the startup class for the first time, go directly to
  the Main function.
* NEW: Try to avoid Application.Busy flickering in some dialogs.
* NEW: Display the number of matches after a project browse.
* NEW: New default project icon.
* NEW: The welcome dialog box now has a filter for examples.
* NEW: Remove the logo on the welcome screen, so that the dialog can be
  smaller for small screens.
* NEW: When editing a WebPage, hitting ENTER or RETURN may automatically
  insert a closing "%>" if the cursor is inside a non-closed "<%". This
  prevents unwanted syntax highlighting of HTML with Gambas syntax.
* NEW: Use a GridView instead of a ListContainer to display components in
  the project property dialog.
* NEW: Some little icons in the project property component tab show the
  state of each component (stable, not finished, unstable).
* NEW: The help comments are now interpreted with a new "Gambas markup
  syntax" inspired from markdown syntax. People that have written comments
  in the old syntax will cry...
* NEW: Support for compiler warnings.
* NEW: A new option for not restoring files when loading a project.
* NEW: Pressing SHIFT with the RETURN key prevents automatic variable
* NEW: Add a filter to the example tab of the open project dialog.
* NEW: "Open with" menu now is based on the *.desktop files of applications
  that are installed on the system.
* NEW: Display the project description in project items now.
* NEW: Display a PDF icon for PDF files.
* NEW: Use Terminus as default fixed font if it is installed on the system.
* NEW: Modify the behaviour of the "Replace" command. Now the text is
  searched only if it has not been just replaced.
* NEW: Remove the "Alternate" theme color.
* NEW: Hide error message if the debugger is stopped.
* NEW: Add '-h', '-v' and '-L' command-line options.
* NEW: In the database connection editor, make the table data browser read-
  only by default, and add a button to toggle the editable state.
* OPT: New optimizations in profile file size.
* OPT: Project libraries analyze results are cached now.
* OPT: Browsing the project is faster now.
* OPT: Delay the welcome dialog project list layouting as much as possible.

* BUG: Fix scrolling frames on Chrome.

* BUG: Don't use JIT compiler in NeHeTutorial example #19, it crashes.
  OpenGL LLVM 3.0 and Gambas LLVM 3.1 in the same process is not welcome!
* BUG: Fix HighlightEditor example.
* NEW: New Tablet event inspired by a project made by Ricardo Díaz Martín.
* NEW: Spanish translation updated.
* NEW: Descriptions of some examples.
* OPT: Update the TreeView example so that it is easier to translate.

* BUG: Reading an unknown property does not crash anymore if _unknown is
  defined but not _property.
* BUG: Raise the Kill event of a Process after having closed its I/O
* BUG: Allows the _unknown method to be static.
* BUG: Now the _property special method can be static even if _unknown is
  dynamic. Anyway, if _unknown is static then all unknown properties and
  methods must be static, and if _unknown is dynamic, they all must be
* BUG: Correctly read unknown properties.
* BUG: Do not leak memory if the _unknown method raised an error.
* BUG: Fix exception handling for JIT functions.
* BUG: Automatic array conversion now works with not yet loaded array
* BUG: Fix compilation on 32 bits platforms.
* BUG: Make the interpreter compile when FFI has been disabled.
* BUG: Fix conversion from pointer to structure.
* BUG: Env[...] does not return a constant string anymore. Anyone can
  change the environment in the background!
* BUG: Fix error handling when freeing objects.
* BUG: Fix Error.Propagate().
* BUG: Do not try to handle signals if there is no more signal handlers.
* BUG: Fix compilation on Mac OS X 10.8
* BUG: Use MAP_ANON instead of MAP_ANONYMOUS. No need to make the
  distinction between Linux and *BSD anymore!
* BUG: The Gosub stack pointer is now correctly reset when a error has been
  intercepted by the Catch instruction.
* BUG: The GB.GetFunction() API now correctly returns static functions.
* BUG: Fix the GB.ReturnConvVariant() API so that it does not free the
  return value incorrectly.
* BUG: Fix Choose() when the choice value is equal to the number of
  possible results plus one.
* BUG: Fix how the event raising routine handle exceptions.
* BUG: Process.Kill does not try to wait for the process completion, and
  return immediately.
* BUG: Fix a typo in '^' operator implementation that prevented its second
  argument to be a Variant.
* BUG: Fix possible recursion problems while freeing signal handlers.
* BUG: The output of a process is sometimes woke up ready to read whereas
  there is nothing to read on it. Close the output immediately instead of
  calling the callback again and again.
* BUG: Try to handle correctly errors raised during the Kill event of a
  background task. It does not work yet. :-(
* BUG: Handle errors occuring while waiting for a process correctly now.
* BUG: Disable the component specific event loop when starting a task. No
  way that any GUI works in a background task now, but I can't disable it
* BUG: Fix the enumeration API. GB.ListEnum() has been replaced by
  GB.BeginEnum() and GB.EndEnum(), that save the state of the internal
  current enumeration.
* BUG: Fix error handler calls.
* BUG: Fix Classes enumeration.
* BUG: The debugger won't crash anymore when trying to continue after an
  error has been raised inside a component.
* NEW: Static unknown properties can be used in a dynamic context now.
* NEW: "_operator" is a new interface that allows any native class to be
  used with most of arithmetic operators: +, -, *, /, Abs, =, <> at the
* NEW: The "_convert" interface now allows a class to be converted to any
  datatype, not just other classes.
* NEW: Str() and Print uses the "_convert" interface to print a localized
  string conversion of any object.
* NEW: The _convert interface now must handle conversions from any
* NEW: When converting an instance of A to the class B, try the conversion
  interface of A first. If A has no conversion interface, or if it cannot
  handle the B class, then try the conversion interface of B if any.
* NEW: Support for imaginary number syntax. For example, using "3i" will
  automatically load the gb.gsl component, create the corresponding complex
  number and return it.
* NEW: Temporary hack in the GB.New() API so that we can pass a number of
  arguments in some cases.
* NEW: Add a new API to create an object without calling the constructors.
* NEW: Arithmetic operators now can be applied on two objects with
  different classes. One at least must implement the '_operator' interface.
* NEW: Each class that implements the '_operator' interface has now an
  automatic priority that follows the load order. When a binary operator
  has two objects that implement two different '_operator' interface, the
  one having the highest priority is used.
* NEW: Add a GB.FreeStringLater() API to allow components to create a new
  string with GB.NewString(), and let the interpreter frees it later.
* NEW: Support for floating-point constants.
* NEW: Support for new profile file format.
* NEW: You can convert a pointer to a static structure now. It is useful
  when an extern function has a 'struct XXX **' argument.
* NEW: Args and Env classes are now shortcuts for Application.Args and
  Application.Env properties.
* NEW: Add an explicit error message when trying to override a class that
  has already been used as a parent for another class.
* NEW: GB.Deprecated() is a new interpreter API that displays a warning
  message for deprecated functions at runtime. When the project is
  debugged, an error is raised instead.
* NEW: GB.ReturnBorrow() is a new API to temporarily borrow the return
* NEW: GB.ReturnRelease() is a new API to release the return value borrowed
  by the previous function, without releasing it.
* NEW: Object.CanRaise() is a new method that returns if a specific object
  event has an event handler.
* NEW: Add support for double-linked lists in the interpreter API.
* NEW: GB.Wait() is a new API that waits for a specific number of
  milliseconds, exactly like the WAIT instruction (i.e. the event loop is
* NEW: GB.HasForked() is a new API that warns the interpreter that fork()
  has been called (he has to do some stuff).
* NEW: Remove the GB_POST_FUNC datatype from the API.
* NEW: Allow components to access the interpreter API through a pointer and
  not a full structure. It is a little bit slower (one more indirection),
  but it uses less memory: one pointer instead of about 180.
* NEW: GB.Serialize() is a new API that serializes a Gambas value to a
* NEW: GB.UnSerialize() is a new API that unserializes a Gambas value from
  a file.
* NEW: Task is a new class for implementing background tasks. These
  background task are run by forking.
* NEW: There is an hard limit of simultaneous 256 background tasks now.
  That should prevent fork bombing.
* NEW: Implement Variant comparison routine.
* NEW: Variant[] now has an Exist() and a Find() method.
* NEW: New API GB.CompVariant() that compares two Variant.
* NEW: Process.Wait() now can take an optional timeout argument, in
* NEW: String.UCaseFirst() is a new method that capitalize the first letter
  of an UTF-8 string.
* OPT: Remove a useless test in the macro that returns the class of an
* OPT: Some little optimization in some type checks.
* OPT: Optimized GOSUB from an idea of Emil Lenngren.
* OPT: Conversion between byte index and UTF-8 character index of the last
  string has been optimized when that last string is big.

* BUG: Like can be used in a Case expression just after the Case keyword
* BUG: Fix compilation of WebPage having UTF-8 characters inside.
* NEW: Support for imaginary number syntax.
* NEW: A new compiler option '-w' to let it emit warnings.
* NEW: Emit warnings for unused variables, arguments, functions and for
  local symbols that override global symbols. Public symbols are of course
  not taken into account.
* NEW: If an argument is surrounded by braces, no warning will be emitted
  if the argument is not used.
* NEW: If a function argument is enclosed with braces, then no warning is
  emitted if it overrides a global symbol.
* NEW: New WebPage syntaxes: <<Include>>, <</Include>>, <%/%>, <<--->>.

* NEW: is a new component providing new container datatypes to
* NEW: Add List and ListRoot classes for circular double-linked lists which
  can be embedded into other classes or used standalone.
* NEW: Add Deque class as a base for new Stack, Queue and PrioQueue classes
  on top of linked lists (thus different from related Variant[] semantics).
* NEW: Add Circular class for ring buffers.

* NEW: New component that implements a rudimentary management of complex
  numbers. This component is automatically loaded if a complex number
  constant is encountered and no loaded component can already handle
  complex numbers.

* BUG: Fix bad casting of strcmp() return value to boolean. The same
  security flaw has been found in MySQL recently. See
* NEW: it is now available for Mac OS X 10.8.

* BUG: Correctly handle null dates.

* BUG: When inserting a new record in a DataView, serial fields are not
  editable anymore.
* BUG: Correctly go to the last line of a DataView when its DataSource
  enters creation mode.
* BUG: DataView and DataBrowser in creation mode now do not display any
  selected row, unless in editing mode. In that case the "new record" last
  row is highlighted.
* BUG: Fix warnings.
* BUG: Setting DataView.Editable to FALSE correctly hides the record
  creation extra line.
* NEW: DataView now raises a new Data event that allows to format the
  contents of a cell just before it is displayed. The event receives three
  arguments: the row, the column, and the cell value directly from the
  underlying database.
* NEW: DataBrowser propagates the Data event of its inner DataView.
* NEW: DataControl now uses a DateBox to edit date values.
* NEW: DataSource now raises the BeforeSave event just before writing a
  Result object to the database. The event handler receives the Result as
  argument so that you can modify it.
* NEW: Spanish translation updated.
* NEW: DataBrowser.CanCreate is a new property that hides or shows the
  create button.
* NEW: DataBrowser.CanDelete is a new property that hides or shows the
  delete button.

* BUG: 'INTEGER' fields are now assumed to be serial fields only if
  'AUTOINCREMENT' has been specified too.

* BUG: Fix some compilation warnings.
* BUG: Remove a file that should not be under version control.
* NEW: Add the DBus error message to the Gambas error message when
  registering or unregistering fails.

* BUG: Fix profiling of Eval() calls.
* NEW: Debug.GetSignal() is a new method that returns the description of a
  signal from its numeric value.
* OPT: Now DEBUG_calc_line_from_position has logaritmic time complexity
  instead of linear. That makes profiling each line much faster for large
* OPT: New profile file format.

* BUG: Fix some warnings.
* BUG: DesktopFile now correctly takes the current language into account
  when extracting application names.
* BUG: Support for LXDE mime application cache.
* BUG: $XDG_DATA_DIRS is now taken into account when browsing mime cache
* BUG: Fix X11 client message sending routine on 64 bits OS.
* BUG: Fix all DesktopWindow properties that read or change the state of
  the window.
* BUG: DesktopWindow.X and Desktop.Y now return the correct window
  position, provided that the window manager follows the EWMH freedesktop
  standard of course.
* BUG: Fix DesktopWindow.Resize() method.
* BUG: The Gambas part of the component must not use the gb.form component.
* NEW: Support for the Mate desktop in Desktop.Open, Desktop.OpenTerminal
  and Desktop.Passwords.
* NEW: Better support for the LXDE desktop.
* NEW: DesktopFile is a new class that load *.desktop application files.
* NEW: DesktopFile.FindMime() is a static method that returns a list of
  DesktopFile that can handle a specific mime type.

* NEW: Paint.DrawImage() takes a new optional argument that defines the
  opacity of the drawing, between 0 and 1.

* NEW: Support for imaginary number syntax.
* NEW: Highlight TODO/FIXME/NOTE commentaries like help commentaries.
* NEW: OPTIONAL keyword is always followed by a space now when rewriting
  Gambas code.
* NEW: Highlight.Alternate has been deprecated.

* BUG: HTML highlighting: Correctly detect <head>,<body> and <html> markups
  in all cases.
* BUG: Fix WebPage highlighting.
* BUG: Correctly rewrite the following keywords with no spurious space
  after: TRUE, FALSE, NULL, +INF, -INF.
* NEW: Support for the new WebPage syntaxes.
* OPT: Optimization of HTML syntax highlighting for big lines.

* BUG: The Stock class now detects the Mate desktop, and use it as default
  application theme if needed.
* BUG: Icon themes based on svg files only are correctly handled now.
* BUG: Fix icon theme search for LXDE and XFCE.
* BUG: TabPanel buttons are correctly refreshed when their picture change.
* BUG: Fix LXDE icon theme support.
* BUG: Take "~/.icons" into account in the Stock.Themes property.
* BUG: SidePanel controls now behave correctly when they are put inside a
* BUG: TableView: Apply a white background behind the currently edited
* BUG: Stock.Icons works correctly in all cases now.
* BUG: ScrollArea computes the limits of its scrollbars correctly in all
  cases now.
* BUG: Fix warnings.
* BUG: Transparent SidePanel controls do not eat one pixel of their
  contents anymore.
* BUG: Some fixes in the stock icon map file.
* BUG: For some reason, clicking on a tab didn't give the focus to the tab
  button on gb.gtk.
* BUG: Fix TabPanel tab closing.
* BUG: Clicking on a TabPanel tab raises the Click event after taking the
  focus now.
* NEW: The Stock class now prints debugging message if the environment
  variable GB_STOCK is set.
* NEW: Try to support the Mate desktop in the Stock class.
* NEW: The LXDE icon theme is correctly detected now.
* NEW: Both gnome and kde icon themes should be usable with any desktop
* NEW: Stock.Icons property now replaces Stock.List property.
* NEW: Stock.Themes is a new property that returns the list of all icon
  themes stored in '/usr/share/icons'.
* NEW: Stock: Test more possible configuration files for LXDE.
* NEW: Now the Application.Theme property can be either nothing, a desktop
  name, or a icon theme name.
* NEW: GridView: Support for column titles with multiple lines.
* NEW: New function in GridView Rows, GetSelected, that return an integer
  array with the selected rows.
* NEW: Replace GridView.Rows.GetSelected() method by GridView.Rows.
  Selection property.
* NEW: Deprecate Stock.List which has been replaced by Stock.Icons.
* NEW: TabPanel can get focus now, and handle keyboard shortcuts.
* NEW: ScrollArea, GridView and IconView got an automatic inner shadow
  where the view area can be scrolled.
* NEW: ScrollArea.Tablet is a new property that allows it to catch tablet
* NEW: Draw SidePanel little arrows differently.
* NEW: DateBox handles null dates now.
* NEW: MaskBox hides its contents now when it is the default one and it
  does not have the focus.
* NEW: DateChooser displays a little cursor following the mouse inside the
  calendar and the time panel.
* NEW: ScrollArea.Shadow is a new static property to define if inner
  shadows are visible or not. By default they are not.
* NEW: Mark all controls in test forms untranslatable.
* NEW: ScrollArea draws a focus border when it has focus.
* NEW: Add a new "program" stock icon.
* NEW: In FileChooser and DirChooser, replace the little arrow that goes
  up to the parent directory by a normal button.
* NEW: Add a PDF icon to the stock.

* NEW: Spanish translation updated.

* BUG: Fix warnings.
* NEW: Little design fix in the shortcut configuration dialog.
* NEW: Some little redesign of the toolbar configuration dialog.
* NEW: Spanish translation updated.

* NEW: Add a "program" stock icon.
* NEW: Add a PDF icon.

* NEW: Skeleton for a new component based on the GNU "big numbers" GMP

* BUG: Fix array creation in CComplexPolynomial.ComplexSolve().
* BUG: Use the proper detection method for gsl library.
* BUG: Fix Polynomial to string conversion.
* BUG: Fix Complex to String conversion.
* NEW: Use the new "_operator" interface so that complex numbers can be
  handled by standard arithmetic operators.
* NEW: The Complex class now implements the "_convert" interface.
* NEW: Complex class has been cleaned up.
* NEW: Automatic conversion from numbers to Complex.
* NEW: Vector class has been implemented.
* NEW: Support for imaginary number syntax.
* NEW: Vector class is now generic, and has two child classes: FloatVector
  and ComplexVector, depending on the type of its elements.
* NEW: Add a Complex.Conj() method to return the conjugate of a complex
* NEW: Add Complex.Neg() to return the negative of a complex number.
* NEW: Add Complex.Inv() to return the inverse of a complex number.
* NEW: Handle GSL errors.
* NEW: Redesign of the Polynomial class. Now it implements a polynomial
  that can switch between real and complex coefficients transparently.
* NEW: The ComplexPolynomial class has been removed.
* NEW: Implement the ^ operator in the Complex class.
* NEW: Polynomial _call() special method now is a synonymous of its Eval()
  method. That way, you can write 'P(X)' to get the value of P(X).
* NEW: Remove the FloatVector and ComplexVector classes. Now the Vector
  class handle vector of Float or Complex transparently.
* NEW: Matrix class built the same way as the Vector class, i.e. with the
  ability to switch transparently between Float or Complex elements.
* NEW: Matrix arithmetic has been implemented.
* NEW: Matrix.Determinant() method.
* NEW: Matrix.Invert() method.
* NEW: Matrix.Transpose() method.
* NEW: Matrix _call special method multiplies a matrix by a vector.
* NEW: Vector <-> Array conversion.
* NEW: Implement Vector arithmetic operators.
* NEW: Rename some Matrix methods.
* NEW: Implement Polynomial arithmetic addition and substraction.
* NEW: Complex.Handle is a new property that returns the memory address of
  the underlying complex number in memory.
* NEW: Add a ToString() method to all classes. That method takes two
  arguments: the first one tells if number must be localized. The second
  one tells if complex numbers and polynomials are converted to a string
  that can be sent to Eval().
* NEW: The '^' operator has been implemented in the Matrix class. Only A^N
  where N is an integer is valid.
* NEW: Add a Matrix.Conj() method that returns the conjugate matrix.
* NEW: Make not localized object-to-string conversions return a string that
  is readable by Eval().
* NEW: Remove methods that are already implemented by arithmetic operators.
* NEW: Use Float constants in the GSL class.
* NEW: Matrix can be compared with real or complex numbers. The number is
  then multiplied by the identity matrix before doing the comparison.
* NEW: Implement Vector arithmetic operators.
* NEW: Rename some Matrix methods.
* NEW: Implement Polynomial arithmetic addition and substraction.
* NEW: Complex.Handle is a new property that returns the memory address of
  the underlying complex number in memory.
* OPT: Optimize Complex arithmetic by avoiding unneeded object creations.
* OPT: Optimize Matrix '^' operator.

* BUG: Fix bad casting of strcmp() return value to boolean in the Font
* BUG: Fix Drag & drop management when dragging outside of the application.
* BUG: Fix Drag & drop management of controls that already handle Drag and
  drop, like Textbox controls.
* BUG: Panel with an explicit background color now have their own X11
  window so that they can cover any over controls.
* BUG: The child search method now takes clientX and clientY into account.
  Consequently, clicking on TabStrip tab buttons work correcty again.
* BUG: Fix TreeView, ListView and ColumnView multiple selection.
* BUG: Fix Control.Raise() and Control.Lower() method when the parent is a
* BUG: Window.ScreenY does not take the menu bar into account anymore, as
  in gb.qt4.
* BUG: Correctly check GTK+ version.
* BUG: gdk_device_get_source() does not exist before GTK+ 2.22.
* BUG: Try to activate all XInput devices when the DrawingArea.Tablet
  property is set.
* BUG: Fix a recursion problem is color management when a control is
  inserted into its container.
* BUG: Support for tablet events.
* BUG: Make mouse events in gb.gtk and gb.qt3 behave the same way.
* BUG: Better draw the background color of Button, ToolButton and
  ToggleButton controls.
* BUG: The Font object returned by Control.Font is now correctly updated
  when the font of any of its parent changes.
* BUG: Ensure that when a mouse button is pressed, the same control
  receives the mouse button release event.
* BUG: Fix popup management.
* BUG: Editable ComboBox  controls now have the right background.
* BUG: Make gb.gtk compile with GTK+ 2.16.
* BUG: Take Label.Padding and TextLabel.Padding properties into account
* BUG: MouseDrag events are correctly raised in all cases now.
* BUG: Activate the window correctly after a debugger restart.
* BUG: Window should not raise useless resize events anymore.
* BUG: Windows embedded inside a Splitter correctly raise their Resize
* BUG: Don't try to resize the window inner container with a negative size
  when the window is too small.
* BUG: Draw window background correctly.
* BUG: Don't try to synchronize X11 when the debugger goes forward if there
  is no X11 connection yet!
* BUG: Fix TreeView, ListView, ColumnView and ListBox click detection.
* BUG: FullScreen windows correctly raise the Open event now.
* BUG: Fix the Stock class.
* BUG: Fix dialog modality.
* BUG: The Window.Center() method now takes the available desktop into
  account, not the entire screen.
* BUG: Fix filled ellipse drawing.
* BUG: Remove a debugging message.
* BUG: Setting Window.FullScreen does not show the window if the window was
  not visible.
* BUG: Fix event management of modal dialogs.
* BUG: Fix Mouse.ScreenX and Mouse.ScreenY.
* BUG: Printer.From and Printer.To now always return zero if all pages must
  be printed.
* BUG: Copying an image to clipboard does not corrupt the image anymore.
* BUG: Fix how mouse events and modality are handled.
* BUG: Windows should not receive a keyboard event twice anymore.
* NEW: TabStrip.FindIndex() is a new method that returns the index of
  parent tab of a specific child.
* NEW: Management of tablet events. At the moment only the DrawingArea
  control can catch them if its Tablet property is TRUE. In that case,
  standard mouse events are raised, and the properties of the tablet event
  are stored in the new Pointer class. All that is not definitive.
* NEW: Mouse.State is a new property that return the state of all mouse
  buttons as specified by the current mouse event.
* NEW: Mouse.Button now only returns the index of the button that triggered
  the mouse event.
* NEW: Automatically temporarily release the keyboard and the mouse when
  the debugger stops the program.
* NEW: Style.Name is a new property that returns the name of the current
  widget theme.
* NEW: Use the indirect API access.
* NEW: Fonts.Exist() is a new method that returns if a specific font family
* OPT: Don't arrange the parent if a move & resize operation actually
  changes nothing.
* OPT: When showing or hiding a control, check that we actually change the
  visibility of the widget and do nothing if we don't.

* NEW: Image.RotateLeft() and Image.RotateRight() are two new methods for
  rotating a image by 90° step.

* BUG: Use correct IRBuilder.h
* BUG: Remove some warnings.
* BUG: Temporary fix for powi due to a bug in llvm.
* BUG: Oops. Now functions without GoSubs don't crash anymore ...
* BUG: Fix static _call calls.
* BUG: Properly check stack overflow for GoSubs.
* BUG: Fix For Each loops.
* BUG: Local variables are not forgotten anymore after a Catch.
* BUG: Ctrl variables in GoSubs are now properly released.
* NEW: Implement some missing Variant features.
* NEW: Can now profile each line of code, but beware: profiling makes the
  program much much slower.
* NEW: Implement _unknown.
* NEW: Use VALUE_convert instead of VALUE_convert_object.
* NEW: SPEC_CONVERT constant has been replaced by a field in the CLASS
* OPT: Optimize Variants and some math functions.
* OPT: Don't do any obvious unnecessary unref-checks.
* OPT: Use the Gambas stack to store GoSub data instead of allocating
  new arrays all the time. Up to 10 times faster!

* NEW: Make this component exclude gb.xml.

* NEW: New component that manages MIME messages. It is based on the GMime
* NEW: Support for Mime parts and Mime multiparts.
* NEW: Mime.Encode() and Mime.Decode() are two new methods to encode to and
  decode from base64, quoted-printable or uuencode encoding.
* NEW: Support for message parts. The MimePart.Message property will return
  the MimeMessage embedded inside the part.
* NEW: Try to detect gmime-2.4 if gmime-2.6 is not available.

* NEW: SerialPort: Does the polling differently when detecting signal
* NEW: SerialPort.Open() method now takes an optional argument to define
  the polling delay in milliseconds. It is 50ms by default.
* NEW: Add Net.CannotAuthenticate error constant for

* NEW: New component that implements a POP3 client. It uses gb.mime to
  parse the messages.

* BUG: Add synonymous starting with an underscore for constants beginning
  with a digit.

* BUG: Remove the "GL_" prefix in all constants.

* BUG: The component is now compatible with the new way of arguments
  handling, and does not crash anymore.

* BUG: ScrollView internal visible flag is correctly set, and so the
  Hovered property returns the right value.
* BUG: Fix detection of X11 for the control DrawingArea on Mac OS X 10.8.
* BUG: Add a font setting routine in the gb.qt interface.
* BUG: TreeView does not raise keyboard events anymore during renaming
* BUG: Fix the case of Action.Tooltip property name.
* BUG: Get rid of an old compilation warning.
* BUG: Make mouse events in gb.gtk and gb.qt4 behave the same way.
* BUG: The Font object returned by Control.Font is now correctly updated
  when the font of any of its parent changes.
* BUG: Nothing is drawn now when the clipping rectangle has a negative
  width or height.
* BUG: Fix declaration of Desktop.HasSystemTray property.
* BUG: Windows do not raise their Resize event if the size didn't actually
* BUG: Fix TextArea foreground color management.
* BUG: SpinBox Background property now works as expected.
* BUG: If not page has to be printed, then the Print() method correctly
  returns the Printer object to an inactive state.
* BUG: Windows should not receive a keyboard event twice anymore.
* NEW: TabStrip.FindIndex() is a new method that returns the index of
  parent tab of a specific child.
* NEW: Management of tablet events. At the moment only the DrawingArea
  control can catch them if its Tablet property is TRUE. In that case,
  standard mouse events are raised, and the properties of the tablet event
  are stored in the new Pointer class. All that is not definitive.
* NEW: Mouse.State is a new property that return the state of all mouse
  buttons as specified by the current mouse event.
* NEW: Mouse.Button now only returns the index of the button that triggered
  the mouse event.
* NEW: Style.Name is a new property that returns the name of the current
  widget theme.
* NEW: Use the indirect API access.
* NEW: Fonts.Exist() is a new method that returns if a specific font family
* OPT: When reading the ClientX or ClientY property of a Window, arrange
  its contents only if necessary.
* OPT: During a mouse event, Mouse.ScreenX and Mouse.ScreenY returns the
  global position stored in the received event. It does not query the X11
* OPT: Load clipboard format list only if the clipboard has changed.

* BUG: Editor: Fix how spaces at end-of-line are drawn.
* BUG: Editor: Fix highlighting of saved lines.
* BUG: TextEdit: Fix the TextEdit.Format.Font property.
* NEW: Editor: The current line is now visible when using a dark highlight
* NEW: Editor: Highlight saved modified lines and unsaved modified lines
* NEW: Editor: Support for bookmarks.
* NEW: Editor.BookmarkPicture is a new property for defining the picture
  used for displaying bookmarks.
* NEW: Editor.FindNextBreakpoint() has been deprecated and replaced by the
  Editor.Breakpoints property, that returns an integer array of all lines
  having a breakpoint.
* NEW: Editor.Bookmars is a new property that returns an integer array of
  all lines having a bookmark.
* NEW: Editor.CurrentLine is a new property for defining the current
  executed line. It replaces Editor[].Current.
* NEW: Editor[].Bookmark is a new boolean property that defines if a
  specific line has a bookmark.
* NEW: Editor: Always display a margin wide enough to display breakpoint or
  bookmark signs.
* NEW: Editor.Bookmarks and Editor.Breakpoints properties are now writable.
* NEW: Editor: The alternate background is automatically computed.
* NEW: Editor: Brace highlighting now works on alternate background.
* NEW: Highlight.Alternate has been deprecated.
* OPT: Editor: Do not compute the character width table each time the font
  changes. Use a cache instead.

* BUG: Now VPanel works well but experimental OnePiece is deactivated.
* OPT: Set default value on control Width and Height (10 mm).
* OPT: Cleanup, remove all unused variables.

* BUG: Remove an apparently useless type definition, and fix compilation on
  recent Linux kernels.
* NEW: Rewrote the component to use the signal management routines included
  in the interpreter.

* BUG: Fix a compilation warning.

* BUG: The session cookie is now only accessible to the current CGI script.
* BUG: Fix warnings.
* NEW: Request.Debug is a new property to activate the debugging mode of
  the Request class.
* NEW: Request.Post.Contents returns the contents of the last POST request,
  provided that the debugging mode has been activated.
* NEW: Response.SendFile() can set the content-type according to the file
  extension, if no content-type has been specified.
* NEW: Flush the output before calling Response.End if the response is not

* BUG: Solved a few bugs with the indentation in XmlWriter.
* BUG: The encoding is now correctly specified in the document header.
* BUG: The GetAttribute() method now correctly returns the attribute value.
* BUG: Getting an attribute that doesn't exist doesn't crashes anymore, it
  returns a null string instead.
* BUG: The string comparison mode argument is now correctly handled by
* BUG: The TextContent property now correctly ignores the contents of
  comment nodes, as mentioned in the W3C specifications.
* BUG: Setting the XmlElment.TextContent property now correctly remove all
  children of an element.
* BUG: Setting the XmlElment.TextContent with a null string has now no
  effect, as mentioned in the W3C specifications.
* BUG: When parsing data, extra white-spaces at the beginning and the end of
  text nodes are correctly ignored.
* BUG: When they are null, reading TagName and Prefix properties from
  XmlElement does not crash anymore.
* BUG: The XML Declaration is now optional, as mentioned in the W3C
* BUG: The ChildNodes and Children properties have moved from XmlElement to
  XmlNode, as mentioned in the W3C specification.
* BUG: The XML Error analyzer does not crashes anymore if the error has no
  defined position.
* BUG: Doctype are now partially handled, i.e. there is no doctype interface
  yet, so they are silently ignored.
* BUG: Moved the previousSibling and NextSibling properties from XmlElement
  to XmlNode, and added PreviousElement and NextElement, so that there is no
  confusion with the W3C standards.
* BUG: Addef forgotten property XmlReader.Node.IsEmptyElement.
* BUG: The document.FromString() method does not crashes anymore if no root
  element was found.
* BUG: No more memory leak when the XmlDocument.ToString() throws an error.
* BUG: When throwing an error, the XSLT parser returns anyway a valid (but
  empty) document.
* BUG: Sloved a little typo error in the XmlElement.PreviousElement
* BUG: The CDATA node now correctly handles special characters.
* BUG: Fixed a memory leak when using XmlDocument.Save()
* BUG: Fix the un-escape parsing method, it don't crash anymore if there the
  parsed string is less than 3 bytes length.
* BUG: Reading Special characters in text nodes don't crash anymore.
* BUG: Fix the XmlReader.Node.IsEmptyElement property.
* BUG: Fix some memory errors and leaks.
* BUG: Fix a segmentation fault in XmlReader freeing.
* BUG: Fix the local, qualified and prefix naming, as mentioned in the W3C
* BUG: Fix the XmlReader.Depth property management when enumerating the
  attributes of a node.
* BUG: Try to fix a compilation error on some systems.
* BUG: Correctly handle prefix when parsing a document.
* BUG: XmlWriter now correctly serializes the text and attribute values.
* BUG: The XmlDocument constructor now correctly raises an error message
  instead of crashing with signal #6.
* BUG: Fix prefix management on elements.
* BUG: The XmlReader.Node.Attributes is a read-only collection.
* BUG: Error messages are correctly shown now
* BUG: The Base and Favicon properties do not crash anymore if the matching
  node is not found.
* BUG: Errors that doesn't give any position in the parsed data are
  correctly raised now.
* NEW: Added a new XmlElement.ClearChildren method, that removes all the
  children of an element.
* NEW: Added two properties FirstChild and LastChild to XmlElement.
* NEW: Make this component exclude gb.libxml.
* NEW: Added user data management in nodes.
* NEW: XmlDocument now internally inherits Node, so that they can contain
  other nodes than only a root element (that is now optional), as specified
  in the W3C specifications.
* NEW: Adds a Serialize() static method in XmlNode that serializes the given
* OPT: Do not use the UTF-8 string methods anymore when parsing text opened
  with the XmlReader.FromString() method, they are too slow. This also may
  solve UTF-8 chars reading problems.
* OPT: Some optimisations in character comparison when parsing data.
* OPT: Defined a few variables and parameters as const.
* OPT: Some little optimizations in the ToString() (and similar) methods.

* BUG: Fix the XmlElement.Id property.
* BUG: The HTML parser now correctly raises an error if the document is
  incomplete (no doctype/root element).
* BUG: The HTML parser now really correctly raises an error if the document
  is incomplete (no doctype/root element).

* BUG: Some english fixes in some error messages.


All Gambas 3.x versions will be backward-compatible, i.e. a program written in Gambas 3.x version will be able to run unchanged with any Gambas 3.y version, provided that y > x.

But the contrary is false! a program written with a specific Gambas 3.x version will not run with an older version.

Compilation and installation

Read the instructions there.

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

Enjoy it !

See also