Is Apple hinting at Java’s exit from Mac OS X?

Back in 2006 when I made the move to a Mac, Apple had put a lot of effort into making Java/Swing Applications feel like native on Mac OS. Adopting Java and integrating it well with MacOS was key to attract new users to the Mac.

But Apple today is self-confident enough to declare mainstream technologies a legacy on their machines. It seems Adobe’s Flash (which is not shipped pre-installed on the new MacBook Air and is not available on any iOS device) now has a prominent friend.

Apple today announces that they won’t maintain a JRE for Mac any more:

As of the release of Java for Mac OS X 10.6 Update 3, the version of Java that is ported by Apple, and that ships with Mac OS X, is deprecated.

This means that the Apple-produced runtime will [..] may be removed from future versions of Mac OS X.

This does not mean that Java will go away from the Mac any time soon, but there will (very likely) be no Java Runtime from Apple any more. So now it is up to Oracle (or any other third party) to provide a Java Runtime for the Mac, because it seems Java 7 (if that ever becomes real) apps will not run on Macs any more. But it also means that betting on languages that run on the JVM for development on the Mac is not a good idea (I am especially thinking of Clojure and Scala here).

Some may think that’s no big deal, since Java is a server-technology and the overall market share of Macs is quite small.

But this also makes life harder for providers of software packages that are portable, like IBM (Lotus Notes, Symphony, DB2 tools etc), the Eclipse project, Oracle (admin tools) and many others. What will happen if they cannot install on Macs any more?

Will this hurt the Mac platform or the software vendors? Will the possible inability to run a Scala-App on Macs influence the developers’ decisions, or will it make the Mac an unattractive platform for users due to missing applications?

Is this just Apple moving away from the mainstream or is the mainstream becoming irrelevant for some corners of the IT industry?

Hat tip to macrumors

The former Instantiations Java tools are back – for free!

Google has finally announced what they will do with WindowBuilder, WindowTester and CodePro:

We’re happy to announce today that we’re relaunching the following former Instantiations products under the Google name and making them available to all developers at no charge

So this means that these great tools are now free for commercial and non-commercial use. I can hear a few people take a deep breath and frolick ;-)

On the other hand, we’ll have to see what some of the announcement may actually mean mid-term:

…we hope you’ll start using them within your GWT projects…

because a fair amount of tools that were relaunched have nothing to do with the GWT at all. But at least they available and will help a lot of Java developers make their GUI design  and testing a lot easier.

I guess we’ll know in a few months if I am just too picky about the way GWT is mentioned in the announcement…

Is there a market for Java tools?

Now that the smoke has settled on the news of Google’s acquisition of the Java GUI building expertise of Instantiations, it is probably time for wild speculation. If Google was only interested in Instantiations’ GWT Designer, they could have bought only that product and the development team behind it. But Instantiations has sold all their Java/Eclipse products and staff to Google. This could also be another proof of the fact that it is extremely hard to make real money in an eco-system that’s associated with FREE.

FREE is a price tag that makes people put aside their intelligence for a while. It works even better than CHEAP. The tools from Instantations were not really expensive, even though they are best of breed in the Java GUI Design arena. Our customers were and still are extremely satisfied with WindowBuilder, SWT Designer or Swing Designer. We’ve had very faithful customers who’ve renewed their support every year.

But we also had many prospects who wanted SWT Designer or RCP Developer but were not able to get a budget of a few hundred bucks per seat, because all their eclipse tools in use were free. So even if they saw the benefits of atool they wouldn’t want to pay for it. They’d rather throw lots of person days at the problem.

But somebody has to pay the people who build and support these great tools. They won’t do it just for the love of it (well, I know some people who might, but they don’t count ;-) ). Eclipse has been largely paid for by IBM and many other companies, and thus by their customers, so neither Java, nor Eclipse, nor any other high quality tool really is for free. You subsidize them by buying DB2 or Oracle or any other products.

So coming back to my speculation: This whole thing might just mean that all the investment in developing and supporting WindowBuilder didn’t really pay back or there were signs for a negative trend. So while many people are excited in hopes for a free WindowBuilder in the near future, there will probably also be some drawbacks. Even Google will need a business model for supporting users of these tools.

An interesting question here is: being a web centered company, where could the benefit of a rich client GUI builder be? What could be an attractive reason for Google to give away SWT Designer or SWING Designer? There even is no real competition to cause any trouble to, because WindowBuilder didn’t have much competition. No question: GWT Builder is a tool that’s attractive for Google. But Rich Client tools that work completely offline? Maybe in the form of a GUI Builder for Android gadgets…

I hope I am wrong and Google’s altruism will make them open source and/or give away WindowBuilder. Maybe there will be some support contract constellations for large customers which will finance the tool. But why, exactly, should that work better at Google than it did at Instantiations?

