Gambas Documentation
Application Repository
Code Snippets
Compilation & Installation
Components
Controls pictures
Deprecated components
Developer Documentation
Development Environment Documentation
Documents
About The Best Formula In The World
Architecture details
Benchmarks
Books
By Reference Argument Passing
Compatibility between versions
Creating And Using Libraries
Database Datatype Mapping
Database Request Quoting
Date & time management
Dates and calendars
DBus and Gambas
Differences Between Shell And Exec
Differences From Visual Basic
Distributions & Operating Systems
Drag & Drop
DrawingArea Internal Behaviour
External functions datatype mapping
Frequently Asked Questions
Gambas Farm Server Protocol
Gambas Mailing List Netiquette
Gambas Markdown Syntax
Gambas Naming Conventions
Gambas Object Model
Gambas Scripting
Gambas Server Pages
Gambas Unit Testing
Gambas Wiki Markup Syntax
Getting Started With Gambas
Hall Of Fame
Housekeeping, cleaning up
Image Management In Gambas
Including Help Comments in Source Code
Interpreter limits
Introduction
Just In Time Compiler
Just In Time Compiler (old version)
License
Localisation and Internationalization
Mailing Lists & Forums
Naming Conventions
Network Programming
ODBC Component Documentation
PCRE Pattern Syntax
Porting from Gambas 2 to Gambas 3
Previous News
Project Directory Structure
Release Notes
Reporting a problem, a bug or a crash
Rich Text Syntax
Screenshots
Text highlighting definition file syntax
The Program has stopped unexpectedly by raising signal #11
Variable Naming Convention
WebPage Syntax
Web site home page
What Is Gambas?
Window & Form Management
Window Activation & Deactivation
Window Life Cycle
XML APIs
Error Messages
Gambas Playground
How To's
Language Index
Language Overviews
Last Changes
Lexicon
README
Search the wiki
To Do
Topics
Tutorials
Wiki License
Wiki Manual

Introduction

At the beginning...

This project aims at making a graphical development environment based on a Basic interpreter, so that we have a language as easy as Visual Basic™ under Linux™.

The phenomenal quantity of bugs and inconsistencies that makes Visual Basic so delightful persuaded me to start this project ;-)

It seems that Microsoft was aware of the poor quality of its language, as VB .Net is not backward compatible with older versions of Visual Basic.

I want to clear up any misunderstanding immediately. Gambas does not try to be compatible with Visual Basic, and will never be. I'm convinced that its syntax and internals are far better than the one's of its proprietary cousin!

I took from Visual Basic what I found useful : the Basic language, the development environment, and the easiness to quickly make programs with user interfaces. That's all. I could have chosen the syntax of almost any other language, but I was fed with Basic from childhood, so...

I dislike the bad level of common Visual Basic programmers, often due to bad practices imposed by the bugs and strangeness of this language. So I will try to make Gambas as coherent, logical and reliable as possible, and I hope that Gambas programmers will make some effort in return! :-)

I hope other people will join me to help to increase the possibilities of the language. There is a lot to do and polish yet!

Features

I will try to depict the main features of Gambas and what sets it from the other languages.

Gambas is, before all, a Basic language with object extensions. A program written with Gambas is a set of files. Each file describes a class, in terms of object programming. The class files are compiled, then executed by an interpreter. From this point of view, it is very inspired by Java™.

Gambas is made up of the following programs:

  • A compiler.

  • An interpreter.

  • An archiver.

  • A graphical user interface component.

  • A development environment.

The development environment is written with Gambas itself, so that I can show the abilities of the language. And it is very useful for debugging!

What are the features that set Gambas from the other languages?

  1. A Gambas project is stored under one directory. The archiver transforms the project directory structure in one sole executable file.

  2. Compiling a project only requires the compilation of the modified classes. Every external reference of a class is solved dynamically at the execution time.

  3. Gambas has a component architecture that allows to extend the language. Anyone can write components as shared libraries that dynamically add new native classes to the interpreter. Components can be written in Gambas too. The component architecture is documented in the Wiki encyclopaedia.

  4. By default, the Gambas interpreter is a text-only program. The component architecture is used for writing the graphical user interface part of the language.

  5. As the graphical user interface is implemented as a component, Gambas can be independent of any toolkit! You can write a program, and choose the toolkit later : GTK+ or Qt at the moment.

Their respective components have the same API.

  1. The same concept has been applied to the database component. You can use the same API, whatever the database you connect to.

  2. Gambas projects are easily translatable, in any language.

  3. Its object model is simple but powerful.

Prospective

In the very far future (do you hear the Star Trek theme?), many improvements are planned. Available time is the rule that decides.

Task Detail
Enhanced web component New controls and containers that generate HTML Web pages, with some JavaScript magic.
Database component enhancements New data controls, like a bound TreeView for example.
Graph component Making graphs in Gambas.
Object persistence system Make Gambas objects transparently persistent: you can get rid of a database management system.
A new syntax Allow the Gambas compiler to understand another syntax.

About me

Welcome to you, curious! You're going to know almost everything about me...

My name is Benoît Minisini. I am a French man living in Paris, born in 1972 and Catholic since 2016. Programming is one my passion since I was twelve, and is now my job for many years now. This passion started with the Basic language on a CPC Amstrad 464, and later on an Atari 520 STE. Of course, now, I am using many other languages, but I never forgot that I have learned and done a lot with Basic.

I was always fond of writing languages, compilers, assemblers, and interpreters. I wrote a Z80 assembler on Amstrad and an interpreted language that consumed all its memory.

Later, during my studies at the E.P.I.T.A., I wrote a Lisp interpreter under Windows©®™ 3.1©®™. During six months, I discovered Windows©®™, its stupid memory model, the Microsoft©®™ C compiler, and its numerous bugs.

Today, I keep on raging with the Gambas language, contributing with my own experience to the free software world.

Thanks God, I have a half-time job, so I have worked actively on Gambas for the last years.

But I have other passions too, that burn a lot of time. Like music - I am playing the flute for a long time, starting the same time as using computers. So, the development of Gambas cannot be as fast as it could be.

I hope your curiosity was satisfied... :-)

Acknowledgements

Gambas is build on top of many free software, and could not exist without them.

So I would like to thank every people involved in the following projects: Some pieces of code of Gambas are based on third party software:

  • The natural string comparison algorithme was adapted from the algorithm made by Martin Pol. See http://sourcefrog.net/projects/natsort/ for more details.

  • The hash table implementation was adapted from the glib one.

  • The HTML entities parsing in gb.gtk comes from KHTML sources.

  • The gb.image.effect sources are adapted from KDE 3 image effect routines.

  • The gb.clipper library embeds the Clipper library. See http://www.angusj.com/delphi/clipper.php for mode details.

  • The function that computes the easter day of a specific year uses an algorithm made by Aloysius Lilius And Christophorus Clavius.

  • The blurring algoritm is based on the StackBlur algorithm made by Mario Klingemann. See http://incubator.quasimondo.com/processing/fast_blur_deluxe.php for more details.

  • The javascript automatic completion is done with autoComplete from Simon Steinberger / Pixabay, and is published under the MIT license. See https://github.com/Pixabay/JavaScript-autoComplete for more details.

And last but not least, I would like to thank every people who help me out with programs, patches, program examples, bug tracking, help writing, financial support, judicious remarks, and so on...