分享一个新的编程语言 Lemon 。

2017-11-12 13:07:19 +08:00
 zhicheng

项目地址 https://github.com/lemon-lang/lemon 官网地址 http://www.lemon-lang.org/

简单介绍一下,

纯 C 实现,支持 Linux, macOS, Windows,以及(未测试) FreeBSD, OpenBSD, NetBSD,Solaris 等支持 POSIX 的环境,如果选择关掉内置的 OS 和 SOCKET 模块,那么几乎任何有标准 C 编译器的平台都可以支持。Windows 需要 Windows XP 及以上,如果用的 Windows 2000 则需要安装 kernel extension。

代码量少,算上内置模块,也只有 20ksloc 编译后 200 多 k。

动态语言,语法和 C/C++, Java, JavaScript 接近,但注意和 JavaScript 是完全不同的语言。

支持 GC, 面向对象,多重继承,闭包,Coroutine, Continuation 等现代编程语言的大部分功能。

因为官方实现很小,你可以直接把实现放到项目里,这样就不用担心语言升级项目重写了。

官网就是用 lemon 实现的,可以作为一个简单的参考 https://github.com/lemon-lang/website

有另一个中文的简单介绍 https://www.textarea.com/zhicheng/lemon-bianchengyuyan-jieshao-884/ 更多信息请移步官网或在邮件列表中讨论论。

10691 次点击
所在节点    程序员
97 条回复
adadada
2017-11-13 05:19:46 +08:00
有文档介绍完整的语法和语义吗?
ghostsf
2017-11-13 07:17:03 +08:00
我也用 lemon 取名了 😂
qdwang
2017-11-13 07:25:37 +08:00
@zhicheng 高安全性(精心设计的类型系统),简洁(尽量少的语法规则),高表达力(尽量多的语法组合可能性),高一致性(所有语法与语法组合都服务于同一个中心逻辑思维模型)
zhicheng
2017-11-13 07:39:55 +08:00
@qdwang Brainfuck 是世界上最好的编程语言?
thinker3
2017-11-13 07:54:25 +08:00
好像是我要的,带大括号的 python
zhicheng
2017-11-13 07:57:34 +08:00
@adadada parser.c 的注释里有完整的 BNF 定义,可以参考一下。
@thinker3 Python 在很多设计上面非常合理,所以在构建对象系统的时候,我是直接按照 Python 的功能实现的。
thinker3
2017-11-13 08:05:25 +08:00
var 分号结尾的设计,我也喜欢
cs8425
2017-11-13 08:10:07 +08:00
@zhicheng #40
了解你意思了
抱歉 我表達的不是很清楚
我是指像 go 的 goroutine(+channel)用法
之前想嵌入 lua 遇到類似的問題
如果已知某些低階 api/操作會 block 住
要如何避開這個 block
我只想到 2 種解法
1 是全部徹底換成 event loop 的寫法(感覺就是重造一個 nodejs...)
2 是開多個線程&VM
再用 IPC 之類的溝通
但是很煩瑣...要顧慮的東西不少容易(人為)出錯...
不知道有沒有更好的解決方法?
例如別人寫好的拿來用之類的 XD
zhicheng
2017-11-13 08:12:17 +08:00
@cs8425 Lemon 里有 Scheme 语言里的 callcc 不知道是不是符合你的需求。
thinker3
2017-11-13 08:20:02 +08:00
有没有 from ... import ... as ... 这样的语法?
slince
2017-11-13 08:33:03 +08:00
下一步差文档,就是幼儿园老师式的文档,和学习案例,再者框架
araraloren
2017-11-13 08:39:29 +08:00
对于那些不喜欢 python 缩进的人会有吸引力,比如 我
szetrov
2017-11-13 08:42:02 +08:00
项目是楼主自己写的?先赞一个。不过你发错节点了
zhicheng
2017-11-13 09:09:15 +08:00
@thinker3 没有 from ... import ... as ... 这样的语法,只有 import ... as ... 。

import 'path.lm' as name;

import 的是包的文件路径。之所以不想支持 from ... import ... 是因为这个语法容易造成一个歧义,比如

a.lm
```
class A() {
}

print('a');
```

如果是 from 'a.lm' import A 容易给人造成一个直观的感受是 import 只 eval 了 class A (不执行 print('a') ),但实际上整个文件都会被 eval 的。所以 lemon 只支持 import 整个包。如果引用的时候不想加包名,可以加个本地变量。

import 'a.lm';

var A = a.A;

@slince 已经写好一个教程了,在找朋友帮忙审校一下。

@araraloren 我觉得 Python 的缩进已经成累赘了。

@szetrov 所以 “程序员” 结点可以讨论 “双拼使用体会” 和编程完全无关的内容,不可以讨论程序员使用的编程语言吗?
llbgurs
2017-11-13 09:25:11 +08:00
@zhicheng 大神,要学习源码,需要什么基础哇
zhicheng
2017-11-13 09:26:51 +08:00
@llbgurs 会点儿 C 就可以了 Lemon 的代码非常简单直观,没有用任何第三方工具和第三方依赖。
fenglangjuxu
2017-11-13 09:46:38 +08:00
nb,lemon 这个名字我喜欢。
PythonAnswer
2017-11-13 09:51:31 +08:00
哎呀有分号。。。
guyskk0x0
2017-11-13 10:14:19 +08:00
Python + Javascript 杂交语法,感觉有点怪异
alber1986
2017-11-13 10:15:47 +08:00
这个暂时就不学了,脑子不够用了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/405696

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX