Crystal 1.8.0 发布,语法类似 Ruby 的编译型编程语言


Crystal 是一种通用的、面向对象的编程语言,由 Ary Borenszweig、Juan Wajnerman、Brian Cardiff 和 300 多名贡献者设计开发。Crystal 的语法受到 Ruby 的启发,属于编译语言,具有静态类型检查功能,但一般不需要指定变量或方法参数的类型,可实现接近 C/C++ 的性能。它的类型由一个先进的全局类型推理算法来解决。

 Crystal 1.8.0 已发布,此版本的一些修改:

正则表达式:PCRE2

此版本中一个重大且必要的更改是 PCRE2 成为 Regex ( #12978 ) 的默认引擎。 1.7 中添加了对 PCRE2 的支持,并在 1.7.3 中稳定下来。我们认为默认使用它是安全的。仍然可以回退到 PCRE,如果 PCRE2 在编译时不可用则自动回退,或者通过编译器标志 -Duse_pcre 回退。

从 1.8 开始,Crystal 编译器应使用 PCRE2 构建以确保一致性。

作为简化向 PCRE2 迁移的措施, Regex::Options 获得了更多可在两个引擎版本中工作的命名成员。为了容纳额外的值,枚举基类型从 Int32 更改为 UInt64 ( #13223 )。

此外,添加了一个新的枚举 Regex::MatchOptions 来保存特定于匹配操作的选项, Regex::Options 现在别名为 Regex::CompileOptions ( #13248 )。不推荐使用匹配方法的 Regex::Options 重载。

正则表达式:无效的 UTF

与升级无关,此版本包含影响两个引擎版本的错误修复。 Crystal 的 String 类旨在成为有效的 UTF-8,但并未强制执行,完全可以接受包含无效的 UTF-8。字符串传递给 PCRE 或 PCRE2 时,有必要确保其内容有效。

之前没有这样做,库可能会崩溃。现在 Regex.new 和所有匹配方法都会验证字符串,并在它们包含无效的 UTF-8 时引发异常。如果已知字符串是有效的 UTF-8,则 Regex::CompileOptions::NO_CHECK_UTF  Regex::MatchOptions::NO_CHECK_UTF 会跳过验证以提高性能。

语言

此版本增加了对 LLVM 15 ( #13173 )的支持,其中包括迁移到 LLVM 的不透明指针。这已证明可以显着提高编译速度。

  • 建议使用 LLVM 15 构建 Crystal 以提高编译性能。
  • 此版本放弃了对旧 LLVM 版本的支持。 Crystal 现在需要 LLVM 8 或更高版本 ( #12906 )。
  • LLVM 16 支持正在开发中 ( #13181 )。

平台支持

此版本支持 Android,并在 Windows 中取得了重大进步

AArch64 安卓

  • 现在可以使用 Bionic C 运行时 ( aarch64-linux-android ) 以 Android 为目标。有关如何实现此工作的详细信息,请参阅相关 PR ( #13065 )。

 

Windows 

  • 在实现 Windows 的完整 stdlib 功能覆盖方面取得了进展。
  • 此版本包括一些与符号链接( #13141  #13195 )相关的改进
  • 此版本还为 Windows 信号 ( #13131 ) 添加了一个完整的存根。
  • 接受了一个补丁来支持 Windows 7 版本 ( #11505 )。

信号

在 Unix 系统中,进程间通信(例如终止进程和响应中断)是基于信号的, Crystal 中的 Signal API 用于此。为了支持使用不同机制的操作系统(例如 Windows),有必要使用可移植的 API,从实现中抽象出意图。

  • Process.on_interrupt 处理中断: SIGINT (Unix) 和 Ctrl+C  Ctrl+Break (Windows) ( #13034 )。
  • Process#terminate 获得了一个 graceful 参数。在 Unix 上,它会在 SIGTERM  SIGKILL 之间进行选择,而它对 Windows 没有影响,并且不管怎样( #13070 ),其行为都类似于 taskkill /f 
  • Process::Status#exit_reason  Process::ExitReason 以可移植的方式提供有关程序退出状态的信息 ( #13052 )

 标准库

  • 修复了 LibC 的一些函数定义,它们在 #13242  #13249 中使用了错误的类型(例如 Int 而不是 SizeT )。这会影响在 *-linux-gnu 目标上发送大量网络数据包的错误。

http

  • HTTP::StaticFileHandler 现在支持 Range 请求( #12886 )。

 

Spec

  • spec 结果使用 pretty_inspect ( #11635 ) 格式化,规范运行器支持 --color 选项 ( #12932 )。

Enum

  • Enum#includes? 现在需要设置所有位 ( #13229 )。
  • Enum.[] 是一个新的便捷构造函数,对标志枚举特别有用。它取代了现在已弃用的 Enum.flags ( #12900 )。 Enum#inspect 使用 Enum.[] ( #13004 ) 的简洁语法。

Range

当泛型参数为 Nil 时, Range#size  #each  #sample 在编译时不再出错。例如, (..4).each { } 现在在运行时引发而不是编译失败 ( #13278 )。

 

Indexable

Indexable 的实现应该是稳定的,即除非显式突变 ( #13061 ),否则不会改变行为。

 

更新公告:https://crystal-lang.org/2023/04/14/1.8.0-released/


相關推薦

2023-07-19

Crystal 是一种通用的、面向对象的编程语言,由 Ary Borenszweig、Juan Wajnerman、Brian Cardiff 和 300 多名贡献者设计开发。 Crystal 的语法受到 Ruby 的启发,属于编译语言,具有静态类型检查功能,但一般不需要指定变量或方法参数的类

2022-04-09

Crystal 是一种通用的、面向对象的编程语言,由 Ary Borenszweig、Juan Wajnerman、Brian Cardiff 和 300 多名贡献者设计开发。Crystal 的语法受到 Ruby 的启发,属于编译语言,具有静态类型检查功能,但一般不需要指定变量或方法参数的类型

2023-01-11

Crystal 是一种通用的、面向对象的编程语言,由 Ary Borenszweig、Juan Wajnerman、Brian Cardiff 和 300 多名贡献者设计开发。Crystal 的语法受到 Ruby 的启发,属于编译语言,具有静态类型检查功能,但一般不需要指定变量或方法参数的类型

2022-07-10

Crystal 是一种通用的、面向对象的编程语言,由 Ary Borenszweig、Juan Wajnerman、Brian Cardiff 和 300 多名贡献者设计开发。Crystal 的语法受到 Ruby 的启发,属于编译语言,具有静态类型检查功能,但一般不需要指定变量或方法参数的类型

2022-04-26

CoffeeScript 2.7.0 发布了。CoffeeScript 是一套 JavaScript 转译语言,它会将类似 Ruby 语法的代码编译成 JavaScript,而且大部分结构都相似。CoffeeScript 拥有更严格的语法。 此版本更新内容包括: 现在支持导入断言语法

2023-04-24

日在社交网站发布招聘信息时,提到了他们团队对于各种编程语言的丰富使用经历。 接着他本人谈论了一些关于各种编程语言的感悟,其中包括 Golang、Rust、Java、Python,甚至提到了比较小众的 Vala。下面是对他发布内容的整理

2022-11-04

Rust 1.65.0 稳定版已发布。此版本包含多项重要的语法变更,以及编辑器和标准库方面的改动。值得关注的是,Rust 1.65 现在还启用了 MIR 内联来优化编译,为 crate 提供了 3-10% 的编译时间改进。 语言特性 为枚举类型使用#[non_exh

2022-08-19

Lux 0.7 已发布,这是一门函数式、具备静态类型的 Lisp 编程语言,支持在 Java 虚拟机、JavaScript、Python、Lua 和 Ruby 解释器上运行。 Lux 0.7 主要变化 新增 内联函数 支持将配置参数从构建描述 (build description) 传递给编译器 基

2023-09-08

开发)和 Ops(应用部署)。 Wasm 应用开发需要自己的编程语言生态系统和相关工具,如编译器、框架、库、工具和运行时。Dev 类别包括编程语言、运行时、应用程序框架edge/bare metal、AI  推理、嵌入式功能和工具。 Was

2022-11-01

更和标准库变更等。 Idris 是一个类似 Haskell 的纯函数编程语言,类型系统支持 dependent types。 依赖模式匹配的依赖类型系统 简单的 C 函数接口 编译器级别的编码支持 where 语句,with 规则,简单的 case 表达式,模式匹配 l

2023-10-10

TIOBE 公布了 2023 年 10 月的编程语言排行榜。 C# 和 Java 之间的差距越来越小,达到了历史新低,目前两者的差距仅为 1.2%。TIOBE CEO Paul Jansen 认为,如果这一趋势继续保持,那么 C# 将在两个月后超过 Java。 在所有编

2023-11-15

万份开发工作机会,以了解市场以及最热门、薪酬最高的编程语言。值得注意的是,本项研究只关注了来自美国的职位。在总共 1000 万个开发工作岗位中,有 130 万个有工资。在这 130 万个职位中,有 23 万个职位属于编程语言类

2022-09-13

Swift 5.7 现已发布,该版本包括对语言和标准库的主要添加、对编译器的增强以提供更好的开发人员体验、对 Swift 生态系统中的工具(包括 SourceKit-LSP 和 Swift 包管理器)的改进、改进的 Windows 支持等等。 语言和标准库 Swift 5.7

2022-02-28

Rust 1.59.0 稳定版已正式发布,新版本最值得关注的特性是支持在代码中内联汇编 (Inline assembly),其他变化包括:引入解构式赋值、默认关闭增量编译,以及 Const 泛型参数支持设置默认值等。 内联汇编 (Inline assembly) 此项特