We’ll hopefully know more soon.

Instantiations sells their Java Business to Google

Google and Instantiations today announced that Instantiations is being acquired by Google. So this is what the Instantiations website looks like this morning :

In a first short interview with Mike Taylor, CEO of Instantiations, I found out the following:

  • Google is acquiring Instantiations’ Java business. The agreement includes all Java products, trademarks and staff
  • All Java products from Instantiations are not being sold any more, at least for “a while”. I am sure they won’t disappear, but for the moment all sales of licences and support contracts has stopped. All reseller agreements were terminated.
  • Instantiations’ Smalltalk Business is going to be spun off as a new, independent (privately held) company called (surprise!) Instantiations
  • The management team and technical staff of that new Instantiations will be essentially the same as the one of yesterday’s Instantiations

So what does this mean for Java developers?

Since I do not have any insight into the deal, I can only speculate. In the best of all possible cases, some of the tools will be open-sourced sooner or later, my hottest candidate for the first one is the GWT Designer, which is Instantiations’ tool for visually constructing applications for the Google Web Toolkit.

I am quite sure tools like WindowBuilder or WindowTester will not go away, because there is a really big user base out there. Many big shops do use Instantiations’ tools for boosting their productivity and improving the maintainability of their code.

Here’s what Instantiations announced in a mail to all customers of their java products:

From our new Google home, we will be able to leverage our Eclipse Java industry knowledge, award-winning technology and world class development team to continue advancing the state-of-the-art in software development tools. But first and foremost we want to say how much we appreciate your patronage and support through the years. Thank you!

How does this affect you? Please rest assured that your existing Support Agreement will be honored. Our highly responsive tech support team is in place and ready to take care of you.

New downloads for the Eclipse Java products will disabled for a short time during the transition. Please stay tuned for exciting new announcements coming soon on the Google Web Toolkit blog.

As in the past, you may use both e-mail support and product forums to address support issues. Please note the new support e-mail addresses and forum URLs below [not added to this blog post to avoid spam. We will notify you when they become active. In the meantime, please continue to use the existing Instantiations product support channels.

I will keep you updated as soon as I hear more details. We need to know more since we need to tell our customers about the future oft heir tools, so you can be sure we’re going to find out more.

So what does all this mean for objektfabrik?

For now, it means we’re not a reseller of any of these products any more:

  • The Window Builder family (including SWT Designer, Swing Designer and GWT Designer)
  • The WindowTester family
  • The CodePro family
  • RCP Developer

No matter what happens to the tools at Google, we’ll continue to provide knowhow in their use to our customers, and we’re going to use them in our Java projects as much as we can.

Stay tuned for more news

I want it for VA Smalltalk

To my readers, it is not a secret that I see a lot of room for improvement for the VA Smalltalk tools.

One of the tools that really are nicely done in Eclipse, Squeak and Pharo is their diff tool, in which you can see all changes to a file or method between two revisions. They graphically support the user in finding additions, removals and changes with background colors and lines.

Now VisualWorks gets a nice colored diff browser.

In VA Smalltalk, there is a differences browser, but it is really not as helpful and comprehensible. So if anybody is looking for something useful to do: here’s an idea ;-)

Michael Wiedekings Frust mit Scala – und der meine

Auf seinem heise developer-Blog Babel-Bulletin schreibt Michael Wiedeking den Beitrag “Runterskaliert” über die funktionale Programmiersprache Scala und seine Probleme damit. Auch wenn dieser Blog-Beitrag schon fast angestaubt ist (einen Monat alt), konnte ich mich in einigen seiner Kritikpunkte wiederfinden, und auch meine Faszination für Scala und die damit umgesetzten Konzepte aus der Welt der Funktionalen Programmierung findet sich in seinem Beitrag wieder.

Und trotzdem hinterlässt der Beitrag einen etwas schalen Nachgeschmack.

Aber erst mal schön der Reihe nach.

Wiedeking zählt zunächst einige der Eigenschaften von Scala auf, die ihm an Scala erwähnenswert erscheinen:

Bei Scala gefällt mir der Ansatz, dass wirklich ausnahmslos alles ein Objekt ist…

Diesen Umstand findet ein Smalltalk-Liebhaber natürlich auch sehr vertraut und attraktiv. Schliesslich ist neben Typecasting und viel syntaktischem Grundrauschen vor allem die seltsam anmutende Tatsache, dass es in (sagen wir mal) Java für z.B. Ganzzahlen zwei Typen existieren, denen man auch erst kurz nach der Pubertät beibrachte, dass sie sich automatisch ineinander umwandeln können (Autoboxing), immer wieder ein Kopfschütteln wert, wenn man das nicht als ein unumstössliches Faktum mit der Muttermilch aufgenommen hat.

