小编ins*_*itu的帖子

JVM GC事件的编程通知

我想跟踪GC花费了多少时间以及收集了多少内存,但不是通过分析GC日志(即分析我从-XX获得的内容:+ PrintGCWhatever).

我发现我可以使用Sun的ManagementFactory来获取一个GarbageCollectorMXBean,它可以给我一些包含内存信息的GCInfo对象,但我不能保证我可以通过这个意思收集所有 GC.

有人知道在代码中这样做的方法吗?

java garbage-collection jvm

7
推荐指数
1
解决办法
1001
查看次数

如何在Idris中重写?

我在伊德里斯写了以下命题:

total
plusOneCommutes : (n : Nat) -> (m : Nat) -> (n + S m = S n + m)
plusOneCommutes Z     k     = Refl
plusOneCommutes (S k) j     = 
 let inductiveHypothesis = plusOneCommutes k j in
   rewrite inductiveHypothesis in Refl
Run Code Online (Sandbox Code Playgroud)

使用Prelude.Nat源代码的灵感,我理解为什么使用递归调用(在第二种情况下)作为归纳假设来证明这种情况是有意义的.但是,通过重写漏洞的细节,我并不真正了解发生了什么以及为什么这样做.

如果我写:

plusOneCommutes (S k) j     = ?hole
Run Code Online (Sandbox Code Playgroud)

我从编译器中得到以下内容:

- + HolyGrail.hole [P]
 `--               k : Nat
                   j : Nat
     ------------------------------------------------------
      HolyGrail.hole : S (plus k (S j)) = S (S (plus k j))
Run Code Online (Sandbox Code Playgroud)

这看起来并不正确.根据plusOneCommutes …

dependent-type idris

6
推荐指数
1
解决办法
967
查看次数

为什么在Haskell中系统地标记严格的记录字段?

我已经读过好几次了,好的做法是系统地标记Haskell中严格的记录字段,例如代替

data Foo = Foo { bar :: Bar, quux :: Quux }
Run Code Online (Sandbox Code Playgroud)

data Foo = Foo { bar :: !Bar, quux :: !Quux}
Run Code Online (Sandbox Code Playgroud)

例如,以下是《Haskell Programming from First Principles》(第1134页)的引文:

遵循的一个好规则是脊椎懒惰,叶子严格!

我(认为我)了解严格性是什么,两者之间有什么区别。我不明白的是,为什么后者要系统地进行?

haskell

6
推荐指数
1
解决办法
380
查看次数

用Antlr解析单行C风格的注释

我为一种理解C风格单行注释的小语言编写了一个语法,例如.

  // this is a comment
Run Code Online (Sandbox Code Playgroud)

这是我使用antlr v3.0.1为这种语言编写的语法片段

  SINGLELINE_COMMENT
:   '/' '/' (options {greedy=false;} : ~('\r' | '\n'))* ('\r' | '\n' )+ {$channel=HIDDEN;};

  WS      :      (' '|'\r'|'\t'|'\u000C'|'\n')+ {$channel=HIDDEN;};
Run Code Online (Sandbox Code Playgroud)

除了当注释在脚本中的最后一个并且没有终止NL/CR时,我得到了来自antlr的恼人消息(在运行时):这几乎是有效的.

 line 1:20 required (...)+ loop did not match anything at character '<EOF>'
Run Code Online (Sandbox Code Playgroud)

我怎样才能摆脱这条消息?我尝试EOF(..)+表达式中添加令牌,但这不起作用.

java antlr

5
推荐指数
1
解决办法
852
查看次数

如何处理haskell中的通用反序列化?

在我的应用程序中,我存储并加载数据库中的对象(当前是本地平面文件...).这些对象都来自类型系列,Event a并且都可以进行序列化ByteString.但是a在类型家庭中可能会有所不同......

这是基类声明:

class BusinessModel a where
  data Event a   :: *
  apply :: a -> Event a -> a
Run Code Online (Sandbox Code Playgroud)

一个示例实现,以及所需的类型:

data User = User { userId :: UserId, userName :: Text } deriving (Eq, Show, Read, Generic)

instance ToJSON User
instance FromJSON User

type UsersView = M.Map UserId User

instance BusinessModel UsersView where

   data Event UsersView = NoEvent              -- ^A no-op event
                       | UserRegistered User
                       deriving (Eq, Show, Read, Generic)

  apply v (UserRegistered …
Run Code Online (Sandbox Code Playgroud)

haskell deserialization

5
推荐指数
1
解决办法
123
查看次数

如何限制WAI中请求正文和标头的大小?

我正在使用Scotty以及WAI开发应用程序。我希望能够限制请求的大小,包括正文长度和标头。我怎样才能做到这一点?是否可以使用普通的WAI中间件来实现?

haskell haskell-wai scotty

5
推荐指数
1
解决办法
309
查看次数

如何在Haskell中以组合方式处理数据结构迁移?

我试图在以下方式中实现(de)Haskell中数据结构的序列化:

  1. 处理数据结构的演变模式,
  2. 如果提供了一些"修补"代码,则允许安全读取过去的版本,
  3. 不需要保留旧版本的数据类型定义(就像safecopy的情况一样)

我过去以一种我发现不满意的方式实现了这种机制:代码中有很多重复,因为它需要遍历整个结构,即使只有一个叶子发生变化,处理各种版本的代码也是不可组合的.

我正在寻找的东西就像VCS中的补丁流一样:在每次版本更改时,我只需要编写代码来处理特定的更改(例如,某些字段从转换TextInt,有一个新字段,删除某些字段...)并在已知版本中给出一些序列化的字节块,该load函数应用所有补丁来检索有效的数据结构.

我试图在这些行上编写一些代码,但是无法以我正在寻找的方式获得可组合的东西(我甚至没有解决和类型的问题......).这是我的尝试:

data Versioned (v :: Nat) a where
  (:$:) ::             (a -> b) -> Versioned v a -> Versioned v b
  (:*:) :: Versioned v (a -> b) -> Versioned v a -> Versioned v b
  Atom  :: Get a                                 -> Versioned v a
  Cast  :: Versioned v' a                        -> Versioned v a
Run Code Online (Sandbox Code Playgroud)

我们的想法是以一种可以应用最小变化的方式来实现一个应用程序结构.

这似乎只能使用某种形式的Generic反序列化机制:将字节反序列化为通用形式,然后应用变换器链来达到满足当前的形状.

对解决方案的任何暗示都是最有帮助的.

2017年2月13日

我的问题可以分为两个子问题:

  1. 如何确保每个版本都存在反序列化函数,直到某些(静态)已知版本?
  2. 如何以安全和微创的方式处理数据结构的迁移?

问题1.产生以下(非编译代码):

  -- | …
Run Code Online (Sandbox Code Playgroud)

serialization haskell types

5
推荐指数
0
解决办法
144
查看次数

有没有办法用GHC分析每个模块的编译时间?

我认为所有内容都在标题中,但要提供更多背景信息.我们有两个70多个软件包,它们的编译时间差异很大:一个是另一个需要两倍的时间(不考虑并行化).我想知道哪些模块花费的时间最多,以便更好地了解造成这种差异的原因.

haskell ghc

5
推荐指数
1
解决办法
131
查看次数

如何在Haskell中的嵌入式DSL中捕获更高阶的函数?

我想在Haskell中编写一个嵌入式DSL,我可以用另一种语言生成代码(即Python,但这与问题无关).有很多不同的方法可以做到这一点,比如使用我所知道的基于Free monad的解释器或无标记解释器.但是我所知道的任何方法似乎都无法捕获函数定义,这种定义很有意义,但也非常有限.

我的问题是:如何将实际的Haskell函数嵌入到DSL中?我们的想法是将Haskell函数定义捕获为类似Lam var body构造函数的东西,它看起来像:

data Var = Var ...  -- use DeBruijn numbering?

data Expr repr = Lam Var repr
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望能够写出如下内容:

foo :: Expr repr
foo = \ n -> n + n * 12
Run Code Online (Sandbox Code Playgroud)

然后能够以Expr各种方式解释这一点,包括生成外国代码.

我用https://hackage.haskell.org/package/data-reify进行了实验,它提供了一些捕获函数的技术,但没有达到很远.我正在寻找的是什么?

dsl haskell

5
推荐指数
1
解决办法
183
查看次数

如何定义抖动规则来构建 docker 镜像?

我有一个震动构建(版本 0.16.4),它从Dockerfiles 和其他支持文件中构建了很多 docker 图像。我想将所有这些构建在一个“规则”中,其输出将是一个 docker 图像。我已经阅读了如何在 Shake 中定义计时器规则关于shake 中的自定义规则,但这并没有解释如何定义自己的输出

我想表达类似的东西

 Image "foo" "latest" %> \ img -> do
     need [ ... ]
     buildDockerImage "docker/foo" img

 Image "bar" "latest" %> \ img -> 
     needImage "foo" "latest"
     ...
Run Code Online (Sandbox Code Playgroud)

然后将图像作为依赖项进行抖动跟踪。我已经在旧版本的shake中实现了那种东西,但我对如何在> 0.16中做到这一点一无所知。

更新

我已经尝试过这个,遵循https://hackage.haskell.org/package/shake-0.17.3/docs/Development-Shake-Rule.html的指导方针

newtype Repo = Repo String
    deriving (Show, Eq, Hashable, Binary, NFData)

newtype Tag = Tag String
    deriving (Show, Eq, Hashable, Binary, NFData)

newtype SHA256 = SHA256 String
    deriving (Show, Eq, …
Run Code Online (Sandbox Code Playgroud)

haskell build shake-build-system docker

5
推荐指数
1
解决办法
179
查看次数