Чтобы написать загрузчик, Clojure.java.io или Java io api?

Я пытаюсь написать общий загрузчик файлов http/ftp в Clojure. Я провел небольшое исследование и обнаружил, что могу использовать API Java — BufferedReader BufferedInputStream и т. д., или API Clojure.java.io — Writer, Reader, Input-Stream, Output-Stream.

  1. Я обнаружил, что API-интерфейс Clojure несколько проще в использовании и чтении, чем API-интерфейс java, но как насчет производительности, скорости и т. д. Будет ли API java лучшим выбором?

  2. Есть ли другая причина выбрать один вместо другого?

  3. Как язык платформы jvm, является ли Clojure хорошим выбором для проекта загрузки файлов с точки зрения производительности? Проводя исследование, я также прочитал несколько сообщений, обсуждающих скорость и производительность памяти на платформе jvm, и я думаю, теперь я хочу знать, хорошо ли мой выбор языка соответствует моему проекту.


person Jay Somedon    schedule 09.08.2013    source источник
comment
Не существует такой вещи, как Clojure IO API, потому что все функции, которые вы упомянули, являются просто очень простыми оболочками стандартных примитивов Java, о которых вы также упомянули. Использование «Clojure API» — это просто удобство, которое позволяет вам писать идиоматический код при выполнении ввода-вывода. Если вы хотите написать загрузчик файлов, и это не первый ваш проект на платформе Java, вам лучше использовать специальные библиотеки для вашего проекта, такие как netty или async-http-client. Эти библиотеки обычно имеют удобные оболочки в Clojure.   -  person Vladimir Matveev    schedule 09.08.2013
comment
@VladimirMatveev Приятно знать, спасибо :-D Это своего рода мой первый большой проект. Все, что я делал раньше, было проектом колледжа, и я даже не знал таких библиотек, как Netty. Сейчас я просмотрю эти две библиотеки :-D   -  person Jay Somedon    schedule 10.08.2013


Ответы (1)


Clojure API должен казаться более естественным, поскольку он создан с учетом идиом Clojure. Конечно, вы по-прежнему можете использовать Java API, но тогда ожидайте много вызовов функций взаимодействия Java.
В этом, конечно, нет ничего плохого, но это только не свободный API Clojure.

Я не вижу снижения производительности, JVM загружается медленно, независимо от того, что вы используете, будь то Java, Scala, Clojure или JRuby. Clojure действительно эффективен. Кстати, вы знаете, что в Clojure вы можете скомпилировать свой проект в формат Bytecode?

Является ли Clojure хорошим выбором для проекта по загрузке файлов?
Я бы сказал определенно!
Одним из основных преимуществ является то, как Clojure справляется с параллелизмом. Если подумать, в вашем проекте будет много потоков, блокировок и синхронизации (вы создаете загрузчик, который может загружать много файлов одновременно, правильно)?
В Clojure вы будете использовать более высокие абстракции, такие как агенты (на самом деле удобно для вашего проекта), рефы и атомы.

Я не уверен в ресурсах, которые вы читали о производительности JVM и управлении памятью. JVM — это сложное программное обеспечение. JVM предлагает множество стратегий управления памятью. Одни подходят для настольных приложений, другие — для серверов. Вы можете выбрать подходящую стратегию в зависимости от требований вашего приложения/системы.

Кстати, планируете строить свое приложение на Swing? Если да, и вы решили использовать Clojure, взгляните на Seesaw.

Seesaw — это библиотека/DSL для создания пользовательских интерфейсов в Clojure. Так случилось, что он построен на Swing, но, пожалуйста, не держите это против него.

person Chiron    schedule 09.08.2013
comment
Большое спасибо! :-D До сих пор я работал только над базовыми функциями с REPl, так что я еще не касался элементов пользовательского интерфейса. Я только что проверил Seesaw, и он выглядит довольно хорошо. Я думаю, да, я буду придерживаться Clojure и продолжать его развивать. - person Jay Somedon; 09.08.2013