有没有不使用任何GC的函数式编程语言?

这里说的函数式编程必须完整支持闭包、匿名函数、First-Class函数、高阶函数。

阅读 7.1k
2 个回答

这是个好问题,这样来看问题,由于这里是函数式编程,所以不用对象这个词汇,使用资源代替: 其实这里的问题就一个lambda演算,闭包,匿名函数,高阶函数思想都是相同的

  1.GC的原理都是通过ref count来判断资源是否回收
  2.闭包是向下调用的作用域对上层作用域的ref
  3.一个上层作用域创建了一个资源后,并不知道这个资源是否会被下层的闭包函数ref到,而闭包默认这个资源是存在的,不然闭包也就没有意义了。

所以如果不使用到GC,那么这个资源生命周期由谁来接管?

1.如果是由声明这个资源的作用域来管理,那么这个资源的作用域就必须知道闭包函数不会再调用到,而这个闭包函数由谁调用上层是不知道的。
2.所以这个资源应该由闭包函数接管,但是闭包并不能随随便便的将这个资源free掉,因为它不知道这个资源在其他外部作用域是否被用到,和全局变量一样。

所以我认为不太可能有这样的语言出现,即使有,那也需要手动像C++一样管理资源,会丧失掉函数式编程的优雅。

C++11 基本上已经支持这些了。 在C++11中的闭包可以结合sharedptr&weakptr很好的解决了资源管理的相关问题。。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