探索用Rust实现程序合成的可能性
#synthesis
该文作者受程序合成是可能的这篇文章影响,实现了一个Rust版本。
程序合成是指按特定的规则自动生成程序。有一个设想,就是在未来没有程序员这一行业,有的只是设计师。设计师设计好功能,交给电脑,自动合成程序。 本文就是一种尝试。
现在有基于机器学习人工智能的程序合成引擎,但大家放心,还没到足以能让程序员失业的那一天。
「库」Java JDBI的SQL Object API的Rust接口
#jdbi #dbi #java
基于mysql_asyncmysql异步驱动库。
又一个JavaScript解释器
#javascript #parser #esprit
「撕逼贴」Rust、Debian和librsvg
#debian #librsvg
在LWN社区发布的一篇新闻。Debian支持许多(CPU)架构,即使对于那些没有正式支持的架构,也有Debian Port试图填补空白。对于大多数应用程序来说,主要是为相关架构启动并运行GCC,然后构建Debian提供的所有不同软件包。但是对于需要使用Rust构建的LLVM应用程序或库构建的软件包,则变得更加复杂。最近librsvg就引起一场风波。
Rust与游戏开发
#game #game_wg
该文作者通过这篇文章阐述了当前游戏开发中存在的一些问题,并且建议Rust官方团队启动建立「游戏工作组」来进一步完善以Rust作为游戏开发首选语言的生态系统。
当前比较知名的游戏开发商, Chucklefish, Embark Studios, Ready at Dawn,都宣布使用Rust作为游戏开发的主要语言。
什么是游戏开发?
游戏由复杂的系统组成。游戏对性能的要求很高,即使忽略渲染,还需要做物理、动画、各种游戏系统、AI、寻路等,这些事情都需要在一瞬间完成。这也是C++成为游戏引擎开发语言首选的原因。
存在的问题?
主要有两大类问题:
- 重量级引擎。
目前市面上的引擎,由Ubisoft,DICE,Epic,Unity,Lumberyard等公司创建了各种重量级的引擎。大多数是C++编写的,并且都不太关心ABI的兼容性。所以,这就导致这些引擎和Rust的通信不太理想。并不是说,需要解决Rust和C++的绑定问题。
重量级引擎也关心性能,玩家希望在AAA游戏世界中能做更多的事情。为了满足这种期望,很多优化的工作就被放到数据结构布局、SIMD、自定义内存分配器等等当中。这些优化其实在Rust中已经支持的相当好,当然也有一些还需要完善。所以,需要考虑,现有引擎如何与Rust系统共存的问题。
- 轻量级引擎/游戏
像Chucklefish,Killhouse和其他很多公司,都没有使用现成的重量级引擎。很多时候,这些中小公司中的游戏引擎,实际上就是一个游戏。
虽然Rust成熟度很高,但是当前用Rust开发游戏,还是面临很多阻碍。在这个领域,也有Rust游戏引擎,但是和Unity相比,入门门槛比较高。比如Amethist引擎,一个简单的Pong游戏开局就是这样的代码:
impl <'a,'b> SimpleState <'a,'b> for Pong {}
'a
和'b
都是什么?你可能会哭。虽然生命周期参数有存在的必要,但是你说,写一个Pong游戏示例还要来这个生命周期参数干嘛?作者拿他近十年的游戏开发生涯打赌:即便你写更复杂的游戏,也不一定需要用到生命周期参数。当然,作者也承认Amethist引擎很不错,但是当做一些简单的游戏,可能使用一些更简单的抽象比较好。当然,在未来可能会有更多的引擎来满足开发者的各种问题。
解决方案?
作者建议成立一个游戏开发工作组来解决这些问题。
有人建议把Amethist引擎作为游戏开发的首选引擎来建立生态系统,但是作者认为,需要多元化。并非所有的游戏都有相同的要求,并非所有游戏都需要引擎,因此开放很重要。
结论:
Rust官方核心团队ms答应了要在2019年启动游戏开发工作组。想用Rust制作游戏的开发者们拭目以待吧。
「安全呼吁」互联网存在一个巨大的C/C++安全隐患,但是开发人员不愿意处理它们
#Heartbleed #WannaCry #security
心脏滴血(heartbleed)、欲哭无泪(wannacry)、价值百万美刀的iPhone漏洞(FBI支付90万美刀给黑客,只为了破解一台iphone/ 安全机构悬赏100w刀找iOS漏洞),它们之间有什么共同之处?
该文作者是Mozilla的软件安全工程师Alex,曾经担任过美国数字服务的软件工程师。同时也是Python和Django软件基金会董事会成员。
一个Bug影响iPhone、windows(wanncry)和Linux服务器(heartbleed),看似没什么关联,实际上,这些漏洞的产生,都是同一个原因:内存不安全。而当今互联网上,造成内存不安全的主要语言是C/C++。
缓冲区溢出漏洞、类型混淆、使用释放内存、使用未初始化内存等问题,共同构成了当今互联网基础设施(Windows、Android、iOS、Chrome、Firefox等)中漏洞的温床。作者花费大约一年多时间来跟踪这些项目的安全,发现这些产品中几乎超过一半的漏洞都是内存不安全引起的。更令人不安的是,高危的漏洞(导致远程执行代码的漏洞)几乎总是因为内存不安全。比如被广泛使用的图片处理库ImageMagick和GraphicsMagic,作者就发现了400个内存不安全漏洞。
当然,造成这些主要是因为历史原因。很多重要的互联网安全软件都是老产品。但是作者为了改善这种现状也提出了以下一些建议:
- 在选择语言的时候,首要标准应该考虑「这种选择将如何影响软件的安全性?」
- Rust、Swift等现代语言都是内存安全的,可供选择。但是选择Rust的公司比较多,Google、Dropbox、Facebook等都在用Rust。
- 需要量化内存安全造成的损害程度。可以参考CVE数据库。
- 需要投入资源研究如何更好地将大型软件项目迁移到内存安全的语言。
- 将软件工程文化的重心向安全性转移。比如从大学教学、培训机构教学,应该让学生认识到安全的重要性。
- 内存不安全是目前互联网最大的祸害。还需要投入工程研究,以便作出更好的工具来改善计算机安全性。
每日新闻订阅地址:
欢迎通过GitHub issues投稿。
评论区
写评论对游戏应用前景感到十分兴奋