Was die Sprache der nächste Generation niedriges Niveau ist die beste Wette, wenn eine Code-Basis migrieren? [geschlossen]

StackOverflow https://stackoverflow.com/questions/1815613

  •  07-07-2019
  •  | 
  •  

Frage

Angenommen, Sie haben ein Unternehmen haben eine Menge von C / C ++ ausgeführt wird, und Sie mögen die Planung der Migration auf neue Technologien starten, so dass Sie vor 15 Jahren am Ende nicht wie COBOL Unternehmen.

Für jetzt, C / C ++ läuft mehr als gut und es gibt vielen Entwickler auf dem Markt für sie.

Aber Sie wollen jetzt darüber nachzudenken, weil die große Laufcodebasis gegeben und die Daten Empfindlichkeit, fühlen Sie es 5-10 Jahre dauern kann, um den nächsten Schritt zu bewegen, ohne das Budget zu überlasten und die Entwickler-Teams.

Sie haben gehört, über D , beginnend ganz ausgereift zu sein, und gehen , viel versprechende sehr beliebt zu sein.

Was wäre Ihrer Wahl und warum?

War es hilfreich?

Lösung

D und Go wird wahrscheinlich genauso beliebt wie Python und Ruby heute ist. Sie verfügen jeweils füllen eine Nische, und obwohl D sollte ein vollwertiger Ersatz von C ++ sein, wird es wahrscheinlich nie erwerben genug Masse C drücken ++ entfernt. Ganz zu schweigen davon, dass sie beide sind nicht stabil / reif genug, und es ist nicht bekannt, ob Sie die Unterstützung für diese Sprachen in 10 bis 20 Jahren für die dann aktuelle Hardware und Betriebssysteme haben werden. Bedenkt man, dass C / C ++ ziemlich die kompilierte Sprache und wird in der großen Mehrheit der Betriebssysteme und Native-Code-Anwendungen verwendet wird, ist es sehr unwahrscheinlich, dass es in absehbarer Zeit verschwinden werde.

Andere Tipps

C und C ++ ist eine ziemlich unschlagbar Combo, wenn es um nativ / unmanaged / "Low-Level" Sprachen.

Nicht, weil sie die besten Sprachen sind, weit davon entfernt, sondern weil sie es sind, sie die Arbeit machen, und sie sind gut genug . Es gibt wenig Zweifel daran, dass D, zum Beispiel, sind besser als C ++ in den meisten Punkten. Aber es funktioniert nicht in der wichtigsten: Kompatibilität mit allen vorhandenen C ++ Code. Ohne diese Voraussetzung würden die meisten dieser Code in einer verwalteten Sprache sowieso heute geschrieben werden. Der einzige Grund, warum so viele Codebases verwenden C ++ heute ist, weil sie es im letzten Jahr verwendet, und es wäre zu viel von einem Schmerz auf etwas anderes zu wechseln. Aber , wenn und , wenn sie wechseln, sie in der Regel nicht wechseln zu D. Sie schalten auf C # oder Java oder Python.

Das Problem für D und andere „kommende“ Sprachen für die gleichen Nischen im Wettbewerb, das heißt, während sie sind besser, sie sind wegweisend nicht genug Leute zu motivieren, um tatsächlich zu ihnen wechseln.

So C und C ++ sind hier zu bleiben. C ist unwahrscheinlich, viel weiter zu entwickeln. Es ist wie es ist, und einer der Nischen es füllen muss, ist „Einfachheit, auch für Compiler Schriftsteller“. Keine andere Sprache ist wahrscheinlich es in dieser Nische zu schlagen, auch wenn sie nie wieder den Standard überarbeiten.

C ++ entwickelt sich viel mehr dramatisch, mit C ++ 0x näher bekommen, und sie haben bereits eine riesige Liste von Funktionen, die sie tun wollen danach . C ++ ist keine Sackgasse ist in keiner Weise ein.

Beide Sprachen sind hier zu bleiben. Vielleicht in 50 Jahren andere Sprachen sie ersetzt werden, aber es wird nicht in diesem Jahrzehnt geschehen.

Ich verwende derzeit D regelmäßig. Ich würde es nicht noch empfehlen für Leute, die Produktion Code zu schreiben, weil es zu blutet Ränder. Ich weg mit ihm, weil die meisten meiner Code Forschungsprototypen in der Bioinformatik ist. Jedoch beginnt die Sprache zu stabilisieren. Andrei Alexandrescu ist die Freigabe ein Buch mit dem Titel „The D Programming Language“ im März nächsten Jahres, und jetzt gibt es eine Push die Spezifikation für die Version 2 der Sprache, in der Zeit für das Buch zu stabilisieren.

