问题标签 [erlang]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
functional-programming - 二郎:干得好
我做了一些函数式编程,并且有一些在线参考资料,所以我发现基本的 Erlang 编程非常容易。
但是由于我做的程序/面向对象编程比函数式编程多得多,我希望我的 Erlang 代码不是很好的样式或效率。
任何人都可以推荐任何涵盖良好、高效、风格良好的函数式编程的资源吗?
谢谢你!
erlang - Erlang 中 io:fread 的意外行为
这是一个 Erlang 问题。
我遇到了 io:fread 的一些意外行为。
我想知道是否有人可以检查我使用 io:fread 的方式是否有问题,或者 io:fread 中是否存在错误。
我有一个包含“数字三角形”的文本文件,如下所示:
每对数字之间有一个空格,每行以回车换行对结束。
我使用以下 Erlang 程序将此文件读入列表。
这个程序的输出是:
请注意第四行的最后一个数字 (34) 和第五行的第一个数字 (10) 是如何合并为一个数字 3410 的。
当我使用“od”转储文本文件时,这些行没有什么特别之处;它们以 cr-nl 结尾,就像任何其他行一样:
一个有趣的观察是,出现问题的一些数字恰好位于文本文件中的 16 字节边界上(但不是全部,例如 6890)。
concurrency - 函数式语言(特别是 Erlang)如何/为什么能够很好地扩展?
一段时间以来,我一直在关注函数式编程语言和功能日益增长的知名度。我调查了他们,没有看到上诉的原因。
然后,最近我在Codemash参加了 Kevin Smith 的“Erlang 基础”演讲。
我很喜欢这个演示,并了解到函数式编程的许多属性使得避免线程/并发问题变得更加容易。我理解缺乏状态和可变性使得多个线程无法更改相同的数据,但 Kevin 说(如果我理解正确的话)所有通信都是通过消息进行的,并且消息是同步处理的(再次避免并发问题)。
但我读过 Erlang 用于高度可扩展的应用程序(爱立信首先创建它的全部原因)。如果所有内容都作为同步处理的消息进行处理,如何有效地处理每秒数千个请求?这难道不是我们开始转向异步处理的原因吗?这样我们就可以利用同时运行多个操作线程并实现可伸缩性?看起来这种架构虽然更安全,但在可扩展性方面倒退了一步。我错过了什么?
我理解 Erlang 的创建者故意避免支持线程以避免并发问题,但我认为多线程是实现可伸缩性所必需的。
函数式编程语言如何在本质上是线程安全的,但仍然可以扩展?
haskell - 函数式语言的显着特征
众所周知,所有函数式语言都共享一些基本属性,例如将函数用作程序的基本构建块,并具有所有后果,例如使用递归而不是迭代。但是,也存在一些根本性差异。Lisp 对 Lisp 代码和数据使用单一表示,而 ML 没有 ML 代码的标准表示。Erlang 有一个内置的基于actor的并发。Haskell 有单子。Haskell 在静态类型系统中区分了纯函数和不纯函数;机器学习没有。
其他函数式语言(Clojure、F#、Arc 等)之间有哪些显着的根本区别?基本我的意思是影响你用这种语言开发的方式,而不是例如它是否与一些广泛传播的运行时集成。
string - Erlang 构建动态文件名
我正在尝试创建一个名称基于函数的整数值的文件,显然下面不起作用,但给了你这个想法:
这应该很简单,即使 Erlangs 缺乏对字符串的支持,所以我一定只是遗漏了一些明显的东西(就像新事物的代价一样):
erlang - 名为 timer_server 的 gen_server 导致定时器模块函数不返回
我创建了一个主管,它产生了一个gen_server
我称为timer_server
. 这个timer_serve
r 的任务之一是管理注册和调用timer:send_interval
以在某个时间间隔向 pid 发送消息。
但是,在gen_server
我调用的 init 中,timer:send_interval
我被锁定了。文档说计时器:函数立即返回,所以这很麻烦。
当我重命名我gen_server
的record_timer_server
这个问题时,这个问题就解决了。我的问题是两个方面:
- 如果我的应用程序启动
timer_server
时已经有一个注册进程,为什么我可以创建一个注册进程?timer:start()
- 一旦启动,为什么这个函数不会导致错误匹配找到名称,如果它正在调用我
timer_server
使用该send_interval
函数?
我认为代码不是必需的,但如果需要,我可以更新以添加一些代码。
erlang - 优雅地终止 Erlang 服务器或 fsm?
我有一个具有 gen_fsm 行为的模块。现在我通过在适当的状态/消息中返回标准 {stop, Reason, State} 来终止它。
它似乎正确终止,但在运行时被认为是错误。
这是正常的吗?有没有办法停止 fsm 进程而不会被视为错误?
concurrency - 分布式系统上的邮箱处理器
我在第 379 页的 Expert F# 副本中注意到以下评论:
传递和处理消息
共享内存并发和消息传递并发之间经常存在区别 。前者在本地机器上通常更有效,本章后面的“使用共享内存并发”部分会介绍。后者适用于没有共享内存的系统,例如分布式系统,也可用于避免与共享内存相关的性能问题。
我对没有共享内存的进程之间的消息传递并发感兴趣。Expert F# 中的所有示例以及 Internet 上演示如何使用 MailboxProcessor 的所有示例都包含此代码的一些变体:
换句话说,您必须先在共享内存中处理 MailboxProcessor,然后才能将消息发布到其通道。据我所知,这不是 Erlang 风格的并发,因为您只能在同一进程中将消息发布到 MailboxProcessors(注意:进程,而不是线程)。
一个进程中的一个 MailboxProcessor 是否可以将消息发送到另一个 MailboxProcessor 进程?如果是这样,你能提供一个样本吗?
erlang - Erlang 中的进程平衡
有谁知道 erlang 标准库中是否有一种“负载平衡器”?我的意思是,如果我对一组非常大的数据进行一些非常简单的操作,那么为每个项目构建一个流程的开销将大于按顺序执行操作。但是如果我能在“正确数量”的过程中平衡工作,它会表现得更好,所以我基本上是在问是否有一种简单的方法来完成这项任务。
顺便说一句,有人知道 OTP 应用程序是否会进行某种平衡负载吗?我的意思是,在 OTP 应用程序中存在“工作进程”的概念(如 java-ish 线程工作程序)?
database - Mnesia 交易
不小心我正在编写的一些代码自己慢慢变成了一个数据库系统,具有增量索引、自由格式的“文档”(又名 CouchDB 类型),它可以具有任意属性...... annyywaay......我决定继续发展它,主要是为了教育目的,并且为了我的需要而真正严格地定制它并保持精简,因为我不想让它对我自己的需要有用(多么慷慨:))......
无论如何,我想知道是否有人对 Mnesia 如何“在幕后”实施交易有意见/更多信息。
Ulf W.,我一直很欣赏你在网上的帖子,所以也许你对此有更深入的信息?