我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

这期内容当中小编将会给大家带来有关来自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版,我们有一些很牛逼的计划:

  • First class co-monads

  • Kabanov-Raudj&auml;rv type inference

  • Lazy chunks

  • goto statement with labels

  • Dynamorphisms

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

  • Frostbyte 1.0 Language Specification

  • Documentation, Tutorials and Examples

  • API reference

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

免责声明:

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

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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

C语言自动变量的类型有哪些及怎么用

这篇文章主要介绍“C语言自动变量的类型有哪些及怎么用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C语言自动变量的类型有哪些及怎么用”文章能帮助大家解决问题。关键字auto为了更清楚地表达你的意图(
2023-06-27

c语言中x的n次方怎么写用函数表示出来

在 c 语言中,使用 pow() 函数可求 x 的 n 次方:语法:double pow(double x, double n)x 为底数,n 为指数返回值为 double 类型 x 的 n 次方C语言中求x的n次方函数表示在 C 语言中
c语言中x的n次方怎么写用函数表示出来
2024-04-29

怎么用Python编程语言来实现阿姆斯特朗数的检查

这篇文章主要介绍“怎么用Python编程语言来实现阿姆斯特朗数的检查”,在日常操作中,相信很多人在怎么用Python编程语言来实现阿姆斯特朗数的检查问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Pyth
2023-06-15

怎么使​用Python仿照C语言来实现线性表的顺序存储结构

今天小编给大家分享一下怎么使用Python仿照C语言来实现线性表的顺序存储结构的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
2023-06-16

将自然语言查询转换为SQL代码的AI工具怎么使用

今天小编给大家分享一下将自然语言查询转换为SQL代码的AI工具怎么使用的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。介绍人工
2023-07-05

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录