我想知道,是否有任何语言允许您在不重新加载整个应用程序的情况下即时添加/删除/更新任何类? (前提是我可以接受一些不便,例如确保当前没有任何方法在运行,还要付出额外的努力来“迁移”类数据成员)。
您替换1个文件并用于下一个客户端请求的Web应用程序不是我所需要的(例如Perl,PHP)。应用程序必须连续运行,并且具有某些内部状态。
其他要求是
关于已经做出的答案:
取决于项目的具体细节-Java可能是通过Node.js(nodejs.com)的答案,它允许您使用由V8引擎解释的JavaScript编程基于事件的服务器。
Dart VM具有出色的热代码重载支持这大大改善了Flutter的开发经验。
Smalltalk可以自然地做到这一点,Common Lisp(CLOS)有几个技巧。
您可以浏览https://github.com/dart-lang/sdk/wiki/Hot-reload处的列表。我还没有在这里提到的Lua是Lua,与其他动态语言相比,它享有很高的声誉。
您应该为此使用php,我也有一个linux服务器,它可以很好地更改文件,例如我拥有此php代码来打开一个带有可编辑站点文件的文本框,
Objective-C允许您热插拔代码,并且有一个允许这样做的插件。我回答了有关Objective-C <?php
$fn = "test.txt"; //the path to any file
if (isset($_POST['content']))
{
$content = stripslashes($_POST['content']);
$fp = fopen($fn,"w") or die ("Error opening file in write mode!");
fputs($fp,$content);
fclose($fp) or die ("Error closing file!");
}
?>
<h4>You are editing <?php echo $fn ?> </h4>
<form action="<?php echo $_SERVER["PHP_SELF"] ?>" method="post">
<textarea rows="25" cols="40" name="content"><?php readfile($fn); ?></textarea>
<br/>
<input type="submit" value="Save">
</form>
]的类似问题
Erlang被设计为支持热代码交换,这是其高可用性功能之一。
您尝试编写哪种类型的应用程序?在什么平台上?
GUI与服务器的问题可能排除了Linux与Windows的冲突。
以下语言是动态的:
现代JavaScript目前正在尽可能快地进行军备竞赛,因此在任何平台上都应该非常快。
Python可以做到这一点。请注意以下内容:
multiprocessing
模块。multiprocessing
,它是Python固有的not。最近,我对零停机服务迁移进行了一些研究。我的解决方案不是相对于语言的解决方案。这是一个想法,我们可以转储当前服务的状态,创建另一个进程,将连接状态描述转移到新进程,最后终止旧进程。如下图所示:
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS91U0NXMy5wbmcifQ==” alt =“在此处输入图像说明”>“ >>
通过定义良好的抽象服务描述格式和迁移协议,您可以将任何类型的服务从一个进程迁移到另一个进程,这意味着您可以使用C ++编写服务器,然后将该服务迁移到用Python编写的新进程,而无需任何断开连接。当然,您可以将服务从旧版本迁移到新版本。添加/删除/更新类不会有问题。有关更多详细信息,您可以参考我的文章
这种技术的困难在于,您必须转储正在运行的服务的所有状态,并将它们加载到另一个进程上。对于您可以找到的大多数库,很难获得这些类的内部状态,这意味着您可能需要对它们进行一些修改或编写自己的库。为复杂的服务转移服务状态将是一场噩梦,但是对于简单的服务来说,这没什么大不了的。
我们通过在免费版本的Gemstone上运行的Seaside smalltalk Web应用程序来执行此操作。在过去的20多年中,Gemstone一直在这样做,因此他们拥有您需要的一切。一些高可用性功能不是免费的。
看一下Scheme。您可以使用非常简单的扩展(例如Zero-downtime service migration)在Scheme中进行面向对象的编程。只需扩展代码以允许替换方法(应该非常简单),就可以根据需要热交换它们-语法仍然保持简单,因为,这是Scheme。 :)
Java可以通过其调试界面来做到这一点