Vala for Java Programmers

Vala For Java Programmers. Ein nettes Tutorial zur Programmiersprache Vala für Java Programmierer.

Code Organization

Files

Java: one toplevel class per file, file name resembles class name

Vala: a Vala source file may contain multiple classes, file name doesn’t need to resemble a class name
Na da werden die IDE’s genau so performant wie die für C und C++, bzw muss man sehr sehr viel konfigurieren, um einfach mal zur Implementierung einer Klasse springen zu können…

bye
TT

Bei sowas mach’ ich mir weniger sorgen um der Performance der IDE. Die sollten das schon hinkriegen. Aber wenn ich als Entwickler eine Klasse “SomeClass” im package/namespace “foo.bar.detail” suche, dann hat die GEFÄLLGST in einer Datei “foo/bar/detail/SomeClass.(cpp/h/java)” zu liegen, und wenn ich eine Datei “foo/bar/detail/SomeClass.(cpp/h/java)” aufmache, dann hat da GEFÄLLIGST eine Klasse “foo.bar.detail.SomeClass” drinzuliegen. Die Zeiten, wo in “/Source/main.cpp” das ganze Programm untergebracht werden konnte, sind vorbei.

On-Topic: Vala? Nie gehört…

[quote=Marco13]Die Zeiten, wo in “/Source/main.cpp” das ganze Programm untergebracht werden konnte, sind vorbei.[/quote]Oder vange jetzt wieder an, wo’s doch jetzt von so einer hipper neuen Programmiersprache unterstützt wird… :sick:

[quote=Marco13;138020]Vala? Nie gehört…[/quote]So wie sich die Beschreibung liest war das hier wohl dafür gleich zwei mal: das Erste und das Letzte…

bye
TT

