我一直很想知道是否有可能将Haskell的强大功能应用到嵌入式实时世界,并且在谷歌搜索中找到了Atom软件包.我假设在复杂的情况下,代码可能具有所有经典的C错误 - 崩溃,内存损坏等,然后需要将其追溯到导致它们的原始Haskell代码.所以,这是问题的第一部分:"如果您有使用Atom的经验,那么您是如何处理调试已编译C代码中的低级错误并将其修复为Haskell原始代码的任务的?"
我搜索了Atom的更多示例,这篇博文提到了生成的C代码22KLOC(显然没有代码:),包含的示例是一个玩具.这个和这个引用有一些更实用的代码,但这是结束的地方.我在这个主题中加入"相当大"的原因是,如果您可以分享使用300KLOC +范围内生成的C代码的经验,我最感兴趣.
因为我是一名Haskell新手,显然可能有其他方法由于我未知的未知因素而未找到,所以在这方面任何其他自我教育的指针都会非常感激 - 这是问题的第二部分 - "在Haskell中进行实时开发会有什么其他实用方法(如果)?" 如果多核也在图片中,这是一个额外的加号:-)
(关于Haskell本身用于此目的的用法:从我在这篇博文中读到的内容,Haskell中的垃圾收集和懒惰使其在调度方面具有相当不确定性,但可能在两年内发生了一些变化.现实世界的Haskell编程问题在SO上是我能找到的最接近这个话题的人)
注意:上面的"实时"将更接近"硬实时" - 我很好奇是否可以确保主要任务未执行的暂停时间小于0.5ms.
我想使用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)