…wie schön einige der syntaktischen Probleme gelöst werden…

da der Autor nicht weiter darauf eingeht, was er hier meint, lese ich das als “mir hat die Syntax gut gefallen”. Auch hier finde ich mich wieder, Scala liest sich weitaus angenehmer als Ruby (sic!) oder eine Sprache aus dem C-Dunstkreis. Aber das ist natürlich reine Geschmacks- und Gewöhnungssache. Smalltalk haftet ja auch eine Aura seltsamer Syntax an.

und – nicht zuletzt – dass ich die komplette Java-Bibliothek zur Verfügung habe

Das ist natürlich ein Riesen Vorteil, den es nicht zu verachten gilt. Zwar gibt es einige Beschränkungen in der Scala-Java-Interoperabilität, aber diese betreffen in erster Linie den umgekehrten Weg, also die Nutzung von Scala aus Java heraus. Die Tatsache aber, dass ein Scala-Programm auf so ziemlich jeder (aktuellen) Java-Laufzeitumgebung aufgesetzt werden kann, und dass eine riesige Auswahl an Bibliotheken aus der Java-Welt zur Verfügung stehen, ist ein sehr gewichtiges und stechendes Argument. So ist es denkbar, eine Scala-Anwendung zu schreiben, und die Oberflächen in SWT oder Swing zu implementieren. Dafür stehen dann auch bereits bewährte Werkzeuge wie SWT Designer oder WindowBuilder zur Verfügung. Auch die komplette RCP-Umgebung von Eclipse steht dem Scala-Entwickler offen, um vertraut wirkende Oberflächen bereitzustellen. Bestechend ist auch die Idee, die Persistenz der Scala-Objekte in einem Java-Framework zu implementieren, und damit auf Bewährtes und gut Dokumentiertes zurückzugreifen.

Gerade hier wird aber auch klar, dass es in Scala meist nicht ganz ohne Java gehen wird. Das muss kein Nachteil sein, kann aber.

Schliesslich wird man um ein gerüttelt Mass an Java-Kenntnissen nicht herumkommen, und letztlich in der Wartungsphase eines Projektes immer beide Technologien vorhalten müssen. Ein Mix aus zwei Sprachen, wie nahe sie auch immer beieinander sein mögen, bedeutet immer auch, dass man bei der Käferjagd über Grenzen springen muss. Steckt man mitten im Debugger und ist an einer Stelle angekommen, an der aus Scala heraus Java-Methoden aufgerufen werden (oder umgekehrt), ist erst mal ein Moment des Innehaltens und Kontextumschaltens angesagt. Selbst, wenn ein Debugger zur Verfügung stünde, der den Übergang nahtlos darstellen könnte, befände man sich auf einem neuen Planeten: hier bin ich nicht mehr in der funktionalen Welt, und die Syntax hier vor mir ist Java, nicht Scala…

Ich will das Thema nun aber nicht überstrapazieren, der geneigte Leser kann sich sicher sein Bild davon machen, was ich meine: spätestens bei der Bearbeitung von Troubletickets ist “die andere Seite” nicht mehr als Black Box akzeptabel, auch wenn sich das ganze beim Entwickeln noch so anfühlen mag. Ich bin, wenn ich an einem Java-Debugger sitze, immer wieder irritiert, wenn dieser mir Quelltext vorenthalten will, aber das ist eine andere Geschichte…

Als Smalltalker kann ich auch das Folgende sehr gut nachvollziehen:

Beispielhaft sei hier nur das Operator Overloading erwähnt. Es hatte mich schon bei C++ begeistert, da ich schon immer fand, dass

ab + c

deutlich einfacher als

a.mul(b).add(c)

zu lesen ist

Denn in Smalltalk gibt es ebenfalls keine Operatoren, sondern nur Methoden, und es ist gar kein Problem, die Methode + zu überschreiben. Natürlich gibt es Punkte, an denen man wissen sollte, was man tut, wenn man es denn tut, aber das sollte kein Argument gegen Operator Overloading sein. In diesem Kontext sei ein kleines Beispiel aus grauer Vorzeit bemüht:

