© Excellent backgrounds/Shutterstock.com
Java Magazin
Polyglotte Programmierung mit Clojure

Grenzenlose Freiheit?

„Die Grenzen meiner Sprache bedeuten die Grenzen meiner Welt“, stellte schon Ludwig Wittgenstein fest. Auch wenn zwei Programmiersprachen Turing-vollständig sind und somit die gleichen Probleme lösen können, beeinflussen ihre Eigenschaften dennoch die Art und Qualität der Problemlösung. Mit der JVM steht uns heute eine Plattform zur Verfügung, bei der wir für jedes Problem die am besten geeignete Sprache wählen können. Auch wenn sich prinzipiell jede JVM-Sprache mit jeder anderen kombinieren lässt, gibt es einige Stolpersteine. In diesem Artikel wollen wir analysieren, wie gut sich Clojure mit Java verträgt.

Silvia Schreier


Es ist heute durchaus üblich, verschiedene Komponenten in verschiedenen Sprachen zu implementieren. Das hat den Vorteil, dass für jedes Problem eine geeignete Sprache gewählt, die verschiedenen Vorteile der Sprache und ihrer Ökosystem kombiniert und die unterschiedlichen Expertisen der Entwickler bestmöglich genutzt werden können. Häufig sind diese Komponenten durch HTTP oder andere Protokolle voneinander entkoppelt. Auf der JVM können Komponenten viel direkter und feingranularer miteinander kombiniert werden. Doch auch hier bietet es sich an, klare Schnittstellen und Verantwortlichkeiten zu ziehen. Durch diese Technik kann schon existierender Quellcode weiter verwendet und so ein Umstieg auf eine andere Sprache Stück für Stück vollzogen werden.

Wie problemlos lässt sich Clojure mit anderen Sprachen kombinieren? Wie kann man eine Clojure-Bibliothek ohne Weiteres aus einer Java-Anwendung heraus nutzen und umgekehrt? Allgemein lässt sich sagen, dass die Verwendung von Java-Bibliotheken in anderen JVM-Sprachen kein Problem darstellt. Doch welche Hilfsmittel gibt es hier, sodass sich die Verwendung von Java auf Grund der verschiedenen Paradigmen nicht wie ein Fremdkörper anfühlt?

Polyglotte ProjekteLeiningen ist das Standard-Build-Werkzeug in der Clojure-Welt. Will man in einem Leiningen-Projekt Java-Bibliotheken nutzen, so können diese einfach als Abhängigkeiten eingetragen werden, da Leiningen und Maven kompatibel sind. Umgekehrt ist auch das Einbinden einer Clojure-Bibliothek als Maven Dependency ohne Weiteres möglich.Leiningen bietet die Möglichkeit, in der Konfigurationsdatei project.clj-Verzeichnisse mit Java-Code zu definieren, die dann mit lein javac übersetzt werden können [1]: :java-source-paths ["java-src"] Die Optionen für den Java-Übersetzer werden zum Beispiel folgendermaßen festgelegt: :javac-options ["-target" "1.6" "-source" "1.6"] Unabhängig davon kann noch definiert werden, welche der Clojure-Namespaces bei lein compile übersetzt werden sollen [2]: :aot [pure-clj.helper]

Listing 1package data;  import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry;  public class Person { public String name; public Person() {} public Person(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) {this.name = name; } @Override public String toString() { return getName(); } }  public class Book { private String title; p...

Java Magazin
Polyglotte Programmierung mit Clojure

Grenzenlose Freiheit?

„Die Grenzen meiner Sprache bedeuten die Grenzen meiner Welt“, stellte schon Ludwig Wittgenstein fest. Auch wenn zwei Programmiersprachen Turing-vollständig sind und somit die gleichen Probleme lösen können, beeinflussen ihre Eigenschaften dennoch die Art und Qualität der Problemlösung. Mit der JVM steht uns heute eine Plattform zur Verfügung, bei der wir für jedes Problem die am besten geeignete Sprache wählen können. Auch wenn sich prinzipiell jede JVM-Sprache mit jeder anderen kombinieren lässt, gibt es einige Stolpersteine. In diesem Artikel wollen wir analysieren, wie gut sich Clojure mit Java verträgt.

Silvia Schreier


Es ist heute durchaus üblich, verschiedene Komponenten in verschiedenen Sprachen zu implementieren. Das hat den Vorteil, dass für jedes Problem eine geeignete Sprache gewählt, die verschiedenen Vorteile der Sprache und ihrer Ökosystem kombiniert und die unterschiedlichen Expertisen der Entwickler bestmöglich genutzt werden können. Häufig sind diese Komponenten durch HTTP oder andere Protokolle voneinander entkoppelt. Auf der JVM können Komponenten viel direkter und feingranularer miteinander kombiniert werden. Doch auch hier bietet es sich an, klare Schnittstellen und Verantwortlichkeiten zu ziehen. Durch diese Technik kann schon existierender Quellcode weiter verwendet und so ein Umstieg auf eine andere Sprache Stück für Stück vollzogen werden.

Wie problemlos lässt sich Clojure mit anderen Sprachen kombinieren? Wie kann man eine Clojure-Bibliothek ohne Weiteres aus einer Java-Anwendung heraus nutzen und umgekehrt? Allgemein lässt sich sagen, dass die Verwendung von Java-Bibliotheken in anderen JVM-Sprachen kein Problem darstellt. Doch welche Hilfsmittel gibt es hier, sodass sich die Verwendung von Java auf Grund der verschiedenen Paradigmen nicht wie ein Fremdkörper anfühlt?

Polyglotte ProjekteLeiningen ist das Standard-Build-Werkzeug in der Clojure-Welt. Will man in einem Leiningen-Projekt Java-Bibliotheken nutzen, so können diese einfach als Abhängigkeiten eingetragen werden, da Leiningen und Maven kompatibel sind. Umgekehrt ist auch das Einbinden einer Clojure-Bibliothek als Maven Dependency ohne Weiteres möglich.Leiningen bietet die Möglichkeit, in der Konfigurationsdatei project.clj-Verzeichnisse mit Java-Code zu definieren, die dann mit lein javac übersetzt werden können [1]: :java-source-paths ["java-src"] Die Optionen für den Java-Übersetzer werden zum Beispiel folgendermaßen festgelegt: :javac-options ["-target" "1.6" "-source" "1.6"] Unabhängig davon kann noch definiert werden, welche der Clojure-Namespaces bei lein compile übersetzt werden sollen [2]: :aot [pure-clj.helper]

Listing 1package data;  import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry;  public class Person { public String name; public Person() {} public Person(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) {this.name = name; } @Override public String toString() { return getName(); } }  public class Book { private String title; p...

Neugierig geworden?


   
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang