// 请移步《从零开发一个JVM语言》系列。 // 由于这篇文章有人收藏就不删除了。。
写代码时常被null值困扰,一般来说不是什么问题,花些时间也就解决了。 最近实在忍不了,把自己代码里所有可能出现null值的地方全部用Optional代替了。结果比预想的好得多。 若返回某个类型,那么不看文档也能知道它不会为空。 若返回Optional,那么就不会忘记判空。 若方法为void,那么就说明无返回值。
然而这只是我自己的代码。若是能从语言层面限制null值,那么该多好。
于是突发奇想,自己写一个编译器,创建一门编程语言!
本帖为直播,也就是说,我现在仅有一个设想,等到实现估计得过很久。 。 首先是语言语法。 我决定借鉴java和python以及scala还有groovy外带c++的一些语法。当然,这是我第一次写编译器,会尽量的选择容易编译的语法。
借鉴python的4个空格缩进原则,这可以大大减少解析的难度 使用尽量少的字符。字段默认private,方法,类默认public。取消所有的字段、方法声明标志。返回值使用<代替常见的return。字段赋值自带类型推断。不过由于水平有限,也仅有此处和lambda使用类型推断。还有一开始的Optional简化,opt。
其他文法见下:
use java.util.Date
class HelloWorld[T](
str:String
get str.trim()
set str.trim()
t:T
set
n=0
get
):SuperClass(str,n)
date=Date()
get,set
opt num:int
get
num+1
set
num-1
val str="a string"
get
@Override
sayHello()
System.out.println("hello world")
getHello():String
<"hello world"
opt logic():String
if true
sayHello()
else if no // true/yes or false/no
System.out.println(getHello())
else
<getHello()
这是设计的第一版,以后还可能更改。
由于Optional在java8才提供,所以这个语言基于java8,所以命名为J8Script。英文8=eight,所以简称JES。