小编Nei*_*ell的帖子

尽管明显的生命周期不匹配,为什么程序仍能编译?

鉴于以下 Rust 程序:

struct Value<'v>(&'v ());
struct Container {}

impl Container {
    fn get<'v>(&'v self) -> Value<'v> {
        todo!()
    }
    
    fn set<'v>(&'v self, x: Value<'v>) {
        todo!()
    }
}

fn convert<'v1, 'v2>(x: &'v1 Container, env: &'v2 Container) {
    let root: Value<'v2> = env.get();
    x.set(root);
}
Run Code Online (Sandbox Code Playgroud)

我希望convert是一个编译时错误,Value<'v2>因为传递给x.set()它需要一个类型的值Value<'v1>- 但它成功编译。'v1和之间没有子类型关系'v2。Rust 如何推断令人满意的生命周期?

lifetime rust

11
推荐指数
1
解决办法
219
查看次数

DTE.ActiveDocument更改时收到通知

我正在编写Visual Studio 2008扩展.我希望每次DTE.ActiveDocument更改时都会收到通知,因此我可以在自定义面板中更新某些内容,该面板执行与解决方案资源管理器类似的功能.我还没有找到发生这种情况时发生的任何事件.有这样的事件吗?

具体来说,我正在寻找类似的东西:

var dte = GetService(typeof(EnvDTE._DTE)) as EnvDTE.DTE;
dte.Events.DTEEvents.ActiveDocumentChanged += s => {
    // implies dte.ActiveDocument has changed value
}
Run Code Online (Sandbox Code Playgroud)

.net c# visual-studio-2008 visual-studio

10
推荐指数
1
解决办法
982
查看次数

GHC 7.8绑定替换无法进行类型检查

鉴于支持代码:

{-# LANGUAGE ExtendedDefaultRules, DeriveDataTypeable #-}
{-# LANGUAGE FlexibleInstances, UndecidableInstances, OverlappingInstances #-}
import Data.Typeable
default(A)
data A = A deriving (Eq,Show,Typeable)

class Show a => Testable2 a where
instance (Show a, Eq a) => Testable2 a where
instance (Show a, Testable2 b) => Testable2 (a -> b) where
instance (Show a, Show b) => Show (a -> b) where show _ = "<func>"

test :: (Show p, Typeable p, Testable2 p) => p -> IO ()
test = print . …
Run Code Online (Sandbox Code Playgroud)

haskell ghc

10
推荐指数
1
解决办法
101
查看次数

在Idris中,如何隐藏Prelude中定义的内容?

我想定义我自己的版本fib来玩,但是fib由...导出Prelude.如何隐藏导入Prelude?在Haskell中我会写import Prelude hiding (fib),但这在Idris中不起作用.

idris

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

图形标准基准采用不同的时间量级

我有一个Criterion基准测试,每个bgroup测试对应一个测试,并且每个测试中bgroup有两个bench不同选项的测试值.例如:

main = defaultMain
    [bgroup "test1" [bench "v1" test1_1, bench "v2" test1_2]
    ,bgroup "test2" [bench "v1" test2_1, bench "v2" test2_2
    -- lots more tests
    ]
Run Code Online (Sandbox Code Playgroud)

在每个测试中bgroup,两个bench测试是可比的.但是,test1需要2000微秒,而test2需要45微秒.概览图(对我想要做的最有用)在同一轴上显示不同的测试,因此我可以清楚地看到差异test1,但test2很难看到.

是否可以将每个标准化bgroup用于绘图?或者在不同的轴上显示它们?或者我应该转储CSV数据并绘制我想要的内容吗?

haskell haskell-criterion

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

关闭websocket ++连接

当使用带有ASIO模式的Websocket ++时,我开始连接:

boost::shared_ptr<client> x(new client());
x->init_asio();
websocketpp::lib::error_code ec;
client::connection_pt con = x->get_connection(url, ec);
x->connect(con);
new thread(boost::bind(&LocalCallbacks::run, x)); // which just runs x->run()
Run Code Online (Sandbox Code Playgroud)

从提供的示例中复制(带有修改)此模式.当用户按下按钮取消websocket时,我应该如何正确清理?我目前在做:

x->stop();
Run Code Online (Sandbox Code Playgroud)

我也应该打电话x->close()吗?在打电话close之前我是否需要等待stop?我是否需要杀死thread已创建的内容,还是会自动停止?我有关于当前代码离开websocket会话的报告.

websocket++

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

在Hackage上查找导入给定模块的所有模块

我想在Hackage上找到从给定包导入给定模块的所有模块.作为一个有用的原因的例子,我想看看Language.Haskell.HLinthlint包中导入的所有模块,因为我想弃用该模块,但我对它当前的使用方式感兴趣.

是否有任何索引(理想情况下是在线)跟踪此类导入关系?

haskell hackage

7
推荐指数
0
解决办法
89
查看次数

如何使用Shake编译Haskell程序

我有一个Haskell程序,我想用GHC编译,由Shake构建系统编排.我应该执行哪些命令,以及在什么情况下应该重新运行?

haskell shake-build-system

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

使用GHC API编译优化程序

我想将Haskell模块编译为GHC Core,并应用优化,并使用生成的核心输出.但是,当我使用compileToCoreSimplified它时似乎没有运行所有正常的优化.参加该计划:

{-# OPTIONS_GHC -O2 #-}
module LensOpt(pick) where
import Control.Lens
data Record = Record {_field :: String}
field = lens _field $ \r x -> r{_field=x}
pick = Record "test" ^. field
Run Code Online (Sandbox Code Playgroud)

运行时,ghc -ddump-simple我得到最佳输出:

LensOpt.pick1 :: GHC.Prim.Addr#
LensOpt.pick1 = "test"#

pick :: String
pick = GHC.CString.unpackCString# LensOpt.pick1
Run Code Online (Sandbox Code Playgroud)

但是,当使用compileToCoreSimplified我得到输出编译时:

s1 :: Addr#
s1 = "test"#

s2 :: [Char]
s2 = unpackCString# s1

s3 :: Record
s3 = Record s2

pick :: String
pick = …
Run Code Online (Sandbox Code Playgroud)

haskell ghc ghc-api

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

GHC forkIO 双峰性能

我正在forkIO使用以下代码进行基准测试:

import System.Time.Extra
import Control.Concurrent
import Control.Monad
import Data.IORef


n = 200000

main :: IO ()
main = do
    bar <- newEmptyMVar
    count <- newIORef (0 :: Int)
    (d, _) <- duration $ do
        replicateM_ n $ do
            forkIO $ do
                v <- atomicModifyIORef' count $ \old -> (old + 1, old + 1)
                when (v == n) $ putMVar bar ()
        takeMVar bar
    putStrLn $ showDuration d
Run Code Online (Sandbox Code Playgroud)

这会产生 20K 个线程,计算有多少线程使用IORef,当它们全部启动时,完成。使用该命令在 Windows 上的 GHC 8.10.1 上运行时 …

concurrency performance haskell

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