Kaum war der Jahrtausendwende-Spuk vorüber, und wir waren alle knapp dem Weltuntergang entronnen, versank die IT-Welt in der nächsten Katastrophe: Die Euro-Umstellung (manch einer mag sich nun wieder an lange Nächte, Schlaflosigkeit und vor allem eine gewisse Unruhe im Management erinnern, die zu vielen unerquicklichen Reports und Status Meetings führte) . Millionenbeträge wurden investiert, um Programme fit für die neuen Umrechnungs- und Rundungsregeln sowie die Umstellung in zwei Phasen fit zu machen. In einem Smalltalk-Projekt konnten wir hier mit relativ wenig Aufwand eine Klasse für Geldbeträge einführen, die sich nach aussen hin mit dem API einer Zahl präsentierte, und intern den gesamten Verwaltungskram abhandelte (in welcher Europhase sind wir, bin ich eine Summe aus Beträgen in zweierlei Währungen etc.). Für sämtliche Stellen, die also vorher zwei Zahlen unter Verwendung der Methode + addierten, änderte sich gar nichts. Es musste lediglich dafür gesorgt werden, dass alles, was einen Betrag erzeugte, eben nicht mehr nur eine Zahl instanziierte, sondern ein Objekt der Klasse EuroBetrag. Der Rest des Systems blieb unangetastet. So war der ganze Spuk in ein paar Wochen erledigt (inklusive Tests), und wir konnten neue Features implementieren, während andere Projekte enormen Aufwand treiben mussten.

Also, kurz gefasst: Operator Overloading kann extrem mächtig sein, und enorme Produktivitätsvorteile bieten, wenn man sich sparen kann, jeden einzelnen +-Operator darauf zu untersuchen, ob er nun ein Aufruf der add-Methode der neuen EuroBetrag-Klasse sein muss oder nicht.

Jetzt aber kommt der erste Stolperstein für meine positive Grundeinstellung gegenüber Herrn Wiedekings Artikel, in dem er die aus seiner Sicht großen Vorteile des Operator-Overloadings darstellt. So sieht er es als zusätzlichen Vorteil, dass Scala es erlaubt,

beliebige Unicode-Zeichen als Operatoren zu definieren. So konnte ich beispielsweise beim Herumexperimentieren einen regulären Ausdruck der folgenden Art schaffen:

NUMBER = LPAR ∙ (SP↯) ∙ (ALPHANUM ↦ 0) ∙ (SP↯) ∙ RPAR ∙ (SUBNUM ↦ 1)

Ich muss zugeben, dass meine Kenntnisse in der Erfassung von Unicode-Zeichen über die Tastatur eines heute gebräuchlichen PCs oder Macs sicher verbesserungsfähig sind, aber irgendwie kann ich mich des Gedankens nicht erwehren, dass ich hier verloren ging. Nicht nur, weil ich mathematisch nicht mehr mithalten kann, sondern auch, weil ich hier fast glaube, dass diese Unicode-Sache für Operatoren dann doch etwas zu weit geht.
Wobei das vielleicht nicht für Anwendungen im mathematischen oder Engineering-Bereich gilt. Letztendlich liest sich der Code für einen Mathematiker dann doch sehr gut.
Ich fand das Beispiel allerdings sehr esoterisch und nicht wirklich ein gelungenes Plädoyer für Operator Overloading oder Scala.

Nun kommt Wiedeking aber zu einem sehr interessanten Punkt:

So habe ich also Scala schätzen und nutzen gelernt, habe mich aber trotzdem gegen einen professionellen Einsatz von Scala entscheiden müssen. Das ist insofern bedauerlich, weil Scala einen deutlich höheren Wiederverwendungsgrad hat als beispielsweise Java.

So ging es mir auch: Scala gefällt mir gut, und die Möglichkeiten durch die Java-Basis sind sehr bestechend, aber so recht zu Scala konvertiert bin ich auch (noch?) nicht.Während wir gleich noch auf Wiedekings Argumente gegen Scala eingehen, hier ein paar Gedanken von mir:

Ein Aspekt auf den Wiedeking in seinem Artikel nicht wirklich eingeht, sind die funktionalen Ansätze in Scala, die in vielen Problembereichen sehr mächtige Vorteile sein können. So ist es durch die Nutzung von Konstanten (also vals) anstatt Variablen, und durch die Freiheit von Seiteneffekten bei der Bearbeitung von Konstanten sehr schön möglich, sehr gut lesbaren Code zu schreiben, und vor allem, Funktionen so zu formulieren, dass sie gut in einem eigenen Thread ablaufen können. Scala hilft bei der Parallelisierung von Aufgaben und kann so einen wichtigen Beitrag zur effizienteren Nutzung von Multicore-Prozessoren leisten. Wohlgemerkt, solange man Scala als funktionale Programmiersprache nutzt. Nun sind in meiner Projektpraxis ab und an Aufgaben auszumachen, bei denen man sich eine einfach zu implementierende multithreading-Fähigkeit wünschen würde, aber die Regel ist dies nicht. So wäre es manchmal schön, mitten in einem Smalltalk- oder Java-Programm eine solche Funktion zu formulieren und sie parallel ausführen zu lassen. Aber meist lässt sich dies auch mit den Bordmitteln der Sprache auch schon lösen, wenn auch möglicherweise mit etwas mehr Aufwand. Das halte ich für Vertretbar, wenn es um wenige Tasks in einem Programm geht. Smalltalk-Blöcke sind hier sicher ein hervorragender Ersatz für Funtionen in Scala, da diese in ihrer Eigenschaft als Objekte auch herumgereicht und jederzeit mit anderen Inhalten auswerten kann. Sonderlich weit ist ein Smalltalk-Block von einer Funktion in Scala nicht entfernt. Eines jedoch ist ein Vorteil von Scala: eine Funktion kann als nativer Thread ausgeführt werden. In Smalltalks Green Threads – Modell geht dies nicht. Hier sind noch Ansätze gefragt, die auch eine Unterstützung von Multicores in Smalltalk bringt.