Nun, um das mal ein bißchen weniger bashig werden zu lassen: Gibt’s einen speziellen Grund für diesen Hinweis? Also, ist diese Sprache irgendwie besonders toll? (Es wundert mich nur, weil man ja immer mal wieder von neuen Sprachen hört (Dart, Go), und welchen, die auf die VM abzielen (Groovy, Clojure), oder auch exotische (Scala :stuck_out_tongue_winking_eye: ), aber „Vala“ für mich jetzt irgendwie aus dem Nichts aufgetaucht ist, und man bei https://www.google.de/search?q="*+for+java+programmers" ja schon eine Weile stöbern könnte ;-))

Der Grund vermutlich warum ich es vorstelle ist, dass ich in letzter Zeit mich mit GNOME-Entwicklung beschäftigt habe und diese Sprache dabei entdeckt habe. Da ich mir nicht sicher war, ob ihr sie bereits kennt, ging ich halt auf Nummer sicher und wollte sie mal vorstellen.

Bindings
Es ist möglich Bindings für viele Sprachen zur Verfügung zu stellen, da das Objekt-System GObject eine C-ABI verwendet. Im Gegensatz zur C+±ABI ist das um ein vielfaches einfacher. Dadurch lassen sich auch Programme einfacher mit Scripting-Sprachen erweitern.

Zugriff auf C-APIs
Da Vala mehr oder weniger auf C basiert, kann man mit einem kleinem Umweg auf bestehende C-APIs zugreifen: https://wiki.gnome.org/Projects/Vala/LegacyBindings. Es wurden jedenfalls schon einige Bindings geschrieben: https://github.com/nemequ/vala-extra-vapis

GTK+
GTK+ ist im Vergleich zu Swing ein modernes Toolkit, bei dem man die Oberfläche mit XML definieren und mit CSS stylen kann. Dafür gibt es dann auch einen GUI-Builder namens Glade, der die entsprechende XML-Datei generiert. Je nach Fall sollte man entscheiden, ob die Oberfläche mit XML oder Code definieren will. (Wenn es eine komplexe Oberfläche mit vielen Textboxen sein soll, dann würde ich auf jeden Fall zu XML greifen.)

Und zu eurem Bashing könnte man fairerweise auch sagen, dass es in Java genauso möglich ist, alle Klassen bzw das gesamte Programm in eine Sourcefile zu stecken. Siehe innere Klassen.

Nun, das Bashing bezog sich ja nur auf ein Detail (und ich habe ja gleich versucht, den Thread wieder zu objektivieren :o ).

Ansonsten … ich weiß, dass meine Java <3-Fixierung ungesund ist, und man öfter mal über den Tellerrand und sich neue Sprachen anschauen sollte. Beim Drüberschauen sieht Vala jetzt nach einer Mischung von Java und JavaScript aus. Das kann einerseits nicht verkehrt sein, andererseits könnte man es als „Yet another language“ abtun, und nach dem Alleinstellungs/Killerfeature fragen. Wenn das primär aus der GTK-Verbindung bzw. der Binärkompatibilität zu C besteht, ist das auch interessant (für jemanden, der eine nicht unerhebliche Menge Zeit in „Java-Bindings-For-XYZ“ steckt), aber reicht(e) offenbar nicht, um der Sprache so viel Momentum zu geben, dass man sie als nachhaltige Alternative zu einer der etablierte(re)n Sprachen ansehen würde.

(Wenn man z.B. beim Browsen über die „Schwestersprache“ Genie (programming language) - Wikipedia stolpert, und sieht, dass die letzte Version 5 Jahre alt ist, muss man schon solche Fragen stellen).

Natürlich ist das immer ein Henne-Ei-Problem … deswegen spricht ja auch nichts dagegen, so eine Sprache mal hier zu erwähnen/hervorzuheben, wenn man denkt, dass sie interessant ist :slight_smile:

Ok, die Wikipedia-Seite der Schwestersprache ist nicht aktuell. Vala und Genie verwenden nämlich denselben Compiler und daher ist die Sprachversion dieselbe.

Ein Detail, was dich auch interessen dürfte (von JavaScript ausgesehen), dass Properties typisiert sind und man damit nicht aus Versehen böse Sachen anstellen kann.

Auch noch ein interessantes Implementationsdetail ist, dass Reference Counting verwendet wird, anstatt der Garbage Collection. Somit ist die Speicherfreigabe deterministischer.

Jedenfalls stimmt es, dass Ökosystem der Sprache im Moment nicht so groß ist. Es liegt vermutlich daran, dass noch keine 1.0 Version veröffentlicht wurde. Ich habe außerdem das Gefühl, dass das Ökosystem noch im Aufbau ist. Siehe die neue C/C++/Vala IDE namens GNOME Builder.

allgemein auf der Welt wie in der Programmierung traurig, wie viele Sprachen es gibt,
was das jeweils an Lernzeit kostet, (Gehirn-)kapazitäten vermeidbar belegt,
Erschaffenes für Anderssprachige nicht-nutzbar macht,

auf der Welt hat das noch seine historischen Gründe,
aber muss man das auch bei Programmiersprachen aktiv neu bewirken?
als ein solcher Entwickler sollte man lieber 100x überlegen ob es nicht anders geht,

kann man ‚Bindings‘ und ‚Zugriff auf C-APIs‘ und ordentliche GUI usw. nicht anders lösen?
selbst wenn eigene Ausführungsumgebung benötigt, kann man immer noch versuchen,
die Originalsyntax einer bestimmten Basissprache weitgehend beizubehalten, statt kompletten Dialekt einzuführen

ein paar Trendsprachen wie Groovy, Scala sind ja schlimm genug, aber verständlich,
die Kleinsprachen aber einfach nur komplett sinnlos in der Welt, nochmal Faktor 1000 weniger Nutzung,
Vala hier seit 2006 bis heute auf Version 0.3x (wobei Nummerierung für sich nichts aussagt),
Mailinglist mit 10 Threads pro Monat,
‚vala forum‘ in Suchmaschinen findet einen einzelnen Thread von 2006…

(ach so, ist auch nur ein Charakter aus einer Fernsehserie :wink: )

nichts gegen die Nennung hier gesagt,
aber eine andere Erkenntnis als Sinnlosigkeit und Bedauern der Zeitverschwendung für solche Projekte über Jahrzehnte kann es kaum geben,
höchstens für Sprachentwickler als Ideensammlung interessant, was bei der nächsten Version/ Sonder-API einer Hauptsprache ergänzt werden könnte

[OT][QUOTE=SlaterB]selbst wenn eigene Ausführungsumgebung benötigt, kann man immer noch versuchen,
die Originalsyntax einer bestimmten Basissprache weitgehend beizubehalten, statt kompletten Dialekt einzuführen[/QUOTE]

Wußte garnicht, dass du so ein Verfechter von Lisp bist. Finde ich toll![/OT]

*** Edit ***

Eine Ergänzung warum ich Lisp genannt habe
[OT]Aber, bevor da jetzt jemand am Rad dreht. In vielen Punkten hast du ja recht Slater.

Ein kurzer Blick in die Welt von Enterprise Java.

Was ist die erste Datei, die in einem JEE-Projekt angelegt wird?
(1) Die XML-Datei für den Build. Von mir aus auch Gradle für die ganz hippen.

Ok, der Rest ist aber komplett (2) Java, solange man nicht etwas mehr Interaktion auf dem UI braucht. Und ohne (3) JS wird es heute recht eng.
Daten sollen auch noch persistiert werden, aber dank JPA geht das ganz in Java. Man benötigt lediglich ein paar (4) Annotationen.
Annotationen, Metaprogramming, da kann man sich streiten ob dies eine weitere Sprache ist.
Plötzlich stellt man fest, dass da irgendwas schief läuft mit dem JPA. Einen kompletten Datenbank-Dump ziehen und darauf dann eine etwas kompliziertere Suche in Java anstrengen ist nicht praktikabel. Also entweder Handgestricktes SQL via (5) JDBC oder HQL etc. Wenn man schon dabei sind, dann können wir auch noch gleich ein Paar Stored-Procedures in (6) PL/SQL oder T-Sql einbauen auf dass die Abhängigkeit zu Oracle/MS auf alle Ewigkeit manifestiert ist.
Irgendwann stellt man dann fest, dass das html in Java zu erstellen nicht so praktikabel ist und stellt dann auf eine (7) Template-Engine um.

Also ich komme hier auf Sieben Sprachen!

Beispielhaft Lisp mit Clojure als Lisp.

(1) Ein einfaches project.clj für das Build-Tool leinigen.
(2) Das man in einem Clojure Projekt mit Clojure Programmiert, versteht sich von selbst. Interop mit Java ist da um das Ökosystem zu nutzen.
(3) Dafür gibt es ClojureScript. Im Grunde genommen ebenfalls Clojure, das halt nicht nach Java-Bytecode sondern Javascript compiliert. Und wenn man etwas spezielles in JS braucht, ist die Interop gegeben.
(4+5+6) Hier kann man z.B. auf Datomic bauen. Man bleibt also immer in der Clojurewelt.
(7) Da Clojure ein Lisp ist und Lisp immer auch eine Sprache ist um Sprachen zu erstellen mit denen man seine Probleme löst, gibt es eben auch alles nötige um in Lisp html zu erstellen.

Kurz um für ein größeres Enterprise Projekt in Java braucht es bis zu 7 Sprachen.
Mit Lisp reicht, wenn man es wie beschrieben anstellt eine. Und wenn man dann noch die lächerlich kleine Syntax anschaut mit der ein Lisp auskommt…
[/OT]