Haxe 4.2 工具包现已发布,其中包括具有强类型功能的同名多范式高级编程语言、交叉编译器和标准函数库。该项目支持翻译为 C++、HashLink/C、JavaScript、C#、Java、PHP、Python 和 Lua,以及编译为 JVM、HashLink/JIT、Flash 和 Neko 字节码,并可访问每个目标平台的本机功能。编译器代码在 GPLv2 许可证下分发,标准库以及为 Haxe 开发的 HashLink 和 Neko 虚拟机在 MIT 许可证下获得许可。
该语言是面向表达的,具有强类型。支持面向对象、通用和函数式编程技术。 Haxe 的语法接近 ECMAScript,并通过静态类型、自动类型推断、模式匹配、泛型、基于迭代器的 for 循环、AST 宏、GADT(广义代数数据类型)、抽象类型、匿名结构、简化等功能对其进行了扩展定义数组、条件编译表达式、将元数据附加到字段、类和表达式、字符串插值('My name is $name')、类型参数('new Main("foo")')等等。 class Test { static function main() { Final people = [ "Elizabeth" => "Programming", "Joel" => "Design" ]; for (name => people 中的工作) { trace('$name 以 $job 为生!'); } } }
4.2版本新功能:
- 在模块级别声明静态变量和函数,无需将它们包装在类中。
- 支持“经典”抽象类和函数。
- 所有目标平台的可变参数函数的本机实现 (haxe.Rest) 以及添加参数扩展运算符“f(...array)”。
- 单个线程的事件循环的实现(“sys.thread.Thread.events”)。
- 用于继承类型/字段文档的“@:inheritDoc”元数据。
- 所有目标平台上对外部方法的方法重载支持。
- 使用“@:forward.new”元数据将其类型底层的构造函数转发到抽象。
- 将“EIs”构造函数添加到“haxe.macro.Expr”。
- 能够使用“@:forward.variance”创建抽象类型变体。
- 统一变化时将“Any”类型表示为“Dynamic”。
- 在“haxe.exceptions”包中添加了一些基本的异常类型。
- 支持在声明变量时附加元数据。
- 函数“StringTools.unsafeCharAt”用于字符串迭代。
- eval(解释器):添加了对“eval.luv”包中“libuv”的绑定。
- eval:通过“eval.integers”包绑定到“Int64”和“UInt64”的本机实现。
- cs:UDP套接字实现。
- cs:“cs.Syntax”模块,用于内联插入 C# 代码。
- jvm:添加了“-D jvm.dynamic-level=x”标志来控制动态代码生成的优化数量。 0 = 无,1 = 字段读/写优化,2 = 编译时方法闭包。
- java、jvm:支持“--java-lib ”标志。
- python:线程 API 实现。
一般改进:
- “expr is SomeType”不需要用括号括起来。
- 提高了“@:using”类型扩展的优先级。
- 允许通过“super”使用静态类型扩展。
- 能够将元数据设置为“@:noDoc”字段。
- 抽象类型“Map”是可传递的。
- 支持枚举构造函数上的“@:native”。
- 支持类型声明(“typedefs”)上的“@:using”。
- 多行错误使用“...”作为后续行的前缀。
- 类型推断已被重新设计,匿名结构可以更好地转换为显式类型,并在函数完成时“关闭”。
- 将不带参数的函数类型推断为“()->...”而不是“Void->...”。
- 允许使用“function”关键字作为包名称。
- 改进了对象的内联。
- cs:添加了对 .NET 5.0 的支持。
- cpp:支持外部类的本机构造函数。
- php:添加了“php.Syntax.customArrayDecl”来声明本机数组。
- php:更新了各种函数和类的外部方法。
- php:匿名结构的优化实现。
- hl:如果模块没有更改,则跳过编译。
- lua:使用“hx-lua-simdjson”解析json。
- jvm:减少“sys.thread.Lock”实现中的 CPU 负载。
- Node.js:改进了与 Google Closure 编译器的兼容性。
- Null Safety:声明变量时考虑“@:nullSafety(Off)”:“var @:nullSafety(Off) v”。
此外,VSCode编辑器的新增功能也更新为新版编译器,其中出现了生成接口、简单抽象类以及属性方法缺失字段的提示。
来源: opennet.ru