我已经准备好了,虽然在很多搜索之后我找不到它,如果某个人在哪里创建一个新的编程语言,它将完全参考透明,一切都是表达。
有关引用透明度的一些问题表明,某些语言(如Ruby和Perl)几乎将所有内容都作为表达式。
这可能/它存在吗?
如果我理解它,那么如果编程语言是完全引用透明的,这并不意味着根本就没有副作用,是否可以拥有一个没有副作用的完整编程语言?
标题的主要问题,如果创建一个完全引用透明的编程语言的目标,是不是说一切都将是一个表达?
答案 0 :(得分:3)
如果通过表达式我们理解返回值的任何内容,则不是表达式的计算必须不返回值,并且可以安全地删除引用透明度。所以,参考透明度要求一切都是表达式。
但是,一切都是表达并不意味着没有副作用。例如,在C语言中有许多具有副作用的表达式:采用涉及递增和递减运算符++和 - 的任何表达式。
有一些编程语言没有副作用。 Haskell是使用最广泛的。它使用一种称为monads的聪明技巧来解决需要修改状态的情况。例如,要在屏幕上打印“Hello”,Haskell不会将现有的Universe修改为屏幕上显示的单词;它创建并返回一个新的宇宙,其中的单词在屏幕上。
答案 1 :(得分:2)
可以使用完整的编程语言而没有副作用。看看lisp,haskell或许多其他功能语言。我相信这些都是你想到的很好的例子。