Ich finde es frustrierend, wie die Geschwindigkeit der Entwicklung, die dynamische Sprachen bieten sollten, durch das Fehlen von Vervollständigungen und anderen Vorteilen, die IDEs in ihren statischen Entsprechungen bieten würden, erheblich beeinträchtigt wird.
Es geht nicht nur darum, weniger zu tippen - es ist der Produktivitätsschub und der Spaß, den Sie durch das Durchsuchen von APIs erhalten, ohne ständig auf eine Dokumentation verweisen zu müssen, die nicht in den Editor integriert ist.
Bis jetzt habe ich alle IDE + dynamischen Sprachkombinationen - die fairerweise nicht so viel sind - ausprobiert:
- Buggy
- schleppend
- ahnungslos / überinteressiert (wie es immer möglich ist, alle Abschlüsse zu zeigen)
- oder einfach nicht so vollständig wie beispielsweise Eclipse + Java.
Mir ist bewusst, dass die dynamische Code-Analyse keine triviale Aufgabe ist. Aber man muss sich fragen - ist dieser Code wirklich so schwer herauszufinden ?
Meine Frage lautet also:
Haben bestimmte IDEs (oder weniger All-in-One-Setups) eine hervorragende Unterstützung für eine dynamische Sprache erreicht, oder ist dies immer noch ein ungelöstes Problem?
quelle
Antworten:
Smalltalk - eine hochdynamische Sprache - hatte schon immer eine hervorragende IDE, in der kleine Dinge wie automatisches Refactoring, SUnit (der Großelternteil aller * Unit-Frameworks), "Wer sendet diese Nachricht?", "Wer implementiert diese Methode?" und dergleichen waren Pioniere. Also ja, IDEs können in der Tat dynamische Sprachen auf einem Niveau unterstützen, das bis vor kurzem das Niveau statisch typisierter Sprachen bei weitem übertrifft.
S. Lott sagt: "Dynamische Sprachen können nicht dieselbe Art von Code-Vervollständigung haben wie statische Sprachen. Das ist im Grunde unmöglich."
"Im Grunde unmöglich" im theoretischen, absolutistischen Sinne? Sicher. Im praktischen Sinne? Nicht wirklich. Es gibt viele Möglichkeiten, Typen für dynamische Sprachen statisch ( k-CFA , RoelTyper ), zur Laufzeit ( PICs ) und mit anderen Methoden abzuleiten , z. B. mit dem jüngsten Verlauf eines Programmierers - "Wie der Programmverlauf die Codevervollständigung verbessern kann" .
Sicherlich sind die Pharo- und Squeak-Communitys mit ihren Code-Vervollständigungs-Tools sehr zufrieden .
quelle
Fast alles, was Sie von IDEs wissen, wurde zuerst in Smalltak entwickelt, einer dynamischen Sprache. Alles andere kopiert sie nur. Somit sind alle diese Funktionen in dynamischen Sprachen möglich.
Dynamische Sprachen stehen heute hinter statischen Sprachen. Aber wieso?
Bis vor kurzem wurde allgemein angenommen, dass statisches Schreiben dynamischem Schreiben überlegen sei. Viele Programmierer haben in jüngerer Zeit ihre Meinung zu diesem Punkt geändert. Der Fokus auf IDEs für dynamisch typisierte Sprachen war nicht vorhanden.
Ich denke, dass die Funktionen für IDEs in dynamisch getippten Sprachen weniger nützlich sind. Bei der Arbeit mit Java oder Objective-C ist die IDE meines Erachtens erforderlich, um mit der Sprache arbeiten zu können, bei den dynamischen Sprachen ist dies jedoch nicht der Fall.
Einige Teile der Aufgabe sind in einer statischen Sprache einfacher. Es ist einfach, den Typ eines Ausdrucks zu bestimmen. Dasselbe in einer dynamischen Sprache zu tun, erfordert entweder eine vollständige Programmanalyse oder die Protokollierung der Typen zur Laufzeit. Da sich vieles in der IDE um die Typen dreht, hat das einen Effekt.
quelle
I think that the features for IDEs are less useful in dynamically typed languages
- Komisch, ich denke genau das Gegenteil. Da Sie in so vielen dynamischen Sprachen keine Variablen deklarieren müssen, ist die falsche Schreibweise einer Variablen ein ernstes Problem ... ein Problem, das durch eine gute IDE gelindert wird. Die restlichen Hauptfunktionen - Syntax-Coloring, Refactoring-Tools und Debugging-Funktionen - sind in allen Sprachen gleichermaßen nützlich .workOrder
und manche schreibenworkorder
. Dies sind zwei separate Variablen in Python> _ <Ich bin auf dieses Problem mit Python gestoßen. Ich wollte vim als Editor, aber das bedeutete, dass ich keine IDE-Umgebung haben würde. Also habe ich meine eigenen mit Vim-Plugins gerollt. Derzeit denke ich, dass ich tatsächlich eine bessere Entwicklungsumgebung habe als jede andere IDE, die ich in der Vergangenheit verwendet habe.
Mein Setup wird auf Github gehostet. Schauen Sie sich das an und krippen Sie , was Ihnen gefällt. Für einen schnellen Überblick über die Plugins:
Es gibt einige andere Dinge, aber es hat alle Funktionen, die die beliebtesten IDEs haben. Es hat mich keinen Cent gekostet, und ich kann die ganze Kraft von vim nutzen. Splits, Bewegungsbefehle, Register, Springen, meine gesamte Entwicklungsumgebung mit der Tastatur ausführen können ...
quelle
Angesichts der Tatsache, dass Ihre Bewertung schwer zu verstehen ist ("völlig hervorragend"? "Ahnungslos / überfordert"?), Ist es zweifelhaft, ob eine IDE dem implizierten Standard entsprechen könnte.
Trivialer Vergleich mit Eclipse + Java ist albern, weil dynamische Sprachen nicht Java sind.
Nicht ganz.
Es ist wahrscheinlich unlösbar. Ihre Anforderungen ("Mangel an Fertigstellungen und anderen Ressourcen") machen es schwierig, genauer zu sein.
Dynamische Sprachen können nicht dieselbe Art der Code-Vervollständigung aufweisen wie statische Sprachen. Es ist im Grunde unmöglich.
Einige IDEs raten sehr gut. Eclipse verfügt beispielsweise über Plugins für dynamische Sprachen.
quelle
Ich denke, diese Präsentation von Steve Yegge ist immer noch relevant. Kurz gesagt, es gibt einige halbwegs anständige Java-Skript-IDs (IntelliJ IDEA), aber dynamische Sprachen spielen im Allgemeinen eine Aufholjagd, nicht weil es von Natur aus schwieriger ist, diese Tools (oder Sprachen) so zu gestalten, dass es nur um die statischen Sprachen geht die ganze Aufmerksamkeit zuerst.
quelle
Ich programmiere den ganzen Tag in Javascript / PHP und Ruby und arbeite an Webanwendungen. Die beste IDE, die ich dafür gefunden habe, ist Aptana. Es hat Code-Vervollständigung für alle drei dieser Sprachen (und Python), es nimmt meine lokalen Variablen auf und zusätzlich, wenn es mit HTML und CSS arbeitet, nimmt es IDs in HTML zur Verwendung in CSS / Javascript auf und übernimmt die Funktion Namen, wenn ich etwas schnelles und schmutziges mache und Inline-Javascript schreibe (ich weiß schlecht, aber manchmal nützlich für den Proof of Concept). Es hat Rake-Tasks und Unterstützung für Git und eine Befehlszeilenkonsole eingebaut. Es hat ein bisschen gedauert, bis ich aufgestanden bin, aber als ich es einmal tat, stellte ich fest, dass ich meine IDE beim Codieren kaum verlassen habe, und das spart mir jede Menge Zeit.
quelle
Ich habe festgestellt, dass Wing IDE Python wirklich hervorragend unterstützt. Es leistet gute Arbeit mit der Code-Vervollständigung, und sein Debugger ist so leistungsfähig wie der von Visual Studio für das nicht dynamische C #.
Ich kann bestätigen, dass es nicht fehlerhaft, langsam oder ahnungslos ist. Ich habe Eclipse noch nie verwendet, daher bin ich in diesem Punkt unwissend, aber ich denke, dass die größere Frage lautet: Gibt es ein inhärentes Hindernis für die Entwicklung einer vollständigen und produktivitätssteigernden IDE für dynamische Sprachen? Aufgrund meiner Erfahrung mit Python und Wing bin ich geneigt zu sagen, dass dies nicht der Fall ist. Es ist jedoch sicherlich schwieriger.
quelle
Microsoft Visual Studio ist eine IDE, die von vielen Programmierern verwendet wird und IronRuby , IronPython und F # unterstützt. Die meisten würden Ruby und Python als dynamische Programmiersprache betrachten, F # dagegen weniger.
Als Antwort auf den Kommentar ist F # eine Programmiersprache.
Während die genaue Definition dessen, was genau eine "dynamische Sprache" definiert, noch zur Debatte steht, stimmen die meisten darin überein, dass JavaScript "dynamischer" ist als beispielsweise C #. Laut Wikipedia:
Ich möchte hier keine Dose Würmer öffnen. Einige würden vorschlagen, dass F # eher als funktionale als als als dynamische Sprache beschrieben wird, und ich würde keine Ausnahme machen. Was ich glaube, wäre fair zu sagen, dass es sich um die verschiedenen .Net-Sprachen handelt. F # wird im Allgemeinen als das geeignetere Programm für die dynamische Programmierung angesehen als C # oder VB.
Vielleicht möchten Sie sehen: Was qualifiziert eine Programmiersprache als dynamisch?
quelle
dynamic
es mittlerweile eingebaut ist. In beiden Fällen ist keines der beiden Elemente in der Regel dynamisch typisiert, und die meisten anderen Merkmale (von kulturellen Dingen ganz zu schweigen), die mit "dynamischen Sprachen" zusammenhängen, fehlen ebenfalls.Der Hauptunterschied zwischen statisch typisierten Sprachen und dynamisch typisierten Sprachen besteht darin, dass das System mit Sicherheit weiß, was eine Symbolreferenz zur Kompilierungszeit bedeutet.
Dies macht es wirklich einfach, die Informationen, die Sie für eine gute IDE benötigen, direkt aus den Informationen zu sammeln, die der Compiler zur Kompilierungszeit generiert (die zum größten Teil einfach auf "Bearbeitungszeit" angehoben wird).
Wenn Sie eine eigenständige Methodensignatur haben, die lediglich besagt, dass die Methode eine "Sache" erfordert, wie kann Ihnen ein Editor dabei helfen, zu wissen, was zu senden ist? Wie kann es helfen, Möglichkeiten zur Verwendung des Dings vorzuschlagen?
Duck-Typing hilft auch hier nicht weiter - selbst der intelligenteste Editor wird Ihnen nicht sagen können, dass Ihr Objekt die .executeFooOp () -Methode besitzt, mit der es ".executeBarOp" für dieses Objekt codieren kann (Obwohl es den Rest der Codebasis durchforsten und einige intelligente Vermutungen anstellen könnte).
Wenn Sie jedoch wissen, dass es sich um eine "Zeichenfolge" in der Signatur handelt, kennen Sie alle Methoden, die Sie möglicherweise für diese Zeichenfolge aufrufen, UND Sie können diese Variable vorschlagen, wenn dieser Benutzer gerade einen Methodenaufruf eingibt, für den ein erforderlich ist String als Parameter. Sie können sogar Unterklassen vorschlagen, in die es gegossen werden kann, wenn Sie möchten.
Die Informationen sind bei dynamisch getippten Sprachen nur dann vorhanden, wenn Sie einen vollständigen Scan der gesamten Codebasis mit etwas VIEL Intelligenterem als Ihrem typischen Compiler durchführen können.
quelle
Zumindest für PHP "verstehen" viele IDEs so etwas
Wenn Sie standardisiert dokumentieren (in diesem Fall phpDocumentor ), wird die IDE das Beste daraus machen.
quelle
Von allen IDEs für dynamische Sprachen (Sprachen, die den Typ zur Laufzeit auflösen) ist die beste ... Visual Studio für Python
Es lohnt sich zu versuchen.
quelle