Neue IDE

Du hast eine Idee für ein Projekt?
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Kurz zur Vorgeschichtge: ich bin etwas frustriert und genervt von den existierenden Entwicklungsumgebungen für Python. Es gibt zwar jede Menge mehr oder weniger gute Editoren oder IDEs, aber es ist nichts dabei, was wirklich meinen Vorstellungen entspricht. Ich vermisse vor allem eine gute und erweiterbare Projektverwaltung. Leider ist auch kein Editor dabei wo ich sagen würde, auf den könnte man aufbauen. Am ehesten kommt noch Editra meinen Vorstellungen nahe. An Eclipse stört mich neben dem Ressourcenhunger die Tatsache, dass man eigene Erweiterungen in Java programmieren müsste, was ich nicht unbedingt lernen will.

Deshalb möchte ich eine eigene IDE schreiben, logischerweise in Python und mit Qt als Toolkit. Vorbild ist Editra, aber mit einer richtigen Projektverwaltung. Die Basis Projektverwaltung soll relativ rudimentär sein, aber erweiterbar für verschiedene Projektarten, beispielsweise Anpassungen für GTK, Qt oder Webentwicklungen.

Viele werden jetzt denken "yet another stupid IDE" und ohne gescheite Autovervollständigung hat das eh keinen Sinn. Aber wie ich anfangs schon sagte habe ich für mich das richtige Werkzeug noch nicht gefunden. Und die Problematik der Autovervollständigung in Python dürfte jedem bekannt sein.

Was haltet ihr davon?
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
donmarten
User
Beiträge: 32
Registriert: Donnerstag 27. August 2009, 08:45
Wohnort: Aalen
Kontaktdaten:

Wenn Editra deinen Vorstellungen am ehesten nahe kommt, dann könntest du doch auf Editra aufbauen in dem du ein (oder mehrere) Plugin(s) für Editra schreibst. Eine eigene IDE aufbauen wird sicherlich extrem aufwendig werden.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Die Überlegung besteht natürlich, aber das Toolkit, das Editra verwendet, hat (IMHO) zwei Nachteile.

Bei wxWidgets lassen sich die Docking Panels zwar nebeneinander oder übereinander anordnen, aber nicht stapeln. Das kann man nur notdürftig mit dem Notebook Widget nachbilden. Das ist aber ein Feature, auf das ich nur ungern verzichten möchte.

Außerdem möchte ich weitere Projekte auch mit PyQt entwickeln.

Ich weiß auch nicht, ob Editra im Editor Bereich etwas anderes zulässt als den normalen Text Editor. Ich möchte mir aber die Option offen halten, hier auch andere Dinge wie Tabellen, Grafiken oder Webseiten einzubinden.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

burli hat geschrieben:
Was haltet ihr davon?
Viel Spass und Erfolg! Du bist dir aber schon im klaren, auf was Du dich hier einlässt? Vor allen Dingen meine ich das zeitmässig. ;) Aber sicher eine große Herausforderung und Lernprozess.

Sonst schließe ich mich donmartin an.

Wenn nur einige Features abgehen, würde ich den Editor/IDE nehmen, der deinen Vorstellungen noch am ehesten entspricht. Entweder einen patch schreiben (und an Entwickler schicken) oder noch besser, falls das ein Plugin System bietet, eins zu implementieren. Ich mein, IDEs (und noch mehr gilt das für Editoren) gibt es wahrlich schon genug.
burli hat geschrieben: Und die Problematik der Autovervollständigung in Python dürfte jedem bekannt sein.
Das ist so ein Thema. Editra hat dabei auch eine gute Code Completion. Editra ist wxPython. Mit DrPython kannst du ebenfalls Plugins erstellen. Wenn Du Qt verwenden möchtest, würde ich mir vielleicht einmal eric ansehen. Eric wird sicher auch eine "Autovervollständigung" (Vorschläge für Vervollständigungen) liefern. Ich würde mir zuerst einmal alle so abchecken (und schauen, was es so alles gibt), bevor ich so etwas "from scratch" beginnen würde.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Der Zeitaufwand ist mir klar. Es gibt aber keinen Editor, auf dessen Basis ist eine Chance sehen, meine Vorstellungen zu realisieren. Ich kenne auch Eric. Aber ich finden den dermaßen überladen und unübersichtlich, dass man erstmal wochenlang damit beschäftigt wären, den zu entrümpeln. Würde Editra auf Qt aufbauen wäre es eine Option, aber ansonsten...
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Benutzeravatar
DaMutz
User
Beiträge: 202
Registriert: Freitag 31. Oktober 2008, 17:25

