文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

来自ZeroTurnaround的新JVM语言Frostbyte怎么用

2023-06-17 11:05

关注

这期内容当中小编将会给大家带来有关来自ZeroTurnaround的新JVM语言Frostbyte怎么用,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

ZeroTurnaround很荣耀地发布了Frostbyte ,一种新的基于JVM栈的语言。该语言在出于使用标准Java软件栈与工具的无奈下产生的。此语言很有希望成为过去多年来大量的JVM语言的答案。我们有些许信心并相信Frostbyte将会一并解决软件开发者处理的社会与工程问题。

Frostbyte作为一个基于栈的语言最关键的创新是使用了带括号的波兰表达式语法。取代了以往先将指令压入栈然后再执行一条命令的方式,我们让你能够使用另外一种方式编码,一种让你感觉更加自然的方式。

Frostbyte代码映射非常接近Java字节码,任何代码的系统开销都表现得非常明显。我们择优的挑选了一些能够兼顾语言简洁与功能强健,让你能够替换了大多数的Java程序。

示例

先看看最基本的hello world例子:

fun main :=    (call echo „Hello World!“)

Frostbyte允许你定义二进制块,它总是用内联方式调用。例如,以下就是一个使用标准库echo二进制块的例子:

chunk echo :=    (with System (with (get out) (call println ...)))

扩展hello world以后:

fun main :=    (with System (with (get out) (call println „Hello World!“)))

Frostbyte使用Ropes作为主要的文本类型来取代String,但是Ropes会被转换为String,例如实现已有的Java代码:

fun main (args: Rope[]) :=    (echo (with „Hello, “ (call concat (args head))))

如果上面的代码保存为hello.fb文件,你可以用fb命令执行它:

> fb hello Jim  Hello, Jim

Frostbyte语言是完全国际化的语言。事实上,内建的默认语言是Estonian(爱沙尼亚语),但是语言会被从每一个源文件中检测到。其他的语言提供简单的转换文件--英语(英国)与俄语被默认支持了。例如:

Köis=Rope  esik=main  kaja=echo  võttes=with  kutsu=call  jätka=concat  head=pea

Estonian(爱沙尼亚语)表达的hello.fb如下:

fun esik(argumendid: Köis[]) :=    (kaja (võttes „Hello, “ (kutsu jätka (võttes argumendid (kutsu pea)))))

你可以为你自己的代码提供翻译映射--转义将会作为声明存储在.class文件中。Frostbyte IDE(即将推出)将会懂得这些转义并根据你选择的语言给与代码自动完成功能。

当然,一个语言介绍没有处理Fibonacci问题是不完整,一下我们有几种方式可以处理。使用if语句与递归是一种方法。我们尝试免去使用if语句,因为它确实是一种退化的模式匹配形式。在Frostbyte一种模式匹配的方法是在函数参数中描述模式并为每一种情况提供分离的函数体。

fun fib (0) := 0 fib (1) := 1 fib (n) := + (call fib (- n 1)) (call fib (- n 2))

正如你所看到的,例如+与*操作符需要call关键字。你也可以用op关键字穿件自己的操作符。

模式匹配也可以以表达式的方式出现在函数体内,一下是一个Estonian(爱沙尼亚语)的示例。我们将要介绍代码块,循环/闭包 和 let(olgu) 关键字。

// get current time as Aeg (Time) type  amps praegu: Aeg := p&ouml;&ouml;ra (v&otilde;ttes System (kutsu currentTimeMillis)) Aeg     // Funktsioon, mis leiab raamatukogust laenutatud raamatud,   // mille tagastamisega on hilinetud v&otilde;i mis on rikutud  fun leiaHilinenudRaamatud := (   olgu raamatud := v&otilde;ttes Andmebaas (kutsu leiaLaenutatudRaamatud);   v&otilde;ttes raamatud (kutsu koonda ( raamat ->     ons? (< (v&otilde;ta t&auml;htaeg) (kutsu praegu)) ->       (uus Hilinemine raamat)     ons? (v&otilde;ta rikutud?) ->       (uus Rikkumine raamat)   ))  )

为了让Estonian(爱沙尼亚语)能看懂,下面列出了翻译映射:

amps=chunk  praegu=now  Aeg=Time  p&ouml;&ouml;ra=convert  olgu=let  koonda=collect (filter + map)  ons?=case (introduce a pattern)  uus=new raamatud=books  raamat=book  t&auml;htaeg=due date  etc.

复杂示例

让我们来看看更加复杂的关于类的介绍:

class Vector2(x: Double, y: Double) :=   // dot product   op &zwnj;&middot;(that: Vector2) :=     + (* (get this x) (get that x)) (* (get this y) (get that y))

我们可以将(get this x)写为(with this (get x)),但是我们也with关键字来缩短:

op &zwnj;&middot;(that: Vector2) :=    (with this (      + (* (get x) (get that x)) (* (get y) (get that y))    ))

但更重要的是,如果我们编写 with X or Y,那么X和Y的元组将被放入栈中,任何访问这些域或者方法将会在X和Y两者间交替。

op &middot;(that: Vector2) :=   (with this or that (     + (* (get x) (get x)) (* (get y) (get y))   ))

我们可以再看看一切循环的模式,然后将其循环减少:

(with this or that (     + (* dup (get x)) (* dup (get y))   ))

dup 关键字将复制接下来的二进制码指令,但是结合this or that使用意味着***个(get x)将会 变成 this.x并且下一个(get x将会编程that.x),这是多么屌的特性啊。

二进制码

我敢打赌你一定对Frostbyte生成的二进制码很好奇。让我们再看看展开了的hello world吧。

fun main := (with System (with (get out) (call println &bdquo;Hello World!“)))

javap将生成这些:

0:   getstatic       #16; //Field java/lang/System.out:Ljava/io/PrintStream;  3:   ldc             #22; //String Hello World!  5:   invokevirtual   #24; //Method java/io/PrintStream.println:(Ljava/lang/String;)  8:   return

确实这个转换相当地直接:with System(get out)在这种情况下转换为getstatic。然后“Hello World”变成ldc,然后call invokevirtual。call总是被转换为invokestatic,invokevirtual或者invokespecial ,除了当它被用来扩充一个chunk ,在这种情况下它会被chunk替换,任何的参数将会被插入到bitemarks(例如在echo chunk中,...便是一个bitmark)

chunk echo := (with System.out (call println ...))

Frostbyte 1.0发展蓝图

该语言仍在发展壮大中,但是我们工作已经很接近***个公测版了。为了做好1.0版,我们有一些很牛逼的计划:

然而,我们仍在不断努力的为公用版奋斗着。以下是一些让你能够熟悉该语言以及大版本更新的一些链接:

上述就是小编为大家分享的来自ZeroTurnaround的新JVM语言Frostbyte怎么用了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