programming-languages - 是否有一种具有 native 按引用传递/按名称传递语义的语言,可以在现代生产应用程序中使用?

标签 programming-languages pass-by-reference pass-by-name

这是一个重新提出的问题。

我寻找一种语言及其支持平台,该语言默认可以具有按引用传递或按名称传递语义。我知道一点历史,有 Algol、Fortran,还有 C++ 可以使之成为可能;但是,基本上,我寻找的是更现代的东西,并且提到的值(value)传递方法是首选默认(隐式假设)。

我问这个问题,是因为在我看来,传递引用/名称的一些优点似乎很明显。例如,当它在独立代理中使用时,不需要(在某种程度上)复制值,并且在这种情况下性能不会降低太多。所以,我可以将它用于例如富客户端应用程序或某些游戏风格或独立服务类型的应用程序。

对我来说,主要优点是符号的身份与其当前值之间的明确分离。我的意思是,当没有冗余复制时,您知道您正在使用您查询/接收的确切符号/路径。并且对值进行装箱不会干扰程序的实际逻辑。

我知道有 C# ref 关键字,但它不是那么严格,尽管可以接受。同样,我意识到几乎可以用任何语言(Java 作为即时示例)来模拟传递引用语义,等等......不确定传递名称:)

你会推荐什么——在适当的地方创建一个类似 DSL 的东西来满足这样的需求;或者使用一些我已经知道的语言?也许,我缺少一些东西?

谢谢!

更新:目前,我认为 Haskell 比较合适。但我没有调查太多,所以我想稍后会更新此文本。

最佳答案

Scala提供非常灵活的参数传递语义,包括 real call-by-name :

def whileLoop(cond: => Boolean)(body: => Unit) {
  if (cond) {
    body
    whileLoop(cond)(body)
  }
}

而且确实有效

var i = 10
whileLoop (i > 0) {
  println(i)
  i -= 1
}

技术细节: 尽管所有参数都像 Java 一样按值传递(通常是引用),但符号 => Type 将使 Scala 自动生成所需的闭包,以模拟按名称调用。

请注意,有 lazy evaluation也是。

lazy val future = evalFunc()

<小时/>

有趣的是,您具有一致的严格的按值调用语义,但可以在真正需要的地方准时更改这些语义 - 几乎没有任何语法开销。

关于programming-languages - 是否有一种具有 native 按引用传递/按名称传递语义的语言,可以在现代生产应用程序中使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2890895/

相关文章:

oop - 如何使用类型类来实现持久性、内省(introspection)、身份、打印、

c++ - 无法将 std::array 容器拆分为 2 个子部分

scala - 构造函数的按名称参数

Scala 函数不按名称用大括号(大括号)传递

java - Python 编程 - 在 Python 中开发企业级软件的规则/建议?

if-statement - PHP、C++等语法解释

java - 学习java,为什么我的私处是private?

c++ - 引用数据类型的可变参数模板

python - 修改给定 "path"的嵌套字典中的元素

c - 具有 passByName 参数传递范例的函数的输出