Kann eine Programmiersprache von sich aus "sauberen Code" erzwingen? [geschlossen]


19

Ich programmiere meine ersten Projekte in C ++ und es scheint, dass es mehr Mühe kostet, den Code "sauber" zu machen, als nur zu funktionieren. Dh es scheint, als ob C ++ "erlaubt", hässlichen, aber funktionierenden Code zu schreiben.

Was mich zum Nachdenken brachte,

Kann eine Programmiersprache sauberen Code durch Design erzwingen? Gibt es solche Sprachen schon?

Wie wird dies als Gestaltungsprinzip in die Entwicklung / Theorie der Programmiersprache einbezogen? Welche Maßnahmen werden angewendet?


14
Viele Sprachen haben es versucht. Keiner hat meiner Meinung nach aus der Ferne Erfolg gehabt.
Gort the Robot

5
Leider ist dies völlig meinungsbasiert, da es keine objektive Definition von "sauberem Code" gibt. Sie können dies jedoch gerne in unserem Chatroom diskutieren. Ich bin sicher, dass jeder dort einige Meinungen hat, die er teilen kann.
Ixrec

9
Nein, Sie können FORTRAN in jeder Sprache schreiben.
Whatsisname

4
Sie fragen, ob es möglich ist, eine Sprache idiotensicher zu machen. Wie sie sagen, sind Idioten genial .
Gort the Robot

2
Welche Eigenschaften hat "Clean Code" für die Zwecke dieser Frage? Sie müssen das definieren, sonst könnte jede Antwort mit einer Begründung gültig sein.
Theodoros Chatzigiannakis

Antworten:


20

Der Haupteffekt, den das Sprachdesign auf "sauberen Code" hat, liegt auf syntaktischer Ebene. Sprachen mit vielen Abkürzungen und undurchsichtigen Operatoren (Perl / APL) eignen sich für "unsauberen" Code, während Sprachen mit einer kleineren Menge von Elementen (z. B. Python) sich für saubereren Code eignen.

Die Semantik ist jedoch ein ganz anderes Tier. Es gibt keine Möglichkeit zu erzwingen, dass die Semantik einer Sprache auf saubere Weise verwendet wird, insbesondere, weil Sie als Compiler nicht wissen können, was der Benutzer der Sprache erreichen möchte. Ein mächtiges Werkzeug ist einfach das - ein mächtiges Werkzeug, ob gut oder schlecht.

Letztendlich ist die Semantik wichtiger als die Syntax. Es ist auch der Teil, der als Wartungsentwickler am schwierigsten herauszufinden ist (z. B. "Was bedeutet dieser Code eigentlich? Ich verstehe, was er tut ...").

Folglich würde ich sagen, dass es kein Design gibt, um sauberen Code zu erzwingen, aber Sie können einfache Syntax mit sauberer Semantik schreiben, die es einfacher macht. Ob gut oder schlecht, sauberer Code ist in erster Linie eine Frage des Entwicklerwissens, der Motivation, der Disziplin und des Könnens.


2
Ich würde sagen, dass das Typensystem einen großen Beitrag zur Durchsetzung der korrekten Semantik leisten kann. Zum Beispiel stellen stark typisierte Sprachen sicher, dass Variablen Werte von zutreffendem Typ zugewiesen werden. Eine Sprache, die Typen billig und einfach macht, fördert das Codieren von mehr Semantik in Typen. Eine stark typisierte Sprache bringt Programmierer dazu, ihre Absicht bezüglich der Typkonvertierung zum Ausdruck zu bringen. Eine Sprache, die die Semantik mit Boilerplate verdeckt, erschwert es auch, über Semantik nachzudenken. Was nun "saubere" Semantik ist, ist nicht klar. Aber ich würde mir vorstellen, dass es eine signifikante Überlappung mit der korrekten Semantik gibt.
Setzen Sie Monica am

7

Sprachen können Programmierer dazu zwingen oder ermutigen, bestimmte Klassen von Fehlern zu beheben, was Teil der Definition von sauberem Code ist. Beispielsweise leisten verschiedene Sprachen eine relativ gute Adressierung:

  • Nullzeiger-Ausnahmen.
  • Shared State Bugs.
  • Parallelitätsprobleme.
  • Ungeprüfte Ausnahmen.

Das bringt Sie allerdings nur teilweise dorthin, denn bei sauberem Code geht es in erster Linie um die Kommunikation von Mensch zu Mensch . Programmiersprachen haben wirklich nur einen Hebel, um dies zu unterstützen, und das ist ihre Ausdruckskraft . Es ist wirklich schwierig, diesen Begriff zu definieren, aber im Grunde ist es für gute Programmierer einfacher, saubereren Code in ausdrucksstärkeren Sprachen zu schreiben. Sie haben mehr Werkzeuge zur Verfügung, um einen Algorithmus einfach in Begriffen auszudrücken, die gut mit anderen Menschen kommunizieren. Versteh mich nicht falsch, du kannst sauberen Code in ( fast ) jeder Programmiersprache schreiben . Es sind nur einige Sprachen, die es einfacher machen und ein besseres relatives Ergebnis erzielen.

