这篇文章已经酝酿很久了,不过一直没时间没心情写。今天到学校开始学日语了,又看到 WowUbuntu 介绍的 日语 50 音图测试软件 Kanatest 在 Arch 的 AUR 里面找不到,所以干脆自己写一个,顺便补上这篇文章。

进入正题,开发一个 Linux 下的软件,你选择的编程语言是什么呢?我想大多数人会选择 C 或者 Python 吧。像上面说的 50 音图测试软件,用 C 开发有些大材小用了,用 Python 呢,要是涉及运算的时候速度又不尽人意。

那么用什么呢?Google 的 Go 语言?库还不完善呢。Vala?有些人会想到这个 GNOME 的项目了,确实,Vala 对于熟悉 C# 的朋友可能十分顺手,可是对于更加喜欢 Python 的朋友,或许就不是那么友好了。

好的,我们的主角登场了,Genie!

既然你知道 Vala,或许你也知道,它只是对 C 语言的一个包装,运行效率与 C 相差无几。Genie 语言就是 Vala 的同胞弟弟,它也是对 C 语言的包装和翻译,能够实现 Vala 的所有特性,甚至“编译器”都是相同的——valac!唯一不同的是,Genie 是以 Boo、Python 等脚本语言为蓝本,语法上更加灵活、简洁,如果你学过 Python,Genie 的入门将十分之快!

来看看我写的这个简单的 50 音图背诵软件吧,功能很简单,就是将日语的平假名随机闪现,相信有 GTK+ 基础的朋友很容易就可以看懂。

/* Build with valac --pkg gtk+-2.0 mykana.gs */
[indent=4]
uses
    Gtkinit
    Gtk.init(ref args)
    var window = new MainWindow()
    window.show_all()
    Gtk.main()class MainWindow: Window
    label: Label
    const chars : array of string = {"あ", "い", "う", "え", "お", "か", "き", "く", "け", "こ", "さ", "し", "す", "せ", "そ", "た", "ち", "ち", "て", "と", "な", "に", "ぬ", "ね", "の", "は", "ひ", "ふ", "へ", "ほ", "ま", "み", "む", "め", "も", "や", "う", "よ", "ら", "り", "る", "れ", "ろ", "わ", "を", "ん"}init
        title = "My Kana"
        window_position = WindowPosition.CENTER
        default_width = 250
        default_height = 250
        destroy.connect(Gtk.main_quit)
        label = new Label(null)
        add(label)
        Timeout.add_seconds(1, this.change_char)def change_char(): bool
        var i = Random.int_range(0, 46)
        var output = Markup.printf_escaped("%s", chars[i])
        label.set_markup(output)
        return true

可以看出,除了类型声明之外,从某种程度上讲,Genie 的语法甚至比 Python 更加简单。而且,通过使用 libgee,Genie 甚至可以使用等同于 Python 中的 list、dict 等类型,功能十分强大。Genie 与 Vala 共用 API,所以库的问题也不用担心。

不过,Genie 创造于 2008 年,年纪还很轻,文档还不够全。就如同 Vala 一样,Genie 的语法也在发展之中。如果你觉得这些都不是问题,那么赶快看看文档学习一下吧!

我觉得很不错的一些文档: 官方指南来自 Puppy Linux 的指南官方代码示例

评论