gpt4 book ai didi

programming-languages - 有没有没有全局变量的编程语言?

转载 作者:行者123 更新时间:2023-12-04 04:32:20 25 4
gpt4 key购买 nike

是否存在以不扩展到封闭函数的方式定义范围的语言?换句话说,是否有一种语言,其代码如下(类似于 Python 的语法):

>>> x = 3
>>> def fact(n):
... print x
... return reduce(lambda u, v: u*v, xrange(1, n+1), 1)
...

会报错,因为 x 没有在函数 fact 中定义?

一般来说,是否存在任何函数的范围不包括其中定义的函数的语言?

编辑 : 感谢您提供信息丰富的评论。我之所以想到这一点,是因为内部函数可以访问其包含函数提供的所有环境的情况听起来很接近 Joe Armstrong 在他的 argument against OOP 中描述的情况。 :

Because the problem with object-oriented languages is they’ve got all this implicit environment that they carry around with them. You wanted a banana but what you got was a gorilla holding the banana and the entire jungle.



同样相关的是我听说语言 Newspeak没有全局命名空间,虽然我不知道它是如何工作的。

我可以想象,在下面 Brian 的评论中提出的问题是,解释器/编译器在每个函数中人为地引入了内置函数(从 __builtins__ 在 Pythonspeak 或许多其他语言的系统中导入的函数)。毕竟,他们几乎总是首先在语言中受到特殊对待。另一种选择是将它们作为对象的方法作为参数传递给函数或从内部作为模块导入。

最佳答案

我将尝试大致概述它在新话中的工作原理。

您编写的任何代码都必须在模块中。 Module 是一种类,因为在Newspeak 类中可以包含其他类,Module 本质上是一个顶级类——一个不包含在另一个类中的类。新话的特别之处在于您不能引用模块之外的任何内容 .

那么如何在Newspeak 中打印到控制台呢?打印属于控制台类(a.k.a. Smalltalk's Transcript),它是平台模块的一部分。为了能够打印到控制台,您的模块将采用平台构造函数参数,从平台获取控制台,将控制台存储在插槽中,然后使用它进行打印。

基本上它就像在语言级别上强制执行的依赖注入(inject)。语言 IDE 和运行时可帮助您打包和 Bootstrap ,但如果您正在寻找更多详细信息 - 请转到 Gilad Bracha's blog ,见 this post例如,或查看 Newspeak Modules paper .

附言据记录,Newspeak 既不实用也不不可用——它曾在工业环境中使用,现在周围有一个小型(但不断增长的)开源社区。当然,Newspeak 是非常新的和不断发展的,但从个人经验来看 - 编写程序非常容易和有趣。

关于programming-languages - 有没有没有全局变量的编程语言?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4240422/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com