linux gui编程语言,使用 Red 语言编写 GUI 应用程序

writing-gui-apps-using-the-red-programming-language.html

一句话概括 — 使用 Red 语言编写原生跨平台桌面 GUI。

尝试在 Windows 上使用 PyInstaller 将“可执行”的 ducktape 封装在 Python 脚本之后,我发现应该学习的编程语言类应该具有以下属性:

静态二进制编译(产生一个二进制,不是运行时的字节码,例如 Java、Python)

快速

跨平台(Windows,Mac,Linux,* BSD 和/或 Haiku (Bonus))

为了达到这个目的,在三年前我学会了 Go(开始使用 Go 开发一个应用程序),我可以确定 Go 的二进制文件可以通过交叉编译在多个平台上运行。其他语言如 Crystal 和 Rust 也支持类似机制,但当时都不稳定。今天,我正在探索原生跨平台GUIs1的可选方案。

基于 Electron 构建的“现代桌面应用”已经有很多了。它允许程序员用 HTML、CSS 和 JavaScript 来构建桌面应用程序。听起来真棒吧?好吧…

虽然 Electron 比较容易,快速面世并且对程序员而言成本效益更高,Electron 以二进制大小和内存使用量庞大2而臭名昭着。你可能遇到过唱衰使用它的帖子,基本上到了这种程度:如果任何应用程序敢于使用它,几乎可以保证它会在在线技术论坛上遭受抨击。

令你失望的是,这不是其中抨击帖子之一。Qt 和 GTK+ 是有趣的选择,我甚至打算自己使用它们。但是,两者都不如 Electron 那样快速发展。我们可以兼用二者吗?一个原生的可快速开发的跨平台GUI?不妨看看 Red。

Red

“Red 是受到 Rebol 强烈影响的下一代编程语言。”

Red 的诞生很大程度是受 Rebol 的影响,它是专有的封闭源码软件(直到2012年,Rebol 3才成为开源软件)。这两种语言都有一个很好的图形用户界面系统(下面我们将介绍),Red 的不同之处在于它可以用于系统编程,使用名为 Red/System 的小于2MB DSL 编译器。你可以在这里找到Red,并下载。

GUI

这有一个使用 Red GUI 系统的 “Hello World”。

Red 带有解释器,所以你可以输入 red hello_world_gui.red 来运行下面的代码

Red []

view [ text "Hello World" ]

Red 会解释运行这段代码,不需要编译成二进制。如果你希望能生成二进制,就把代码修改成下面这样:

