`
gisbbs
  • 浏览: 10073 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

erlang 参数传递时是赋值or引用?

阅读更多
请教一个基础问题,erlang 参数传递时是赋值or引用?
找不到方法测试。
求教了。

答:
erlang 中怎么会有引用这种说法,变量都是拷贝过去的。

问:
无法实现引用,是么?
我在写的东西要传一个大状态。
所以疑惑了一下。

答:
erlang 所有的变量都只能在函数中传递,没有全局变量这一说。
你传递状态是通过改变函数参数实现的


问:
我不是很清楚当参数很大时,进行拷贝的效率如何.
能给我解惑一下么?


越大效率越低
另外是原子atom ,erlang 的垃圾回收机制是不回收的,除非运行结束。

问:
试想gen_server中call(_From,Status,Args)被调用时,Status就被改变了。这是不是意味着这里的Status是被引用传递进去的呢
我有阐述清楚么?


答:
不会
Status
的值
不会被函数改变
函数得到的只是一个新的参数邦定
绑定

简单的说
erlang 的参数都是拷贝方式的


广州-手  14:54:35
对,这就是内存共享。

返源
不见得多少,你的每一个函数结束就会回收当中的内存。
不存在引用

广州-手   14:53:52
没有引用的参数传递 不知会吃掉我程序的性能

上海-PHP-返源   14:54:34
如果有引用就有副作用
就没办法独自运行

广州-手   14:54:10
不知会吃掉多少性能。
但是我的status是一条很长的记录。

广州-手 )  14:55:23
稍稍有点担忧。暂时还不能测试。
广州-手   14:56:23
你刚说的参数 愈大效率越低,是怎么回事?
上海-PHP-返源   14:57:02
记录是单独存储的
不过你传递的时候还是拷贝

广州-手   14:56:47
恩。


上海-PHP-返源    14:57:40
但这里具体内部实现有很多方案
譬如你不写,只是取,我就可以共用内存。

广州-手    14:58:03
怎么实现,求指导。

上海-PHP-返源    14:58:56
这个跟你实现没关系哈,我说的erlang 内部。
总之你减少参数的大小
有利提高速度

广州-手   14:58:57
这个意思是erlang的自动优化么?

上海-PHP-返源    14:59:40
是的

本文转自Erlang中国(www.erlangchina.net)
原文网址:http://www.erlangchina.net/thread-845-1-1.html
分享到:
评论

相关推荐

    erlang两种参数模块化

    从给定的文件信息中,我们可以提炼出一些关于Erlang语言以及其参数化模块的重要知识点。 首先,Erlang是一种严格、动态类型的函数式编程语言。它的特点是没有破坏性更新,即数据不可变。Erlang内置了对并发的支持,...

    erlang编程 Introducing Erlang

    **Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建高可用性、容错性和并发性的分布式系统。"Introducing Erlang"是Simon St. Laurent撰写的一本入门级教程,...

    erlang趣学指南

    Erlang是一种动态类型语言,类型检查在运行时进行,这意味着你不需要在代码中声明变量的数据类型。不过,理解Erlang的类型系统对于编写高效且可维护的代码至关重要。 递归在Erlang程序设计中占有重要地位,因为...

    erlang-23.2.1-1.el7.x86-64.rpm

    Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ 是用 Erlang 编写的,因此需要 Erlang 运行时。确保安装了兼容的 Erlang 版本;Erlang:RabbitMQ ...

    erlang 中文基础教程

    当需要退出Erlang Shell时,可以通过两种方式实现:一是使用`Ctrl+C`组合键,系统会暂停并询问用户下一步操作;二是直接输入`halt().`,这是一种更为优雅的退出方式,它会直接终止Erlang Shell的运行。 #### 2. ...

    Erlang官网下载过慢

    Erlang是一种面向并发的、函数式编程语言,主要用于构建高度可扩展的、容错性强的分布式系统。在IT行业中,Erlang因其强大的实时性和...在面对下载问题时,可以尝试多种策略以获取Erlang安装包,从而继续你的开发工作。

    Erlang入门

    在Erlang中,函数是第一类公民,可以作为参数传递,也可以作为返回值。此外,Erlang支持模式匹配,使得函数定义可以基于不同的输入模式执行不同的逻辑。 **三、并发与并行** Erlang的并发模型是基于轻量级进程(也...

    erlang文献及资料汇总

    erlang文献及资料汇总 入门资料: erlang中文手册(R11B 文档译文,最适合入门) erlang位运算与二进制解析 ...erlang 消息传递机制 文章地址:http://blog.csdn.net/mycwq/article/details/43115733

    Erlang23_3.zip

    Erlang采用actor模型,每个进程(在Erlang中称为进程,而非操作系统级的进程)都是独立的,通过消息传递进行通信,这种设计使得系统在处理大量并发任务时表现出色。 在"Erlang23_3"这个压缩包中,我们可以推测这...

    erlang中文基础教程

    1. **变量**:Erlang变量以大写字母开头,且赋值后不可变。 2. **列表**:Erlang中的列表用方括号包围,可以包含不同类型的数据。 3. **模式匹配**:Erlang的函数调用和case语句都支持模式匹配,方便数据处理。 4. *...

    erlang25.0 windows版本

    5. **并发与分布式特性**:Erlang以其强大的并发处理能力著称,新版本可能在进程管理、消息传递等方面有进一步的改进。 6. **编译器升级**:Erlang的BEAM虚拟机和编译器可能会有优化,使得编译速度更快,生成的代码...

    xiandiao_erlang_Erlang课后习题_

    3. **热代码更新**:Erlang支持运行时代码替换,无需停止服务即可更新和修复应用程序,这在实时系统中非常有用。 4. **容错性**:Erlang的进程模型鼓励设计出可以失败并从中恢复的系统。当一个进程出错时,它不会...

    windows下安装Erlang环境

    **及早求值或严格求值**:Erlang的求值策略是及早求值,意味着表达式一旦被引用就会计算其值。 **脚本语言**:Erlang也可作为脚本语言使用,编写分布式应用尤其方便,因为它的分布式特性和虚拟机支持使得代码跨平台...

    erlang深度分析.pdf

    这涉及到监控ERTS的运行时参数,例如ETS(Erlang Term Storage)使用的内存、进程的数量和状态,以及SMP(对称多处理)支持程度等。 #### 3. 编码最佳实践 在Erlang开发中,最佳实践包括使用模式匹配、递归、消息...

    erlang资源

    1. **并发模型**:Erlang的并发基于轻量级进程(Lightweight Processes, LSPs),这些进程间的通信通过消息传递实现,这与传统的线程模型不同,具有更好的隔离性和容错性。 2. ** OTP(Open Telecom Platform)**:...

    erlang22最新下载包

    5. **并发与分布式系统支持**:Erlang以其轻量级进程和消息传递为基础的并发模型著名,新版本可能会加强这方面的能力,更好地支持分布式应用程序。 6. **编译器和工具链**:Erlang的编译器和构建工具可能也得到了...

    erlang_版本24.3.4.4

    - **BEAM虚拟机**:Erlang的运行时系统,全称是BIFs (Built-In Functions)、Erlang、Assembler and Memory管理器。 - **OTP行为**:如Supervisor(监督者)、GenServer(通用服务器)、GenEvent(事件处理器)等,...

    Erlang-or-java.rar_erlang

    标题中的“Erlang-or-java.rar_erlang”表明这是一个关于Erlang和Java之间通信的示例项目。Erlang是一种面向并发、分布式、容错的编程语言,常用于构建高可用性和高并发性的系统,而Java则是一种广泛应用的通用编程...

    erlang9.rar

    这可能是由于在发布时,Erlang 20已经是基于OTP 20的版本,而Erlang 9可能不再支持或者已经过时。 Erlang的安装过程通常非常简单,双击"otp_win64_20.0.exe"后,按照向导指示进行即可。安装过程中,你可能会被询问...

Global site tag (gtag.js) - Google Analytics