Gambas是什么?

介绍

The Gambas 3 logo

Gambas是一个全特征的对象语言和基于一个BASIC解释器的开发环境。遵循GNU公共许可协议发布。

其体系结构的灵感大量来源于Java。所以Gambas由以下部分组成:
  • 一个编译器

  • 一个解释器

  • 一个归档管理器

  • 一个脚本解释器

  • 一个开发环境

  • 许多扩展组件

编译器是用C语言编写的又小又快的可执行文件:
  • 在我自己的速龙2000上一秒钟可以编译大约128000个非空行。这个速度允许快速的代码/编译/测试以加速开发过程。

  • 目前几乎完全没有优化,这个任务依赖于解释器在运行时来完成。

  • 管理和编译用GNU的=gettext=工具翻译的字符串。

解释器也是用C语言编写的小于180KB的可执行文件:
  • 它提供语言的所有本地特征,通过间接访问几乎所有的POSIX glibc=特性。

  • 它在需要时加载类,在字节代码第一次运行时进行优化。

  • 类之间的链接为完全在运行时完成。即尽可能的晚的来做。所以甚至巨大的可执行文件也能快速启动。

最后,归档管理器是一个创建来自Gambas工程目录的可执行文件的程序。

注意,Gambas可执行文件仅仅是一个未压缩的工程存档。可以包含任何类型的文件,不仅仅是编译的字节代码,并且被解释器像文件系统一样进行内部访问。

Gambas语言

Gambas BASIC语言的主要特色是:
  • 大约250个关键字和本地函数管理几乎所有事情:算术、字符串、输入输出、文件、时间...

  • 完整的错误管理。

  • 完整的进程控制,使用伪终端管理。

  • 完整的支持监视输入输出文件描述符。

  • 使用定时器的事件循环支持。

  • 本地的UTF-8字符串支持。

  • 完整的国际化和翻译支持。

  • 调用系统共享库中外部函数的能力。

但是Gambas也是一个真正的面向对象的语言。使用:
  • 对象和类。

  • 属性、方法、常数和事件。

  • 公共的和私有的标识。

  • 多态性,也就是虚拟方法调度。

  • 单向遗传。

  • 构建器和毁坏器。

  • 数组存取器,枚举器,可分类对象。

Gambas继承机理是完全动态的,并允许:
  • 创建一个已经存在的类的更加专用的版本。

  • 重新实现一个类并扩展它。

  • 覆写一个类的一些方法或属性。

任何类可以被继承,重新实现或覆写,甚至用C/C++编写的本地类。

最后,一个名为/Observer/的本地类允许截获由任何对象发生的任何事件。

可扩展语言

Gambas解释器核心是一个终端程序。所有其他特性由/组件/提供,组件是用C/C++或直接用Gambas编写的类组。

这些组件提供下面的特性:
  • 访问很多数据库系统:MySQL, PostgreSQL, SQLite, Firebird, ODBC。

  • 图形用户界面程序设计,基于QT工具箱,或GTK+工具箱。

  • 网络程序设计,使用增强管理协议:HTTP, FTP, SMTP, DNS。

  • SDL程序设计。

  • OpenGL程序设计。

  • XML程序设计。

  • 使用会话管理的CGI程序设计。

仅仅351个类和4197个标识(目前)就涵盖了所有这些特性。对比于其他语言,只要学习很少数量的概念。而且,我试图使这些标识的名称尽可能的规范。

所有这些有助于使Gambas相对的容易学习。

用C/C++编写的组件被存储于共享库,用Gambas编写的组件就是类似于任何其他Gambas工程的工程。

它们被解释器在程序启动时加载,或者在程序执行期间需要时加载。

用C/C++开发一个组件有点类似于开发一个Linux内核的设备驱动:
  • 组件的源代码位于Gambas源代码树中。

  • 组件和解释器通过应用程序设计界面通讯。

  • 它们执行在解释器环境中,所以不能随心所欲的乱干。

关于编写组件的文档还没有完成,但是所有所需的帮助会在开发人员邮件列表中提供。

脚本语言

Gambas最近获得成为一个脚本语言的支持。 这个特性由脚本解释器提供,一个允许将任何Gambas代码嵌入文本文件的小Gambas可执行文件。

这是一个小脚本示例:

#!/usr/bin/env gbs3
 
