为什么Erlang和其他函数式编程语言不是原生的c/c++?
为什么Erlang和其他函数式编程语言不是原生的c/c++?
我是一名严格的本地语言程序员,最近正在学习Erlang,并且我想知道为什么人们不直接使用c/c++来实现自己的函数/模块并在本地运行它呢?即使具有良好的可扩展性,这并不是非常困难实现的事情。以下是我的想法:
- 函数式编程语言中的任何函数都接受一些输入并生成一些输出。这可以通过编写小程序(.exe)在c/c++中轻松实现。每个可执行文件的名称格式为name_version.exe,并且它以一个文件作为输入数据并生成另一个文件作为输出数据。
- 编程调用只是创建一个临时输入文件,调用最新的.exe文件并等待结果。
- 函数式编程语言中的远程函数调用可以通过在每个服务器上创建一个服务器程序来实现,该程序接受形式为(可执行文件路径+ ' '+输入参数)的请求,然后服务器开始在其本地副本中查找最新版本的可执行文件,作为新进程调用它,并通过TCP流将结果发送回。
- 通过在每个服务器中创建一个监视程序返回当前状态(% CPU,%内存)并定期向其他服务器发送UDP消息来实现可扩展性。这样,每个.exe程序可以智能地对空闲服务器进行远程过程调用。
- 应用程序更新就像复制一个带有递增版本号的新的.exe文件一样简单。旧的.exe文件不会被删除,或者可以手动删除。
因此,总体而言,函数式编程似乎是解决可扩展性问题的方法。可扩展性问题通常在一个机器上的CPU、内存、硬盘等方面存在某些瓶颈的情况下出现。然而,如果函数式编程效率不够高,它实际上并不能成为可扩展性问题的真正解决方案。想象一下本地程序比使用函数式编程语言编写的程序运行速度快20倍,并且使用的内存少10倍。这就好像你有20台机器一起运行,但所有这些机器甚至无法击败只运行本地代码的一台机器。
为什么Erlang和其他函数式编程语言不是本地C/C++的?
随着软件变得越来越复杂,良好的结构变得越来越重要。良好结构化的软件易于编写、易于调试,并提供了一组可以重复使用以减少未来编程成本的模块。传统语言对问题的模块化方式有着概念上的限制。函数式语言推动了这些限制。在本文中,我们展示了函数式语言中的两个特性,高阶函数和惰性求值,可以极大地提高模块化能力。作为示例,我们操作列表和树,编写多个数值算法,并实现了Alpha-Beta启发式算法(一种人工智能中用于游戏程序的算法)。由于模块化是成功编程的关键,函数式语言对现实世界至关重要。
为了更好地理解,可以参考以下链接:
- Functional programming and non-functional programming(函数式编程和非函数式编程)
- The actor model: Why is erlang special? Or, why do you need another language for it?(Actor模型:为什么Erlang很特殊?或者为什么需要另一种语言来实现它?)
这些链接提供了关于函数式编程和Erlang语言的更多信息,以帮助我们理解为什么Erlang和其他函数式编程语言不是本地C/C++的。