小编Cyg*_*n98的帖子

FSI.exe在Ubuntu 10.10下不起作用

更新:尝试11月CTP发布.相同的错误消息.忘记提到这台服务器安装了Ubuntu服务器版.我在运行Desktop 10.10的Ubuntu桌面上没有此问题.所以我怀疑它可能是一些命令行相关的库缺失.安装libreadline-dev和libreadline5后,错误消息消失了.然而,fsi卡住的问题仍然存在.

Update2:尝试了新的Mono 2.8.1.同样的FSI问题.

Update3:由于此问题非常可重现,我将其报告为fsi.exe中的一个错误.让我们看看它是怎么回事.

Update4:Don Syme快速响应.他建议的解决方案解决了这个问题.我自己创造了答案.

嗨,

我在运行Ubuntu 10.10和Mono 2.8的服务器上安装了F#2.0.fsc.exe运行完美,我在编译fs文件时没有问题.但是,当我按如下方式运行fsi.exe时:mono /usr/local/FSharp/bin/fsi.exe

我收到了FSI提示,但错误信息不断重复

"无法安装ctrl-c处理程序 - Ctrl-C处理将无法使用.错误是:调用目标已抛出异常"

我在这里错过了什么吗?

Mono 2.8是从源代码编译和安装的.

ubuntu mono f# f#-interactive

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

是否可以将F#代码转换为C#代码?

我之所以问我的原因是我正在学习F#并希望参加TopCoder比赛.但是,F#不在其中支持的语言列表中.但是C#就在名单上(说实话,几乎所有的在线编码竞赛都是如此,除了Google Code Jam和Facebook Hacker cup).

我现在可以想到的可能的解决方法是1)找到一个可以直接将F#源代码翻译成C#2的翻译器.首先将F#代码编译成.net可执行文件,然后将其反汇编回C#代码

最低要求是生成的C#必须能够编译成可运行的.net可执行文件,最好尽可能减少外部依赖.

第一种方法似乎不太可能,快速谷歌搜索没有任何相关性.方法二看起来更有前途,有.net反汇编存在.

我尝试了最受欢迎的一个--- Red Gate的Reflector.虽然它可以完美地分解C#可执行文件,但它似乎存在从F#编译的可执行文件的问题:它很高兴地被反汇编,但是生成的C#代码有一些特殊字符,例如在类名和其他奇怪的东西中添加一个前导$符号,所以它无法编译.我使用的是Visual Studio 2010 Professional,这是最新的Reflector beta版本(免费).

我在这里错过了什么吗?可能吗?

更新:看起来这仍然是不可能的.现在,我将使用C#代替.

f# disassembly

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

为什么这个F#代码在与MailboxProcessor一起使用时不会产生预期的输出?

我正在浏览Don Syme的一篇博客文章,其中包括F#:Agents中的Async和Parallel Design Patterns.但是,以下看似非常简单的代码没有按预期生成输出.

type Agent<'T> = MailboxProcessor<'T>

let agent =
   Agent.Start(fun inbox ->
     async { while true do
               let! msg = inbox.Receive()
               printfn "got message '%s'" msg } )

for i in 1 .. 10000 do
   agent.Post (sprintf "message %d" i)
Run Code Online (Sandbox Code Playgroud)

而不是预期的10,000条消息,我只使用Ubuntu下的Mono 2.8.1获得大约3000条消息,或者在Windows XP下使用Visual F#获得15条消息.我在这里错过了什么吗?顺便说一句,我试图用以下文件操作替换printfn语句,最后得到相同的部分结果.

open System.IO
type Agent<'T> = MailboxProcessor<'T>

let agent =
   Agent.Start(fun inbox ->
     async { while true do
               let! msg = inbox.Receive()
               use logger = new StreamWriter("a.log", true)
               logger.WriteLine("got message '{0}'", msg.ToString())
               logger.Close() …
Run Code Online (Sandbox Code Playgroud)

f# asynchronous agent mailboxprocessor

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