问题标签 [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.

0 投票
2 回答
615 浏览

functional-programming - 二郎:干得好

我做了一些函数式编程,并且有一些在线参考资料,所以我发现基本的 Erlang 编程非常容易。

但是由于我做的程序/面向对象编程比函数式编程多得多,我希望我的 Erlang 代码不是很好的样式或效率。

任何人都可以推荐任何涵盖良好、高效、风格良好的函数式编程的资源吗?

谢谢你!

0 投票
3 回答
2073 浏览

erlang - Erlang 中 io:fread 的意外行为

这是一个 Erlang 问题。

我遇到了 io:fread 的一些意外行为。

我想知道是否有人可以检查我使用 io:fread 的方式是否有问题,或者 io:fread 中是否存在错误。

我有一个包含“数字三角形”的文本文件,如下所示:

每对数字之间有一个空格,每行以回车换行对结束。

我使用以下 Erlang 程序将此文件读入列表。

这个程序的输出是:

请注意第四行的最后一个数字 (34) 和第五行的第一个数字 (10) 是如何合并为一个数字 3410 的。

当我使用“od”转储文本文件时,这些行没有什么特别之处;它们以 cr-nl 结尾,就像任何其他行一样:

一个有趣的观察是,出现问题的一些数字恰好位于文本文件中的 16 字节边界上(但不是全部,例如 6890)。

0 投票
8 回答
14369 浏览

concurrency - 函数式语言(特别是 Erlang)如何/为什么能够很好地扩展?

一段时间以来,我一直在关注函数式编程语言和功能日益增长的知名度。我调查了他们,没有看到上诉的原因。

然后,最近我在Codemash参加了 Kevin Smith 的“Erlang 基础”演讲。

我很喜欢这个演示,并了解到函数式编程的许多属性使得避免线程/并发问题变得更加容易。我理解缺乏状态和可变性使得多个线程无法更改相同的数据,但 Kevin 说(如果我理解正确的话)所有通信都是通过消息进行的,并且消息是同步处理的(再次避免并发问题)。

但我读过 Erlang 用于高度可扩展的应用程序(爱立信首先创建它的全部原因)。如果所有内容都作为同步处理的消息进行处理,如何有效地处理每秒数千个请求?这难道不是我们开始转向异步处理的原因吗?这样我们就可以利用同时运行多个操作线程并实现可伸缩性?看起来这种架构虽然更安全,但在可扩展性方面倒退了一步。我错过了什么?

我理解 Erlang 的创建者故意避免支持线程以避免并发问题,但我认为多线程是实现可伸缩性所必需的。

函数式编程语言如何在本质上是线程安全的,但仍然可以扩展?

0 投票
7 回答
2632 浏览

haskell - 函数式语言的显着特征

众所周知,所有函数式语言都共享一些基本属性,例如将函数用作程序的基本构建块,并具有所有后果,例如使用递归而不是迭代。但是,也存在一些根本性差异。Lisp 对 Lisp 代码和数据使用单一表示,而 ML 没有 ML 代码的标准表示。Erlang 有一个内置的基于actor的并发。Haskell 有单子。Haskell 在静态类型系统中区分了纯函数和不纯函数;机器学习没有。

其他函数式语言(Clojure、F#、Arc 等)之间有哪些显着的根本区别?基本我的意思是影响你用这种语言开发的方式,而不是例如它是否与一些广泛传播的运行时集成。

0 投票
1 回答
164 浏览

string - Erlang 构建动态文件名

我正在尝试创建一个名称基于函数的整数值的文件,显然下面不起作用,但给了你这个想法:

这应该很简单,即使 Erlangs 缺乏对字符串的支持,所以我一定只是遗漏了一些明显的东西(就像新事物的代价一样):

0 投票
1 回答
492 浏览

erlang - 名为 timer_server 的 gen_server 导致定时器模块函数不返回

我创建了一个主管,它产生了一个gen_server我称为timer_server. 这个timer_server 的任务之一是管理注册和调用timer:send_interval以在某个时间间隔向 pid 发送消息。

但是,在gen_server我调用的 init 中,timer:send_interval我被锁定了。文档说计时器:函数立即返回,所以这很麻烦。

当我重命名我gen_serverrecord_timer_server这个问题时,这个问题就解决了。我的问题是两个方面:

  1. 如果我的应用程序启动timer_server时已经有一个注册进程,为什么我可以创建一个注册进程?timer:start()
  2. 一旦启动,为什么这个函数不会导致错误匹配找到名称,如果它正在调用我timer_server使用该send_interval函数?

我认为代码不是必需的,但如果需要,我可以更新以添加一些代码。

0 投票
1 回答
593 浏览

erlang - 优雅地终止 Erlang 服务器或 fsm?

我有一个具有 gen_fsm 行为的模块。现在我通过在适当的状态/消息中返回标准 {stop, Reason, State} 来终止它。

它似乎正确终止,但在运行时被认为是错误。

这是正常的吗?有没有办法停止 fsm 进程而不会被视为错误?

0 投票
3 回答
2522 浏览

concurrency - 分布式系统上的邮箱处理器

我在第 379 页的 Expert F# 副本中注意到以下评论:

传递和处理消息

共享内存并发消息传递并发之间经常存在区别 。前者在本地机器上通常更有效,本章后面的“使用共享内存并发”部分会介绍。后者适用于没有共享内存的系统,例如分布式系统,也可用于避免与共享内存相关的性能问题。

我对没有共享内存的进程之间的消息传递并发感兴趣。Expert F# 中的所有示例以及 Internet 上演示如何使用 MailboxProcessor 的所有示例都包含此代码的一些变体:

换句话说,您必须先在共享内存中处理 MailboxProcessor,然后才能将消息发布到其通道。据我所知,这不是 Erlang 风格的并发,因为您只能在同一进程中将消息发布到 MailboxProcessors(注意:进程,而不是线程)。

一个进程中的一个 MailboxProcessor 是否可以将消息发送到另一个 MailboxProcessor 进程?如果是这样,你能提供一个样本吗?

0 投票
4 回答
3985 浏览

erlang - Erlang 中的进程平衡

有谁知道 erlang 标准库中是否有一种“负载平衡器”?我的意思是,如果我对一组非常大的数据进行一些非常简单的操作,那么为每个项目构建一个流程的开销将大于按顺序执行操作。但是如果我能在“正确数量”的过程中平衡工作,它会表现得更好,所以我基本上是在问是否有一种简单的方法来完成这项任务。

顺便说一句,有人知道 OTP 应用程序是否会进行某种平衡负载吗?我的意思是,在 OTP 应用程序中存在“工作进程”的概念(如 java-ish 线程工作程序)?

0 投票
3 回答
553 浏览

database - Mnesia 交易

不小心我正在编写的一些代码自己慢慢变成了一个数据库系统,具有增量索引、自由格式的“文档”(又名 CouchDB 类型),它可以具有任意属性...... annyywaay......我决定继续发展它,主要是为了教育目的,并且为了我的需要而真正严格地定制它并保持精简,因为我不想让它对我自己的需要有用(多么慷慨:))......

无论如何,我想知道是否有人对 Mnesia 如何“在幕后”实施交易有意见/更多信息。

Ulf W.,我一直很欣赏你在网上的帖子,所以也许你对此有更深入的信息?