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
只要目标发行版的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
“当你要做点什么,你会发现有的人支持,有的人反对,更多的人无动于衷。”