Erlang热代码交换与解释语言

Erlang热代码交换与解释语言,erlang,hotswap,Erlang,Hotswap,Erlang广为宣传的特性是,它能够在应用程序运行时热插拔代码模块,这是其他语言无法提供的独特杀手特性 以下是一段引自: 大多数服务器执行一个固定的程序,并且 如果要修改服务器的行为,必须停止服务器 然后用修改过的代码重新启动它 尽管如此,在web开发环境中,大多数语言支持所谓的代码热交换,即使不这样称呼它。它只是更新代码并通过git或持续集成解决方案将其发布到web上 我知道Erlang在web以外的域中有很多应用程序,所以我确信在这些情况下它是有意义的 但是,与用于web的动态语言(如Pyt

Erlang广为宣传的特性是,它能够在应用程序运行时热插拔代码模块,这是其他语言无法提供的独特杀手特性

以下是一段引自:

大多数服务器执行一个固定的程序,并且 如果要修改服务器的行为,必须停止服务器 然后用修改过的代码重新启动它

尽管如此,在web开发环境中,大多数语言支持所谓的代码热交换,即使不这样称呼它。它只是更新代码并通过git或持续集成解决方案将其发布到web上

我知道Erlang在web以外的域中有很多应用程序,所以我确信在这些情况下它是有意义的


但是,与用于web的动态语言(如Python、Ruby、JavaScript)相比,这个特性是否有好处?web开发在哪些情况下优于流行的面向web的语言?

此功能不是针对web开发的,正如Erlang本身不是在专门考虑web开发的情况下创建的一样

这一特性优于用于web的通用动态语言中使用的模型的一个可能领域是对代码升级方式的精确控制

  • 代码不仅可以在调用之间更新,还可以在调用期间更新
  • 您可以为与调用相关的状态提供显式的升级路径

此功能不是针对web开发的,正如Erlang本身不是专门为web开发而创建的一样

这一特性优于用于web的通用动态语言中使用的模型的一个可能领域是对代码升级方式的精确控制

  • 代码不仅可以在调用之间更新,还可以在调用期间更新
  • 您可以为与调用相关的状态提供显式的升级路径

erlang中的热代码交换提供的不仅仅是升级代码的能力(我不会与python、ruby或javascript进行任何比较,我对它们的了解非常有限):

  • 您可以为每个节点决定何时加载新版本的代码
  • 然后VM中会出现2个版本的代码,所有正在运行的进程都将使用每个模块的旧版本,直到下一个对此模块的完全限定调用发生(Mod:Func/arity)
  • 如果您使用的是OTP行为,服务器(或fsm或gen_事件)将首先被调用,并返回其代码,在参数中接收模块的旧版本。因此,可以检查是否可以管理升级,并对状态数据、ETS、进程同步执行任何必要的操作。。。在真正开始新代码之前
  • 如果您没有使用OTP行为,仍然可以接收形式为
    {system,From,Req}
    的消息,然后调用
    sys:handle\u system\u msg/6
    ,这反过来又会调用code\u change call\u

erlang中的热代码交换提供的不仅仅是升级代码的能力(我不会与python、ruby或javascript进行任何比较,我对它们的了解非常有限):

  • 您可以为每个节点决定何时加载新版本的代码
  • 然后VM中会出现2个版本的代码,所有正在运行的进程都将使用每个模块的旧版本,直到下一个对此模块的完全限定调用发生(Mod:Func/arity)
  • 如果您使用的是OTP行为,服务器(或fsm或gen_事件)将首先被调用,并返回其代码,在参数中接收模块的旧版本。因此,可以检查是否可以管理升级,并对状态数据、ETS、进程同步执行任何必要的操作。。。在真正开始新代码之前
  • 如果您没有使用OTP行为,仍然可以接收形式为
    {system,From,Req}
    的消息,然后调用
    sys:handle\u system\u msg/6
    ,这反过来又会调用code\u change call\u