Questions tagged «erlang»

Erlang是一种通用的,垃圾回收的编程语言和运行时环境,内置对并发,分发和容错的支持。

18
与Project Euler的速度比较:C,Python,Erlang,Haskell
我已经采取了问题#12从项目欧拉作为编程锻炼和比较我的(肯定不是最优的)实现在C,Python和Erlang和Haskell的。为了获得更高的执行时间,我搜索的第一个三角形数的除数大于1000,而不是原始问题中所述的500。 结果如下: C: lorenzo@enzo:~/erlang$ gcc -lm -o euler12.bin euler12.c lorenzo@enzo:~/erlang$ time ./euler12.bin 842161320 real 0m11.074s user 0m11.070s sys 0m0.000s 蟒蛇: lorenzo@enzo:~/erlang$ time ./euler12.py 842161320 real 1m16.632s user 1m16.370s sys 0m0.250s 带有PyPy的Python: lorenzo@enzo:~/Downloads/pypy-c-jit-43780-b590cf6de419-linux64/bin$ time ./pypy /home/lorenzo/erlang/euler12.py 842161320 real 0m13.082s user 0m13.050s sys 0m0.020s Erlang: lorenzo@enzo:~/erlang$ erlc euler12.erl lorenzo@enzo:~/erlang$ time erl -s …

8
为什么Elixir中有两种功能?
我正在学习Elixir,想知道为什么它具有两种类型的函数定义: 在模组中定义的函式def,使用myfunction(param1, param2) 用定义的匿名函数fn,使用调用myfn.(param1, param2) 仅第二种函数似乎是一类对象,并且可以作为参数传递给其他函数。模块中定义的功能需要包装在中fn。otherfunction(myfunction(&1, &2))为了使它变得简单,有一些语法糖看起来像,但是为什么首先需要它?我们为什么不能做otherfunction(myfunction))呢?是否只允许像Ruby中那样不带括号地调用模块函数?似乎从Erlang继承了此特性,Erlang也具有模块功能和乐趣,那么它实际上是否来自Erlang VM在内部的工作方式? 拥有两种类型的功能并从一种类型转换为另一种类型以将其传递给其他功能,会有什么好处?调用函数有两种不同的表示法是否有好处?
279 erlang  elixir 

11
Erlang在哪里使用,为什么使用?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我想知道成功或不成功使用Erlang的最常见应用程序/网站/解决方案的列表。 也非常感谢解释为什么将其用于特定的解决方案而不是其他编程语言。 列出BAD Erlang案例研究(滥用Erlang的案例)也很有趣。
258 erlang  case-study 

7
从技术上讲,为什么Erlang中的进程比OS线程更有效率?
Erlang的特征 来自Erlang编程(2009): Erlang并发是快速且可扩展的。它的进程是轻量级的,因为Erlang虚拟机不会为每个创建的进程创建一个OS线程。它们是在VM中创建,计划和处理的,与基础操作系统无关。结果,进程创建时间约为微秒,并且与同时存在的进程数无关。将此与Java和C#进行比较,在Java和C#中为每个进程创建一个底层OS线程:您将获得一些非常有竞争力的比较,其中Erlang的性能大大优于两种语言。 摘自Erlang的面向并发编程(pdf) (幻灯片)(2003): 我们观察到,创建一个Erlang进程所花费的时间在2,500个进程中恒定为1µs。此后,对于多达30,000个处理,它增加到大约3µs​​。图的顶部显示了Java和C#的性能。对于少量的过程,创建一个过程大约需要300µs。创建两千多个流程是不可能的。 我们看到,对于多达30,000个进程,在两个Erlang进程之间发送消息的时间约为0.8µs。对于C#,每条消息大约需要50µs的时间,最多不超过最大进程数(大约1800个进程)。Java甚至更糟,对于多达100个进程,每条消息花费大约50µs的时间,此后,当大约有1000个Java进程时,它迅速增加到每条消息的10ms。 我的想法 我从技术上不完全理解为什么Erlang进程在生成新进程时效率如此之高,而每个进程的内存占用却少得多。OS和Erlang VM都必须进行调度,上下文切换,并跟踪寄存器中的值等等。 就是为什么OS线程的实现方式与Erlang中的进程不同?他们还需要更多支持吗?为什么他们需要更大的内存空间?为什么它们的生成和通讯速度较慢? 从技术上讲,在生成和通信方面,为什么Erlang中的进程比OS线程更有效?为什么不能以同样有效的方式来实现和管理操作系统中的线程?为何OS线程占用的内存更大,并且生成和通讯速度较慢? 更多阅读 专注于SMP的Erlang VM内部(2008) Java和Erlang中的并发性(pdf)(2004) Java和进程中的线程的性能度量(Erlang,1998年)