Nun aber zurück zu Wiedekings Argumentation:

Der Grund ist ein ganz anderer: Es ist die Entwicklungsumgebung. Ich gehöre eigentlich zu denen, die, bis es nicht mehr anders ging, mit dem “vi”, “emacs” oder vergleichbaren Editoren gearbeitet haben. Und eine Zeit lang war das auch vollkommen ausreichend. Allerdings hatte sich das schlagartig mit dem Einzug der Refactoring-Fähigkeiten moderner IDEs geändert.

Ja, hier wird es düster um Scala (wie auch um andere der aktuell sehr beliebten Sprachen, etwa Ruby, erlang o.ä.). Zwar gibt es ein Eclipse-Plugin, das einge der heute üblichen Werkzeuge, wie man sie aus Eclipse, IntelliJ oder modernen Smalltalk-Entwicklungen kennt, bietet, aber eben leider keinen guten Eindruck hinterlässt. Ich habe es bisher auf den meisten Eclipse-Installationen nicht (oder nicht vollständig) zum Laufen gebracht, auf denen ich es versucht habe. Und die Tools sind noch weit davon entfernt, den Umfang eines Eclipse-Debuggers oder Smalltalk-Inspectors zu erreichen. Geschweige denn deren Stabilität. Das ist nun irgendwo auch nicht verwunderlich, denn die Tools, mit denen ich das Scala-Plugin vergeliche, sind von einem Heer von bezahlten Programmierern erstellt worden, und nicht von einigen wenigen Enthusiasten, Diplomanden und Doktoranden. Insofern ist es ein unfairer Vergleich zwischen Äpfeln und Birnen. Und dennoch zieht es der Mensch eben vor, ein funktionierendes Werkzeug zu nutzen.

So habe auch ich vorerst das selbe Fazit gezogen wie Wiedeking:

Nichtsdestoweniger werde ich die Entwicklungsumgebungen von Scala im Auge behalten. Und sobald sie meinen Ansprüchen genügen, werde ich nie wieder in Java programmieren müssen.

Nur mit dem Unterschied, dass ich mit Smalltalk deutlich weniger unzufrieden bin, als er mit Java ;-)

So stimme ich Herrn Wiedeking zu, dass Scala als Ersatz für unsere jetzige Umgebung nicht in Frage kommt, aber wir beide beurteilen die Sprache Scala in völlig unfairer Weise über die für sie verfügbaren Tools, anstatt uns mit den Fragen auseinander zu setzen, welche konkreten Vorteile die Sprachmittel von Scala uns gegenüber unserer aktuellen Lieblingssprache bietet. Ich glaube aber, wir sind da nicht die einzigen…

ESE 2009: Don Syme über F# und Funktionale Programmierung

Hier in Ludwigsburg findet aktuell ja das Eclipse Summit Europe statt. Es sind rund 400 Leute dabei, und es gibt eine Menge zu lernen über Eclipse, einige der wichtigsten Eclipse-Projekte und die neuesten Entwicklungen zu Eclipse4 (kurz e4), dem noch etwas vagen und für manch einen auch sehr esoterischen nächsten großen Meilenstein in Eclipse.

Zwar ist mir noch niemand über den Weg gelaufen, der mir mit meinem DataBinding-Problem weiterhelfen kann, aber dafür gibt es eine Menge an Informationen und Eindrücke zu bewältigen.

Als Business Partner von Instantiations sind wir natürlich auch dam um Dan, Jaime und Nick zu unterstützen und Interessenten über die Neuerungen der Instantiations-Tools zu informieren. Aber das ist eine andere Geschichte…

