分享一个新的编程语言 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/ 更多信息请移步官网或在邮件列表中讨论论。

10770 次点击
所在节点    程序员
97 条回复
3dwelcome
2017-11-13 13:34:38 +08:00
楼主评论还是一如既往的犀利。

楼上那些 JJYY,挑三拣四的,talk is cheap, 有本事自己拿一个出来。

纯支持。
liqiazero
2017-11-13 13:56:37 +08:00
elm?
wxsm
2017-11-13 16:11:16 +08:00
https://github.com/lemon-lang/lemon/issues/10

敢问大佬,js 哪里 close to java 了?
cholerae
2017-11-13 17:20:30 +08:00
@zhicheng 额,我的意思就是在什么情况下用这个语言有好处,它适用于什么需求
clino
2017-11-13 17:42:39 +08:00
从 group 和 issues 来看,国际化方面做得不错
szetrov
2017-11-13 19:43:33 +08:00
sensui7
2017-11-13 23:59:52 +08:00
为什么要两个 null 呢, 楼主并没有在文档里详细解释设计的原因, sentinel 目测要成为最大的黑点
zhicheng
2017-11-14 08:20:03 +08:00
@sensui7 正常的是 nil。sentinel 是用来停止 iterator 的,除此之外不应该使用 sentinel。在 Python 里没有这个值,用的是异常,我不喜欢 Python 的这个设计。很多语言都有多个 null 值,比如

Objective-C 有 nil 和 [NSNull null]
JavaScript 有 null 和 undefined
lzyroot
2017-11-14 11:51:20 +08:00
无论如何,都得赞一个
sensui7
2017-11-14 23:18:31 +08:00
@zhicheng JS 的 null 很多人并不提倡使用啊, typescript 压根就不用 null, 导致了虽然使用===用来判断, 可是要判断是否为空时, 却又使用 == undefined(因只有 null 和 undefined 会返回 true, 0 , ''都返回 false)
zhicheng
2017-11-15 09:29:27 +08:00
@sensui7 没明白你的意思,在一个不支持指针的静态类型语言里确实是可以不用 null,但在 typescript 的官网里 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-0.html 有 null,而且在动态类型语言里,变量声明用的是 var 你不知道变量类型,如何设置它的初始值?像 C 一样随机?明显不符合现代语言的特征,如果你说像 JS 一样设置成 undefined 这明显不符合语义,并且 undefined 确实也是另一种 null。事实是 JSON 标准里有 null,所以你无论如何都要有 null。=== 这种特殊语法 Lemon 并不支持。

所以在 Lemon 里一种是代表一个值的 nil,就像其它任何语言里的 nil,它是一个正常值对象。还有一个 sentinel 代表的是一个特殊值,这个值是用来停止 iterator 的,你可以在 iterator 返回 nil,因为它是合法的值对象,但如果你返回 sentinel,就代表停止 iterator,在字典里就代表删除这个 key,这有什么无法理解或可黑的吗?在其它任何时候你也可以用 sentinel 这个值,但它没有任何实际意义,和 nil 也并不相等。它要比 JS 的 undefined 更符合语义。
findex
2017-11-15 18:08:28 +08:00
感谢楼主分享。
只是简单看了下程序语法,感觉命名很像 JS,语法结构体看似深得 Python 深传,但是好像很多语法糖还没有实现。
@cs8425 我觉得目前要把这些特性都集成进去,是一个非常大的工作量。

@GeruzoniAnsasu 我比较赞同部分你的观点。毕竟某门语言发明是要解决痛点的。lua 不仅在游戏行业如鱼得水,而且在某些嵌入式领域也是风风火火。

楼主的能力可以得到认可。但是语言发明,要解决痛点。如果没有亮点证明比其他的更好,用户为什么要用这门语言呢?我有朋友自己写的 lisp 方言,开发了自己的语言(语法各种难读),除了在自己网站使用了下,其他还没有怎么利用到。我觉得原因有很多。

做 App 产品 /游戏也是一个道理。
1、受众人群(谁是你的客户)
2、消费能力(是否愿意买单,这里就是是否有兴趣下载尝试)
3、产品优势(为什么比其他家强,痛点)
4、产品劣势(哪里不如他们)
5、机会(还有哪些潜力有待开发)
6、竞争风险(同类竞争产品带来的威胁)

只是个人的一些见解,希望楼主继续努力,比较欣赏楼主!
sensui7
2017-11-15 23:15:54 +08:00
@zhicheng 先说明并不是黑, 我的水平哪里敢黑- -. 纯询问.

js 和 ts 很多人只是从实践的角度不用 null, 虽然语义上用 undefined 代表空置不合理, 但能省掉很多麻烦.
noli
2017-11-30 13:28:15 +08:00
@zhicheng #91

“没明白你的意思,在一个不支持指针的静态类型语言里确实是可以不用 null ”。

Rust 支持指针,静态类型,不使用 NULL,通过用 Option 来封装掉 出现 null 的场合,强迫所有代码知道并且处理所有可能出现 null 的场合但又不需要显示地使用 null。

我觉得这是一种优秀的思想,“有物名无物”。
zhicheng
2017-11-30 14:57:23 +08:00
@findex 你说的没实现的语法糖是 [x for x in a] ? 对不起这是故意没实现的,因为这个完全可以用 map 取代,这套语法除了让人看了头晕没有太大的实际价值。

你说的关于 selling point 都很有道理,但你犯了一个关键性的错误,Lemon 语言不是一个商业项目,我不会向使用这个语言的用户收钱。

另外关于你说的痛点,其实是 marketing,App 用户和编程语言的用户不是一个群体,如果工程师真的有痛点,那么他就会去直接创造一个编程语言了,所以你说的 “痛点” 其实大部分时候都是伪需求。

我之所以开发 Lemon,是因为我自己有需要,之所以开源,是觉得 Lemon 的代码写得还可以,如果有跟我相似需求的,可以和我一起改进。它的目标并不是要取代 Python Lua 之类的语言,换句话说,如果你用 Python 用得很好,为什么要换呢?
ghostsf
2017-12-03 20:34:53 +08:00
@zhicheng 😂 还是要问
clino
2018-12-03 10:31:10 +08:00
@zhicheng 这个语言发展得如何了?

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

https://tanronggui.xyz/t/405696

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

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

© 2021 V2EX