4
Erlang用什么写的?
爱立信以Erlang和Erlang / OTP编写和编译的实现是什么?是汇编语言,C还是Erlang本身? 更新1:感谢DrJokepu。如果我理解正确,那么Erlang源到VM的编译器是用Erlang本身编写的。但是VM是用C编写的。 更新2:Hynek-Pichi-Vychodil指出了很多细节。 VM和HW交互驱动程序:在C中。 编译器(至VM)和库:在Erlang中。 扩展:通过使用该语言编写端口或Erlang节点,可以使用任何语言。

1
Elixir / erlang在哪里适合微服务方法?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 改善这个问题 最近,我一直在使用docker compose做一些实验,以部署多个协作微服务。我可以看到微服务提供的许多好处,并且现在有了一个很好的工具集来管理它们,我认为跳入微服务旅行并不难。 但是,我也一直在尝试Elixir,我非常喜欢它本身提供的好处。鉴于它鼓励将代码打包到多个解耦的应用程序中,并支持热代码升级,您如何将docker与elixir(或erlang)混合使用? 例如,如果我要使用docker,因为它提供了dev-prod奇偶校验,那么elixir怎么适合呢?鉴于Docker容器是不可变的,我将失去进行热代码升级的能力,对吗?蓝色/绿色部署或Canary版本又如何呢? 我的意思是,我可以用Elixir编写微服务,并像使用其他任何语言编写微服务一样使用。多语制仍然是微服务的好处之一,但是我没有得到使用OTP平台的全部好处,我猜想纯协作式erlang应用程序比使用中间队列在以不同(或不同)语言编写的微服务之间进行通信的方式更为优化。

11
如何从shell获取Erlang的发行版本号?
许多程序使用如下命令返回其版本号: $ program --version program (platform info) v1.2.3 这对于脚本编写程序的安装或维护以及系统管理员和朋友提供的一些其他受控自动化方法很有用。 问题 如何轻松获得Erlang(OTP)的版本号? 网络上 这里是一些不令人满意的解决方案([1]和其他教程/ Erlang文档): 仿真器 $ erl 1> erlang:system_info(otp_release). "R13B03" 很难编写脚本。我还没有找到erl从shell提示符执行单个命令的方法。 发布文件 $ cat /usr/lib/erlang/releases/RELEASES [{release,"OTP APN 181 01","R13B03","5.7.4", [{kernel,"2.13.4","/usr/lib/erlang/lib/kernel-2.13.4"}, {stdlib,"1.16.4","/usr/lib/erlang/lib/stdlib-1.16.4"}, {sasl,"2.1.8","/usr/lib/erlang/lib/sasl-2.1.8"}], permanent}]. 解析天堂(带外壳)。 另一种选择也可以是检查安装路径,但是它不是可移植的(我的安装路径不包括版本)。 个人背景:我正在编写一个脚本,以在几台计算机上安装具有插件的相同版本的RabbitMQ。一些插件对OTP版本的要求最低,这就是这个问题的开始方式。 [1] http://forum.trapexit.org/viewtopic.php?p=42946
108 shell  erlang 

4
Elixir是否可以做Erlang无法做的事情,反之亦然?
这个问题是在Beam VM及其提供的功能的范围内,而不是在Turing完整语言可以做什么的一般范围内。我想花一些时间学习纯正的Erlang或Elixir。我得到了两者之间的基本区别,并且由于宏,更好的语法和今天更快的语言开发,我倾向于Elixir。 我的问题是:如果我选择Elixir,我会偶然发现我无法在Elixir中做到但可以在Erlang中做到的事情吗?我可以将所有OTP内容,所有Erlang库,代码重新加载等与Elixir一起使用吗? 我并不是要在这两者之间要求某人的偏爱。关于语言可能性的事实。最好是从在生产中同时使用过的人。
102 erlang  elixir  otp 

4
Erlang的99.9999999%(九个九)可靠性
据报道,Erlang已在生产系统中使用了20多年,正常运行时间百分比为99.9999999%。 我做了如下数学运算: 20*365.25*24*60*60*(1 - 0.999999999) == 0.631 s 这意味着该系统在20年的时间内只有不到一秒钟的停机时间。我并不是要挑战这种方法的有效性,我只是好奇我们如何仅在0.631秒之内就可以关闭系统(有意或无意)。熟悉大型软件系统的任何人都可以向我们解释一下吗?谢谢。 有谁知道如何在一组处理单元(或机器)上计算服务的停机时间?