Die heutige Keynote war bemerkenswert. Nicht nur, weil Don Syme für Microsoft arbeitet, sondern auch, weil er nicht über Java, sondern über F#, eine funktionale Programmiersprache von MS, und dabei für seine Demo nicht Eclipse, sondern VisualStudio benutzt hat. Und trotzdem wurde den ganzen Tag über an den Tischen und in den Kaffeegrüppchen darüber gesprochen, und nicht etwa, um ein Urteil über seinen dreifachen Frevel zu fällen, sondern um über funktionale Programmiersprachen, Type Inferencing und Scala zu diskutieren.

Und in der Tat war seine Keynote ein Highlight. Er zeigte einige sehr eindrucksvolle Beispiele, wieviel kompakter und verständlicher F# Code sein kann, verglichen etwa mit C#. Neben einem kurzen Schweinsgalopp durch die wichtigsten Sprachkonstrukte von F# und die Kernkonzepte funktionaler Programmierung brachte er auch einige gewichtige Argumente für funktionaler Programmierung zur Sprache:

  • Die Lästigkeit des vielen Syntax-Rauschens in Java oder C# verglichen mit FP
  • Die ökonomischen Effekte durch wesentlich niedrigere Fehlerraten (bekannter Weise sind die Codezeilen, die nie geschrieben wurden, die am wenigsten fehleranfälligen)
  • Den Spass am Programmieren, der in C# oder Java leider allzu oft verloren geht

Als Smalltalker fühlte man sich immer wieder an die eigene Umgebung erinnert, nicht zuletzt, als er in F#interactive in der Manier eines Workspaces Code-Schnipsel für Codeschnipsel mit der Maus selektierte und per “Execute”-Menü bzw. Tastenkürzel ausführte.

Die ersten Code-Beispiele waren dann auch noch sehr “normal” und da man in F# (wie übrigens auch in Scala) keine Typeninformationen eintippen muss, fühlt sich das ganze für einen Smalltalker sehr vertraut an.

Aber FP ist noch deutlich mehr: die FP ermöglicht es, Funktionen zu definieren und praktisch als Objekte immer wieder zu verwenden. Ähnlich vielleicht wie Smalltalk-Blocks, aber eben irgendwie auch anders. Durch Definition einer Funktion kann Code extrem kompakt gehalten werden (man ist ab und an im Hinterkopf den Begriff Makro zu bemühen, aber ein Makro ist ja nur ein Precompiler-Trick um Schreibarbeit zu sparen, und ist nicht der richtige Vergleich).

Die Trends, die aktuell in OO-Sprachen zu beobachten sind, so Syme, sind genau die Stärken der FP:

  • Immutable Data
  • Abfragesprachen in der Programmiersprache eingebettet
  • Lambda-Funktionen
  • Pattern Matching als Sprachelement
  • Einfache Syntax
  • Reduktion von Seiteneffekten

Genau diese sieht Syme in F# realisiert. Die Funktionale Programmierung wird aktuell ja als einer der vielversprechendsten Ansätze gesehen, um die Umsetzung von Programmen für Multiprozessor- und Multi-Core-Architekturen zu schreiben. Eine Funktion ist in sich abgeschlossen, operiert auf isolierten, unveränderlichen Daten und erzeugt neue, und kann daher isoliert auf einem Prozessor oder Core parallel ausgeführt werden.

Die Sprache F# hat zwei wesentliche Urpsünge: OCaml als Ideenlieferant für die Syntax und C# wegen des gemeinsamen Objektmodells.

Ein sehr wichtiger Aspekt, den Syme anspricht, ist die Tatsache, dass ein F#-Programm nahtlos in ein .Net-Umfeld eingebettet werden kann. Jede andere .Net-Sprache kann auf F#-Komponenten zugreifen, und umgekehrt natürlich auch. Dasselbe gikt für Scala, das ja nahtlos mit Java interoperieren kann.

So macht es möglicherweise Sinn, den GUI-Code in C# (Im Sinn: Java/Eclipse) zu schreiben, und die Business-Logik in F# (behalte Scala) umzusetzen.

FP hat das Zeug dazu, die Objekttechnologie abzulösen bzw. einen Schritt weiter zu bringen. Java, C# etc. sind Sprachen, in denen sehr viel technisch motivierter Krimskrams programmiert werden muss, den man sich in der FP sparen kann. Die Ansätze in JavaScript, Scala und F# dazu sind vielversprechend. Vielleicht ist Jave wirklich bald mehr eine Plattform als eine Programmiersprache, und vielleicht bewegen wir uns bald wieder auf einem neuen Terrain, der funktionalen Programmierung.

Ich wäre dabei. Die ganze Umgebung und die Denkweise in Scala oder meinetwegen F# ist einem Smalltalk-Entwickler sehr vertraut. Und doch gibt es einige neue Ideen und Konzepte zu entdecken und zu nutzen.