Während D keine formelle Obermenge von C ist, ist es, was ich eine idiomatische Obermenge nennen würde bis auf das Fehlen eines Prä-Prozessor. Mit anderen Worten, geschrieben jeder Code in C richtigen (ohne Berücksichtigung der Prä-Prozessor), kann trivialerweise ohne Redesign D übersetzt werden, weil C Konzepte wie Zeiger und Inline-ASM sind und die gleiche in D arbeiten auch in C. D direkt unterstützt die Anbindung an C-Code und die D-Standardbibliothek umfasst die gesamte C-Standard-Bibliothek.

Auch trotz D's Mangel an Bibliotheken, weil es immer noch eine bleeding edge Sprache, es ist eine Bibliothek Schriftsteller Traum wegen seiner metaprogramming Fähigkeiten. Wenn es startet, wird es wahrscheinlich einige ziemlich beeindruckende Libs haben. Für eine Vorschau hierfür finden std.range oder std.algorithm in der D2-Standard-Bibliothek (Phobos). Als ein weiteres Beispiel I umgesetzt ein OpenMP artiger Parallelismus Modell (parallel foreach, parallel Karte, parallel zu verringern, Futures) als reine Bibliothek in D, ohne spezielle Compiler Support. (Siehe http://cis.jhu.edu/~dsimcha/parallelFuture.html )

Da Sie auf lange Sicht vor allem daran interessiert sind, dann würde ich sagen, D 6 Monate geben zu stabilisieren (bei Andrei Buch und die aktuelle Push um die Sprache zu stabilisieren, Version 2 sollte dann stabil sein) und dann nehmen Sie eine schauen hart daran.

Edit: Nun, da die Kernsprache spec relativ stabil ist und der Fokus gedreht hat, um Toolchain und Bibliotheksentwicklung, I würde empfehlen D für kleine Produktionsprojekte, wenn Sie in einem sehr risikoaversen Umfeld sind . Größere Projekte, die absolut gut und Werkzeugkette Bibliothek Unterstützung haben müssen sollte noch warten, though.

Wenn Sie in den Lean-Manufacturing-Prinzipien glauben, sollten Sie sich bemühen, „so spät wie möglich zu entscheiden“. In dem Moment, sollte der letzte verantwortlich Moment sein, in dem Moment Sinn, bei dem andernfalls eine Entscheidung treffen eine wichtige Alternative beseitigt.

Ich denke, dieses Prinzip lässt sich auf Ihre Situation angewendet werden. Statt nun zu einer Sprache zu begehen (die Sie nicht einmal liegen um in 10 Jahren wissen), sollten Sie Ihre Optionen offen halten. Vielleicht sind einige von Ihrem Code Refactoring, so dass es ein bisschen mehr generisch ist oder wird auf mehr Abstraktionen gebaut, so dass, wenn es in der Tat migrieren erforderlich ist, wird der Prozess einfacher sein.

Stick mit C und C ++. Ich sehe es nicht die Art und Weise von COBOL gehen, es so gut wie alles läuft, und Sie werden kein Problem haben, Menschen zu finden, in C und C ++ Code.

C++ - es ist relativ jung und aktualisiert ... Es hat eine große Anzahl von Compiler-Anbieter und bekam verbessert die ganze Zeit.

C - es würde für eine lange Zeit leben, die Lücke zwischen Assembler und höheren Sprachen zu füllen. Es ist auch sehr einfach und leicht Sprache zu implementieren, so wäre es das bleiben erste Sprache für verschiedene „seltsame“ Architekturen wie eingebettet oder extrem neue.

D ist vielversprechend, aber noch sehr neu und instabil Spezifikationen und Bibliotheken.

Go vor wenigen Wochen geboren wurde ... nie etwas von Version verwenden 0 für große wichtige Projekte. Auch ist es deutlich begrenzt die C++ oder D.

2019 Update: C ++ wird für die nächsten 10 Jahre bleiben um ... (wenn nicht, werde ich diese Antwort korrigieren, wenn es nicht relevant sein wird, mehr ....)

Der Grund, warum Unternehmen arbeiten heute mit COBOL ist b / c sie bereits Millionen von COBOL-Code geschrieben hat. wenn die sie werfen könnte - sie werden es tun, sofort, auf der anderen Seite - Unternehmen arbeiten mit C / C ++ als Teil ihrer Bedürfnisse und neue Projekte diese Sprache b mit / c können sie nicht / nicht Java verwenden möchten / c # andere Rahmen basierte Sprache -. so COBOL ist nicht die Analogie hier

Wie dsimcha sagte der D Art und Weise zur Zeit riskant ist. Doch die Sprache ein großes Potenzial hat, ist es Low-Level und ich habe drastisch höhere Produktivität mit D erfahren (anstelle von C ++). Vielleicht was mit dynamischen Sprachen fühlen sich die Menschen.

