【发布时间】:2020-04-22 22:52:50
【问题描述】:
为什么我们不能简单地将 Clojure 代码转换为字符串并通过 TCP 发送并在另一端进行评估 (nrepl)?
例如:这是一个哈希图 {"foo" "bar", 1 "spam"},其 BENCODE 编码为 d3:foo3:bari1e4:spame。
如果我们将其转换为字符串 -> {\"foo\" \"bar\", 1 \"spam\"}
并在另一侧进行评估,而不是使用如下所示的 BENCODE。
(eval (read-string "{\"foo\" \"bar\", 1 \"spam\"}"))
; ⇒ {"foo" "bar", 1 "spam"}
我是 Clojure 世界的新手。这可能是一个愚蠢的问题,但无论如何。
【问题讨论】:
-
我们的范围明确限于实用问题——这些问题会改变您进行编程实践的方式。 “为什么东西 X 是以 Y 方式设计的?”不会改变您使用 X 的方式,也不会让您修复或避免任何错误——这只是历史记录或好奇心的问题,因此通常被认为是题外话。
-
见What is the rationale for closing "why" questions on language design?Meta Stack Overflow。 (当然,这是有线协议设计而不是语言设计,但基本原理是成立的)。
-
也就是说,只要 bencode 被设计为 DJB 的网络字符串的扩展,您可能会发现阅读后者的基本原理很有用,cr.yp.to/proto/netstrings.txt
-
您的问题在reddit.com/r/Clojure 或clojureverse.org 或ask.clojure.org 等网站上可能会被认为更合适
-
@CharlesDuffy 感谢您的回答。另外,我会注意仅将 StackOverflow 用于指定目的。