Welche Sprache - D, Go oder Rust - hat bessere Aussichten, C zu ersetzen, und warum?

Trotz meines Status und meiner offensichtlichen Voreingenommenheit als einer der Schöpfer von D werde ich versuchen, offen zu antworten. Ich bin den Pfaden von Go und Rust gefolgt und weiß absolut, wo die schmutzige Wäsche in D gewaschen wird. Ich ermutige Menschen in ähnlichen Positionen in den Rust and Go-Gemeinden, ihre Meinungen zu teilen. Also.

Für den Anfang sollte irgendwo in der Frage C ++ erscheinen. Ob es durch C ersetzt werden soll oder ob es einer der Kandidaten für das Ersetzen von C ist, aber in jedem Fall ist C ++ ein Schlüsselelement der Gleichung. Dies ist die Sprache, die C am nächsten kommt, und ein offensichtlicher Schritt nach vorne. Angesichts des Alters von C ++ gehe ich in dieser Angelegenheit weiter davon aus, dass C ++ zusammen mit C das Ziel für den Ersatz ist.

Jede Sprache hat eine Reihe grundlegender Vorteile (ich nenne sie "einen Größenordnungsvorteil", im Folgenden als "10-facher Bonus" bezeichnet, da sie sich in Bezug auf typische Ansätze für die Hauptliga qualifizieren) und eine Reihe von Problemen. Die Zukunft dieser Sprachen und ihr Erfolg bei der Verdrängung von C hängen davon ab, wie sie ihre 10-fachen Boni strategisch einsetzen und wie sie ihre Probleme überwinden können.

Lassen Sie mich zuerst D loswerden


Offensichtlich ist dies eine Demonstration meines eigenen Zuhauses, also weiß ich, wohin ich gehen muss, um nur das zu zeigen, was benötigt wird, und die schmutzigen Orte zu verstecken. Ich kann auch mehr über D sprechen als über den Rest des Paares, aus dem einfachen Grund, dass ich ihn viel besser kenne. Die Hauptprobleme von D sind:

  • Schlechte Aufnahme durch die Öffentlichkeit nach vielen Jahren nomineller Existenz. Langlebige der Gemeinschaft können eine solche Aussage kritisieren (D ist in seiner gegenwärtigen Form relativ jung, die Popularität wächst usw.). Aber diese Haltung bleibt bestehen und beeinflusst das weitere Wachstum der Popularität, und dies ist eine Tatsache. Infolgedessen sind Manager und Ingenieure skeptisch, eine Sprache zu popularisieren, die so lange ein Verlierer war. Darüber hinaus arbeitet die Zeit gegen D, bis es keinen offensichtlichen Anstieg der Popularität gibt.
  • Die traurige Geschichte von D bezog sich auf die Müllabfuhr (GC). GC ist eine großartige Erfindung, aber die Entscheidung, es in D zu verwenden, isolierte es sofort von der Hauptzielgruppe - C- und C ++ - Programmierern. Für sie sah die Linie der Party so aus: „Willst du keinen GC? Kein Problem! Sie können D auch mit RAII oder mit manueller Steuerung verwenden! “ Trotz der Tatsache, dass dies im Allgemeinen zutrifft, war dieser Ansatz praktisch nutzlos, da eine solche Standardbibliothek nicht unterstützt wurde, was bedeutete, dass der beabsichtigte Benutzer auf Kurzschlüsse reduziert und mit der Schaffung einer Basisinfrastruktur begonnen werden musste. Selbst für diejenigen, denen der GC nichts ausmachte, war die Qualität seiner Umsetzung eher unauffällig. Im Allgemeinen können wir sagen, dass D alle Mängel des GC hat, aber nicht ausgenutzt hat.
  • Historisch vorherrschender Mangel an Visionären. Ohne Unternehmensunterstützung führte D die Community voran, in der es einfacher ist, einen klugen Ingenieur zu finden als einen Projektmanager oder einen charismatischen Leiter. Im Laufe der Zeit hat sich der Erfolg von Ds Bemühungen um Werbung und Eigenwerbung negativ ausgewirkt. Das erste Planungsdokument ist vom 1. Januar 2015 datiert, und die nächste Iteration (Vision / 2015H2 - D Wiki) wurde vier Monate später als geplant veröffentlicht. Dies ist ein hervorragendes Beispiel für Selbstironie in Bezug auf die Planung

Es gab natürlich andere Probleme, aber sie waren entweder eine Folge der oben genannten oder hatten viel geringere Folgen.

