我是Robocode引擎的开发者.我们想使Robocode多语言和Scala似乎是很好的匹配.我们这里有Scala插件原型.
问题: 因为用户是有创造力的程序员,他们可能会尝试以不同的方式赢得战斗.还可以从在线数据库下载机器人,任何人都可以上传机器人.因此,安全性的差距可能会导致用户计算机的安全漏洞.用Java编写的机器人在受限制的沙箱中运行.几乎所有东西都被禁止[网络,GUI,磁盘(有限),线程(有限),类加载器和反射].沙箱类似于浏览器小程序.我们使用SecurityManager,每个机器人自定义ClassLoader 等...
有两种方法可以在Robocode中托管Scala运行时:
1)将其与机器人一起装入沙箱内.我们非常安全,首选解决方案.但它会损害Scala运行时功能,因为运行时使用反射.也许在运行时生成类?使用线程进行一些内部清理?访问JVM /内部?(我不想限制语言的能力)
2)使用Scala运行时作为可信代码,在框外,安全性与JDK处于同一级别.(恶意)机器人的可见性.Scala运行时API是安全的吗?他们有保安人员的方法吗?有安全模式吗?Scala运行时是否有任何单例,可能会滥用机器人之间的通信?任何可以模拟线程的concurency/threadpool/messaging?(Scala运行时是否有任何安全审核?)
3)介于两者之间,某些运行时类和一些运行类.机器人/哪些类/包必须是可见的?它们只是私有实现?(这似乎是未来的解决方案)
问题: 是否有可能枚举和隔离必须在其余部分中运行在受信任范围内的运行时部分?具体的包和类?还是更好的主意?
我正在寻找具体的答案,这将导致安全的解决方案.随意的想法欢迎,但没有奖励.scala电子邮件小组正在进行讨论.还没有具体的答案.
可以在运行时动态地定义规则吗?还可以在运行时更改规则集.
例如,
at time = t_1 the ruleset is { R1, R2, R3 }
at time = t_2 the ruleset is { R1, R3, R4 }
.....
Run Code Online (Sandbox Code Playgroud)
R1,R2是在运行时定义的规则.
谢谢.
我正在尝试检查程序的性能.我在这篇文章中提到了OS级系统信息.当Runtime.availableProcessors()执行时,我得到的答案4.我读了availableProcessors()但它告诉该方法返回处理器数
我使用的是Windows 7核心i5 4gp.
这是代码:
int sumDigits(int n) {
int sum = 0;
while (n > 0) {
sum += n % 10;
n /= 10;
}
return sum;
}
Run Code Online (Sandbox Code Playgroud)
我了解此代码,并且该代码将取个位数字,将该数字与总和相加,然后删除该数字。它一直这样做直到 n 等于 0,此时它将返回 sum。直观地,运行时间将是数字 N 中的位数。但我不明白为什么这个时间复杂度是 O(logN)。我以为是O(N)。
即使有这样的解释:“具有 d 位数字的数字可以具有高达 10^d 的值。如果 n = 10^d,则 d = log n。因此运行时间是 O(logN)。” 不完全点击。
我遵循第一部分,如果 d 是 3,则 value < 10^d == value < 1000。意思是最大值为 999,长度为 3,我同意。但在那之后,当他们建立联系时,如果 n = 10^d,我不明白 1)他们如何知道要进行相等和 2)这如何使复杂性变为 O(logN) 而不是 O(N)。
我用Java启动子进程如下:
final String[] cmd = {"<childProcessName>"};
Process process = Runtime.getRuntime().exec(cmd);
Run Code Online (Sandbox Code Playgroud)
它现在在后台运行.一切都好又好.
如果我现在的程序崩溃(这是仍然在开发中:-))子进程似乎仍流连.如何在父Java进程终止时自动结束?
如果它有帮助,我使用的是Mac OS X 10.5
客栈~/script.vim,我有:
set runtimepath+=string(substitute(expand("%:p"), 'script\.vim', '', 'g'))
Run Code Online (Sandbox Code Playgroud)
我有一个别名.bashrc:
alias vimscript="vim -S ~/script.vim"
Run Code Online (Sandbox Code Playgroud)
运行string(substitute(expand("%:p"), 'script\.vim', '', 'g'))按预期工作.
问题是在set runtimepath表达式中使用它时,当我调用vimscript终端调用时它不起作用script.vim.当我set rtp在被vimscript调用以检查运行时路径之后在vim中运行时,未显示所需的附加字符串(但其他字符串在那里).
我创建了一个动态Web项目.截至目前,它有一个尝试运行的jsp文件.当我尝试将项目与特定的运行时(tomcat 6.0)相关联时,它不会发生.
我右键单击了项目/属性/ Targeted Runtimes.它没有显示任何运行时(我在服务器中添加了tomcat 6.0).当我单击"显示所有运行时"复选框时,所有内容都处于禁用模式.
可能是什么问题呢 ?
附上问题的截图.
更新:我甚至尝试创建一个新的运行时并将其与项目关联(项目/属性/ Targeted Runtimes/new).即使是新创建的运行时也会被禁用,并且无法将其与项目关联.
我有一个问题,这是代码:
@interface MyFoo : NSObject {
NSString *nameStr;
}
@end
@implementation MyFoo
- (id)init {
self = [super init];
if (self) {
self->nameStr = [@"some value of the string that is set right into the private ivar" copy];
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud)
问题是:忽略所有C++规则,忽略内存转储漏洞,为什么我不应该使用这样的箭头操作符语法?在Apple文档中是否存在一个规则,它表明它是不正确的,因为在将来的类中可能表示与运行时等结构的指针不同?
提前致谢!
目标:
我想在不相关的类型上实现类型安全的动态多态(即函数调用的运行时调度)- 即在没有公共基类的类型上.在我看来,这是可以实现的,或者至少在理论上是合理的.我会尝试更正式地定义我的问题.
问题定义:
鉴于以下内容:
A1, ..., An,每个类型都有一个被调用的方法f,可能具有不同的签名,但具有相同的返回类型 R ; 和boost::variant<A1*, ..., An*>对象v(或任何其他类型的变体),它可以并且必须在任何时候假设任何这些类型的一个值;我的目标是写指令概念上等同于v.f(arg_1, ..., arg_m);将获得在运行时调度的功能Ai::f,如果实际类型包含的价值v是Ai.如果调用参数与每个函数的形式参数不兼容Ai,编译器应该引发错误.
当然我不需要坚持语法v.f(arg_1, ..., arg_m):例如,类似的东西call(v, f, ...)也是可以接受的.
我试图在C++中实现这一点,但到目前为止我还没有找到一个好的解决方案(我确实有很多坏的解决方案).下面我通过"好的解决方案"澄清我的意思.
约束:
一个好的解决方案是让我模仿v.f(...)成语的任何东西,例如call_on_variant(v, f, ...);,并满足以下约束:
f …我正在寻找一种通过执行以下步骤来运行代码的方法:
到现在为止,我正在努力迈出第三步.我无法在运行时找到如何加载我的包.
我的主要问题是:
谢谢你的帮助.
代码示例#1:
private static void getPackageByNameAndVersion(string packageID, string version)
{
IPackageRepository repo =
PackageRepositoryFactory.Default
.CreateRepository("https://packages.nuget.org/api/v2");
string path = "C:/tmp_repo";
PackageManager packageManager = new PackageManager(repo, path);
Console.WriteLine("before dl pkg");
packageManager.InstallPackage(packageID, SemanticVersion.Parse(version));
}
Run Code Online (Sandbox Code Playgroud)
代码示例#2:
private static void loadByAssemblyNameAndTypeName(string assemblyName, string typeName)
{
AppDomain isolationAppDomain = AppDomain.CreateDomain("tmp");
object a = isolationAppDomain.CreateInstanceAndUnwrap(assemblyName, typeName);
Type x = a.GetType();
MethodInfo m = x.GetMethod("Main");
m.Invoke(a, new object[] { });
}
Run Code Online (Sandbox Code Playgroud)