编程语言 Haxe 4.0 发布

可得到 工具包发布 斧头4.0,其中包括具有强类型的同名多范式高级编程语言、交叉编译器和标准函数库。 该项目支持翻译为 C++、HashLink/C、JavaScript、C#、Java、PHP、Python 和 Lua,以及编译为 JVM、HashLink/JIT、Flash 和 Neko 字节码,并可访问每个目标平台的本机功能。 编译代码 分发者 根据 GPLv2 许可证,以及为 Haxe 开发的标准库和虚拟机 在麻省理工学院的许可下。

语言是 表达导向 具有较强的打字能力。 支持面向对象、通用和函数式编程概念。
Haxe 语法接近 ECMAScript 并且 展开 其功能包括静态类型、自动类型推断、模式匹配、泛型、基于迭代器的 for 循环、AST 宏、GADT(广义代数数据类型)、抽象类型、匿名结构、简化数组定义、条件编译表达式、将元数据附加到字段、类和表达式、字符串插值(“我的名字是 $name”)、类型参数(“new Main<String>('foo')”)以及 多得多.

类测试{
静态函数 main() {
var 人 = [
“伊丽莎白”=>“编程”,
“乔尔”=>“设计”
];

for (people.keys() 中的名称) {
var job = people[姓名];
trace('$name 靠$工作谋生!');
}
}
}

创新 4.0版本:

  • 用于指定函数类型“(name:String,age:Int)->Bool”或“(String, Int)->Bool”而不是“String->Int->Bool”的新语法。
  • 箭头函数语法是“(a, b) -> a + b”而不是“function(a, b) return a + b”。
  • 防止与使用 Null 值相关的问题(实验功能,可以选择为某些字段、类或包启用)。
  • “final”关键字用于不可变的类字段和局部变量。 “final”还可以用于定义函数,以防止它们被继承覆盖以及用于无法继承的类/接口。
  • Поддержка 除 Neko 之外的所有编译目标上基本类型“String”的 Unicode 标准。
  • 从头开始重写的内置解释器,现在以这个名称命名 EVAL。 得益于新的解释器,脚本和宏的运行速度更快。 支持交互式调试模式。
  • 新的编译目标系统(target) 哈希链接 - 专为 Haxe 设计的高性能运行时,支持编译为 JIT 或 C 的字节码,可轻松与 C 集成,并可访问低级数字类型和指针。
  • 新的 JVM 目标 - 允许您在 Java 中定位时添加“-D jvm”标志,从而跳过 Java 代码编译步骤来生成 jvm 字节码。
  • 能够在调用函数或构造函数时进行内联部署,即使它们没有这样声明。
  • 纳入的可能性 静态扩展 使用“@:using(path.ToExtension)”声明类型(例如“enum”)时。
  • 抽象类型现在支持“@:op(ab)”运算符的“set”版本来重新加载“obj.foo = bar”表达式。
  • “for”循环语法现在支持键值迭代:“for (key => value in collection) {}”。
  • 支持在表达式中使用类似 xml 的标记:“var a = <hi/>;”。 目前,该功能仅适用于宏解析,并且处于设计阶段。
  • 匿名结构类型的“完整”表示法中可选字段的语法为:“{ var ?f:Int; }”(短“{ ?f:Int }”的替代方案)。
  • 枚举值现在可以作为函数参数的默认值:“function foo<T>(option:Option<T> = None)”。
  • “enum Abstract Name(BasicType) {}”语法不再需要“enum”中的“@:”前缀。
  • 抽象枚举的自动编号:

    枚举抽象 Foo(Int) {
    变种A; // 0
    变种B; // 1
    }
    枚举抽象 Bar(String) {
    变种A; // “A”
    变种B; //“B”
    }

  • “extern”关键字不再需要使用“@:”前缀。
  • 删除了选项“器物 Dynamic”通过字符串访问类字段。 可用于外部类或通过抽象类型实现。
  • 为类型交集添加了“A & B”语法,目前仅适用于匿名结构和类型参数约束。 旧的约束语法已被删除。
  • 可通过语法“var map:Map<Int, String>> = [];”创建空“Map”实例类似于数组。
  • 添加了数据结构“haxe.ds.ReadOnlyArray”。
  • 元数据现在可以具有命名空间(“@:prefix.name function() {…}”)。 与定义类似:“#if (some.flag ... #end”。
  • 用于 IDE 的新服务协议 VSCode 插件.
  • 更新了 Web API 的外部定义 (extern) 并添加了缺失的定义。

来源: opennet.ru

添加评论