Dart虚拟机本身在'Dart:mirrors'中实现'eval',开发人员使用它。是否计划公开此方法?

Dart虚拟机本身在'Dart:mirrors'中实现'eval',开发人员使用它。是否计划公开此方法?,dart,eval,dynamic-compilation,dart-mirrors,dart-sdk,Dart,Eval,Dynamic Compilation,Dart Mirrors,Dart Sdk,下面是在Dart平台中使用此eval方法的代码 这是通过反射完成的 \u getFieldSlow(展开){ //……跳过 var atPosition=未包装的索引('@'); 如果(atPosition==-1){ //公共符号。 f=_eval('(x)=>x.$unwrapped',空值); }否则{ //私人标志。 var withoutKey=未包装的子字符串(0,在位置); var privateKey=未包装的子字符串(atPosition); f=_eval('(x)=>x.

下面是在Dart平台中使用此
eval
方法的代码

这是通过反射完成的

\u getFieldSlow(展开){
//……跳过
var atPosition=未包装的索引('@');
如果(atPosition==-1){
//公共符号。
f=_eval('(x)=>x.$unwrapped',空值);
}否则{
//私人标志。
var withoutKey=未包装的子字符串(0,在位置);
var privateKey=未包装的子字符串(atPosition);
f=_eval('(x)=>x.$无钥匙,私钥);
}
//……跳过
}
static\u eval(表达式,私钥)
本机“带私钥的镜像/评估库”;

DEFINE_NATIVE_条目(使用私钥镜像\u evalinLibrary,2){
获取非空的本机参数(字符串、表达式、参数->本机参数(0));
获取本机参数(字符串、私钥、参数->本机参数(1));
const GrowtableObjectArray和库=
GrowtableObjectArray::Handle(隔离->对象存储()->libraries());
const int num_libraries=libraries.Length();
库&each_Library=Library::Handle();
Library&ctxt_Library=Library::Handle();
String&library_key=String::Handle();
if(库\u key.IsNull()){
ctxt_library=library::corebrary();
}否则{
对于(int i=0;i

V(带私钥的镜像\u评估库,2)\
附言

我在这里问这个问题是因为我不能在Dart邮件列表上问这个问题

附言

正如我们在
mirrors\u impl.dart
中看到的
static private method

static _eval(表达式,私钥)本机“镜像私钥库”;
有人希望此方法公开吗?(
这不是一个问题,只是一个有声思考的问题。

根据研究,像这样的纯字符串求值不太可能进入语言,即使可能会添加其他动态功能:

因此,例如,Dart不太可能支持将字符串计算为 当前上下文中的代码,但它可能支持加载该代码 动态添加到新的隔离区。Dart不太可能支持添加 字段,但它可能(通过镜像系统)支持添加 字段添加到类中,并且可以使用 noSuchMethod()。使用这些功能将有运行时成本;这是 将不使用它们的程序的成本降至最低对我们来说很重要

这一领域仍在发展中,因此我们欢迎您的想法 您需要从运行时动态性中获得什么


一般来说,这不是一个知识的问题,回答是你可以在别人面前炫耀他们的知识。不,这主要是一个好奇心的问题。对此做出创造性的反应比简单地引用信息更合适,因为信息基本上没有给出答案,但却很容易让人思考“这篇文章(FAQ)的作者最终会给所有人带来什么样的有用信息?”以及这个答案的作者。