小编Woj*_*ilo的帖子

LLVM中的多线程

我需要生成LLVM代码,它将服务于许多线程/任务(数十万).这些线程应该像英特尔TBB的任务,golang gorutines或其他一样轻量级.当然,它们可以使用外部C++库实现,如提到的Intel TBB(如果它与LLVM兼容).

我在很长一段时间内搜索有关LLVM中线程的任何信息,但我找不到多少.在LLVM的文档中描述了一些API调用,但我认为它不是我正在寻找的.

所以问题很少:

  1. 是否可以将英特尔的TBB或Cilk等技术与LLVM结合使用?
  2. 在这种情况下我应该使用什么线程库?

multithreading tbb llvm cilk cilk-plus

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

新的HTML5 Canvas API支持

我在HTML5 Canvas API中找到了几篇关于新函数的帖子,比如Path primitives或Hit Regions.似乎当前的规范(4.8.11)具有以下功能:http: //www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#hit-regions

虽然我的Chrome 23.0.1271.64中的context.addHitRegion(context是canvas2d上下文)返回undefined(我也无法创建Path原语).

有人知道这些功能什么时候实施(他们的公告是从3月开始,所以它是8个月大)?

我可以在某些浏览器的某些测试版中测试它们(如果它可以在linux下最好)吗?

html5 specifications google-chrome canvas

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

使用类和实例时的Haskell性能

问题

我想在Haskell中模拟一个多值输出函数.生成Haskell代码(不是手写的) - 这是重要的信息,见下文:

这当然可以通过从函数返回元组来轻松完成,比如

f x y = (x+y, x-y)
Run Code Online (Sandbox Code Playgroud)

但是当使用这样的函数时,我必须知道它返回什么样的元组:

...
(out_f_1, out_f_2)          = f a b
(out_g_1, out_g_2, out_g_3) = g out_f_1
...
Run Code Online (Sandbox Code Playgroud)

等等...但是在生成代码时,我不知道f的输出类型是什么,所以现在我正在使用Data.List.Select包并模拟上面的代码:

import Data.List.Select
...
out_f = f a b
out_g = g (sel1 outf)
...
Run Code Online (Sandbox Code Playgroud)

问题是性能 - 在我的测试程序中,使用Data.List.Select的版本比手工编写的版本慢两倍.