Achja: F# hat auch etwas, das mich doch sehr verwundert hat: Whitespace matters. Das heisst, es ist für Zeilen in einer Funktionsdefinition zwingend erforderlich, dass sie mit einem Tab eingerückt sind. Ich musste unweigerlich an Cobol und PL/1 denken, und habe innerlich den Kopf geschüttelt. Aber vielleicht gibt es ja eine gute Erklärung für diese Design-Entscheidung… Zumindest gibt es so keine Glaubenskriege über Einrückungen oder den richtigen Platz für schliessende Klammern… ;-)

SWT auf Cocoa 64 bit mit Galileo

So, nun ist es wieder mal soweit. Ich weiss nicht weiter.

Inzwischen läuft mein Eclipse Galileo ziemlich rund. Alles ist JVM 1.6 und 64 Bit. Auch der WindowBuilder läuft rund, und ich kann die meisten meiner SWT-Dialoge nutzen. Klar, das übliche “Mac-Buttons sind aber ein bisschen höher als die von Windows” und “Labels sind ein bisschen breiter auf dem Mac”, aber es hat mich ja auch keiner gezwungen, ausgerechnet ein GridLayout zu nutzen…

So ganz habe ich den richtigen Weg für wirklich portable SWT-Oberflächen noch nicht gefunden.

Also eigentlich alles toll und großartig, wäre da nicht noch eine Kleinigkeit:

java.lang.ClassDefNotFoundError: org/eclipse/core/databinding/property/value/IValueProperty

beim Start einer Shell mit DataBindings aus SWT 3.4 (übernommen vom JDK 1.4). Der Allmächtige G konnte mir auch nicht weiterhelfen. Imports sind soweit okay, denke ich, ein Package mit dem Namen

org.eclipse.core.databinding.property

gibt es nicht, weder auf meinem Mac, noch sonstwo, sagt G. Und irgendwie scheint das alte DataBinding-Zeugs auch nicht deprecated zu sein.

Wer weiss Rat? Wahrscheinlich wieder irgend so ein kleines “Achja, stimmt, wenn Du auf orgMyMac64.galileo.org/swt/cocoa diese 24 dingers da nach Dropins legst, dann geht’s. Steht übrgens schon seit April auf TheUltimateEclipseGuru.org”

Naja, vielleicht finde ich morgen auf dem Eclipse Summit jemanden von UltimateEclipseGuru ;-)

IntelliJ wird open source oder: was vom Java-IDE-Markt übrig bleibt

Auf  heise ist es nachzulesen: JetBrains gibt IntelliJ IDEA in Zukunft als open source frei und bietet neben einer kostenlosen “Community edition” eine kommerzielle “Ultimate edition” an.

Das jagt einem (also zumindest mir) einen Anflug von “das musste ja kommen” durch den Kopf. Die Macht, mit der Eclipse den Markt von Java- Entwicklungstools überrollt hat, hinterlässt ihre Spuren. JetBrains steht zu wünschen, dass das Kalkül aufgeht, eine freie Edition wird zumindest einige Leute dazu animieren, die Ultimate edition zu kaufen. Aber ich hege da so meine Zweifel: was, wenn sich nach und nach zeigt, dass es zunehmend Erweiterungen für IDEA gibt, die aus der open source-community kommen? Wieviele Entwickler werden wohl mit IDEA in seiner community edition zufrieden sein?

Natürlich ist es für eine kleine Softwareschmiede auch sehr schwer, gegen viele hundert Millionen Dollar schwere Gorillas wie IBM und die später hinzugekommenen Eclipse-Financiers zu halten: wie schnell kann man neue Features einbauen, wie lange kann man sich gegen den bestechend günstigen Preis einer Plattform ankämpfen, die rasant schnell voran schreitet und mit enorm vielen Plugins erweiterbar ist, die aus allen Richtungen auf den Markt kommen, in unterschiedlichster Qualität und mit Preisen von kostenlos bis zu einigen tausend Euro?

Vieles spricht dafür, sich einfach in diesen Sog hin zum Mainstream zu begeben, im Eclipse-Strom mitzuschwimmen, und sich darauf zu verlassen, dass die große Zahl der Nutzer und Geldgeber schon dafür sorgen werden, dass man es mit einem erstklassigen Werkzeug zu tun hat, und sich für jedes Problem jemand finden wird, der es schon gelöst hat, oder der sich helfend auf den Plan werfen wird, um es zu lösen, und das ganz sicher genauso kostenlos.