@burli: kennst du http://code.google.com/p/spyderlib/ ? dieser hat eine Projektverwaltung und baut auf Qt auf. Ich würde den als Basis nehmen oder mitzuhelfen.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wenn ich ne IDE schreiben wollte, würde ich wohl am ehesten noch auf Pida aufsetzen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

DaMutz hat geschrieben:@burli: kennst du http://code.google.com/p/spyderlib/ ? dieser hat eine Projektverwaltung und baut auf Qt auf. Ich würde den als Basis nehmen oder mitzuhelfen.
Kannte ich noch gar nicht. Schau ich mir mal an
Leonidas hat geschrieben:Wenn ich ne IDE schreiben wollte, würde ich wohl am ehesten noch auf Pida aufsetzen.
Wieso ausgerechnet Pida?
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

burli hat geschrieben:Wieso ausgerechnet Pida?
Pida bietet quasi alle Funktionen die man von einer IDE erwartet, ermöglicht es einen brauchbaren Editor zu nutzen und ist von Leuten geschrieben die Wissen was sie tun und die über IRC auch schnell zu erreichen sind.

Gerade die Editor Sache ist wichtig weil ein brauchbarer Editor schon sehr schwer hinzubekommen ist und sicherlich euren Zeitplan bei weitem sprengen würde.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

DasIch hat geschrieben:
burli hat geschrieben:Wieso ausgerechnet Pida?
Pida bietet quasi alle Funktionen die man von einer IDE erwartet, ermöglicht es einen brauchbaren Editor zu nutzen und ist von Leuten geschrieben die Wissen was sie tun und die über IRC auch schnell zu erreichen sind.
Ich hätts selber nicht besser sagen können. Vor allem wenn man auf irgendwas aufbauen will, finde ich es ungemein nützlich dass ich mir den Code ansehen kann, ohne mir die Augen auskratzen zu wollen - daher sinnvoll dass die Autoren keine Idioten sind.

Zu den anderen Editoren kann ich in der Hinsicht nichts sagen, aber bei Pida weiß ich das eben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Ich weiß nicht, was eine Projektverwaltung genau sein soll. Geht es um die Anbindung einer Versionsverwaltung? Auch der Begriff IDE ist relativ unscharf. Im Prinzip geht es ja darum, alle Werkzeuge zur Entwicklung in einem Werkzeug zu integrieren. Ein wichtiger Aspekt aus meiner Sicht ist aber außerdem, dass die Werkzeuge einen gewissen Standard nicht unterschreiten. Einfärben von Quelltext ist für mich inzwischen Standard, ebenso erwarte ich aber eine Unterstützung bei der Eingabe ("code completion"), das automatische Ausführen von Tests, Funktionen zur automatischen Umstrukturierung, einen Debugger, die Anbindung der schon erwähnten Versionsverwaltung und Zugriff auf die API-Dokumentation. Ach, ein Profiler, ein Codecoverage-Werkzeug und ein Bündel von Überprüfungen und Metriken, was Code-Qualität angeht, darf auch gerne vorhanden sein.