Go ist so viel Blog vermarktet es wie ein Witz mir scheint. eine Interface-Methode Dispatching ist nicht trivial, und tatsächlich langsamer als eine normale Single-Vererbung Methode Dispatching.

Wenn Sie eine große Codebasis haben würden die Entscheidung natürlich schwieriger ist, würde ich raten, nur für neue Projekte zu wechseln, nicht für bestehende.

würde ich nicht auf eine Sprache konzentrieren, sondern mehr auf die Bibliotheken umgeben. C ++ in Kombination mit den Boost-Bibliotheken sind eine ausgezeichnete Wahl. Menschen, die in C entwickeln ++ ein besseres Verständnis der Computing zu neigen, ich selbst begann der mit Java, die mein Leben leichter gemacht durch viele grundlegende Dinge zu verstecken, was gut ist, aber ich wirklich nur einmal gestartet zu verstehen Programmierung habe ich gelernt, C / C ++ (Zeiger usw.).

Ich erkenne tun, dass C ++ kann hart (z Speicherverwaltung), damit ich denke, es ist gut, ein ‚add on‘ Sprache zu haben, wo die Leistung nicht wesentlich und Lesbarkeit ist (== Wartbarkeit) punktet: Ich empfehle Python dafür.

Es gibt unzählige Maschinen C ++ Software ausgeführt wird, ich sehe sie nicht nach unten auf einmal herunter. Wenn C ++ in der Art von COBOL gehen wird es ein riesiger Markt für Anwendungsmigration sein. Es werden spezielle Werkzeuge entwickelt werden, um C ++ Anwendungen auf die populäre Sprache der Zeit (Z ++ ???).

zu übersetzen

Also ich denke, der beste Rat ist, dass die Brücke zu überqueren, wenn Sie zu ihm kommen.

Schauen Sie sich Intel® Cilk ++ Software Development Kit , wenn Sie möchte Ihr Interesse an C ++ / Multi-Core-Entwicklung wecken. Ich sehe nicht, C oder C ++ geht weg in absehbarer Zeit auch nicht.

Der Vergleich C * zu Cobol ist fraglich

Im Vergleich C * zu Cobol kann zu der falschen Schlussfolgerung führen. C war für seinen Tag perfekt, einen großen Sprung nach vorn auf seiner Einführung, und es wird immer noch den Job heute getan.

I Cobol zusammenzufassen würde auf meinem nachsichtigste Tag mit " netter Versuch ".

C und C ++ wird für eine lange Zeit überleben, weil sie die Rechnung auch Implementierungssprachen passen. Dies wird nicht immer wirklich ändern.

Bedenken Sie auch, dass die wichtigste negative Problem mit C / C ++ der Mangel an Speicher Sicherheit. Dieser neigt dazu, weniger und weniger ein Problem zu sein, wie Codes reift. Das heißt, es wird kein schwerwiegender Grund, die alten Codes zu ersetzen.

Ich gehe davon aus, dass Software-Systeme nach außen von C. in der Hierarchie heute aussehen wachsen wird:

  • Anwendung in einem Rahmen geschrieben wie Rails
  • Anwendung Back-End geschrieben in Ruby, PHP, Python, C #, was auch immer
  • Rubin, PHP, Python oder C # Laufzeit-Implementierung (in C * geschrieben)
  • OS-Kernel (geschrieben in C89)

Das glaube ich nicht die alten Schichten verschwinden, und ich denke, Erbe höhere Schichten in C geschrieben und C ++ wird einfach auf diese Weise für einen unbestimmten Zeitraum unterstützt werden, schließlich wird für dessen Ersatz in Ruby geschrieben auslaufen, Python , C #, oder eine zukünftige Entwicklung.

Wir haben keine Ahnung, ob Go Akzeptanz finden werden. Sein von Google einfach ist wahrscheinlich nicht genug sein werden.

D? Nun, ein paar nette Dinge werden darüber gesagt, aber es wird auch nicht ausziehen werden. Keine Nutzerbasis zu sprechen. D # 20 in der Popularität auf dem TIOBE Index und fällt schnell.

Sie können sagen, dass eine Sprache Beliebtheit wenig mit dem zu tun hat, wie gut es für Ihr Unternehmen der Arbeit geeignet ist. Aber es hat eine Menge zu tun, wie einfach es sein wird, Leute zu finden qualifiziert sie zu programmieren.

Java auf und ich wäre überrascht, wenn es weit weg in den nächsten 20 Jahren ging. Es ist nicht eine System-Programmiersprache, sondern führt auch genug betrachtet, dass es nur wenige Aufgaben, die Sie in C ++ tun würden, dass Sie kann nicht in Java. Sicherlich in diesen Tagen niemand bereit ist, die menschlichen Programmierer mit der Arbeit erledigt Aufgabe (einwandfrei und oft effektiver) vom Garbage Collector. Ich für meinen Teil als Java ein bedeutender Schritt von C ++ in der Programmierung Effektivität.