这是非常明显的情况,因为Data.List.Select是使用classes和编写的instances,所以它使用某种运行时字典(如果我没错).(http://hackage.haskell.org/packages/archive/tuple/0.2.0.1/doc/html/src/Data-Tuple-Select.html#sel1)

问题

我想问你是否有可能以某种方式编译版本(使用Data.List.Select)与手工制作的版本一样快?

我认为应该转换到编译器,这将告诉他"实例化"每次使用的类和接口(类似于C++中的模板).

基准

Test1.hs:

import qualified Data.Vector as V
import System.Environment
b :: Int -> Int
b x = x …
Run Code Online (Sandbox Code Playgroud)

performance benchmarking haskell tuples instantiation

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

Haskell并行列表计算性能

我是用平行的Haskell函数普兰parpseq我已经发现了一些有趣的事情.

我的例子基于Real World Haskell的书(Haskell中并行编程)中的例子:

常用代码:

import Control.Parallel (par, pseq)

-- <<sorting code goes here>>

force :: [a] -> ()
force xs = go xs `pseq` ()
    where go (_:xs) = go xs
          go [] = 1

main = do
    print $ take 10 $ parSort [0..1000000]
Run Code Online (Sandbox Code Playgroud)

排序代码1(取自本书):

parSort :: (Ord a) => [a] -> [a]
parSort (x:xs)    = force greater `par` (force lesser `pseq`
                                         (lesser ++ x:greater))
    where lesser  = …
Run Code Online (Sandbox Code Playgroud)

parallel-processing benchmarking multithreading haskell

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

GHC 7.7中引入的自由覆盖条件打破了GHC 7.6中有效的代码

这个想法

我正在写一个DSL,它编译成Haskell.

该语言的用户可以定义自己的不可变数据结构和相关功能.通过关联函数,我指的是属于数据结构的函数.例如,用户可以写(以"pythonic"伪代码):

data Vector a:
  x,y,z :: a
  def method1(self, x):
      return x
Run Code Online (Sandbox Code Playgroud)

(这相当于下面的代码,但也显示了相关函数beheva类似于具有开放世界假设的类型类):

data Vector a:
  x,y,z :: a
def Vector.method1(self, x):
  return x
Run Code Online (Sandbox Code Playgroud)

在这个例子中,method1是一个与Vector数据类型相关的函数,可以像v.testid(5)(数据类型的v实例Vector)一样使用.

我正在将这样的代码翻译成Haskell代码,但我遇到了一个问题,我试图解决很长一段时间.

问题

我试图将代码从GHC 7.6移到GHC 7.7(预发布7.8)(较新的版本可以从源代码编译).该代码在GHC 7.6下完美运行,但不在GHC 7.7下.我想问你如何修复它以使其在新版本的编译器中工作?

示例代码

让我们看一下生成的简化版本(由我的编译器)Haskell代码:

{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE FunctionalDependencies #-}

import Data.Tuple.OneTuple

------------------------------
-- data types
------------------------------
data …
Run Code Online (Sandbox Code Playgroud)

haskell type-inference typechecking typeclass ghc

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

如何使用yum python API列出,添加和删除存储库?

如何搜索已安装的repostiries,使用yum python API添加和删除它们(在fedora 17下).我搜索了大量的网站,我找到了如何管理包(比如这里:http://phacker.org/2008/06/20/yum-python-api/),但我还没有找到任何地方如何处理库).

我希望例如能够使用python yum API获得与以下相同的结果:

yum repolist
yum localinstall --nogpgcheck http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-stable.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-stable.noarch.rpm`
Run Code Online (Sandbox Code Playgroud)

(最后是simmilar yum-config-manager --add-repo; yum-config-manager --enable)

等等

python fedora repository yum package

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

可以通过组合完全替换继承吗?

这个问题不是 "遗产与构成"之类的问题.

我完全理解继承与组合有什么不同,我知道Liskov替换原理,钻石问题,它们的优点和缺点以及这两个概念似乎都很简单.但到处都有关于继承和构成的问题,我想,也许我误解了这个简单的想法.

让我们关注Go.Go是一种来自谷歌的语言,每个人都很兴奋它没有继承,它没有类,但它有组成,这很酷.对我来说,Go中的组合为您提供与其他语言(C++,Java,...)中的继承完全相同的功能 - 组件方法会自动公开并作为后续结构的方法提供,如下所示:

package main

import (
    "fmt"
)

type Car struct{
    name string
}

func (c *Car) move() bool { 
    return true
} 

type MyCar struct{
    Car   
}

func main() {
    var c MyCar
    fmt.Print(c.move())
}
Run Code Online (Sandbox Code Playgroud)

所以总结一下,组合比继承更好,因为:

  1. 更灵活(允许您在运行时更改组件,因此您可以影响"类"的工作方式.
  2. 没有钻石问题(但钻石问题是可以解决的,所以这不是强大的优势)

如果您考虑Go及其接口(每个对象,具有接口定义的方法,实现此接口隐含),您是否拥有最终解决方案?我们可以说含有一些语法糖的成分可以代替遗传吗?

这种设计符合Liskov替代原则.我是否会遗漏某些内容或继承(从任何语言中获知)与Go中已知的组合(和接口)相比没有优势?

===== edit1 =====

为了澄清,可以Go使用"标准"组合机制,就像这样(这个例子的行为与前一个一样):

package main

import (
    "fmt"
)

type Car struct{
    name string
}

func (c *Car) move() bool { 
    return true …
Run Code Online (Sandbox Code Playgroud)

language-agnostic oop inheritance design-patterns composition

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

使用Cabal(Haskell)从环境变量控制GHC构建选项

是否可以使用Cabal构建Haskell项目并从环境变量控制GHC标志?

在我的project.cabal文件中有一个"GHC-Options"部分,它可以控制标志,但我很乐意从命令行中另外设置它们.

haskell compilation environment-variables ghc cabal

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

在Haskell中为部分应用类型创建数据构造函数

是否可以在Haskell中为部分应用类型创建数据构造函数?

ghci会话:

Prelude> data Vector a b = Vector {x::a, y::b}
Prelude> :t Vector
Vector :: a -> b -> Vector a b
Prelude> type T1 = Vector Int
Prelude> :t T1
<interactive>:1:1: Not in scope: data constructor `T1'
Prelude> let x = Vector
Prelude> let y = T1
<interactive>:46:9: Not in scope: data constructor `T1'
Run Code Online (Sandbox Code Playgroud)

我想为T1类型创建数据构造函数 - 它甚至可能吗?或者我是否必须使用newtypes,因为无法手动定义此类函数?

constructor haskell partial-application algebraic-data-types

8
推荐指数
2
解决办法
860
查看次数

Haskell Repa模板黑客

问题

我正在尝试理解Repa如何工作,我正在使用Repa Examples包中的"模糊"示例代码.该代码使用stencil2 Quasi Quote:

[stencil2|   2  4  5  4  2
             4  9 12  9  4
             5 12 15 12  5
             4  9 12  9  4
             2  4  5  4  2 |]
Run Code Online (Sandbox Code Playgroud)

这只是TemplateHaskell片段,它生成一个函数:

makeStencil2 5 5 coeffs where
     {-# INLINE[~0] coeffs #-}
     coeffs = \ ix -> case ix of
                      Z :. -2 :. -2 -> Just 2
                      Z :. -2 :. -1 -> Just 4
                      Z :. -2 :. 0 -> …
Run Code Online (Sandbox Code Playgroud)

performance haskell image-processing repa

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