写点什么

深度 deepin 开源自研编程语言 Unilang

  • 2022-09-20
    北京
  • 本文字数:963 字

    阅读完需:约 3 分钟

深度deepin开源自研编程语言 Unilang

近日,深度deepin正式公开了自研全新通用目的编程语言——Unilang,包括相关的文档和一个解释器。

 

deepin 方面表示,虽然业界虽然已经有了很多较为成熟的桌面应用开发方案,例如 Qt、Electron、PySide 和 Flutter 等,但各个方案均有着各自的痛点,没有任何一种现有方案能兼顾各种不同的问题,而成为没有疑义、众望所归的桌面开发首选方案。

 

造成这种局面的一个技术理由是,许多方案设计过于专注具体需求而缺乏考虑语言长期演进的普遍因素,使其在预期目标领域之外的适用性急剧下降,通用性不足。当应用领域和预期略有偏差或暴露原有设计的局限性时,用户即便懂得如何改进一个语言,也会在语言二次开发上遇到困难,从而被迫放弃。

 

因此,deepin 希望有一种语言可以尽快解决各个方案中存在的痛点,能极大程度帮助到因语言二次开发遇到困难而被迫放弃的开发者,以更深刻的方式、真正实现“通用性”。

 

于是在 2020 年 4 月,deepin 决定开发“自己的语言”,进一步往上做 GUI 框架;2020 年 6 月,经调研分析后,deepin 创建 Unilang 仓库,提交了第一行代码;2021 年 3 月,deepin 基本实现了 2020 年决定设计的主要特色内容,着手研究目标代码生成方案;今年 9 月,deepin 正式公开了全新的通用目的编程语言 Unilang。

 

根据官方介绍,Unilang 的主要特点包括:

 

  • 作为动态语言,提供相对其它语言更强的语言层次上的可扩展性。

  • 支持类似 C++ 的对象模型和(当前不被检查的)不安全所有权语义。

  • 不要求全局 GC ,同时语言的一个子集允许和 C++ 同等层次的“不安全”但能确保确定性的资源分配。

  • 支持正式意义上的 PTC ,而不需要用户程序内对栈溢出等未定义行为进行变通。

  • 使用隐式的潜在类型(latent typing) 而非显式的清单类型(manifest typing) 。

 

为了保持通用性,Unilang 不内建提供 GUI 功能,而通过库提供相关 API 。当前计划中,Unilang 将会支持基于 Qt 绑定的库,以便衔接过渡现有的一些桌面应用项目。Unilang 的语言设计保持足够的抽象能力和可扩展性,未来支持直接实现 GUI 框架。

 

另外,Unilang 在语言特性的层次上被设计为能支持不同的应用开发场景,但原则上对这些场景保持中立。这意味着,它可以同时支持服务端和客户端应用的开发,不需要用户切换思维范式或者大幅更改对语言的使用习惯。

 

更多资料:

https://github.com/linuxdeepin/unilang/blob/master/README.zh-CN.md

2022-09-20 15:003710

评论 2 条评论

发布
用户头像
谁用谁知道
2022-09-21 08:31 · 浙江
回复
用户头像
牛!去试试
2022-09-20 16:59 · 北京
回复
没有更多了
发现更多内容

非科班学习编程一定得知道这几个网站!

我是程序员小贱

一文了解对称加密与非对称加密

我是程序员小贱

安全

实用心理学—没用你打我!

代码制造者

职场 职场搞笑 信息技术 人工

Windows AD 保姆级配置NTP服务器教程

BigYoung

时间 AD ntp Windows Server 2012 R2

Junit执行单元测试用例成功,mvn test却失败的问题和解决方法

陈磊@Criss

重磅消息,我国数字人民币将在京津冀等具备条件地区试点

CECBC

数字货币 货币

微博基于 Flink 的机器学习实践

Apache Flink

flink

源码分析 | 咋嘞?你的IDEA过期了吧!加个Jar包就破解了,为什么?

小傅哥

Java 字节码插桩 asm bytebuddy

手撕二分查找及其变种,就是干!

我是程序员小贱

用Ant实现Java项目的自动构建和部署

陈磊@Criss

[修复 Webpack 官方 Bug] 提取CSS时的依赖图修正

分一

大前端 webpack 编译优化 源码刨析

Flink 中的应用部署:当前状态与新应用模式

Apache Flink

flink

为什么会是Docker?

架构精进之路

Docker

2.3.2 JDK动态代理 -《SSM深入解析与项目实战》

谙忆

Facebook开源的数据Mock:Memisis详解

陈磊@Criss

Django的Models更新时,不触发Signals解决办法

BigYoung

django singals 信号机制 update 更新

图解23种设计模式——前方高能,前端切图仔请务必抓好方向盘

执鸢者

typescript 大前端 设计模式

中本聪原始比特币论文解读:点对点的电子现金系统

韩超

比特币 区块链

Serverless:为我们到底带来了什么

刘宇

Serverless 云原生

Swagger 这一个文章就够了

陈磊@Criss

LeetCode题解:88. 合并两个有序数组,splice合并数组+sort排序,JavaScript,详细注释

Lee Chen

大前端 LeetCode

微服务框架-模块需求篇

superman

微服务框架 - 模块功能设计篇

superman

从北京降雨的复盘中,我发现了企业SD-WAN网络的秘密

脑极体

芯片破壁者(十二.下):青瓦台魔咒与半导体“死亡谷”

脑极体

从实际案例讲 Deno 的应用场景

keelii

Java typescript deno

Vue项目起步

JackWangGeek

Vue

【写作群星榜】8.1~8.14 写作平台优秀作者 & 文章排名

InfoQ写作社区官方

写作平台 排行榜 热门活动

6种快速统计代码执行时间的方法

Bruce Duan

java统计时间 currentTimeMillis nanoTime StopWatch

2.3.1 理解动态代理 -《SSM深入解析与项目实战》

谙忆

NetPerf揭示容器间是高速路还是林荫小路

陈磊@Criss

深度deepin开源自研编程语言 Unilang_文化 & 方法_褚杏娟_InfoQ精选文章