要编写下载程序,Clojure.java.io或Java的io api?

时间:2013-08-09 06:15:34

标签: clojure clojure-java-interop

我正在尝试在Clojure中编写一个通用的http / ftp文件下载器。我做了一点研究,发现我可以使用java的api - BufferedReader BufferedInputStream等,或者Clojure.java.io的api-writer,reader,input-stream,output-stream。

  1. 我发现Clojure的api比java的api更容易使用和阅读,但是在性能,速度等方面,java的api会更好吗?

  2. 有没有其他理由选择其中一个而不是另一个?

  3. 作为一种jvm平台语言,Clojure在性能方面是文件下载项目的不错选择吗?在做研究的同时,我还阅读了一些关于速度和速度的辩论。在jvm平台上的内存性能,我想现在我想知道我的语言选择是否与我的项目很匹配..

1 个答案:

答案 0 :(得分:1)

Clojure API应该感觉更自然,因为它是用Clojure成语创建的。当然,您仍然可以使用Java API,但是期望大量的Java互操作函数调用  当然这没有什么不妥,但它只是不是一个流利的Clojure API。

我没有看到性能损失,无论你使用什么,JVM都很慢启动,无论是Java,Scala,Clojure还是JRuby。 Clojure真的很有表现力。顺便问一下,您知道在Clojure中您可以将项目编译为Bytecode格式吗?

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

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

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

  

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