Warum sind unsere Hochsprachen immer noch nicht so hoch?

Ich bitte Sie, nicht streng zu urteilen, dies ist mein erster Artikel über Habr. Es ist besser, Kommentare in den Kommentaren zu hinterlassen, und ich verspreche, die entsprechenden Schlussfolgerungen zu ziehen.

Meine erste Bekanntschaft mit Programmiersprachen fand also in der Schule statt und es war BASIC. Seitdem habe ich Programmiersprachen nicht gekreuzt. Mehr als 20 Jahre sind vergangen und ich musste eine der modernen Programmiersprachen lernen. Alle von mir der Programmiersprache vorgelegten Kriterien, die ich damals formulieren konnte, wurden von C # vollständig erfüllt. Ich krempelte die Ärmel hoch und begann, es zu studieren, und ich hatte die Gelegenheit zu beurteilen, wie sehr sich die Programmiersprachen in dieser Zeit verändert haben.

Vieles war vertraut, wenn auch nicht im Aussehen, dann im Konzept: Variablen, Schleifen, Verzweigungsoperatoren ... Aber etwas war völlig neu: OOP mit seinen Klassen (Felder, Methoden, Eigenschaften), Vererbung usw.
Natürlich viel erfreut Der Unterricht ermöglicht es Ihnen nun, sich mit der Aufgabenteilung zu befassen: Sie bringen mir das "Das"; Du machst es; Wenn Sie mich "dies" zählen, werden Sie das Ergebnis melden. Dies erinnert sehr an unsere Interaktion mit der Umwelt. Zum Beispiel gingen wir in die Waschküche, gaben schmutzige Bettwäsche weg und säuberten. Wir gingen ins Studio, gaben uns eine Hose zum Mitnehmen und nahmen die fertige Version. Wir gingen zum Abendessen, machten eine Bestellung, bekamen Frühstück. Sehr praktisch und übersichtlich.
Aber zurück zum Thema des Artikels. Nach 20 Jahren hatte ich nicht damit gerechnet, einige Dinge in Programmiersprachen zu sehen:

1. Indizieren von 0.

Es war eine große Überraschung für mich, dass die Indizierung von Arrays, Listen und anderen Sammlungen bei 0 und nicht bei 1 beginnt. Warum? Das ist unangenehm, dachte ich.

Dann half ich meinem jüngeren Bruder, die Grundlagen von C # zu lernen und erklärte, dass es notwendig sei, hier von 0 zu zählen, nicht von 1, und er fragte mich bereits: „Warum? Das ist unpraktisch! “

Aus Gründen des Interesses begann ich meinen Freunden und Bekannten zu sagen, dass Sie in modernen Programmiersprachen (mit seltenen Ausnahmen) von 0 und nicht von 1 zählen müssen. Und alle fragten: „Warum? Das ist unpraktisch! "Und ich weiß immer noch nicht, was ich auf diese Frage antworten soll.

Wenn früher eine Art von Logik darin enthalten war, dann macht dies keinen Sinn, wenn moderne Compiler eine große Anzahl von Optimierungen aller Art durchführen. -1 zu korrigieren ist für sie nichts wert.
Jetzt muss der Programmierer diese Korrektur in seinem Kopf vornehmen. Die Frage ist jedoch, ob Programmiersprachen erstellt wurden, um uns einen Teil der Arbeit, insbesondere der Routine, zu ersparen, die sich ständig wiederholt. Warum zählen wir also immer noch von 0?

2. Numerische Datentypen.

Eine weitere Überraschung für mich war die große Anzahl numerischer Datentypen. Aus irgendeinem Grund kam es mir so vor, als ob eine Art numerischer Daten für lange Zeit erhalten geblieben wäre, schließlich befand sich das 21. Jahrhundert auf dem Hof. Wenn der Programmierer sich nicht mehr um die Speicherzuweisung kümmert, der Garbage Collector alles für ihn tut, wenn sich die Größe der Sammlung dynamisch ändert, warum haben wir dann nicht immer noch einen einzigen numerischen Datentyp, der beispielsweise auch den im RAM belegten Speicherplatz ohne die Beteiligung des Programmierers dynamisch vergrößert? ?