Ich denke, die 10x Boni für D sind wie folgt (noch einmal, wenn ich 10 Mal sage, ist dies umgangssprachlich "besser durch eine Bestellung"):

  • In 10x ist die Kompilierung für vergleichbaren Code schneller als in C ++. Diese Lücke kann in C ++ nicht grundsätzlich geschlossen werden, und es ist äußerst schwierig, in andere Sprachen zu springen. (Go kompiliert etwas schneller als D, aber der resultierende Code ist langsamer.) Die Erfahrung mit der Verwendung einer Systemsprache, die so schnell zu schnellem Code kompiliert wird, transformiert alte Praktiken und ist sehr vielversprechend. In Kombination mit der Kraft der Abstraktionen in D ist D im Wesentlichen eine gute Wahl für das Schreiben von hochoptimiertem Code, da das Experimentieren einfach billig ist.
  • 10x schneller als Skriptsprachen mit vergleichbaren Annehmlichkeiten. D eignet sich gut für die bequeme Erstellung von Skripten für alltägliche Aufgaben. Der Kompilierungs- / Startzyklus bleibt genauso schnell und die Vorteile in Bezug auf die Geschwindigkeit sind immens. Es gibt auch kein Problem, "an die Grenzen zu stoßen" - wenn das Skript groß wird, gibt es in D immer genügend Sprachwerkzeuge und Modularität. Es gibt natürlich eine Fliege in der Salbe, zum Beispiel gibt es in Python viel mehr vorgefertigte Bibliotheken. Aber der 10-fache Bonus ist hier von grundlegender Bedeutung - Systemsprachen haben nicht so viel syntaktischen Zucker und Skriptsprachen sind hoffnungslos in der Geschwindigkeit zurückgeblieben.
  • 10x ist einfacher in C und C ++ zu integrieren als jede andere Sprache. D verwendet im Speicher dieselben Strukturen wie C und C ++. und baut darauf auf, aber das Lesen der darunter liegenden Ebenen bleibt in Bezug auf die Geschwindigkeit frei. Die Standard-C-Bibliothek ist ohne Nachteile vollständig zugänglich - weder in Bezug auf die Geschwindigkeit noch in Bezug auf die Syntax. Obwohl einige Verbesserungen für eine ähnliche Einfachheit in Bezug auf die C ++ - Bibliothek erforderlich sind, sind bereits viele C-Bibliotheken verfügbar (https://github.com/D- Programmierung ...). Es kann wörtlich gesagt werden, dass keine andere Sprache diesen Integrationsgrad erreichen kann.
  • 10-mal besser als jede andere Systemsprache in Generika und Metaprogrammierung. In D bilden statische Selbstbeobachtung, Compile-Time-Computing (CTFE) und Mixin- basierte (Code-Mixing) Codegenerierung den Molotow-Cocktail, der in anderen Sprachen, weder neu noch überlebend, sehr schwer korrekt zu mischen ist. In diesem Spiel ist Go so verrückt, dass es nicht einmal einen Chip schneidet. C ++ 17 ist hoffnungslos in einem dunklen Wald verloren; und Rust versucht nur zu plappern.

Geh zu gehen


Ich muss betonen, dass dies nur meine Meinung ist und dennoch Ihre Aufmerksamkeit wert ist. Die Probleme von Go sind wie folgt:

  • Grundlegende Verlangsamung durch indirekte Aufrufe und den Garbage Collector (GC). Fast keine signifikante Go-Anwendung kann geschrieben werden, ohne auf indirekte Anrufe und GC zurückzugreifen, die die zentrale Funktionalität darstellen. Dies sind wichtige Hindernisse für die Kernleistung von Go. Die Reaktion von Go war größtenteils taktisch - zum Beispiel die Verbesserung der Leistung des GC. Es ist jedoch unwahrscheinlich, dass Sie die Herausforderung gewinnen, C taktisch zu ersetzen.
  • Politik. Die Parteilinie bei Go ist in einer Reihe von kleinen und großen Fragen unverhältnismäßig stark und hart. Ein Beispiel für ein großes Problem ist, dass die Herangehensweise an Generika so bedeutungslos und rücksichtslos war, dass Generika das Wort mit dem Buchstaben „G“ wurden. Das ganze Thema verwandelte sich in blutige Tränen und verhinderte jeden Versuch, einen konstruktiven Dialog aufzubauen. Ich denke, dass die Politisierung technischer Probleme auf lange Sicht ein äußerst nachteiliges Modell ist, und ich hoffe, dass Go einen Weg finden wird, dies zu beheben.
  • Einfachheit ist schlimmer als Diebstahl. Zu gehen ist sehr einfach (Wortspiel, Go - Walk, Note) - es gibt sogar Witze darüber. Mit der Zeit wird dies jedoch problematisch; Go-Code ist hoffnungslos fußgängerisch - Go-Codierer schreiben aus der Sicht einer Ameise immer wieder dieselben Dinge, weil Go nicht einmal die einfachsten Konzepte oder Algorithmen abstrahieren kann. Konzepte, die noch nicht von Integrationsbibliotheken implementiert wurden, sind schwer zu implementieren. Programmierer, die Go für ein Projekt verwendet haben und es nicht mehr verwenden möchten, reagieren negativ. Es wäre schön, wenn Go das Leben für Stammkunden verbessern würde.

Go 10x Boni sind meiner Meinung nach wie folgt:

  • 10x in Fertigkeitsstrategie. Nach einer kurzen Zeit, in der Go als Systemsprache positioniert wurde, wurde beschlossen, es für Netzwerkdienste zu positionieren. Es war ein großartiger Marketing-Schritt, der die Stärken des Go-Teams (einige der besten Netzwerkdienstingenieure der Welt) nutzte. Dies ist ein sehr heißer Markt, und Go wurde zu einem Hauch frischer Luft für die Welt, die zuvor von Java EE mit Bürokratie und langsamen Skriptsprachen dominiert wurde. Jetzt ist Go der Hauptakteur in diesem Bereich und wird schwer zu bewegen sein.
  • 10x in der Fähigkeit Engineering. Go hat ein starkes Team von Ingenieuren hinter sich, und dies ist der Hauptfaktor, der die Qualität der Sprache und insbesondere die Netzwerkbibliothek und das Toolset beeinflusst. Bisher hat eine gute Technik die Schwäche der Sprache vollständig kompensiert.
  • 10x in Skill Branding. Viele von uns sind bereit zuzugeben, dass der Hauptmotivator für die Verwendung von Go die Verbindung mit Google ist. Dies gibt ihm die Autorität für Professionalität, Qualität und Stabilität. Natürlich ist eine Marke nicht alles, aber sie macht Go bereits zu einer würdigen Sprache. er sollte nicht fantastisch gut sein. Brand wird den Rest erledigen.

Zu guter Letzt Rust


Ich möchte Sie noch einmal daran erinnern, dass dies nur meine Meinung ist. Ich denke, Rust steht vor einigen interessanten Problemen:
  • Disharmonische Persönlichkeit. Nach dem Lesen einer bestimmten Menge an Rust-Code erscheinen Anekdoten wie „Dude hat Tage mit schwingenden Beinen verpasst“, illustriert durch Comics mit Menschen mit einem Torso und gekreuzten Beinen (ca. Übersetzung. Auf Russisch „Koloss auf Lehmfüßen“, aber ungenau) Eine genaue und sichere Speicherverwaltung steht an erster Stelle und repräsentiert das Zentrum der Welt. Plötzlich ist dies selten ein Problembereich, was dazu führt, dass ein großer Teil der Planung und Codierung tatsächlich der Büroarbeit gewidmet ist (welche Sprachen mit GC automatisieren, ohne zu schauen). Die sichere, vordefinierte Wiederverwendung von Speicher ist eine ernsthafte Aufgabe, aber nicht die einzige oder zumindest nicht die wichtigste im Programm. Infolgedessen gibt Rust unverhältnismäßig viel Ressourcen für das Sprachdesign dafür aus. Es wäre interessant zu sehen, wie Rust für andere Aspekte der Sprache anschwillt; Die einzige Möglichkeit besteht darin, die Sprache zu erweitern. Die Frage ist jedoch, wie viel Abstraktion bei der unangenehmen Notwendigkeit helfen kann, Ressourcen auf allen Ebenen zu kontrollieren.
  • Fremdsyntax. Rusts Syntax unterscheidet sich [von allen], aber es gibt keinen offensichtlichen Vorteil in einer solchen Exotik. Dies ärgert Menschen, die aus Sprachen der Algol-Familie stammen und sich mit radikal anderen Syntaxen auseinandersetzen müssen, zusätzlich zu der Notwendigkeit, die gesamte Buchhaltung manuell mit Ressourcen zu verwalten.

Die 10x Boni von Rust sind:

  • 10 mal die besten Theoretiker. Von diesen dreien hat nur Rust erstklassige Theoretiker bei der Entwicklung einer Codierungssprache. Dies zeigt sich in der Genauigkeit der technischen Beschreibung der Sprache und in den Tiefen des technischen Ansatzes.
  • 10x mehr Sicherheit als andere Systemsprachen. Natürlich sollte dies hier sein, wir können nur die Kosten dieses Ansatzes diskutieren.
  • 10-mal die beste PR (PR, Werbung, ca. Per.) Es gab eine ziemlich lange Zeit, in der Rust der Favorit der Community war, was nicht zu verwechseln war: Für jedes Problem hatte Rust entweder eine Lösung oder musste sie mit der Veröffentlichung von 1.0 bekommen. Die Realität der Veröffentlichung von 1.0 unterbrach diese Flitterwochen und war (in meinen Messungen und Erwartungen) durch einen starken Rückgang des allgemeinen Interesses gekennzeichnet, obwohl diese Faktoren tendenziell länger dauern. Letztendlich ist Rust eine anständige Sprache mit echten Erfolgen und gut positioniert, um diesen langwierigen Hype in einen stabilen Markt zu verwandeln.

Kurz


Ob eine dieser Sprachen in der Lage ist, C, C ++ oder beide Sprachen in vorhandenen Softwaresystemen schrittweise zu ersetzen, und ob diese Sprachen für Projekte, die heute standardmäßig C oder C ++ wählen, Priorität haben, hängt alles von der Verwendbarkeit dieser Sprachen ab ihre Vorteile und finden kreative Lösungen für ihre jeweiligen Probleme.

Übersetzer beachten.
Entschuldigung für den alten Artikel, ich bin gerade am Ende meiner Serie über zuverlässige Programmierung darauf gestoßen und schien lustig genug zu sein, um ihn zu zitieren. In RuNet wurde jedoch keine Übersetzung und tatsächlich keine vollständige Diskussion gefunden.

Source: https://habr.com/ru/post/de460989/


All Articles