Kernkomponente einer IDE ist und bleibt wahrscheinlich der Texteditor. Diese Komponente ist bei Eclipse, wo sie ja entsprechend der Anforderung speziell in Java selbst geschrieben wurde, ein beeindruckend umfangreiches und auch noch komplexes Stück Software. Auch ein "einfacher" Editor wie Vim, Emacs oder TextMate umfasst tausende von Zeilen Code (und dabei spiele ich jetzt gar nicht darauf an, dass der Emacs beispielsweise einen kompletten Lisp-Interpreter enthält). Das mal eben nachzubauen ist keine einfache Aufgabe. Gleichzeitig denke ich aber nicht, dass der bei Qt (oder einem anderen GUI-Toolkit) mitgelieferte Editor ausreicht. Können diese z.B. Breakpoint-Markierungen am Rand automatisch mitführen? Oder Markierungen über Warnungen, Fehler oder geänderte Textbereiche? Was ist mit verschiedenen Hervorhebungen von Rechtschreibfehlern, Warnungen usw. im Quelltext? Können sie Fehlermeldungen direkt einbetten (wie es Xcode oder VisualStudio etwa machen)? Oder Schaltflächen im Editor anzeigen, über die man dann mögliche Umstrukturierungen visualisieren könnte?

Der Editor ist aber IMHO nicht die komplizierteste Komponente. Wichtiger ist noch, dass die IDE ein Objektmodell des Programms (ab besten des gesamten Projekts inklusive aller Abhängigkeiten) vorhalten muss, um daran ein semantisches (im Gegensatz zum einfachen syntaktischen) Hervorheben von Quelltext zu steuern, mögliche Code-Vervollständigungen zu berechnen, Umstrukturierungen vorzunehmen und natürlich zu wissen, ob Funktionen oder sonstige Programmbestandteile unbenutzt oder unbekannt sind. Während das bei einer statisch typisierten Sprache wie Java einfach nur schwierig aber lösbar ist, muss man bei Python mit Heuristiken arbeiten, nachdem man sich ein eigenes (möglichst reiches) Typsystem für Python überlegt hat. Ein schneller fehlertoleranter Parser, der mehrmals pro Sekunde über den veränderten Quelltext laufen muss, um das Objektmodell immer wieder anzupassen, ist da schon fast einfach. Oder wäre es, wenn z.B. Java-IDEs wie Eclipse nicht aus Performance-Gründen inkrementell vorgehen würden. AFAIK hat Eclipse auch nicht nur einen Parser, sondern drei, die nacheinander immer mehr Informationen aus dem System holen, damit zuerst einfaches syntaktisches Einfärben, einige Momente später ein semantisches stattfinden kann und dann noch etwas später auch Informationen aufgrund der Querverweise eingebaut werden können. Das der Editor dazu im Hintergrund immer wieder seine Darstellung ändern können muss, während der Benutzer "im Vordergrund" vor sich hin tippt, macht die Editor-Komponente auch nicht einfacher.

Und ich will natürlich mehrere Programmiersprachen in einem Editorfenster mischen können. Eine HTML-Datei z.B. hat ja auch CSS, JavaScript und vielleicht noch die Syntax einer Template-Engine. Innerhalb von JavaScript wären reguläre Ausdrücke noch mal eine eigene Sprache, die eigene Regeln hat, eigenes Hervorheben, eigene Prüfungen auf Korrektheit und eigene Warnungen oder Fehler.

Allgemein gilt, dass eine IDE so viel über meine Sprache wissen muss, dass sie mir bei der Eingabe helfen kann und es bequemer macht, mit der Sprache zu arbeiten, als wenn ich nur einen Texteditor der Marke "Notepad" hätte. Java wird z.B. durch seine IDEs erst erträglich und produktiv. Ohne die komplexe und (relativ) intelligente Codevervollständigung von IDEA würde ich beispielsweise Java nicht benutzen wollen.

TextMate, den ich z.B. für Python benutze, kann da eigentlich überhaupt nicht mithalten. Für mich ist's okay, da ich nur Kleinigkeiten in Python machen. Würde ich aber das Äquivalent von dem, was ich beruflich in Java mache, mit Python realisieren wollen, hielte ich die existierenden Werkzeuge alle für ungenügend im Vergleich zu Java-IDEs.

Ich glaube, ich hätte keine Lust, das alles selbst zu bauen. Ja, die Lernkurve bei Eclipse (oder auch IDEA) ist sehr hoch, wenn man die existierende IDE in Java erweitern will, aber statt komplett von vorn zu beginnen, wäre es vielleicht ein besserer Weg, die Entwicklung der IDE in der bevorzugten Sprache voranzutreiben. AFAIK kann man PyDev auch in Jython erweitern. Dieses Möglichkeit wirklich rund zu machen, wäre vielleicht eine lohnende Investition für die Community.

