因为您知道,最终每个人都想创建自己的编程语言。
我一直对解析器和语言感兴趣。 我使用Xtext,Jetbrains MPS,创建了一些DSL等。我也写了关于该主题的博士学位论文,但是到目前为止,我还没有从头开始创建完整的编程语言。
为什么要创建一种新语言?
好吧,这个问题有很多错误的答案。 我的研究分为两个部分:首先,我认为学习更多的东西可能是一个很好的经验,其次,对于我来说,编程语言是一种观察现实,描述现实并更好理解现实的工具。 。 如果您愿意,请笑,但是对我来说,它主要是思考的工具。 通常这是一个笨拙的工具,因为我对技术变通方法或细节分散了注意力,而这些变通方法或细节对我尝试要做的事情几乎没有影响,也不重要。 例如,我已经厌倦了在这里和那里单击以生成equals和hashCode方法的方法(是的,我知道Lombok和其他一些技巧)。
好的,孩子……但是要使一种语言可用,您需要很多东西
我认为现在,创建一种编程语言并使之能够 被有理智的人 使用的障碍大大低于以前。 我认为一种语言当然需要出色的语法和语义,但还需要大量的库和体面的工具支持。
要获取库,只需使其在JVM上运行即可。 真。 如果它在JVM上运行,则可以重用大量的库。 您的编程语言附带电池。 还考虑部署:我对许多语言着迷,但是每次尝试在JVM之外部署某些东西时,我都会后悔。 询问我的WorldEngine共同维护者 (一个python程序),在Linux,Mac,Windows上跨Python版本支持库有多大的乐趣。 多开心。
当然,您还需要工具支持:在我看来,这主要意味着一个不错的编辑器以及与参考平台的良好集成。 我在这里有一个优势,因为我有开发IDE插件的经验,而我刚结束编写Java的类型求解器 。 除此之外,我还为JavaParser做贡献。 因此,我对可以在与Java集成的集成中使用的工具了解了一两件事。
实际上,我计划:
- 为IntelliJ创建一个插件,该插件知道使用我的语言对文件和Java文件的引用。 令人高兴的是,基本上我已经编写了用于执行此操作的库。
- 创建Maven插件是因为Maven很糟糕,但是没有Maven的生活就更糟糕了
- 用ANTLR编写解析器(这很简单)
- 用ASM编写字节码生成器(一个很棒的库!)
好吧,请告诉我更多关于这种语言的信息
我刚刚开始研究它,但是…我有一个基本的编译器正在工作并支持一些构造。
- 这种语言像我的家乡一样被命名为都灵 ,可以在GitHub上找到: https : //github.com/ftomassetti/turin-programming-language
这是一种具有类型推断的静态语言,这是一段已经被编译并运行的有效代码的示例:
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