我需要生成LLVM代码,它将服务于许多线程/任务(数十万).这些线程应该像英特尔TBB的任务,golang gorutines或其他一样轻量级.当然,它们可以使用外部C++库实现,如提到的Intel TBB(如果它与LLVM兼容).
我在很长一段时间内搜索有关LLVM中线程的任何信息,但我找不到多少.在LLVM的文档中描述了一些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下最好)吗?
问题
我想在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) 我是用平行的Haskell函数普兰par
和pseq
我已经发现了一些有趣的事情.
我的例子基于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) 这个想法
我正在写一个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) 如何搜索已安装的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
)
等等
这个问题不是 "遗产与构成"之类的问题.
我完全理解继承与组合有什么不同,我知道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)
所以总结一下,组合比继承更好,因为:
如果您考虑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
是否可以使用Cabal构建Haskell项目并从环境变量控制GHC标志?
在我的project.cabal文件中有一个"GHC-Options"部分,它可以控制标志,但我很乐意从命令行中另外设置它们.
是否可以在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
问题
我正在尝试理解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) haskell ×6
benchmarking ×2
ghc ×2
performance ×2
cabal ×1
canvas ×1
cilk ×1
cilk-plus ×1
compilation ×1
composition ×1
constructor ×1
fedora ×1
html5 ×1
inheritance ×1
llvm ×1
oop ×1
package ×1
python ×1
repa ×1
repository ×1
tbb ×1
tuples ×1
typechecking ×1
typeclass ×1
yum ×1