你对Erlang上的氮有什么经验?

27

我一直在研究Nitrogen Project,据说它是Erlang最成熟的Web开发框架。

作为一种语言,Erlang非常令人印象深刻。然而,在使用 Nitrogen 时,我对于使用Erlang相对不常见的语法(除非你是PROLOG本地用户)来构建UI并不太感兴趣。

与其他主流Web框架,如Django或Rails相比,您有什么经验?


3
如果你对纯Erlang语法感到不满意,那么有两种可供选择的替代方案:LFE(Lisp Flavoured Erlang),它提供了完整的Lisp语法,并可以在http://github.com/rvirding/lfe找到;Efene则提供了更类似于JavaScript/Python的语法,并可在http://marianoguerra.com.ar/efene找到。请注意,这些替代方案并不会改变原始代码的含义。 - rvirding
4个回答

31

我之前对Nitrogen所做的工作很少,但是我已经监控邮件列表几个月了,因此我认为我对它有一些有用的说法。

对于您对Erlang和Nitrogen框架语法的担忧,我会回答说这听起来像是对陌生而非不适合的纯粹情况。客观地说,HTML并不是一种优美的语言,它有很多怪癖。您现在已经习惯了这一点,所以它似乎并不那么糟糕。给Nitrogen/Erlang一个机会,您可能很快就会习惯它。

对于您关于与其他语言和框架的比较的问题,我会说最大的区别在于使用Nitrogen时,整个网站都是由Erlang运行时直接提供服务的。Ruby on Rails也有这样的模式,但它仅用于测试。许多其他框架甚至没有运行所有内容在单个长时间运行进程中的选项。

在单个长时间运行进程中运行整个Web应用程序及其基础架构对站点如何运行具有重要影响:

  • 使用Apache时,每个子进程在处理N个连接后被终止,其中N大约等于500,您不能确定给定的子进程是否始终会处理给定客户端的所有请求。因为HTTP是无状态的,但Web应用程序几乎总是需要某些客户端状态,所以Apache子进程必须在处理新连接时重新构建其客户端状态视图。默认情况下,这意味着回到磁盘上存储有关该客户端的持久数据。有一些替代方案,比如memcached,但这些并不内置于类似LAMP类型的堆栈的核心中。对于Erlang来说,没有任何周期性地被杀死的东西,并且Erlang提供了像Mnesia这样的标准工具,提供了支持磁盘备份的内存数据库。

    顺便提一下,如果你熟悉nginx,那么你会知道它是基于Erlang相同的原则构建的,并且由于同样的原因而运行速度很快。nginx和运行Web服务器的Erlang实例之间的主要区别在于nginx不是编程环境,因此仍然必须将许多处理委托给外部代码。这意味着它共享与Apache相同的IPC和持久状态问题。

  • 由于运行时会持续运行并成为一个完全功能的编程环境,您可以使用Erlang构建更多系统部件,而不是使用拼凑而成的LAMP类型栈。这放大了以上好处。系统的各个部分可以通过消息传递和Mnesia进行协调,而不是使用笨重的IPC和MySQL,所有部件都持续运行,从而减少了耗费时间的状态重构。

  • 一打Apache子进程都访问持久客户端状态数据存储的情况就像一个基于锁的杂乱无章的负担。虽然这些框架都可以为您透明地处理锁定等问题,但它们无法隐藏正确完成所有这些操作所需的时间。

    Erlang是一种不纯的函数式语言,这意味着但并非要求数据的纯洁性;它还是以多进程为设计核心而构建的。这两个事实意味着,在基于Erlang构建的服务器中,您比在其他框架上天真地构建的服务器更不可能花费时间等待锁定。当然,在其他系统中优化掉锁定延迟是完全可能的,但这真的是您想要做的吗?您想成为那些在服务变得流行后不得不学习如何优化其Web堆栈的第1000个团队,还是您宁愿将所有这些都交给工具来完成,以便您可以花时间做一些其他人尚未完成的事情呢?


6
我也曾经担心Erlang的笨重语法。我构建了几个工具来缓解日常Web编程的烦恼,也许你会发现其中一个或两个有用:
  • ErlyDTL是Django模板语言的Erlang实现;它在Nitrogen中不可用,但在其他框架中可用,如Zotonic、Erlang Web、BeepBeep和Chicago Boss
  • Chicago Boss是一个完整的Erlang框架,它进行了大量的代码生成,以便您可以通过函数调用访问数据字段,而不是Erlang相当冗长的记录语法(例如Person:name()而不是Person#person.name
请注意,Nitrogen不包括数据库层,因此它与Rails或Django并不真正可比。有关基于数据库的框架的全面比较,请查看我对StackOverflow问题的答案。

https://stackoverflow.com/questions/1822518/current-state-of-erlang-web-development-frameworks-template-languages/2898271#2898271


1
数据库层可以从Zotonic中选择,他们正在使用Postgresql。(在Erlang中,数据库层被无数次实现,因此使用最好的非常重要。我会选择Zotonic) - FlinkmanSV
回复:“Nitrogen中没有数据库”,Rusty Klophaus是Nitrogen的创造者和主要开发者,他现在为Basho工作,这家公司推出了Riak,一个为网站提供支持的分布式数据库。 (Basho还推出了Webmachine,正如另一个答案中提到的。) Rusty在Vimeo上发布了一则演示视频,介绍如何将两种技术结合使用:http://vimeo.com/8258045。 我认为,这三种技术很可能会共同发展。 - Warren Young

4
我建议您查看Webmachine。它非常简单、快速,并且将接口留给您自己来设计。 Webmachine

3

Erlang Web也应被视为成熟的技术。它是一个MVC框架,而Nitrogen则更加基于事件。这是个人偏好的问题。

除了Webmachine,我没有使用过其他提到的工具,我认为Webmachine是一个很棒的工具,但它不像其他的web框架。它是一个HTTP处理器,并且非常适合构建restful接口。

我还建议你给Erlang语法一个机会。Erlang是我最喜欢的语言之一。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接