' 该脚本返回系统真正使用的内存大小,缓存和交换区被排除在外。
    
Function GetUsedMemory() AS Long
    
  Dim sRes As String
  Dim aRes As String[]
  Dim cVal As New Collection
  Dim sVal As String
    
  Exec ["cat", "/proc/meminfo"] To sRes
    
  For Each sVal In Split(sRes, "\n", "", True)
    aRes = Split(sVal, " ", "", True)
    cVal[Left$(aRes[0], -1)] = CLong(aRes[1])
  Next
    
  Return cVal!MemTotal - cVal!MemFree - cVal!Buffers - cVal!Cached + cVal!SwapTotal - cVal!SwapFree - cVal!SwapCached
    
End
    
Print Subst("Used memory: &1 Kb", GetUsedMemory())

数据库,GUI与独立桌面

Gambas组件不仅是绑定的。它们试图抽象它们所基于的基础库,以一致性和简单取胜。

所以,用Gambas能这样写程序:
  • 独立于基础数据库系统:每个数据库系统都是通过相同的API来访问。

  • 独立于图形工具箱:QT组件和GTK+组件有相同的界面。

例如,Gambas提供一个数据库管理工具:
  • 允许编辑和管理任何数据库,由一个用于数据库的组件提供。

  • 当从KDE运行时使用QT工具箱,从Gnome或XFCE运行时使用GTK+工具箱。

The Printing example using Qt The Printing example using GTK+

而且,我也尝试提供独立桌面,通过:
  • 使用的图标主题依据于当前的桌面环境(KDE、Gnome或XFCE)。

  • gb.desktop=组件,基于来自Portland工程的命令行解释器脚本。

开发环境

Gambas提供一个全功能的IDE,它是用Gambas自己开发的。

可以创建一个窗体,仅仅通过绘制来插入控件,编辑代码,做许多类似别的快速应用程序开发系统的其他事情。

The source code editor The debugger

Gambas开发环境提供下列特征:
  • Gambas代码、HTML和CSS文件语法高亮。

  • 自动编译。

  • GUI窗体编辑器。

  • 整合的调试器。

  • 图标编辑器。

  • 字符串翻译。

The icon editor The translation dialog

  • Subversion支持

  • 数据库管理。

  • 直接来自维基文档的在线文档。

  • 许多程序示例。

而且,可以生成许多发行版的安装包,和同样基于GNU autotools的=tar.gz=安装包。

支持下列GNU/Linux发行版:
  • Debian

  • Fedora

  • Mandriva

  • SuSE

  • Slackware

  • Ubuntu

     

The IDE Packager

只要目标发行版的Gambas是按照维基上的如何打包Gambas页面说明正确打包,IDE生成的包就能工作。唉,目前这不是总能符合要求...

最后,尽管Gambas语言捆绑的开发环境很强大,但也不是必须用它来创建Gambas程序。

不确定

所以,人们不会认为本文简直看起来像一个广告:-) ,应该提到,在Gambas中还存在一些变数。

主要是:
  • Gambas仅是32位应用程序,而且不能天然运行于64位系统上。 已经不再是这样!

  • 语言中缺少一些特征:枚举声明和结构体支持。

  • GTK+组件还没有完全完成,所以独立的GUI工具箱还未完成。

希望在下一个发布中可以实现解决这些问题的目标。

未来

...不可预言,尤其是Gambas。

感谢用于=Positronic::Variables=和=Quantum::Superposition=模块的Perl脚本,可以预计下一个发布会提供:
  • DBus支持。

  • 合并进开发环境的数据库管理器。

  • 在IDE中的一个报表设计器。

  • QT4与Cairo支持。

  • KDE4支持。

  • 一个增强=gb.desktop=组件。

  • OpenOffice文档生成。

Gambas是自由软件。因此不同于私有软件,承诺的东西可能不会总是及时交付,或者可能根本不会交付。:-)

Gambas下载和其他链接

可以从http://gambas.sourceforge.net/download.html下载Gambas。

关于Gambas的更多信息,这有一些链接: 通过邮件列表或是http://gambasrad.org的错误追踪可以报告问题和错误。

我们希望你喜欢Gambas,和我们一样多!:-)

Benoît Minisini

“当你要做点什么,你会发现有的人支持,有的人反对,更多的人无动于衷。”