Red [ needs: 'View ]

view [ text "Hello World" ]

然后运行:

red -r -c hello_world_gui.red

writing-gui-apps-using-the-red-programming-language.html

编译结果是一个单独的二进制文件,运行它会在 GUI 中显示“Hello World”。目前在 Linux 下还不支持 GUI(还在实验阶段),但是在 Windows 和 Mac 都是可以编译的。Red 支持交叉编译,以便你为不同的平台编译二进制文件,我们可以看到 Red 能编译出可用于哪些平台的结果。

hako ~ red -h

...

Cross-compilation targets:

MSDOS : Windows, x86, console (+ GUI) applications

Windows : Windows, x86, GUI applications

WindowsXP : Windows, x86, GUI applications, no touch API

Linux : GNU/Linux, x86

Linux-ARM : GNU/Linux, ARMv5, armel (soft-float)

RPi : GNU/Linux, ARMv5, armhf (hard-float)

Darwin : macOS Intel, console or GUI applications

macOS : macOS Intel, GUI-only, applications bundles

Syllable : Syllable OS, x86

FreeBSD : FreeBSD, x86

Android : Android, ARMv5

Android-x86 : Android, x86

编写一个“Hello World”并没什么用,让我们通过实现一个简单的图像查看器以进一步了解 Red 语言,在这里我们将得到一个随机的图像,这里是代码:

Red [

title: "Simple Image Viewer"

author: "Wesley Hill"

version: 0.1

needs: 'View

]

rand_img: http://source.unsplash.com/random/310x200

message: "Press Random for a random image!"

view/options [title "Simple Image Viewer"

below center

pictures: image 310x200 message

across

random_btn: button "Random" [

new_image: load rand_img

pictures/image: new_image

pictures/text: ""

]

text "A Simple Image Viewer in Red"

][]

上面的代码创建了两个变量rand_img和message,我们使用view函数来调用Red的 VID dialect 和 View Engine,我们把标题和布局设置在窗口的中心。我们的图像大小为310×200,使用了 pair 数据类型,并且将我们的按钮 random_btn 和文本设置为相互响应的。 最后,一旦我们点击“随机”按钮,我们会使用加载函数从源检索数据。 源需要提供一个路径,可以是文件,字符串,二进制或url数据类型。

在这种情况下,我们使用rand_img中的url数据类型,并通过将 pictures/image: 的值设置为新的图像存放地址 new_image 以使用图片。因为我们只希望显示图像,所以我们将图像中的文本设置为空。

我们可以通过内置的 type? 功能检查数据类型。请注意,Red有超过50多种类型。

>> print type? rand_img

url

>> print type? message

string

>>

一旦我们运行上面的代码,我们将得到简单的图像浏览器

writing-gui-apps-using-the-red-programming-language.html

…它也能运行于 Windows 上

writing-gui-apps-using-the-red-programming-language.html

Red 可用于更高级的应用程序,这里有几个例子:

自动照片复印机

对于使用 Red 的更高级的应用程序,我给我父亲编写了一个程序来处理数百张照片。下面是程序的 GUI,我使用了一组随机照片来演示程序

这些演示照片很小(平均约 5KB),我父亲的照片,其大小通常在 14MB 左右,数量上千。

writing-gui-apps-using-the-red-programming-language.html

解析数据

输入的数据实际上是一封电子邮件,其中包含客户选择的照片列表。

Selected the following images:

BIRTHDAY PARTY > ABC 7453

TIF_FILE_ID: 0123456789

BIRTHDAY PARTY > ABC 7454

TIF_FILE_ID: 0123456790

...

BIRTHDAY PARTY > ABC 8217

TIF_FILE_ID: 0123456899

所选照片的文件名采用 ABC_1234.jpg 的形式。所以对这个问题使用正则表达式是有用的。此外,Red 有自己的模式匹配解析器,最初由 Rebol 发明,叫做 PARSE。

下面的正则表达式…

[A-Z]{3,}\s\d\S{3,}

…类似于下面的 PARSE 规则:

[some letter space 4 digit opt letter]

给予以下字母和数字的规则:

letter: charset [#"A" - #"Z"]

digit: charset "0123456789"

解析规则中包含了选择字母的原因是要捕获有时出现在电子邮件中的 ABC 1234A 可选的边框。 以下是介绍解析器如何看到这个规则:

writing-gui-apps-using-the-red-programming-language.html

使用 Red 解释器,我们可以测试解析规则是否正在工作。对于成功的匹配返回 true,否则返回 false。

>> parse "ABC 1234" [some letter space 4 digit]

== true

>> parse "ABC 1234A" [some letter space 4 digit opt letter]

== true

>> parse "ABC 1234AB" [some letter space 4 digit opt letter]

== false

2af038ea3420fa29652d0d03f26ec5fd.pngPARSE 是 Rebol/Red 特有的替代现在通用的正则表达式语法,大多数程序员(如果不是有经验的程序员)都不太熟悉。 我花了一段时间来学习语法,我很欣赏这种语法,这些规则是用普通的英文,而不像正则表达式。

在用 Python 编写原型和测试之后花费了我一个周末的时间编写这个应用程序,它的代码<220行。我的父亲使用 Mac,所以生成一个二进制文件就像在 macOS 的发行版中编译源代码一样简单。

red -r -o "APC" -t macOS apc.red --red-only -v 4

writing-gui-apps-using-the-red-programming-language.html

它的大小甚至不到 2MB。

Lines 克隆

为了演示 Red 的网络和序列化功能,我重新创建了一个名为 Lines 的应用程序,它是一个简单的伦敦地铁状态应用程序。不幸的是,它在 App Store 上已经无法访问了,但我仍旧在旧的 iPhone 上安装过。下面的图片显示了它的样子。

writing-gui-apps-using-the-red-programming-language.html

下面是用 Red 实现的相同的应用程序。 点击“Lines”将弹出打开关于特定路线的信息。

writing-gui-apps-using-the-red-programming-language.html

目前 Red 没有内置的 JSON 解析器。我发现一个在这个示例中已经足够用的 JSON 解析器。构建这个应用程序需要大约 3 天的空闲时间,大小约为 897 KB。

最后的想法

除了可以用 Linux 实现(一个可在 Red 工作的 GTK3 后端)的 GUI 系统之外,请注意,Red 目前可编译 32 位二进制文件。使用“Automated Photo Copier”应用程序时,我使用 Red 复制大图片时遇到了问题,而且程序经常突然崩溃。我切换到使用 cp 复制照片(因为我知道我的爸爸只使用 Mac)通过在 cp 命令上调用 call/console。这样,它就能完美地复制图像。如果他用 Windows,这将是一个不同的故事。

Red 是 Electron 的一个很好的替代吗?如果你正在构建一个小型的内部工具,需要一个快速的图形用户界面或需要一个开发难度较低的跨平台的 GUI,那么答案是 yes。虽然现在 Red 还没有达到产品级,但从其路线图来看,Red 在未来有很大的潜力。我不得不承认,如果你不熟悉 Rebol(下面有对应的资源和链接),学习曲线会略微适中。另一个我还没有尝试的替代方案是 Lazarus(也许在未来的博客会介绍),但是用 Red 开发 GUI 的速度是非常有前途的。

Lines clone 代码已在 GitHub 上开源。

如果你有兴趣了解关于 Red 的更多信息,请查看以下链接:

我已经使用了久经考验的 Python、Ruby、Java、C/++/# 和 JS,但是我想尝试新的东西。就用 Go 编写 GUI 而言,shiny 是实验性的,这还有 therecipe/qt,以及我个人的最爱,andlabs/ui。

也有一些高性能的 Electron 程序(Visual Studio Code),但这只是例外的,而不是常规的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344310.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 开发人员工具_Java开发人员的5种工具

java 开发人员工具改善我们编写的Java代码的一种方法是使用最好的工具。 因此&#xff0c;让我们看看IDR Solutions建议使用的5种最常用的工具来帮助Java开发人员编写更好的代码。 查找错误 FindBugs是一个开放源代码程序&#xff0c;根据Lesser GNU Public许可的条款进行分发…

64位linux并行计算大气模型效率优化研究,64位Linux并行计算大气模型效率优化研究...

第&#xff12;&#xff16;卷第&#xff16;期&#xff12;&#xff10;&#xff10;&#xff19;年&#xff16;月计算机应用研究&#xff21;&#xff50;&#xff50;&#xff4c;&#xff49;&#xff43;&#xff41;&#xff54;&#xff49;&#xff4f;&#xff4e;&a…

J2Pay –实施网关

介绍 如果您使用任何网关&#xff0c;您都可以在我们的库中实现该网关并支持开放源代码世界&#xff0c;我们将非常高兴地欢迎贡献者。 您可以在这里找到我们的github存储库 在开始实现网关之前&#xff0c;您应该首先看到其他一些类。 以下是简要定义的类。 HTTP客户端 使…

linux中jq的使用方法,linux使用jq工具解析json

jq类似一个awk或grep一样的神器&#xff0c;可以方便地在命令行操作json一、安装官网&#xff1a;https://stedolan.github.io/jq/download/基本就是brew install、apt install、yum install之类的&#xff0c;很简单二、常用操作1.格式化json直接请求格式如下&#xff0c;不易…

linux手机摩托,Linux操作系统触控智能机 摩托ZN4图赏

北京时间2008年11月25日&#xff0c;有国外的网友拿到由通信运营商Verizon Wireless定制的摩托罗拉ZN4真机。摩托罗拉ZN4的发布已经过了一个多月了&#xff0c;网友们对于这款手机的评论可谓是褒贬不一。有的朋友们指出摩托罗拉ZN4在造型上面抄袭了经典“明”系列设计&#xff…

Apache Camel 2.23发布

昨天发布了Apache Camel 2.23 &#xff0c;其中最值得注意的新功能是对Spring Boot 2.1的支持&#xff0c;我们还改进了启动器组件以包括更多的元数据&#xff0c;并对改进的Spring Boot自动配置进行了优化。 此版本主要是一个大的错误修复版本和一些其他小的新增功能。 这些功…

对c语言字符数组描述错误的是,下述对C语言字符数组的描述中错误的是( )。

摘要&#xff1a;条形图用频率值型来表分组分布示数数据&#xff0c;下述没有相邻之间间隔竖条。中国:在中大学列联分析&#xff0c;字符百分表的条件正确关于的是方向说法。条形图用频率值型来表分组分布示数数据&#xff0c;数组述中没有相邻之间间隔竖条。...条形图用频率值…

android 实现自动拍照,Android自定义相机实现定时拍照功能

这篇博客为大家介绍Android自定义相机&#xff0c;并且实现倒计时拍照功能。首先自定义拍照会用到SurfaceView控件显示照片的预览区域&#xff0c;以下是布局文件&#xff1a;activity_main.xmlandroid:layout_width"match_parent"android:layout_height"match_…

10个步骤的筛选器模式

过滤器是仅在某些情况下应应用的模式。 在原始帖子中 &#xff0c;我提供了一个非常简单的示例&#xff0c;旨在演示如何应用它。 在这篇文章中&#xff0c;我提供了一个更详细的示例&#xff0c;该示例还旨在说明何时以及为什么应用它。 介绍 该职位包括以下10个简短步骤 。…

android 网络调试工具,安卓网络调试助手

安卓网络调试助手源码是一款专门为专业人士准备的安卓网络调试软件&#xff0c;安卓网络调试助手apk支持各种进制的转换发生和多种端口协议&#xff0c;让用户操作起来更加方便&#xff0c;安卓网络调试助手源码有着专业的操作流程&#xff0c;帮助用户快速上手&#xff0c;就算…

android版本8.1.0和9的区别,安卓8.1和9.0的区别是什么

安卓8.1和9.0的主要差别是&#xff1a;流畅度、耗电量、功能等等方面的不同。在手机配置足够的情况下&#xff0c;9.0要比8.1更流畅和省电&#xff0c;它可以同时让后台保持更多APP&#xff0c;每个APP运行的时候更加流畅&#xff0c;其新的智能电量管理功能、暗黑模式让手机更…

看到一个沙粒世界:再一次你好世界

“看到一个沙粒中的世界”&#xff0c;我们很可能会看到最简单的“ Hello World”中的世界&#xff0c;所以我们开始吧&#xff0c;再一次向世界问好。 我猜所有的Java课程&#xff0c;教程都是从这个著名的Hello World程序开始的&#xff0c;这是我可以在没有IDE的帮助下编写…

[渝粤教育] 西南科技大学 中国现代文学 在线考试复习资料

中国现代文学——在线考试复习资料 一、单选题 1.不属于“五四”时期的“问题小说”作家的是( )。 A.冰心 B.庐隐 C.刘呐鸥 D.王统照 2.巴金小说《家》中的觉新是( )。 A.顽固的封建卫道者 B.腐朽堕落者 C.有新思想的懦弱者 D.与封建思想大胆斗争的反抗者 3.《画梦录》的作者…

[渝粤教育] 西南科技大学 中学英语教材教法 在线考试复习资料

中学英语教材教法——在线考试复习资料 一、单选题 1.关于写作评估以下说法正确的是? A.写作评估既要有结果评估,也要有过程评估 B.写作教学评估有写长法又有写短法 C.课堂评估的作用仅为监控学生 D.课堂评估与课堂的具体教学内容有关,可以使用统一的评估模式 2.以下哪种方式…

moreunit_MoreUnit与MoreUnit

moreunit就在一年多以前&#xff0c;我写了一篇关于在Eclipse中使用JUnit的文章。 评论者之一推荐MoreUnit &#xff0c;以进一步提高测试效率。 尝试一下让我感到很高兴&#xff0c;并且我的自主神经系统立即记住了该插件的键盘快捷键…… 另外&#xff0c;在使用MoreUnit一段…

[渝粤教育] 西南科技大学 人力资源管理 在线考试复习资料(1)

人力资源管理——在线考试复习资料 一、单选题 1.实施工作轮换方案之前要做好的工作不包括( ) A.复查每一个连续在同一职业岗位上于了5年以上.特别是更长时间的、正处于职业中期的员工(包括经理在内) 的人事文件 B.评价这些员工的工作,认清其工作专长,了解其个人特征、才干等 C…

android 获取 meid 代码,Android 各个版本获取IMEI、MEID

public class IMEIUtil {/*** 获取默认的imei 一般都是IMEI 1** param context* return*/public static String getIMEI1(Context context) {//优先获取IMEI(即使是电信卡) 不行的话就获取MEIDreturn getImeiOrMeid(context, 0);}/*** 获取imei2** param context* return*/publ…

JMetro版本5发布

Java的第5版JavaFX主题JMetro刚刚发布。 这是此版本中的新功能&#xff1a; 新的文本区域明暗风格&#xff1b; 现有控件样式的一些更改&#xff1b; 新CSS变量称为accent_color。 顾名思义&#xff0c;它允许您定义JMetro控件中使用的强调颜色。 已经进行了很大的重构&am…

[渝粤教育] 西南科技大学 会计学原理 在线考试复习资料(1)

会计学原理——在线考试复习资料 一、单选题 1.资产负债表是反映企业( )财务状况的会计报表。 A.某一特定日期 B.一定时期内 C.某一月份内 D.某一年份内 2.某企业本期盘亏的材料已查明原因,属于自然损耗,批准处理时应编制的会计分录( )。 A.借记“待处理财产损溢”,…

android 开发 矩形截屏插件,Android 上如何实现矩形区域截屏

对屏幕进行截屏并裁剪有两种方式&#xff1a;早截图和晚截图。早截图&#xff0c;就是先截取全屏&#xff0c;再让用户对截取到的图片进行修改;与之相对的&#xff0c;晚截图&#xff0c;就是先让用户在屏幕上划好区域&#xff0c;再进行截图和裁剪。其实两者并没有什么太大的区…