要编写下载器,请使用Clojure.java.io还是Java的io api?

To write a downloader, Clojure.java.io or Java's io api?

我正在尝试在Clojure中编写一个常规的http / ftp文件下载器。 我做了一些研究,发现我可以使用java的api-BufferedReader BufferedInputStream等,也可以使用Clojure.java.io的api-作家,读者,输入流,输出流。

  • 我发现Clojure的api比Java的api更易于使用和阅读,但是在性能,速度等方面,java的api会是一个更好的选择吗?

  • 还有其他原因选择一个而不是另一个吗?

  • 作为一种jvm平台语言,就性能而言,Clojure是文件下载程序项目的不错选择吗? 在进行研究时,我还阅读了一些有关jvm平台上的速度和内存性能的文章,现在我想知道我的语言选择是否与我的项目非常匹配。


  • 考虑到Clojure习语创建的Clojure API,应该感觉更自然。当然,您仍然可以使用Java API,但随后会调用许多Java互操作函数。
    当然,这没有什么错,但这并不是流畅的Clojure API。

    我看不到性能损失,无论您使用的是Java,Scala,Clojure还是JRuby,JVM的启动速度都很慢。 Clojure确实表现出色。顺便说一句,您是否知道可以在Clojure中将项目编译为Bytecode格式?

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

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

    顺便说一句,是否打算使用Swing构建您的应用程序?如果是,那么您决定选择Clojure,然后看看跷跷板。

    Seesaw is a library/DSL for constructing user interfaces in Clojure. It happens to be built on Swing, but please don't hold that against it.