为JVM创建编程语言

因为您知道,最终每个人都想创建自己的编程语言。

我一直对解析器和语言感兴趣。 我使用Xtext,Jetbrains MPS,创建了一些DSL等。我也写了关于该主题的博士学位论文,但是到目前为止,我还没有从头开始创建完整的编程语言。

为什么要创建一种新语言?

好吧,这个问题有很多错误的答案。 我的研究分为两个部分:首先,我认为学习更多的东西可能是一个很好的经验,其次,对于我来说,编程语言是一种观察现实,描述现实并更好理解现实的工具。 。 如果您愿意,请笑,但是对我来说,它主要是思考的工具。 通常这是一个笨拙的工具,因为我对技术变通方法或细节分散了注意力,而这些变通方法或细节对我尝试要做的事情几乎没有影响,也不重要。 例如,我已经厌倦了在这里和那里单击以生成equalshashCode方法的方法(是的,我知道Lombok和其他一些技巧)。

好的,孩子……但是要使一种语言可用,您需要很多东西

我认为现在,创建一种编程语言并使之能够 被有理智的人 使用的障碍大大低于以前。 我认为一种语言当然需要出色的语法和语义,但还需要大量的库和体面的工具支持。

要获取库,只需使其在JVM上运行即可。 真。 如果它在JVM上运行,则可以重用大量的库。 您的编程语言附带电池。 还考虑部署:我对许多语言着迷,但是每次尝试在JVM之外部署某些东西时,我都会后悔。 询问我的WorldEngine共同维护者 (一个python程序),在Linux,Mac,Windows上跨Python版本支持库有多大的乐趣。 多开心。

当然,您还需要工具支持:在我看来,这主要意味着一个不错的编辑器以及与参考平台的良好集成。 我在这里有一个优势,因为我有开发IDE插件的经验,而我刚结束编写Java的类型求解器 。 除此之外,我还为JavaParser做贡献。 因此,我对可以在与Java集成的集成中使用的工具了解了一两件事。

实际上,我计划:

  1. 为IntelliJ创建一个插件,该插件知道使用我的语言对文件和Java文件的引用。 令人高兴的是,基本上我已经编写了用于执行此操作的库。
  2. 创建Maven插件是因为Maven很糟糕,但是没有Maven的生活就更糟糕了
  3. 用ANTLR编写解析器(这很简单)
  4. 用ASM编写字节码生成器(一个很棒的库!)

好吧,请告诉我更多关于这种语言的信息

我刚刚开始研究它,但是…我有一个基本的编译器正在工作并支持一些构造。

这是一种具有类型推断的静态语言,这是一段已经被编译并运行的有效代码的示例:

namespace manga
 
// now print is an alias for call to all the overload variants of println on System.out
import java.lang.System.out.println as print
 
// we define this property in generale: a name is a String
property String : name
 
// this is our new datatype
type MangaCharacter {
    // we refer to the property defined above
    has name
    // we define a new property, UInt is an unsigned int
    has UInt : age
 
    // we overload toString. For short methods it can make sense to use 
    // this shorthand. And we have string interpolation
    String toString() = "#{name}, #{age}"
}
 
// this define a class with a main method
program MangaExample(String[] args) {
    // type inference at work: we are instantiating the class defined above
    // note that the constructor is generated for us
    val ranma = MangaCharacter("Ranma", 16)
    // let's call a java method ( System.out.println(String) ) and use more
    // string interpolation
    print("The protagonist is #{ranma}")
}

所以我有一个计划,我已经有工作在做,而且我很开心。
也许写另一种语言,但该死的,这真是愚蠢的……这真是太有趣了!

翻译自: https://www.javacodegeeks.com/2015/09/create-a-programming-language-for-the-jvm.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值