Ich würde auch PyCharm empfehlen, doch das ist ein kommerzielles Produkt und funktioniert nicht zusammen mit Jetbrains Opensource-Variante von IDEA. Das macht das Erweitern etwas schwieriger - jedoch nicht unmöglich, weil es ein dokumentiertes Plug-in-API für IDEA gibt.

Vielleicht sind meine Ansprüche zu hoch, und es reicht, den vorhanden Editor von Qt mit einem Rahmen zu versehen, der auch den Aufruf von Test-Werkzeugen, Debugger, usw. erlaubt. In diesem Falle: Mach es, zu lernen gibt es da garantiert jede Menge.

Stefan
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

sma hat geschrieben: [...]
Können diese z.B. Breakpoint-Markierungen am Rand automatisch mitführen? Oder Markierungen über Warnungen, Fehler oder geänderte Textbereiche? Was ist mit verschiedenen Hervorhebungen von Rechtschreibfehlern, Warnungen usw. im Quelltext?
[...]
Hallo Stefan, das müsste alles QScintilla (scintilla control, das auch wxPython verwendet), können.
sma hat geschrieben: [...]
Können sie Fehlermeldungen direkt einbetten (wie es Xcode oder VisualStudio etwa machen)? Oder Schaltflächen im Editor anzeigen, über die man dann mögliche Umstrukturierungen visualisieren könnte?
[...]
Das weiß ich nicht, vielleicht die "CallTips" für diesen Zweck zweckentfremden. Vielleicht ist gtksourceview noch leistungsfähiger(?) Aber das scintilla kann meines Erachtens doch eine Menge. Codefolding, verschiedene Marker und Textstyles (auch mit Wellenlinie zum Anzeigen, dass im Code etwas nicht passt).
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Scintilla kann schon einiges und ist auch erweiterbar. IMHO eine brauchbare Grundlage.

Was mich bei den ganzen "Python" IDEs am meisten stört ist, dass viele davon in Java programmiert sind, was ich absolut nicht nachvollziehen kann
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

burli hat geschrieben:Scintilla kann schon einiges und ist auch erweiterbar. IMHO eine brauchbare Grundlage.

Was mich bei den ganzen "Python" IDEs am meisten stört ist, dass viele davon in Java programmiert sind, was ich absolut nicht nachvollziehen kann
Genau das mag ich auch gar nicht, java ist ja noch schlimmer als C++. Etwas was so umständlich in der Syntax ist, was kompiliert wird, um dann doch wieder interpretiert zu werden...

Scintilla ist toll, ich glaube mit gtksourceview kann man sogar buttons oder anderen Controls im textfeld positionierten. Na ja, wems daugt, also für mich sieht das doch mehr nach Spielerei aus, da ich im Textfeld eigentlich eh nur text sehen möchte, und die controls in einem anderen Panel oder dockbar haben kann. Und wenn ich was drüberblenden will, kann ich mir immer noch die aktuelle position (dort wo der cursor etwa ist) holen und im einfachsten Fall ein Window ohne Borders anzeigen lassen.
burli
User
Beiträge: 1156
Registriert: Dienstag 9. März 2004, 18:22

Francesco hat geschrieben:Genau das mag ich auch gar nicht, java ist ja noch schlimmer als C++.
Es geht nicht darum, ob man Java mag ist nicht. Ich verstehe nur nicht, wieso man sowas nicht mal in Python schreibt. Dann hätte man als Python Entwickler auch mal bessere Chancen, Erweiterungen dafür zu schreiben. Ich sehe einfach keinen Vorteil von Java.
Das schwierigste beim Programmieren ist, sinnvolle Variablen- und Funktionsnamen zu finden :lol:
BlackJack

@burli: Wenn man sich umschaut wo man ein Rahmenwerk für eine IDE herbekommt, das schon alles nötige für Projektverwaltung, Versionskontrolle, usw. mitbringt, man also möglichst wenig selber implementieren muss und schon möglichst viel fertig vorfindet, landet man halt bei so etwas wie Eclipse.