Sie können jedoch nicht einfach die Expressivität anwählen und die Leute werden auf magische Weise anfangen, besseren Code zu schreiben. Bei den meisten Programmierern gibt man ihnen mehr Knöpfe, mit denen sie ihre Sprache ändern können, und sie wissen nicht, wie sie richtig verwendet werden, sodass ihr Code schlimmer wird. Um Ihre Codequalität zu verbessern, sind Disziplin und ein guter Mentor erforderlich. Es gibt keine silbernen Kugeln.


6

Bis zu einem gewissen Grad. Viele Sprachen sind absichtlich so gestaltet, dass sie einige Formen von sauberem Code gemäß den Idealen der Sprachdesigner fördern. Es ist sicherlich möglich, hässlichen und unverständlichen Code in einer beliebigen Sprache zu schreiben, aber einige Sprachen sind eher bemüht, ihn zu entmutigen.

Als Beispiel zwingt Sie Python, Blöcke entsprechend der semantischen Struktur der Sprache einzurücken, während Sie in vielen anderen Sprachen völlig zufällig oder gar nicht einrücken können. Dies ist ein Beispiel für eine Sprache, die aktiv ein bestimmtes Ideal der Sauberkeit fördert.


3

Wenn Sie es quantifizieren können, können Sie eine Sprache erstellen, die es optimieren kann.

Ich kenne zwar keine bestimmte Sprache, die tatsächlich eine "Clean Code" -Richtlinie erzwingt, aber Stil-Cops, die beim Erstellen ausgeführt werden, sind ziemlich häufig.

Der Hauptgrund dafür, dass dies ein separater Schritt vom Einbrennen in die Sprache ist, hängt größtenteils von den Prioritäten ab. Es ist im besten Interesse einer Programmiersprache, Programmierern die größtmögliche Flexibilität zu bieten, um die größtmögliche Akzeptanz zu erzielen. Es gibt so viele verschiedene Programmiersprachen und DSLs, dass eine künstliche Einschränkung der Benutzerbasis, indem man wählerisch ist und sich ein Bild darüber macht, welche Eingaben zulässig sind, wahrscheinlich einer breiteren Akzeptanz im Wege stehen würde.

Zum Beispiel ist es nicht im besten Interesse von C #, Leute zum Schreiben zu zwingen

if (condition)
{

anstatt

if (condition) {

Aber Stilprüfer können als wählerisch eingestuft werden, weil sie genau dafür entwickelt wurden.

Also, um die Frage zu beantworten

Kann eine Programmiersprache sauberen Code durch Design erzwingen?

Hervorhebung von mir

Auf jeden Fall, solange Sie genau definieren, was "sauberer Code" bedeutet.

Zum Beispiel könnte ich "sauberer Code" definieren, um zu bedeuten:

  • Zeilenlänge nicht größer als 80 Zeichen
  • Funktionen, die aus nicht mehr als 100 Zeilen bestehen
  • Einrückung muss aus zwei Leerzeichen bestehen
  • offene geschweifte Klammern müssen am Ende der Zeile folgen, der genau ein Leerzeichen vorausgeht
  • Nicht mehr als zwei Operatoren pro Zeile

und Sie mögen einigen oder allen dieser Konventionen nicht zustimmen, aber letztendlich sind diese quantifizierbar und können programmgesteuert durchgesetzt werden.


1

Nein, nicht in dem Sinne, wie Sie es beschreiben. Das Erkennen von "Hässlichkeit" kann nicht automatisch erfolgen!

Sprachdesigner können jedoch Maßnahmen ergreifen, um guten Code zu fördern (ich möchte nicht "sauber" sagen, da der gute, sichere Code manchmal auch lang und "hässlich" ist). Zum Beispiel haben sich die Designer der Sprache Rust mit den Dingen befasst, die disziplinierte C ++ - Programmierer tendenziell tun (wie dem Zuweisen von Heap-zugewiesenen Werten zu einem einzigen "Eigentümer"), und es einfacher gemacht, einige dieser Dinge zu tun. Dazu gehört die Bereitstellung eines Typecheckers, mit dem Sie überprüfen können, ob Sie bestimmte häufige Fehler begangen haben.

Ich würde sagen, dass gutes Sprachdesign oftmals reaktiv ist: Designer schauen sich an, was gute Programmierer tun, und versuchen, dies einfacher und "hübscher" zu gestalten.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.