ErstensEs ist einfach nicht bequem, ständig darüber nachzudenken, welcher numerische Datentyp in diesem speziellen Fall verwendet werden soll.
Zweitens müssen Sie sich ständig um das richtige Casting kümmern.
Drittens muss der Typüberlauf überwacht werden. Übrigens fallen die Raketen deswegen. Hallo Ariane 5. Sind 7-8 Milliarden Dollar wirklich eine angemessene Zahlung für diese Art von Fehler?

3. Trennung der Datentypen in ganzzahlige und gebrochene.

Der dritte überraschende Punkt war die Trennung numerischer Datentypen in Ganzzahlen und Gleitkommazahlen.
Wieder schien der Fortschritt weit fortgeschritten zu sein, und selbst wenn wir mit Zahlen arbeiten, sind dies alle Zahlen, für die es einen einzigen Datentyp gibt.

Es gab einen Artikel über SmalltalkEs ging um Berechnungen ohne Genauigkeitsverlust in Smalltalk.
Berechnungen ohne Genauigkeitsverlust. Das Hauptproblem in vielen Sprachen ist der Verlust der Genauigkeit bei der Teilung. Zum Beispiel: 1/3 ist 0,3333 und 3 in der Periode. Dementsprechend wird in anderen Sprachen die Anzahl der Dezimalstellen angegeben, und die Genauigkeit geht verloren. Smalltalk hat dieses Problem sehr gut gelöst. Als Ergebnis dieser Aufteilung erhalten wir eine Bruchklassennummer. Es enthält den Zähler (1) und den Nenner (3). Das heißt, als solches wird es keine Teilung geben, aber es wird einen Bruchteil geben. Wir verlieren nichts. Alle nachfolgenden Operationen folgen den Regeln für die Arbeit mit Brüchen. Wenn es notwendig ist, eine Dezimalzahl zu erhalten, teilen wir dieses Objekt einfach als Fixpunkt mit: mit der gewünschten Anzahl von Dezimalstellen, und wir erhalten das Ergebnis. In diesem Fall bleibt die Zahl selbst unverändert, und wir können weiterhin ohne Genauigkeitsverlust rechnen.
Warum haben wir dann immer noch keinen einzigen Datentyp für Zahlen, die aus einem Zähler und einem Nenner bestehen und den belegten Speicherplatz dynamisch vergrößern, wenn das Limit erreicht ist?

Höchstwahrscheinlich könnten viele Argumente dagegen vorbringen, wie zum Beispiel: geringere Geschwindigkeit des fertigen Programms, höhere Anforderungen an die Computerressourcen, aber wir sprechen über Programmiersprachen auf hoher Ebene. Soweit ich weiß, ist es möglich, mit einem in Assembler geschriebenen Programm die bestmögliche Leistung zu erzielen. Wie hoch ist jedoch der Prozentsatz der in Assembler geschriebenen Programme an der Gesamtzahl der heutigen Programme? Daher ist Leistung in modernen Programmiersprachen bei weitem nicht das Wichtigste.

Wenn die Programmiersprache auf hohem Niveau ist, ist es nicht besser, eine etwas geringere Sprachleistung zu haben, sondern eine unvergleichlich größere Bequemlichkeit, damit zu arbeiten?

Ich lade alle ein, dieses Thema zu diskutieren. Vielleicht einige Dinge, die ich einfach nicht verstehe oder nicht berücksichtige?

PS Ich weiß nicht, wer SkidanovAlex ist , aber ich danke Ihnen, gütiger Mann, dass Sie mich zu einem Hub eingeladen haben

Jetzt auch beliebt: