小编jos*_*uan的帖子

C#编译器(csc.exe)内存溢出编译嵌套类型和Linq

我发现使用Visual Studio开发了一个不愉快的行为.在编译C#时它挂起了我的机器.

我已经减少了对下一个最小源代码的行为

using System.Collections.Generic;
using System.Linq;

namespace memoryOverflowCsharpCompiler {

    class SomeType { public decimal x; }

    class TypeWrapper : Dictionary<int,
                        Dictionary<int,
                        Dictionary<int, SomeType [] []>>> {

        public decimal minimumX() {
            return base.Values.Min(a =>
                      a.Values.Min(b =>
                      b.Values.Min(c =>
                      c       .Sum(d =>
                      d       .Sum(e => e.x)))));
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用.编译

PROMPT> csc source.cs

    *** BANG! overflow memory usage (up to ~3G)

PROMPT> csc /?
Microsoft (R) Visual C# Compiler version 12.0.30501.0
Copyright (C) Microsoft Corporation. All rights reserved.
...
Run Code Online (Sandbox Code Playgroud)

(使用Windows 8.1 …

c# linq csc visual-studio

9
推荐指数
1
解决办法
317
查看次数

加速Haskell并发

MVar,TVar,IORef,...我无法加快一个thunk问题(我想).

(我原来的问题是一个线程代码,我做"forkIO"n次调用"addMany";但我认为我的问题是"shW"函数)

让下一个代码:

{-# LANGUAGE BangPatterns #-}
import Control.Concurrent
import Control.Monad
import System.Environment(getArgs)
import Data.Int
import Data.IORef

-- "i" times, add "n" for each IORef (in "a")
addMany :: [IORef Int64] -> Int64 -> Int64 -> IO ()
addMany !a !n !i =
  forM_ [1..i] (\_ ->
    forM_ a (shW n))

-- MVar, TVar, IORef, ... read/write (x' = x + k)
shR = readIORef
shW !k !r = atomicModifyIORef r (\ !x' -> (x' + k, ()))

main = …
Run Code Online (Sandbox Code Playgroud)

memory concurrency haskell lazy-evaluation

8
推荐指数
1
解决办法
583
查看次数

开箱即用的Haskell插件系统

我已经阅读过Haskell中的插件,但是我无法满足自己的目的(最好是在生产环境中使用).

我的插件系统目标是:

  1. 生产环境必须开箱即用(全部预编译).
  2. 加载插件已启用重置应用程序/服务,但理想情况下它会动态加载和更新插件.

一个最小的例子可能是:

app/service~plugins界面

module SharedTypes (PluginInterface (..)) where

data PluginInterface =
     PluginInterface { pluginName :: String
                     , runPlugin  :: Int -> Int }
Run Code Online (Sandbox Code Playgroud)

一些插件列表

-- ~/plugins/plugin{Nth}.??   (with N=1..)
module Plugin{Nth}( getPlugin ) where

import SharedTypes

getPlugin :: PluginInterface
getPlugin = PluginInterface "{Nth}th plugin" $ \x -> {Nth} * x
Run Code Online (Sandbox Code Playgroud)

应用/服务

...
loadPlugins :: FilePath -> IO [PluginInterface]
loadPlugins = undefined
...
Run Code Online (Sandbox Code Playgroud)

我认为使用动态编译链接库(将每个编译Plugin{Nth}为共享库)可以工作(作为FFI)但是

  1. 如何在运行时枚举和加载每个共享库?(获得每个getPlugin功能点)
  2. 存在一些更好的方法?(例如,在运行应用程序/服务之前的一些"神奇"过程)

谢谢!

UPDATE

完整运行的例子

在伟大的@xnyhps回答之后,一个完整的运行示例使用 …

haskell

8
推荐指数
1
解决办法
512
查看次数

Haskell,Hackage,GHC和生产力.该怎么办?

一年来,我一直是新秀哈斯克勒(我认为,"新秀哈斯克勒").我编写了很少的haskell程序(例如,一个非常简单的蛇游戏)但是当我必须使用某些库时,包依赖和ghc失败的版本对我来说很难.

我认为选择正确的ghc版本是一门艺术.

太新了,库也失败了(例如,yesod最近更新到7.4; grapefruit-ui-gtk目前失败了).

太旧了,库已经过时但尚未得到支持.

HackageDB及其开发者非常棒,但我觉得笨拙并且不知道开发严肃程序的正确方法.

我应该做什么?我是不是很缺乏经验?艰难的方式是唯一的方法吗?

(对不起,如果问题太笼统)

haskell ghc hackage

7
推荐指数
2
解决办法
449
查看次数

如何在运行时设置线程数(避免+ RTS -N#)

我希望运行我的并行程序

$ myprogram <args> -n 4 <args>
Run Code Online (Sandbox Code Playgroud)

代替

$ myprogram <args> +RTS -N4 -RTS <args>
Run Code Online (Sandbox Code Playgroud)

主要原因是规范我的程序的参数格式.

我知道它可以做到

$ myprogramwrapper <args> -n 4 <args>
$ cat myprogramwrapper
#!/bin/bash
ARG1=parse args
ARG2=...
NCORES=....
myprogram $ARG1 ... +RTS -N$NCORES
Run Code Online (Sandbox Code Playgroud)

但它很难看.

非常感谢!:)

parallel-processing haskell

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

通用Trie Haskell实现

我需要Haskell中的通用Trie实现,但我找不到任何.

我实现了自己的功能(这里只有键,我不需要Trie上的数据)但是我想在Haskell中找到一个好的Trie实现以供将来使用(我是菜鸟新手).

我找到了Data.Trie,但键是ByteString.

Data.Trie是正确的选择吗?(然后我不知道如何使用它)

谢谢!!!:d

haskell package trie

6
推荐指数
2
解决办法
1691
查看次数

使用多个项目

对于非平凡的项目,通常将它分成几个包(特别是,我通常使用包含1-10个项目的Visual Studio C#解决方案).

cabal clean && cabal configure && cabal install --force-reinstall每次修改另一个包中使用的包时,都会执行当前的Haskell工作流.

这样可以正常工作,但我希望能够使用几个Haskell项目,就好像只有一个(理想情况下是AB项目被修改然后使用ghci A检测更改B).

如果某些包A(在开发中)在几个"工作空间"中共享,则建议的解决方案(如果可能)也应该正常工作.

我寻找,但独特的相关响应(Haskell Cafe,使用多个项目2009)建议我当前的工作流程作为解决方案.

任何解释它的教程(工作区,共享"开发"包,......)都将受到欢迎!

非常感谢!!!:)

(我正在努力ghc)

haskell package ghc

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

广义的"折叠"或如何一次执行"折叠"和"地图"

(通过标题道歉,我不能做得更好)

我的问题是找到一些通用的结构或"标准"函数来执行下一件事:

xmap :: (a -> b) -> f a -> g b
Run Code Online (Sandbox Code Playgroud)

那么,我们不仅可以映射元素,还可以映射整个结构.

一些(不是真实的)例子

xmap id myBinaryTree :: [a]
Run Code Online (Sandbox Code Playgroud)

此刻,我必须做一个明确的结构conversor(典型fromList,toList)然后

toList . fmap id   -- if source struct has map
fmap id . fromList -- if destination struct has map
Run Code Online (Sandbox Code Playgroud)

(执行toStruct,fromStruct我使用fold).

存在某种推广to/ from结构的方式?(应该)存在函数(xmap)?

谢谢!!:)

haskell category-theory

5
推荐指数
2
解决办法
296
查看次数

选择性地包装类实例(或"提升"函数,如`sortBy`,`minimumBy`,...自动)的正确方法

让某些类型实例化为许多类.有选择地替换某些实例的行为的正确方法是什么?

表达它的一种方法可能是构造by运算符

data Person ...

sort personList              -- default Ord instance
(sort `by` age) personList   -- `age` modify `Ord` instance
Run Code Online (Sandbox Code Playgroud)

这里,sort可以是任何minimumarity(例如insert)的任何函数(例如).

如果我们有像这样的功能

reportPersons :: [Person] -> Report
Run Code Online (Sandbox Code Playgroud)

它的功能是使用Ord(排序列表),Show(格式化记录),......或其他特定实例; 使用funcBy模式我们必须写

reportPersonsBy :: (Person -> Person -> Ordering) -> (Person -> String) -> ... -> [Person] -> Report
Run Code Online (Sandbox Code Playgroud)

但是我们可以使用by原始的每个行为来包装reportPersons 而没有重构reportPersonsBy(解释示例并且最后没有解决相关问题).

我的玩具(并不完全令人满意)解决方案是(最后的完整代码):

将类型包装到类型中以覆盖实例的类

class Wrappable m where
    wrap   :: forall a . a -> …
Run Code Online (Sandbox Code Playgroud)

haskell category-theory

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

最小的haskell(ghc)程序安装(没有ghc/cabal的部署)

(我的问题是关于没有haskell-platform,ghc,cabal等的分发二进制文件)

我需要部署一个良好的cabal形成haskell应用程序(一个Yesod脚手架),但我有磁盘空间限制.

GHC大小约为1Gbytes,存储所有cabal源代码,包等...需要更多磁盘空间等...

显然,haskell-platform,ghc,...是关于开发(不是部署).

在我的具体情况下,我可以生成

cabal clean && cabal configure && cabal build
Run Code Online (Sandbox Code Playgroud)

并成功运行(有些像)

./dist/build/MyEntryPoint/MyEntryPoint arg arg arg
Run Code Online (Sandbox Code Playgroud)

但是,依赖关系呢?如何将其转移到生产环境?(连同我的"dist"汇编)

我可以在没有cabal的情况下放置二进制依赖项 怎么样?

非常感谢你!

deployment haskell static-linking yesod

3
推荐指数
1
解决办法
855
查看次数