ruby和haskell
我们的JVM冒险今天在功能海洋中进行了新的停留。 到目前为止,我们已经遍及整个地图,沿功能海洋和动态海洋停靠。 今天,风和海浪把我们带到了小岛勒克斯(Lux),那里的阳光总是明媚,日落很美。
勒克斯–背景信息
Eduardo Julian:我对Clojure的设计和缺乏类型感到沮丧。 另一方面,Haskell具有惊人的设计,但仍然存在一些我不满意的缺陷。 而且它的元编程不如我想要的好。
在Lux上开展工作的愿望是将Clojure和Haskell融合在一起,并获得两全其美。 从那时起,我一直在不断研究并提出新的想法,以使Lux超越其前身并成为一门真正的伟大语言。
Lux是静态类型的Lisp,非常适合希望使用静态类型语言的Clojure用户以及想要使用Lisp的Haskell和Scala用户。 它对并发有很大的支持; 提供承诺,功能响应式编程,软件事务存储和参与者模型。
Lux为元编程提供了出色的工具,例如可以访问编译器的状态以及将一流的类型用作数据结构。 它也意味着可以在许多环境中运行并且可以与许多不同的技术(JVM,JavaScript,.Net,Python,Ruby,LLVM互操作,而上帝知道其他什么)。
Eduardo Julian: Lux具有三个主要原则:
#1:优雅而非权宜之计
让我远离Clojure的一件事是,它的大部分设计都像是骇客。 我有很多事情可以原谅,因为它们是想法的结果,这些想法在最初构想时听起来可能很棒,但后来却没有那么好。 但是,我认为Clojure的许多缺陷是疏忽大意,缺乏研究并且倾向于短期实用性而不是好的设计的结果。
在Lux中,我非常努力地完善所有内容,因此该语言及其库的设计是最好的。 我非常重视收到的关于可以改进的所有反馈,因为我从来不想感觉到Lux并没有发挥最大的潜力。
#2:教条的多样性
我相信没有人真正知道如何编写软件。
我们有很多想法和理论,但是任何声称知道哪种真正的软件编写方式是傻瓜还是骗子的人。 因此,Lux采用了向程序员提供工具的方法,让他们可以选择如何设计软件。
Erlang强迫您执行角色,而Go强迫您执行CSP,Lux则为您提供承诺,功能响应式编程,软件事务存储和参与者模型。
是否要使用ML样式的模块? 勒克斯有他们。 是否需要类型类样式多态性? Lux拥有它(从v0.5.0开始)。
作为语言设计师,告诉您如何编码不是我的工作。 帮助您尽最大努力是我的工作。
#3:自下而上,自上而下
我相信软件就像是随着时间而增长的有机体,而不是应该雕刻的巨大大理石块。 因此,Lux非常喜欢可组合的抽象。 甚至Lux的基本数据结构(变量和元组)在类型和值级别上都是可组合的。
这意味着您可以通过使用组合器来组合函数,以生成函数甚至不知道的数据类型。
例如:
(type: PrivacyModifier
#PublicPM
#PrivatePM
#ProtectedPM
#DefaultPM)
(def: privacy-modifier^
(Syntax PrivacyModifier)
(let [(^open) Monad]
($_ alt
(this! (' #public))
(this! (' #private))
(this! (' #protected))
(wrap []))))
在此示例中,我可以通过仅组合不知道该类型的单个语法解析器来创建PrivacyModifier的实例。
爱德华多·朱利安(Eduardo Julian):我提到了Lux存储库中的两个程序,如果他们想要获得Lux样本,可以看看。
- Lux Tutorial –这是一个玩具项目,可以实现TODO列表。 它相当简单,因为它的目的是演示如何使用语言的某些基本功能以及如何进行JVM互操作。
- Luxdoc – Luxdoc是一个更严肃的程序,因为我实际上使用它来生成Wiki的文档。 元编程非常繁琐,因此您可以使用它来学习Lux中的一些更高级的概念,例如编写与编译器数据交互或使用类型进行计算的函数(在这种情况下,生成文档)。
Eduardo Julian: Lux是一种通用语言,我希望能够将其用于后端,前端,移动和桌面开发。
另外,能够使用Lux进行分布式编程和物联网也很重要,因为我已经做了一些工作。
话虽如此,Lux并不是要成为世界上最快的语言,所以您可能还是更喜欢将C和C ++等编译为本地的语言用于计算密集型任务和系统编程。
爱德华多·朱利安(Eduardo Julian): Lux从2016年初我只能使用的东西,发展到足以让其他人尝试的东西。
编译器非常稳定,标准库已经增长很多,而且质量很高。
我认为Lux终于可以让人们尝试编写真实软件了。
爱德华多·朱利安(Eduardo Julian):很长时间以来,我一直在保证Lux可以在多个平台上运行,但是由于我总是要执行多个优先于此的高优先级任务,因此该承诺的交付被延迟了。
0.5.0版本是我通过兑现对Android的支持而兑现了诺言的第一个版本。
对于0.6.0,将添加JavaScript支持,并且我计划在每个版本中将Lux移植到一个新平台,直到实现将Lux成为通用语言的目标为止。
爱德华多·朱利安(Eduardo Julian):开始使用Lux的最佳方法是阅读位于此处的书。 每当发布时,我都确保将其更新为Lux的最新版本。
另外,人们可以加入邮件列表和Gitter聊天室,在这里我可以回答任何问题并提供示例和指导。
最后,任何人都可以通过luxlisp@gmail.com与我联系。
Eduardo Julian自2008年以来一直是一名开发人员。他已经研究了多种编程语言,框架和数据库。 Eduardo是一个多才多艺的自适应程序员。 他热情而Swift地学习,并且渴望所有新事物。
您是否熟悉JVM Universe中的所有编程语言? 你都发现了吗?
如果答案是“否”,那么我们将不遗余力地寻求知识。 因此,JVM信息图表的盗版者随附了一系列文章,其中我们重点介绍了您可能知道或可能不知道的语言。
ruby和haskell