5
Akka与Erlang相比如何?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 我最近一直在看akka,它给人留下了深刻的印象。它似乎具有erlang的大多数杀手级功能-位置透明性,监管层次结构等。erlang是否具有akka没有的任何功能?
97 erlang  akka 

8
函数语言(特别是Erlang)如何/为什么很好地缩放?
一段时间以来,我一直在关注功能编程语言和功能的日益普及。我调查了他们,却没有看到上诉的原因。 然后,最近我在Codemash上参加了Kevin Smith的“ Erlang基础”演讲。 我享受了演示,并了解到函数式编程的许多属性使避免线程/并发问题变得更加容易。我知道状态和可变性的缺乏使多个线程无法更改同一数据,但是Kevin表示(如果我理解正确的话),所有通信都是通过消息进行的,消息是同步处理的(再次避免了并发问题)。 但是我读过Erlang用于高度可扩展的应用程序(这是爱立信首先创建它的全部原因)。如果将所有内容都作为同步处理的消息来处理,那么如何高效地每秒处理数千个请求?这不是为什么我们开始转向异步处理-这样我们才能利用同时运行多个操作线程并实现可伸缩性的优势吗?看起来这种体系结构虽然更安全,但在可伸缩性方面却倒退了一步。我想念什么? 我了解Erlang的创建者有意避免支持线程以避免并发问题,但是我认为多线程是实现可伸缩性所必需的。 函数式编程语言如何才能固有地具有线程安全性,又可以扩展?

3
当前的功能性反应式编程实现的状态如何?
我正在尝试可视化Haskell中的一些简单的自动物理系统(如摆锤,机器人手臂等)。通常,这些系统可用方程式来描述 df/dt = c*f(t) + u(t) 其中u(t)代表某种“智能控制”。这些系统看起来非常适合于功能性反应式编程范例。 因此,我抓住了保罗·休达(Paul Hudak)的著作《 The Haskell School of Expression》,发现那里展示的领域特定语言“ FAL”(用于功能动画语言)实际上对我的简单玩具系统非常满意(尽管有些功能值得注意integrate,似乎对于有效使用而言有点懒惰,但很容易修复)。 我的问题是,对于当今更高级甚至是实际的应用程序,最成熟,最新,维护良好,性能调整的替代方案是什么? 该Wiki页面列出了Haskell的几个选项,但是我不清楚以下方面: Conal Eliott的项目(据我所知)是这种编程范例的发明者之一,它的“反应性”状态看起来有些陈旧。我喜欢他的代码,但也许我应该尝试其他更多的替代方法?就语法/性能/运行时稳定性而言,它们之间的主要区别是什么? 引用2011年的一项调查的第6节,“ ... FRP实施在性能上仍然不够有效或可预测,无法在需要延迟保证的域中有效使用... ”。尽管该调查建议了一些有趣的可能的优化方法,但考虑到FRP已经存在了15年以上,我给人的印象是,至少在几年内,此性能问题可能非常或什至固有地很难解决。这是真的? 调查的同一位作者在他的博客中谈论“时间泄漏” 。问题是FRP特有的,还是使用纯非严格语言进行编程时通常遇到的问题?您是否发现过长时间稳定基于FRP的系统太难了吗? 这仍然是研究水平的项目吗?诸如工厂工程师,机器人工程师,财务工程师等人员实际上是否正在使用它们(以适合他们需求的任何语言)? 尽管我个人更喜欢Haskell实现,但我愿意接受其他建议。例如,拥有一个Erlang实现会特别有趣---那么拥有一个智能的,自适应的,自学习的服务器进程将非常容易!

9
Node.js或Erlang
当涉及到它可以处理的并发级别时,我真的很喜欢这些工具。 Erlang / OTP看起来更稳定,但是需要更多的学习,并且需要深入研究功能语言范例。看起来,Erlang / OTP在多核CPU方面做得更好(如果我错了,请纠正我)。 但是我应该选择哪个呢?从短期和长期角度看,哪一个更好? 我的目标是学习一种工具,该工具比传统语言更容易在高负载下扩展Web项目。

14
什么是Erlang编程的好IDE?[关闭]
关闭。此问题不符合堆栈溢出准则。它当前不接受答案。 想改善这个问题吗?更新问题,使其成为Stack Overflow的主题。 2年前关闭。 改善这个问题 据我所知,有用于NetBeans和Eclipse的Erlang插件。目前,谁占优势? 我还没有提到其他的Erlang IDE,与NetBeans和Eclipse相比,它们有多好?
78 ide  erlang 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.