小编Jon*_*rop的帖子

具有并发垃圾收集器的函数式语言?

Microsoft的新F#编程语言提供了功能编程(一流的词法闭包和尾调用)与高效的并发垃圾收集器的强大组合,可以轻松利用多核.

OCaml,Haskell,Erlang以及我所知道的所有免费的Lisp和Scheme实现没有并发GC.Scala和Clojure有一个并发GC但没有尾调用.

因此似乎没有结合这些功能的开源编程语言.那是对的吗?

concurrency garbage-collection tail-call

4
推荐指数
3
解决办法
1085
查看次数

融合持久性的实际应用

我只是阅读Brodal等人的Purely Functional Worst Case Constant Time Catenable Sorted Lists.他们在数据结构的背景下对不同类型的持久性的介绍给我一个明显的问题:

汇合持久性:可以更新和查询所有版本,另外,可以组合两个版本以生成新版本.注意,在这种情况下,可以通过重复地将其与自身连接来在多项式时间内创建指数大小的结构.

通过反复加入自身,能够在多项式时间内创建"指数大小"结构的实际应用是什么?

algorithm persistence purely-functional data-structures

4
推荐指数
1
解决办法
1125
查看次数

C++ vs .NET正则表达式性能

在Konrad Rudolph关于相关问题的评论的提示下,我编写了以下程序来对F#中的正则表达式性能进行基准测试:

open System.Text.RegularExpressions
let str = System.IO.File.ReadAllText "C:\\Users\\Jon\\Documents\\pg10.txt"
let re = System.IO.File.ReadAllText "C:\\Users\\Jon\\Documents\\re.txt"
for _ in 1..3 do
  let timer = System.Diagnostics.Stopwatch.StartNew()
  let re = Regex(re, RegexOptions.Compiled)
  let res = Array.Parallel.init 4 (fun _ -> re.Split str |> Seq.sumBy (fun m -> m.Length))
  printfn "%A %fs" res timer.Elapsed.TotalSeconds
Run Code Online (Sandbox Code Playgroud)

以及C++中的等价物:

#include "stdafx.h"

#include <windows.h>
#include <regex>
#include <vector>
#include <string>
#include <fstream>
#include <cstdio>
#include <codecvt>

using namespace std;

wstring load(wstring filename) {
    const locale empty_locale = locale::empty(); …
Run Code Online (Sandbox Code Playgroud)

.net c++ regex

4
推荐指数
1
解决办法
1440
查看次数

连续传递样式计算表达式

可以使用F#中的计算表达式实现CPS吗?

Brian McNamara的博客提供了以下解决方案:

type ContinuationBuilder() = 
  member this.Return(x) = (fun k -> k x) 
  member this.ReturnFrom(x) = x 
  member this.Bind(m,f) = (fun k -> m (fun a -> f a k)) 
  member this.Delay(f) = f() 

let cps = ContinuationBuilder()
Run Code Online (Sandbox Code Playgroud)

看起来不错。我可以用List.mapCPS 编写:

let rec mapk f xs = cps {
  match xs with
  | [] -> return []
  | x::xs ->
      let! xs = mapk f xs
      return f x::xs
}
Run Code Online (Sandbox Code Playgroud)

但是它会溢出:

mapk ((+) 1) [1..1000000] id
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

f# computation-expression continuation-passing

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

在运行时创建匿名记录类型

F# 提供反射,让您可以在运行时生成函数、元组、记录和联合类型的新值。但是,我在该模块中看不到与匿名记录有关的任何内容。

是否可以在 F# 运行时创建匿名记录类型的新值?

reflection f#

4
推荐指数
1
解决办法
289
查看次数

为Mono销售商业软件

如果Mono项目成功,它将为非Windows平台上的商业软件铺平道路.

我对使用我们现有的Smoke Vector Graphics(OCaml)和F#for Visualization(.NET)产品编写和销售Mono平台商业软件的前景感兴趣.是否有任何商业图书馆开发人员已经建立在Mono上,如果是这样,他们是否从中获利?

此外,用Microsoft的F#语言编写软件是否可行,或者Mono是否会在使用ILX时遇到问题?

graphics mono

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

并发队列和堆栈在.NET 4中的应用

.NET 4包含新的并发数据结构.Bag和Dictionary集合有明显的应用程序,但我看不到Queue和Stack数据结构的任何用途.人们使用这些是为了什么?

另外,我注意到基于链表的设计会产生大量的分配并破坏可扩展性.鉴于这些集合的唯一目的是多核编程,这是令人惊讶的.这是一个固有的限制还是刚刚实施得很糟糕?

.net c# concurrency f#

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

从.NET程序中获取全局根

我最近开始使用ANTS分析工具进行生产工作.除了惊讶于他们的精彩之外,我不禁想知道他们是如何工作的.例如,最有用的功能之一允许您可视化正在运行的程序的全局根,其中包含对不同类型值的引用数.

该工具如何获取该信息?

.net c# f# profiling ants

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

Cilk的共享内存并行编程的方法是灵丹妙药吗?

共享内存并行编程(特别是多核)中的哪些挑战无法使用Cilk风格的解决方案(即每个核心工作窃取任务deques的嵌套数据并行性)有效解决或无法解决?

parallel-processing performance cilk

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

为什么FParsec使用列表?

我以为我会尝试使用FParsec编写一个快速解析器,并很快意识到many返回列表是一个严重的性能问题.然后我发现了一个ResizeArray在文档中使用a的替代方法:

let manyA2 p1 p =
    Inline.Many(firstElementParser = p1,
                elementParser = p,
                stateFromFirstElement = (fun x0 ->
                                             let ra = ResizeArray<_>()
                                             ra.Add(x0)
                                             ra),
                foldState = (fun ra x -> ra.Add(x); ra),
                resultFromState = (fun ra -> ra.ToArray()),
                resultForEmptySequence = (fun () -> [||]))

let manyA p = manyA2 p p
Run Code Online (Sandbox Code Playgroud)

在我的代码中使用它会使它运行速度快几倍.那么为什么FParsec默认使用列表而不是ResizeArray

fparsec

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

Microsoft Collections for .NET

.NET附带了一些内置集合(堆栈,队列,字典,列表等),但缺少其他常见集合,如优先级队列.在NuGet上有很多第三方收集库,但我想知道是否有一个正式的Microsoft(如现在称为BCL不可变集合System.Collections.Immutable)库,其中包含(可变的)优先级队列?

编辑:重要澄清(@rmunn评论):

这个问题并不是要求为X推荐一个库,而是在问一个事实问题,"X是否有官方的Microsoft库?"

.net c# collections f# priority-queue

2
推荐指数
1
解决办法
858
查看次数