对于我正在编写的工具(http://hackage.haskell.org/package/explore),我需要一种在运行时读取haskell函数定义的方法,将它们应用于我的工具中的值并检索其应用程序的结果.
任何人都可以使用GHC(6.10.4或6.12.1)API给我一个非常基本的例子吗?
要在运行时从文件中读取的示例函数定义:
f x = 10**(4/1102*x - 1)
Run Code Online (Sandbox Code Playgroud)
预期的计划产出
--mapM_ print $ map f [428, 410, 389]
3.577165388142748
3.077536885227335
2.5821307011665815
Run Code Online (Sandbox Code Playgroud)
!! UPDATE!
我发布了一个快速回答,但它在执行目录中创建了一个目标文件,任何提示都可以避免这种情况并避免使用所有文件IO.我还希望看到一个在内存中执行所有操作的版本:例如,用户在GUI中提供函数定义,编译/评估不会创建任何目标文件.
我正在研究一个将数组与矩阵相乘的小应用程序.它没有任何问题.我正在努力衡量应用程序的执行时间.我可以找到每个进程的执行时间(开始和结束),但我需要全局时间.
这是我的代码:
int main(int argc, char **argv){
int rang, procesus;
MPI_Status statut;
double start, end, max_end = 0, min_start = 10000;
MPI_Init(&argc, &argv);
MPI_Comm_rank(MPI_COMM_WORLD, &rang);
MPI_Comm_size(MPI_COMM_WORLD, &procesus);
MPI_Barrier(MPI_COMM_WORLD);
start = MPI_Wtime();
printf("Starting time of process n. %d %f\n",rang, start);
if(rang==0){
//Master work
}else{
//slaves work
}
MPI_Barrier(MPI_COMM_WORLD);
end = MPI_Wtime();
printf("Ending time of process n.%d %f\n\n\n",rang, end);
MPI_Finalize();
//Out of the Parallelized task
if(min_start > start){
min_start = start;
printf("New minumum starting time %f\n", min_start);
}
if(max_end < end){
max_end …Run Code Online (Sandbox Code Playgroud) 请参阅下面的代码.
a)在这种情况下(简单继承,没有虚拟成员),B :: df()中的静态强制转换是否有任何开销(无论如何)?我找到了类似问题的一些相互矛盾的答案,这就是我要问的原因......
b)我正在考虑const M1 * func在A中私有化并在B中引入一个新的私有字段const M2 * func来避免演员表,但它使事情变得复杂并且更难以使用智能指针.你有没有看到避免演员的更好方法?
class M1 {
public:
double f() const;
};
class M2 : public M1 {
public:
double df() const;
};
class A {
protected:
const M1 * func;
public:
A(const M1 * p);
~A();
double f() const;
};
class B : public A {
public:
B(const M2 * p);
double df() const;
};
double M1::f() const { return 1973.0; }
double M2::df() const { return 0.0; …Run Code Online (Sandbox Code Playgroud) 我不知道我问的问题是否可用,但我只是想知道它是否存在以及它是如何工作的.所以这是我的问题:
我有自己的2-3个自定义模型类.例如,客户,员工和产品.现在我在一个字符串中有类名.并且基于字符串中的类名,我必须创建其对象并返回到VIEW.我怎么能实现这个目标?
我知道一个IF ELSE声明选项,但我想尝试更好的" 动态 "方式......
我非常想知道究竟是什么让Crystal比Ruby更快,而代码非常相似.简短的回答可能是它被编译,Ruby被解释,但我想更多地了解语言规范.
对于 Pytorch 和 Tensorflow,有区分开发和运行时的标签,我不太确定这两者之间有什么区别,有人可以帮助我更好地理解吗?
我想在运行时确定我的应用程序启动的类名,带有main()方法的类名,但我在另一个线程中,我的堆栈跟踪不会一直回到原始类.
我搜索了系统属性以及ClassLoader提供的所有内容,并且没有提供任何内容.这些信息不可用吗?
谢谢.
这有点啰嗦,所以这是快速版本:
为什么这会导致运行时TypeLoadException?(并且编译器是否应该阻止我这样做?)
interface I
{
void Foo<T>();
}
class C<T1>
{
public void Foo<T2>() where T2 : T1 { }
}
class D : C<System.Object>, I { }
Run Code Online (Sandbox Code Playgroud)
如果您尝试实例化D,则会发生异常.
更长,更具探索性的版本:
考虑:
interface I
{
void Foo<T>();
}
class C<T1>
{
public void Foo<T2>() where T2 : T1 { }
}
class some_other_class { }
class D : C<some_other_class>, I { } // compiler error CS0425
Run Code Online (Sandbox Code Playgroud)
这是非法的,因为类型约束C.Foo()与那些不匹配I.Foo().它会生成编译器错误CS0425.
但我想我可能会违反规则:
class D : C<System.Object>, I { } // …Run Code Online (Sandbox Code Playgroud) 我正在试图找出一种方法来"标记"将在稍后编写的类,以便我可以在运行时找到它们,但不强制使用特定的父类.目前我正在考虑应用协议,然后找到所有具有该协议的类.
但我无法弄清楚如何.
有谁知道是否有可能找到在运行时实现特定协议的所有类?或者 - 有没有更好的方法来"标记"类并找到它们?
有没有办法在运行时捕获/拦截应用程序的Intent而不修改Android框架?修改Android框架可能需要太多工作.请帮我.
runtime ×10
c# ×2
.net ×1
android ×1
c++ ×1
classloader ×1
clr ×1
compiler-bug ×1
crystal-lang ×1
docker ×1
evaluation ×1
generics ×1
ghc ×1
ghc-api ×1
haskell ×1
java ×1
mpi ×1
objective-c ×1
overhead ×1
performance ×1
reflection ×1
ruby ×1
stack-trace ×1
static-cast ×1