Leider ist das ein Trugschluss. Es ist nicht nur naiv, sondern geradezu fatal, zu glauben, dass, was kostenlos herunterzuladen ist, auch kostengünstig einzusetzen ist. Ich versuche seit geraumer Zeit, Mit Eclipse Galileo einen Workspace aufzusetzen, indem ich SWT-Anwendungen für Mac OS X unter Java 1.6, also 64-bittig, entwickeln kann. Kann alles nicht so schwer sein, alles auf der Eclipse-Seite herunterladbar.

Pustekuchen. Es kompiliert nicht, man findet keine Dokumentation dazu, und selbst die Download-Links sind teuilweise falsch. Plötzlich bekommt man was kompiliert, aber beim Start der Anwendung heisst es, man habe ja die 32-Bit-Variante von SWT, und die laufe nicht auf der JVM 1.6 (die auf dem Mac eben ausschliesslich in 64 bit verfügbar ist). Ganz sicher gibt es mein Stück Dokumentation irgendwo, und gantz sicher haben schon zig Leute das Ding am Laufen, und es ist auch alles ganz einfach, wenn man die 3 wichtigsten Tipps zum Thema mal gefunden hat.

Und genau da haben wir’s: wo sind sie? Auf Eclipse.org sind sie nicht, oder sie verstecken sich noch vor mir. Auf diversen Usenet-Foren habe ich nichts gefunden, und auch eine Google-Suche habe ich noch nicht formulieren können, die mir weitergeholfen hätte.

Kostenlos und open source kann eben auch bedeuten, dass man schlichtweg verloren hat, wenn’s nicht klappt. Von wegen “Ruf mich an!” wenn’s Probleme gibt. Ich kann ja mal bei IBM anrufen, die helfen mir sicher gern. Tagessatz sicher oberhalb dessen, was IDEA an Lizenzkosten inklusive Support gekostet hätte.

Im kommerziellen Umfeld ist es nur bedingt förderlich, wenn ein vermeintlich kleines Konfigurationsproblem ein paar Tage Projektverzögerung bedeutet, die man mit Google und verzweifeltem Selbstversuch verbringt. Man ist nachher ein Projektmitglied mit extrem angesehenem Spezialwissen, das steht ausser Frage. Es ist gut, solche Spezialisten im Hause zu haben, vor allem, wenn man weiterhin mit solchen Werkzeugen arbeitet. Aber es ist auch teuer. Nicht unbedingt, weil solche Spezialisten hoch bezahlt wären, sondern vor allem, weil sie sehr viel Zeit unproduktiv vergeuden, um Probleme zu lösen, für die man bei einem Hersteller wahrscheinlich wesentlich weniger bezahlt hätte.  Hinzu kommt, dass ein verzweifelt Suchender möglicherweise nicht nur Kosten durch seine eigene Ablenkung vom Wesentlichen verursacht, sondern möglicherweise ein paar Dutzend Kollegen in ihrem Projektfortschritt bremst. Da sind die Kosten für Support oder Lizenzen mit Support sehr schnell amortisiert, man kann sowas manchmal in Stunden zählen…

So hat eben alles seine Vor- und Nachteile. Wir können uns als Entwickler nun über eine weitere hervorragende und kostenlose Entwicklungsumgebung freuen, und glücklicherweise können wir uns für die ultimate edition entscheiden, um o.g. Szenario weitestgehend zu vermeiden. Solange sich das Modell trägt.

Eins ist und bleibt klar: Irgendjemand muss jedoch die Zeche zahlen. Wenn das Modell aufgeht und funktioniert, sind es die, die den Support brauchen.

Wenn nicht, verschwindet eine tolle IDE sehr schnell vom Markt.

Jetzt sind die User dran.

Galileo / SWT jetzt auch Cocoa-fähig

Es gibt ein Leben ausserhalb des Smalltalk-Image. Auf dem Mac gibt es das sogar recht oft, denn ein Smalltalk mit nativer Oberfläche gibt es leider noch nicht, seit der Status von Ambrai ja ein sehr fragwürdiger ist.

Darum, und weil man einfach ab und an auch mal was in Java machen muss oder möchte, ist Eclipse immer mit an Bord.

Heute ist ja Galileo-Tag, d.h. die neuste Version von Eclipse wird heute als offizieller Download freigegeben. Neben vielen Verbesserungen in einigen Projekten, die man vielleicht auch nicht unbedingt braucht, gibt es aber insbesondere für Macies gute Nachrichten: SWT unterstützt nun Cocoa. Bisher wurde nur Carbon unterstützt, was nur unter 32 Bit und damit nicht mit Java 1.6 lief.

Ab sofort können also mit Eclipse und SWT echte Cocoa-Oberflächen gebaut werden, und das auch in 64 bit.

Damit ist meine spärliche Freizeit für die nächsten Tage also verplant, denn es warten ein paar kleinere Projekte auf ihre Cocoaisierung…