Ich bin sehr beeindruckt von Rubin . Es ist eine elegante, ausdrucksstarke Sprache: Sie viel mit nicht zu viel Code erreichen kann, noch, dass Code ist meist noch lesbar. Einer der wichtigsten Grundsätze des Ruby ist, konsequent zu sein und keine Überraschungen für den Entwickler zu halten. Dies ist eine sehr gute Idee, IMO, und steigert die Produktivität. Zu der Zeit des großen Rails-Hype (die noch nicht abgeschlossen sein können), machte ich einen großen Bogen um Rubin, weil seine Referenzimplementierung abysmally langsam ist. Allerdings ist die JRuby Leute bei Sun haben es auf einer JVM unglaublich schnell gemacht, so jetzt ist es auf jeden Fall einige Überlegung wert. Rubin bietet Schließungen und eine gute Hand voll funktionaler Programmierfunktionen (siehe unten, warum dies wichtig), obwohl es ist nicht wirklich eine FP Sprache betrachtet. TIOBE Index. 10 und steigende

Etwas für die Zukunft zu prüfen, ist die Tatsache, dass die CPU-Hersteller haben gegen eine Leistungsgrenze von Physik auferlegt Vorfeld. Nicht mehr ist es eine 30% schnellere CPU verfügbar jedes Weihnachten, wie es in der Vergangenheit war. So nun zu mehr Leistung erhalten Sie mehr Kerne benötigen. Software-Entwicklung benötigt alle Hilfe, die es bei der Unterstützung von Multi-Core-paralleler Programmierung erhalten. C ++ lässt Sie meist allein mit diesem, und Java-Lösungen sind schrecklich nach modernen Standards.

In Anbetracht dieser Tatsache ist es eine gewisse Tendenz zur funktionalen Programmierung (die mit Parallelität assoziierte viele lästigen beseitigt) sowie Sprachen mit besserer Parallelität Unterstützung. Erlang wurde speziell für diese geschrieben und für die Möglichkeit, Code in einem laufenden Programm zu tauschen (Ericsson wollte unglaubliche Uptimes). Scala ist ähnlich wie Java, aber mit vielen stärkeren Unterstützung der funktionalen Programmierung und Gleichzeitigkeit. Clojure , dito, aber es ist ein Lisp und es ist nicht einmal in den Top 50 (noch !!).

Scala wurde Wissenschaftlern entwickelt und zeigt es: Es ist anspruchsvoll und geradezu pedantisch über Datentypen; es versucht, die Schweizer Armee-Messer von Programmiersprachen zu sein. Ich glaube, viele mittel intelligenten Programmierer Mühe, den Griff Scala haben. Ruby ist weniger FP und tut nicht so viel über Gleichzeitigkeit, aber es ist pragmatisch, und Spaß und einfach Sachen zu erledigen in. Auch auf der JVM ausgeführt wird, gibt es eine enorme Menge an Code leicht verfügbar in Java-Bibliotheken, die Ruby kann eine Schnittstelle mit. Also:

Meine Wette würde auf Rubin sein, mit einer Außen Chance auf Scala. Aber es gibt viele Alternativen!

Java. Für die meisten niedrigen Niveau Dinge Java ist in diesen Tagen in Ordnung. Warum mit einer Teillösung für C / C ++, wie D gehen oder gehen, wenn man etwas so sicher und einfach zu entwickeln, mit wie Java haben kann? Wenn Sie eine Echtzeit-Lösung suchen, D und Go sind auf jeden Fall nicht es, nicht zu erwähnen, sie sind wahrscheinlich noch weniger unterstützt als Java.


Java ist nun ein System Programmiersprache . Ich sehe nicht, wie man etwas mit unsicheren Konstrukten wie Zeiger „Next-Gen“ betrachten kann. Der einzige Grund, diese unsicheren Konstrukte jemals existiert, weil es der pragmatische Ansatz zum Aufbau eine Turing komplette Sprache. Es gab keine Sorge das Gedächtnis in diskreten Objekte darstellen, weil sie wollten nur etwas bauen, dass gearbeitet . Es gibt bereits harte und weiche Echtzeit-Anwendungen in Java, eine Vielzahl von Hardware-Bytecode-Prozessoren und über 2 Milliarden mobile Geräte mit Java. Allenfalls alles, was Sie zu tun haben würde, ist, einige Konstrukte für die Interoperabilität mit Geräten hinzufügen, die nicht so viel Code wäre; auch in C / C ++ würden Sie immer noch diese Konstrukte hinzufügen müssen ...

Was programmieren Sie? 8-Bit-Mikrocontroller mit 1 KB RAM? In diesem Fall wäre es sinnlos, etwas zu verwenden, anders als der Assembler für diese Plattform ...

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top