【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

以现代化 C 语言为目标的 C2 语言

  • 2018-02-22
  • 本文字数:1199 字

    阅读完需:约 4 分钟

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

C2 是一种新的编程语言,其目标是将 C 改进为一种适用于底层编程的语言,例如实现启动引导、内核、驱动和一些系统层面的工具。

据 C2 语言创立者 Bas van den Berg 介绍,C2 在任务声明称其将保留 C 中的适用部分,同时改进那些与其 40 年历史背道而驰的部分。其中一些弃用的部分包括:对头文件的使用(它严重地降低了编译器的性能)、复杂类型定义(在C2 中被模块系统统一类型语法替代)。C2 还引入了支持LTO(链接时优化,link-time optimization)的集成构建系统。同时,宏系统的实现也在进展中。

下面给出的一个典范的“Hello World”C2 程序例子,其中展示了 import模块和类型系统的使用:

复制代码
module hello_world;
import stdio as io;
func i32 main(i32 argc, char*[] argv) {
io.printf("Hello World!\n");
return 0;
}

C2 中并无意引入一些高层特性,例如面向对象的支持和垃圾回收机制。

InfoQ 采访了 Bas van den Berg。

InfoQ: C2 的主要目标是什么?

Bas van den Berg:我使用 C 语言已近 20 年。在此期间,我用 C 编写和修改了一些驱动程序、低层或高性能应用、实时系统等。这些工作通常是使用 C 实现的。我的确非常喜欢 C,但有些事情正在逐渐过时。由于我没有看到任何其它语言涉足低层或内核等 C 领域,我也不想再花 20 年时间去解决同样的问题,所以我创立了 C2。C2 的主要目标是解决 C 语言中的一些常见问题,改善开发者的使用体验。

InfoQ: 你是否设想过将现有的 C 代码库迁移到 C2?这样做是否有好处?

Berg:C 程序几乎从来都不是独立工作的,而是要使用其它的 C 程序库。C2 同样如此。因此,我们需要 C2 程序能轻松使用 C 程序库,而 C 程序库也能与 C2 库集成。作为演示,我已在几天将 Lua 和 Vulkan 接口“移植”到 C2。在“c2examples”中给出了一个演示实现,展示了 C2 的工作原理。我个人在开发 C2 时,会将 C 程序移植到 C2,查看其中是否存在不适用之处。如果有的话,就在 C2 中进行修正。通过这种方式,我改进了 C2 的语法。移植当前 C 程序的优点,就是更易于整体使用程序优化,编译时间也更快。

InfoQ: 当前 C2 语言及其工具的成熟度如何?你能对该语言何时可用于生产环境给出一个预测吗?

Berg:在目前的形式下,我并不建议在生产代码中使用 C2。但对于一些较小的项目,C2 绝对适用。由于 C2 语法尚在改进中,因此任何可能的更新都会对已有的程序造成破坏。

C2 将会改进的两个方面,分别是增加宏子系统(仍处于设计阶段),以及扩展软件库子系统。后者意在支持源库和 Cargo 类工具对外部软件包的管理。我目前正致力于推出软件库系统,应该可在今年第二季度逐步发布。之后,我计划推出宏子系统。

按 van den Berg 自身的经验,使用 C2 可以加快开发速度达 30%。C2 是开源的,可以安装在 Linux、macOS Windows 上。

查看英文原文: C2 Aims to Modernize the C Language

2018-02-22 18:002703
用户头像

发布了 391 篇内容, 共 126.9 次阅读, 收获喜欢 255 次。

关注

评论

发布
暂无评论
发现更多内容

Elasticsearch文档版本冲突原理与解决

Skysper

elasticsearch 乐观锁 悲观锁

精纯还是混乱?职场十二箴言——重读“成为乔布斯”的思考(二)

石君

创业 乔布斯 成为乔布斯

【深度】为您解读东西方艺术教育的专业设置差异对比~

默聲

探究vscode debug流程,解决无法运行go程序的问题

simpleapples

vscode Go 语言

Kubernetes 容器运行时演进

倪朋飞

Kubernetes 容器 云原生

我如何用 Python 给 Github 的 README.md 做一个访客统计功能

遇见

Python GitHub 开源 badge open-source

走出舒适区最好办法别走了,扩大它

乐少

HTTP Methods和RESTful API的设计

孙苏勇

架构 系统设计 RESTful 接口

删掉最后一句话

池建强

心理学 情绪控制

做产品的同理心

孙苏勇

产品 产品经理 产品设计

GitHub知错就改,是个好同志

遇见

GitHub

【SpringBoot】掌握这两个属性,你的测试类可以启动的更快些

遇见

Java Spring Boot Unit Test

任正非管理哲学中的三个常识和三种科学

霍太稳@极客邦科技

创业 团队管理 华为

做小池塘里的大鱼,还是大池塘里的小鱼?这是个问题。

霍太稳@极客邦科技

创业 团队管理 目标管理

特别评论:甲骨文的傲气

张晓楠

云计算 互联网巨头 企业文化

dubbo-go 中如何实现远程配置管理

joe

Apache 开源 微服务 dubbo Go 语言

我的第一个千万阅读量

彭宏豪95

创作 生活 写作

无代码开发

Fenng

精纯还是混乱?职场十二箴言——重读“成为乔布斯”的思考(一)

石君

职场 乔布斯 成功学

一篇文章搞定 java 中的 path 和 classpath

shengjk1

Java classpath vs path classpath path

是时候要说再见了,春风十里,不如邮你!

乐少

分布式数据库是无用的屠龙术吗?

海边的Ivan

企业架构 分布式数据库 业务中台

《小狗钱钱》——财富离我们并不遥远

Yin

读书笔记 投资 成长 思维方式

简单到不可能失败 —— 《微习惯》

零和幺

读书笔记

Kubernetes中的CI/CD

倪朋飞

Kubernetes DevOps 微服务

如何做一名失败的安全架构师

石君

架构 安全架构师 安全评估

翻译: Effective Go (2)

申屠鹏会

翻译 Go 语言

小议RPA

一品凡心

人工智能 RPA 自动化

喔,明白了,成功也是一种苦难

霍太稳@极客邦科技

创业 身心健康 企业文化 个人成长 心理

用你喜欢的 emoji 作为页面的 favicon 吧 🎉

遇见

CSS html favicon emoji

如何解决 Kubernetes 的 DNS 延迟问题

倪朋飞

Kubernetes 微服务 云原生

以现代化C语言为目标的C2语言_语言 & 开发_Sergio De Simone_InfoQ精选文章