Wenn man die Funktionalität, die es dort schon gibt, selber implementieren wollte, bräuchte man sicher ein paar Jahre um etwas zu bekommen, das annähernd auf dem Stand ist. Auf dem Stand von heute wohlgemerkt.

@Francesco: Ich bin jetzt kein übertriebener Java-Fan, aber es ist auf jeden Fall besser als C++. Ich hatte jedenfalls noch nie das Gefühl das ich Java-Quelltext oder Fehlermeldungen vom Compiler gesehen habe und gedacht habe, das verstehe ich nie. C++ mit Templates und den ganzen Fallen bei der Speicherverwaltung und "exception safety" ist viel schlimmer. Und die Java-Syntax ist einfacher als C++-Syntax. Das ein Semikolon im Anschluss an einem zig Zeilen langen Konstrukt entscheidet ob das nun eine Definition oder eine Deklaration ist, gibt's bei Java nicht.

Und das mit dem "interpretiert werden" ist ein Scheinargument. Letztlich wird alles interpretiert, ob nun von einem Hardwareprozessor oder einer VM. Wobei Java-Implementierungen mit JIT-Compilern arbeiten, also oft auch den Prozessor direkt ansprechen.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

burli hat geschrieben:Scintilla kann schon einiges und ist auch erweiterbar. IMHO eine brauchbare Grundlage.
Vielleicht. Als ich mir Scintilla mal angesehen hatte (und die Dokumentation richtig schlecht fand) sah ich keinen guten Weg, ein eigenes semantisches Highlighting (in Python) einzubauen. Ich meine, man konnte nur aus einer fest verdrahteten Anzahl von Scannern wählen, die im Prinzip nur Schlüsselwörter und Strings nach fest definierten Regeln einfärben konnten.
burli hat geschrieben:Was mich bei den ganzen "Python" IDEs am meisten stört ist, dass viele davon in Java programmiert sind, was ich absolut nicht nachvollziehen kann
Eclipse, Netbeans und IntelliJIDEA haben alle als Java-IDEs angefangen und wurden konsequenterweise in Java entwickelt. Die Abneigung von Java und die Präferenz von C++ teile ich auch überhaupt nicht. Ich denke, Java war für Eclipse eine sehr gute Wahl. Und die zehnjährige Erfolgsgeschichte des Projekts gibt mir glaube ich recht.

Stefan
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

burli hat geschrieben: Ich verstehe nur nicht, wieso man sowas nicht mal in Python schreibt. Dann hätte man als Python Entwickler auch mal bessere Chancen, Erweiterungen dafür zu schreiben.
Eric, spe, ulipad, drpython, pida, editra, boa constructor, active grid... noch nicht genug in python? Ist das alles zu schlecht? ;)
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

sma hat geschrieben:
burli hat geschrieben:Scintilla kann schon einiges und ist auch erweiterbar. IMHO eine brauchbare Grundlage.
Vielleicht. Als ich mir Scintilla mal angesehen hatte (und die Dokumentation richtig schlecht fand) sah ich keinen guten Weg, ein eigenes semantisches Highlighting (in Python) einzubauen. Ich meine, man konnte nur aus einer fest verdrahteten Anzahl von Scannern wählen, die im Prinzip nur Schlüsselwörter und Strings nach fest definierten Regeln einfärben konnten.
Gut, dann musst du einen eigenen Lexer implementieren. Ist vielleicht nicht leicht, sollte aber auch nicht unmöglich sein. Man braucht sich "nur" den scintilla code anschauen, wie die bisherigen Lexer implementiert sind. Und die (cxx) files waren kürzer als gedacht.
BlackJack

@Francesco: Ich denke das was sma meint ist mit einem Lexer für die Syntax nicht getan. Er möchte gerne semantische Informationen unterbringen. Also zum Beispiel auch das Properties speziell gekennzeichnet werden können, und dazu müsste man analysieren worauf `property()` angewendet wird. Das ist mit einem einfachen Syntax-Highlighter nicht getan.
Antworten