0

I am trying to write a general http/ftp file downloader in Clojure. I did a little research and found that I can either use java's api -- BufferedReader BufferedInputStream etc, or Clojure.java.io's api -- writer, reader, input-stream, output-stream.

  1. I found Clojure's api somewhat easier to use and read than java's api, but how about in terms of performance, speed, etc, will java's api be a better choice then?

  2. Is there any other reason to choose one instead of the other?

  3. As a jvm platform language, is Clojure a good choice for file downloader project, in terms of performance? While doing research, I also read some posts debating on speed & memory performance on jvm platform, and I guess now I wanna know if my language choice is a good match to my project..

4

1 回答 1

1

Clojure API 应该感觉更自然,因为它是在考虑 Clojure 习惯用法的情况下创建的。当然,您仍然可以使用 Java API,但需要大量 Java 互操作函数调用。
这当然没有错,但它只是不是一个流畅的 Clojure API。

我没有看到性能损失,无论您使用什么,JVM 启动都很慢,无论是 Java、Scala、Clojure 还是 JRuby。Clojure 非常高效。顺便问一下,你知道在 Clojure 中你可以将你的项目编译成字节码格式吗?

Clojure 是文件下载器项目的好选择吗?
我肯定会说!
一个主要优势是 Clojure 如何处理并发性。如果您考虑一下,您的项目将执行大量线程、锁定和同步(您正在构建一个可以同时下载多个文件的下载器,对吗)?
在 Clojure 中,您将使用更高的抽象,例如代理(对您的项目非常方便)、引用和原子。

我不确定您阅读的有关 JVM 性能和内存管理的资源。JVM 是一个复杂的软件。JVM 提供了许多管理内存的策略。有些适用于桌面应用程序,有些适用于服务器。您可以根据您的应用程序/系统要求选择合适的策略。

顺便问一下,是否计划使用 Swing 构建您的应用程序?如果是,并且您决定使用 Clojure,那么请查看Seesaw

Seesaw 是一个用于在 Clojure 中构建用户界面的库/DSL。它恰好是基于 Swing 构建的,但请不要反对它。

于 2013-08-09T08:17:04.403 回答