所以我有下面的代码,我试图为一个解释器编写一个抽象语法树&我不喜欢在相同的data类型中阻塞所有的东西,所以我打算编写一个具有基本行为的类型(在本例中是AST)。
{-# LANGUAGE ExistentialQuantification #-}
import qualified Data.Map as M
-- ...
data Expr = forall a. AST a => Expr a
type Env = [M.Map String Expr]
class AST a where
reduce :: AST b => a -> Env
我目前正在为自己的语言实现泛型函数,但是我遇到了以下问题:
泛型函数可以从另一个源文件(另一个解析器实例)调用。让我们假设源文件B中有一个泛型函数,我们从源文件A调用它,它导入源文件B。当发生这种情况时,我需要再次键入-检查函数的主体(源文件B),以检查从函数调用(源文件A)派生的具体类型的每个不同表现形式。为此,我需要多次访问源文件B中的函数体。
源文件B:
type T dyn;
public p printFormat<T>(T element) {
printf("Test");
}
源文件A:
import "source-b"
如果我的脚本并行地发出停靠器运行命令,那么停靠引擎将以串联方式处理这些命令。因为使用“码头运行”运行一个最小的容器映像需要大约100 or才能启动,这是否意味着并行运行1000个容器的命令将占用码头引擎100 or x 1000 =100 s或近2分钟?对接引擎为什么是串行的而不是并行的?人们怎么才能避开这一切?