小编And*_*w Y的帖子

将Haskell用于大型实时系统:如何(如果?)?

我一直很想知道是否有可能将Haskell的强大功能应用到嵌入式实时世界,并且在谷歌搜索中找到了Atom软件包.我假设在复杂的情况下,代码可能具有所有经典的C错误 - 崩溃,内存损坏等,然后需要将其追溯到导致它们的原始Haskell代码.所以,这是问题的第一部分:"如果您有使用Atom的经验,那么您是如何处理调试已编译C代码中的低级错误并将其修复为Haskell原始代码的任务的?"

我搜索了Atom的更多示例,这篇博文提到了生成的C代码22KLOC(显然没有代码:),包含的示例是一个玩具.这个这个引用有一些更实用的代码,但这是结束的地方.我在这个主题中加入"相当大"的原因是,如果您可以分享使用300KLOC +范围内生成的C代码的经验,我最感兴趣.

因为我是一名Haskell新手,显然可能有其他方法由于我未知的未知因素而未找到,所以在这方面任何其他自我教育的指针都会非常感激 - 这是问题的第二部分 - "在Haskell中进行实时开发会有什么其他实用方法(如果)?" 如果多核也在图片中,这是一个额外的加号:-)

(关于Haskell本身用于此目的的用法:从我在这篇博文中读到的内容,Haskell中的垃圾收集和懒惰使其在调度方面具有相当不确定性,但可能在两年内发生了一些变化.现实世界的Haskell编程问题在SO上是我能找到的最接近这个话题的人)

注意:上面的"实时"将更接近"硬实时" - 我很好奇是否可以确保主要任务未执行的暂停时间小于0.5ms.

embedded haskell real-time hard-real-time

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

如何使用net / http获取服务器在服务器中的自身地址?

我想使用Go的net / http包编写一个HTTP服务器,其响应取决于HTTP连接的服务器端IP地址。

换句话说,我正在寻找的等效于CGI的“ SERVER_ADDR”变量。

http.Request中最接近的字段是“主机”-但由于如果请求使用文字地址,它将仅等于一个地址,因此无法使用它(服务器可能按名称使用)。

查看https://golang.org/src/net/http/server.go上的源代码,看来获取服务器地址的唯一方法是在处理器中实现Hijack()连接并为该服务器实现后续的HTTP解析。相同连接上的后续请求,但是至少可以说非常不雅...

似乎理想的解决方案是对golang标准库中的http / request和http / server进行如下修改:

diff -u go-stock-library/request.go ./request.go
--- go-stock-library/request.go 2016-04-13 17:31:48.000000000 +0200
+++ ./request.go    2016-04-13 17:32:40.000000000 +0200
@@ -227,6 +227,15 @@
    // This field is ignored by the HTTP client.
    RemoteAddr string

+   // LocalAddr allows HTTP servers and other software to record
+   // the network address that the request was sent to, usually for
+   // logging. This field is not filled in by ReadRequest …
Run Code Online (Sandbox Code Playgroud)

http go

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

标签 统计

embedded ×1

go ×1

hard-real-time ×1

haskell ×1

http ×1

real-time ×1