"Programmiersprachen besser und schlechter zu vergleichen, ist eine völlig idiotische Beschäftigung."



Haftungsausschluss : Ja, am Montag haben wir einen Habrapost mit einem solchen Sprachvergleich veröffentlicht. Nein, wir sind nicht verrückt. Alles läuft nach Plan.

Vitaly Bragilevsky kombiniert Kenntnisse der theoretischen Informatik mit der aktuellen Programmierpraxis. Er unterrichtet Disziplinen der theoretischen Informatik, ist Mitglied des Haskell Standardization Committee und Mitglied des Überwachungsausschusses für die Entwicklung des HHCell Compilers GHC.

Diese Habrastatya ist ein großartiges Interview mit Vitaly zu folgenden Themen:

  • JavaScript lehren und kennenlernen;
  • Warum Haskell wählen?
  • Der Platz funktionaler Sprachen im Leben eines Programmierers;
  • Was nützt JavaScript und wie entwickelt es sich?
  • Was wird in den nächsten 10-15 Jahren in Programmiersprachen erscheinen?
  • Welche Programmiersprachen sind glaubwürdig und warum?
  • Was ist der Unterschied zwischen wissenschaftlichen Konferenzen und Entwicklerkonferenzen? Warum sollte ein Lehrer überhaupt zu ihnen gehen?
  • Ist es wichtig, dem Programmierer vorzulesen, sind Bücher veraltet und welche von ihnen müssen gelesen werden?

Die Interviews werden von Mitgliedern des Programmkomitees der Moskauer HolyJS 2019- Konferenz, Alexei Zolotikh und Artyom Kobzar, geführt. Wenn Ihnen das Interview nicht ausreicht, wird Vitaliy sehr bald beim nächsten HolyJS anhand von Beispielen erläutern und zeigen, wie JavaScript mit der Theorie der Algorithmen verbunden werden kann.

Über das Lehren und Kennenlernen von JavaScript


Artyom : Unter unseren Zuhörern, insbesondere in der JavaScript-Community, sind Sie nicht allgemein bekannt. Erzählen Sie uns bitte von sich selbst, was Sie tun, was Ihre Hobbys sind - Arbeiter, Profis, möglicherweise nicht arbeitende.

Vitaliy : Ich unterrichte hauptsächlich, unterrichte einen Kurs an der St. Petersburg State University und nehme regelmäßig an anderen Arbeiten teil. Da ich Lehrer bin, musste ich viele verschiedene Themen studieren. Wie es normalerweise an einer Universität der Fall ist, muss ein bestimmter Kurs gelesen werden, und dafür müssen Sie all dies verstehen.

So kam es, dass ich viele Dinge unterrichtete. Zum Beispiel hieß einer meiner allerersten Spezialkurse, den ich im ersten Jahr meiner Arbeit, als ich noch sehr jung war, zugewiesen wurde, Web XML Technologies. Dann waren dies heiße Themen, Ajax erschien nur in JavaScript und es gab wirklich keine Literatur. Ich erklärte, wie man das alles benutzt.

Seitdem hat niemand wirklich verstanden, wie man es benutzt, alles war auf Beispiele wie dieses beschränkt: Es gibt zwei Dropdown-Listen, der Benutzer wählt ein Element in einer der Listen aus, eine Anfrage wird an den Server gesendet und Sie erhalten Daten zum Ausfüllen der zweiten Dropdown-Liste. Es war eine Neuheit, es gab nur wenige solcher Websites auf Websites. Dann wurde nur die Google-Suche im Beta-Modus angezeigt. Wenn Sie mit der Eingabe einer Abfrage beginnen, werden Sie aufgefordert, fortzufahren. Ajax-Zeug war neu und ich habe es ihnen beigebracht.

Was ich erst danach nicht unterrichtet habe: sowohl mathematische als auch programmiererische Dinge. Es war einmal, als ich auf Haskell stieß, und seitdem ist es das Hauptattraktionsgebiet geworden, was ich auch getan habe. Neben dem Unterrichten, dem Studium der Informatik im Allgemeinen begann ich, mit dem Verlag "DMK-press" zusammenzuarbeiten, mehrere Bücher für sie zu übersetzen (mit anderen Leuten habe ich selbst etwas bearbeitet). Es war auch überall in Haskell. Vielleicht sind diese beiden Arten von Aktivitäten - Unterrichten und was mit der Übersetzung von Büchern ins Russische verbunden ist - die Hauptsache, die ich getan habe.

Artyom : Das heißt, wir haben uns direkt einen JavaScript-Veteranen genannt. Ich habe Ajax und wahrscheinlich sogar PHP gefunden.

Vitaliy : Ja, ich habe in den ersten Jahren sogar in PHP programmiert und mehrere Websites geschrieben.

Über die Gründe für die Wahl von Haskell



Artyom : Sie sind in der Haskell-Community am bekanntesten. Warum haben Sie in Haskell und diesem Ökosystem Halt gemacht?

Vitaliy : Da ich nie über eine Karriere als Programmierer nachgedacht habe, war ich frei in dem, was ich mag. Ich musste mich nicht dafür interessieren, wofür sie mehr bezahlen. Als ich von Haskell erfuhr, hat es mir sehr gut gefallen. Es ist nicht sehr gut, darüber zu sprechen, und irgendwie erlaubte ich mir sogar, etwas zu sagen wie "Haskell ist eine Sprache für kluge Leute in der englischsprachigen Gemeinschaft, und die Gemeinschaft ist im Durchschnitt schlauer." Die Amerikaner haben mich dafür geschlagen, und sie haben Recht. Aber genau das hat mich interessiert.

Das heißt, zu einer Zeit, als ich noch an einer Universität studierte, beschäftigte ich mich mit ziemlich strenger Mathematik, so dass es für mich sehr natürlich war, zu einem relativ harten Programmierthema zu wechseln. Im Allgemeinen ist klar, dass Haskell von den in der Produktion verwendeten Programmiersprachen eine der wissenschaftsintensivsten oder ressourcenintensivsten ist. All diese Abstraktion, die es gibt, kommt der Mathematik am nächsten. Daher war es für mich eine natürliche Wahl.

Über funktionale Sprachen und ihren Platz in der Welt der Programmierer


Alexei : Wie denkst du über dynamische und funktionale Sprachen? Was ist mit Lisp-ähnlichen Dingen?

Vitaliy : Ich positioniere mich nicht so sehr als Haskellist, sondern als Liebhaber von Programmiersprachen im Allgemeinen. Erstens ist klar, dass alle Sprachen ein Existenzrecht haben. Ich glaube, dass der Vergleich von Programmiersprachen auf einer „besser-schlechteren“ Basis eine völlig idiotische Beschäftigung ist. Leider geschieht dies oft in sozialen Netzwerken und nicht nur, aber dies macht keinen Sinn.

Ich mag es, die Funktionen von Programmiersprachen zu lernen und Programmiersprachen anhand dieser Funktionen zu klassifizieren. Aber zu bedenken, dass dies eine gute und eine schlechte Funktion ist, ist dumm. Daher ist es klar, dass Sprachen mit dynamischer Typisierung sicherlich ein Existenzrecht haben. Zum Beispiel habe ich jetzt in meinem Studiengang für Studienanfänger die Programmiersprache Julia als Grundlage genommen. Dies ist eine dynamische Sprache, es gibt ein Typensystem. Es war interessant für mich, ihn zu unterrichten und gleichzeitig diesen Anwendungsbereich zu sehen.

Im Allgemeinen war die erste funktionale Sprache, auf die ich stieß, Lisp. Wenn ich vor vielen Jahren das Buch „Die Struktur und Interpretation von Computerprogrammen“ las, beeindruckt das natürlich alles. Deshalb habe ich großes Interesse an all dem. Zum Beispiel habe ich auch eine große Liebe zu JavaScript, weil ich seine Geschichte gut kenne.

Ich weiß, als es zum ersten Mal erschien, hätte es so etwas wie Lisp sein sollen, denn zuerst war die ursprüngliche Syntax schemaartig. Und dann wurde es aus Marketinggründen durch ein C-ähnliches ersetzt, aber natürlich sitzen Lisp-Sprachen im Inneren und es beeindruckt mich.

Im Allgemeinen habe ich das Gefühl, dass viele JavaScript-Liebhaber dies nicht wissen, und es geht ihnen gut, aber ich weiß, also bin ich noch besser. Alle Sprachen sind also gut und es ist interessant für mich, sie zu studieren. Es ist interessant, den Bereich der Anwendbarkeit zu studieren. Es ist interessant zu sehen, was mit ihnen einfacher und bequemer gemacht wird. Und im Allgemeinen ist ein solcher Sprachvergleich für einzelne Aufgaben auch ein separater interessanter Bereich, mit dem ich mich gerne befasse.

Was ist gut in Javascript


Artyom : Während Sie den Bericht vorbereiteten, hatten Sie Kontakt mit der neuen Version von JavaScript, mit dem, was darin eingebettet war. Was können Sie aus Sicht der Theorie der Programmiersprachen als gute, schlechte, vielleicht interessante Lösung herausgreifen?

Vitaliy : Unter dem Gesichtspunkt der Vielfalt der Programmiersprachen ist das Objektmodell natürlich das interessanteste in JavaScript. Das war es von Anfang an. Das Prototypmodell hat eine sehr reiche Geschichte, es ist super interessant, weil es praktisch keine andere moderne Sprache jetzt hat.

In Sprachen wie C # lösen sie mithilfe von Erweiterungsmethoden das Problem, Methoden zu vorhandenen Objekten hinzuzufügen. Dies war von Anfang an JavaScript, und dort sieht es viel natürlicher aus. Das heißt, wir haben einen Prototyp, zu dem wir Methoden hinzufügen und darauf basierend neue Objekte erstellen. In Sprachen wie C # ist dies meiner Meinung nach künstlicher.

Ich war interessiert zu sehen, wie Module zu JS hinzugefügt werden. In JavaScript gibt es seit Jahrzehnten Probleme mit Modulen, und ich frage mich, wie sie damit begonnen haben. Da Module ein tiefes theoretisches Thema sind, gibt es viele verschiedene Ansätze für ihre Implementierung. Ich kann zwar nicht sagen, dass ich dies gründlich studiert habe, aber dies scheint mir ein interessanter Fall auf dem Gebiet der Entwicklung von Programmiersprachen zu sein. Das heißt, wie Sie der vorhandenen Sprache Funktionen hinzufügen, die vorher nicht vorhanden waren.

Dies ist immer noch interessant, da vor einigen Jahren in Haskell versucht wurde, beispielsweise korrektere Module hinzuzufügen. Jetzt können wir sagen, dass dieser Versuch fehlgeschlagen ist und niemand damit begonnen hat. Dies ist das sogenannte Rucksackprojekt, das heißt, es scheint implementiert zu sein, aber die Verwendung ist so unbedeutend, dass klar wurde, dass sie ein gutes neues modulares System gemacht haben, aber es hat nicht sehr gut funktioniert.

Ich habe das Gefühl, als ich mit verschiedenen Leuten gesprochen habe, die sich mit JavaScript beschäftigen, dass die Module in JS besser geworden sind. Es stimmt, ich weiß das sehr oberflächlich. Ich denke, die Meinung zu JavaScript wird sehr stark von der Tatsache beeinflusst, dass man dort sehr schlechten Code schreiben kann. Und wenn Sie sehr schlechten Code schreiben können, muss jemand ihn in großen Mengen schreiben. Dies wirkt sich negativ auf die Beurteilung der Sprache aus. Aus Sicht der Theorie der Programmiersprachen ist dies natürlich nicht sehr gut.

Alexey : Haben Sie es geschafft, die neuesten JavaScript-Versionen zu sehen? Was hat neben dem Modulsystem überrascht?

Vitaliy : Ich kann nicht sagen, dass es mir gelungen ist. Ich blätterte durch etwas, aber nicht sehr tief. Ich kann nicht auflisten.

Was wird in naher Zukunft in Programmiersprachen erscheinen



Artyom : Die Theorie der Programmiersprachen ist ein eher akademisches Umfeld und im Prinzip interessant. Was sind die neuen Funktionen in Sprachen, die in 10-15 Jahren erscheinen werden? Welche Forschungsarbeiten werden derzeit in diesem Bereich durchgeführt?

Vitaliy : Ich würde sagen, dass das derzeit heißeste Thema das schrittweise Tippen ist. Dies ist der Fall, wenn gleichzeitig im Programm sowohl typisierte als auch nicht typisierte Teile vorhanden sind. Es ist für Python, für JavaScript ist es für Spielzeugsprachen gemacht. Das heißt, wir können erstens typisierte und untypisierte Teile kombinieren, und zweitens haben wir eine einfache Möglichkeit, die Typisierung zu erweitern.

Das heißt, wir führen eine Prototyp-Implementierung von etwas durch, wie es immer in dynamischen Sprachen ohne Typen geschehen ist, und dann hängen wir immer mehr Typen an einzelne Komponenten. Im Idealfall erhalten wir ein typisiertes Programm mit allen Vorteilen. Zur Laufzeit treten weniger Fehler auf und so weiter.

Dies ist vielleicht eine der wichtigsten Entwicklungen. Einige Elemente liegen bereits in Form von Bibliotheken vor, dies ist jedoch bislang noch ein Forschungsgebiet. Wenn wir uns führende Konferenzen zu Programmiersprachen ansehen, gibt es mit Sicherheit mehrere Abschnitte, die sich dem schrittweisen Tippen und Tippen widmen. Dies wird mit ziemlicher Sicherheit in den meisten dynamischen Sprachen enthalten sein, da es sehr praktisch ist. Es stellt sich die Kombination zweier Welten heraus.

Seit zehn Jahren wird an abhängigen Typen geforscht, wenn der Typ von den Werten abhängt. Das größte Problem besteht darin, dass die Grenze zwischen der Kompilierungsphase und der Ausführungsphase gelöscht wird, da in der Kompilierungsphase bestimmte Werte noch nicht bekannt sind, die Typen jedoch überprüft werden müssen. Das heißt, bestimmte Werte werden zur Laufzeit angezeigt, die Typen sollten jedoch bereits korrekt sein.

Und dort müssen Sie bereits eine Funktion schreiben, in der sich je nach übergebenem Wert die Art des Ergebnisses ändert. Diese Verwischung der Grenze zwischen Laufzeit und Kompilierungszeit ist eine sehr interessante Sache, sie wird auch seit 10-15 Jahren aktiv in der Theorie untersucht und wird mit ziemlicher Sicherheit in viele Sprachen fallen, hauptsächlich statisch typisierte, da das Ausdruckstypensystem aufgrund dieser Entwicklung erheblich erhöht wird.

Es stimmt, es gibt einen Nachteil. Es stellt sich heraus, dass das Schreiben von Programmen zu kompliziert sein kann. Es scheint, dass die Typen alles kontrollieren, aber das Schreiben ist sehr schwierig. Manchmal denkt man, dass man mit diesen abhängigen Typen einen Typ nehmen und programmieren muss.

Artyom : Sie machen es hier.

Vitaliy : Dies kann auch mit großem Wunsch geschehen, nur manchmal gibt es keinen Ort, an den man gehen kann. Wenn Sie vom Server kommen, verstehen Sie nicht, was, und bis Sie das Programm starten, wissen Sie nicht, dass Sie solche Dinge noch verwenden müssen, selbst in Haskell gibt es keinen Ort, an den Sie gehen können.

Wie Vitaly Haskell entwickelt



Artyom : Es ist lustig. Zurück nach Haskell. Sie sind Mitglied des Haskell 2020-Komitees. Bei Podlodka sagten Sie, dass Sie dort nichts unternommen haben, aber in einem Interview haben Sie erwähnt, dass Sie immer noch an einfachen Familien mit eingeschränkten Funktionen arbeiten. Welche anderen spezifischen Dinge implementieren, überwachen oder beteiligen Sie sich möglicherweise an der Implementierung des neuen Haskell-Standards?

Vitaliy : Dies sind zwei verschiedene Ausschüsse. Ich habe zwei Ausschüsse. Eines ist Haskell 2020, in dem nichts wirklich passiert, es ist ein totes Komitee. Sein Zweck ist es, einen Sprachstandard zu schreiben, und er wird sicherlich nicht geschrieben. Es klingt besser - "Ausschuss für die Entwicklung eines Sprachstandards", funktioniert aber nicht.

Das zweite Komitee heißt "GHC Compiler Supervisory Committee" - der Glasgow Haskell Compiler. Ich bin seit etwas mehr als einem Jahr dabei, seine Aufgabe ist viel weniger ehrgeizig. Dieses Komitee berücksichtigt Funktionen, Vorschläge zum Ändern des Compilers und die Version der Sprache, die in diesem Compiler implementiert ist. Es gibt ein Standard-Haskell, aber es gibt ein Haskell, das von einem bestimmten Compiler implementiert wurde. Hier ist ein Beispiel für eine solche Spracherweiterung: „einfache Typfamilien“. Dies ist ein Versuch, die Programmierung auf Typebene durch Hinzufügen zusätzlicher Steuerelemente zu vereinfachen.

Es stimmt, ich muss sagen, dass es eine ziemlich freie Umgebung gibt, das heißt, ich habe wahrscheinlich den ganzen Sommer über keine Requisiten befolgt und viel Zeit diesem Komitee geschuldet. Ich habe vor, darauf zurückzukommen.

Meine Aufgabe dort ist folgende: Sie hat es aufgezeigt: Es gibt einen beschriebenen Vorschlag, ich muss nachsehen, vielleicht dem Autor raten, etwas abzuschließen und schließlich mit einem Vorschlag an das Komitee zu gehen, entweder um die Aufnahme in den Compiler zu empfehlen oder um ihn abzulehnen. Nachdem ich diesen Vorschlag eingereicht habe, diskutiert und trifft der Ausschuss eine Entscheidung - dort wird alles gemeinsam entschieden.

Einer der Sätze, die ich schulde, bezieht sich auf den Unterstrich in Standardanmerkungen. Wenn Sie den Typ nicht vollständig angeben können, gibt es dort Lücken, und es gibt einen Vorschlag, dieses System zu reformieren, um irgendwie alles einheitlich zu analysieren. Löcher können in Standardanmerkungen enthalten sein, bei der Implementierung von Funktionen. Ein bestimmter einheitlicher Ansatz wird vorgeschlagen.

Dieses Komitee berücksichtigt enge Änderungen im Compiler.

Artyom : Wir haben auch ein Standardisierungskomitee - TC39. Zuerst kommt ein bestimmter und er sucht einen Champion. Ein Champion ist eine Person aus einem Komitee, die bereit ist, diese Site zu überwachen. Dann haben wir, soweit ich weiß, einen Abschluss nach Stufen. Es gibt 4 Stufen, auf denen sich das Feature bewegt. Null ist, wenn es nur einen Vorschlag gibt, eine ist, wenn ein Champion gefunden und eine API auf hoher Ebene beschrieben wird, und so weiter. Der vierte ist bereits in die Sprache eingegeben. Die Person, die die Präposition gemacht hat, und der Kurator nehmen an den Sitzungen dieses Komitees teil und fördern diesen Vorschlag. Wie geht es dir? Ist es nur ein Ausschuss, der dann intern entscheidet?

Vitaliy : Alle unsere Aktivitäten sind offen, sie werden auf GitHub und teilweise in offenen Mailinglisten durchgeführt. Der Autor des Vorschlags kommt herein - während wir über den Vorschlag nachdenken, interessiert uns die Umsetzung nicht sehr. Es kann sein, es kann nicht sein, wir analysieren es in keiner Weise, nichts hängt davon ab. Erstens gibt es eine Diskussion in der breiten Community, jeder kann diesen Vorschlag kommentieren.

Wenn er sich dann niedergelassen hat, legt der Autor es dem Ausschuss vor, dh er bittet den Ausschuss, darüber nachzudenken. Der Ausschusssekretär ernennt einen Hirten, der ihn beaufsichtigen wird. Er schaut, analysiert, bietet vielleicht Verbesserungen an oder versucht im Gegenteil zu rechtfertigen, warum dies kein Existenzrecht hat, woraufhin er einen Vorschlag vorlegt, ihn abzulehnen oder möglicherweise zur Überarbeitung zu senden oder zu akzeptieren. Der Ausschuss diskutiert, trifft eine Entscheidung.

Und wenn das Komitee beschließt, dass wir dieser Vor-Site zustimmen, und sie in den Status eines akzeptierten übergeht, kann grundsätzlich jeder ihre Umsetzung aufnehmen. Bis zu diesem Punkt gibt es möglicherweise keine Implementierung, wir treffen nur eine Entscheidung - ja, es wäre schön, eine solche Funktion in der Sprache oder im Compiler zu haben, und wir haben eine solche Liste akzeptierter, aber nicht implementierter Unterknoten.

Außerdem ist dies nicht länger die Aufgabe des Komitees, dann stellt jeder eine Pull-Anfrage an den Quellcode des Compilers, es gibt Ingenieure, das Team überschneidet sich teilweise mit dem Komitee, diejenigen, die bereits entscheiden, ob diese Pull-Anfrage akzeptiert wird oder nicht.

Da das Komitee zustimmt, dies zu akzeptieren, das heißt, es ist im Prinzip notwendig, die Zusammenführungsanforderung zu akzeptieren, aber es gibt technische Fragen, es wird dort nicht verschlüsselt, einige Leistungsprobleme werden von dem Team gelöst, das den Compiler direkt entwickelt. Dies ist nicht länger unser Job.

Alexei : Es stellt sich heraus, dass Haskell jetzt ziemlich alte Standards hat. Ich sehe, es gibt Haskell 2010.

Vitaly : Ja, 2010, sehr alt. Es gab mehrere Versuche, einen neuen zu schreiben. Es gab eine Idee, jedes Jahr Standards herauszugeben, aber leider schlug alles fehl. 2016 trat ein 2020-Ausschuss zusammen, aber er tat auch nichts. Es gibt mehrere Gründe für unterschiedliche Schwierigkeitsgrade, warum diese Arbeit nicht fortgesetzt wird. Ja, der neueste Standard von 2010, es gibt keinen neuen und es ist nicht sichtbar, dass er angezeigt wird.

Über Kurse und neue Projekte


Artyom : Kommen wir zurück zu Ihrer Haupttätigkeit, dem Unterrichten. Ich habe Sie persönlich im Verlauf der Kategorietheorie getroffen, was mir sehr gut gefällt. Du sagst, du magst ihn nicht. Auf welche anderen Kurse könnten Sie stolz sein und auf welche würden Sie sich gerne treffen? Zum Beispiel war der Kurs vielleicht mit Pfosten, aber im Prinzip ist das Erzählprogramm selbst sehr gut.

Vitaly : Erstens habe ich alle Kurse, die ich habe, auf YouTube veröffentlicht. Dort habe ich einen Kurs über Idris - dies ist eine solche Programmiersprache mit abhängigen Typen, und sogar zwei Versionen habe ich zweimal gelesen. Ich habe dort auch ein paar Kurse zum Haskell Language Compiler. Einer widmet sich modelltheoretischen Fragen. Ich erinnere mich nicht genau an den Namen, aber dort geht es darum, wie die Typentheorie direkt im Haskell-Compiler funktioniert.

Die Idee ist einfach: Der gesamte Haskell-Code wird zu einem ziemlich einfachen λ-Kalkül kompiliert, dem sogenannten F-System mit kleinen Erweiterungen. Dies ist tatsächlich im Compiler-Code enthalten, und der Kurs konzentriert sich darauf, wie diese Elemente der Typentheorie direkt im Compiler verwendet werden.

Und es gibt einen Kurs, in dem ich allgemein über die Geschichte der Typinferenz erzähle und wie die Typinferenz zu Beginn, als sie in den 60er Jahren erfunden wurde, arrangiert wurde, bevor die Typinferenz in der Haskell-Sprache angeordnet wurde. Was sind die Schwierigkeiten? wie das alles funktioniert.

Es gibt einen kurzen Kurs, den ich an der Sommerschule für Mathematik unterrichtet habe. Dort nehmen sie von Zeit zu Zeit, wie mir gesagt wurde, an Informatikkursen teil, damit sich die Kinder ausruhen können. , , , , : . — — . , , , .

, , . - , , , , , , - . , - , . , , - - . .

. -, , , , , . , . , - , -, - , , . - , , - , . . , , .

, , , . , , , , , , .

: - ? , , . , , , , - .

: Computer Science Club. , , , . , .

10 . « GHC Haskell: ». GHC, , 40 , 10 . : .

, Haskell, , . , , . .

, 1-2 . . , , . , : , — , - , . , .

, , , . , , . , .

, , , , , . , .

: , JetBrains - , . ? , - ?

: JetBrains , Haskell , JetBrains Haskell- , .

: Haskell JetBrains?

: Haskell c JetBrains, . , .

: Haskell JetBrains?

: - Haskell JetBrains? , .

: , . ()

: . , Java, Haskell.

: , JetBrains?

: JetBrains Education. JetBrains Research — , Education — .

JavaScript-



: , , , JavaScript? , , , Elm, Haskell.

: -, . GHCJS , , , . Elm , Haskell, . , , - .

, , , . JavaScript .

, Idris — Idris PHP, JavaScript, . . , , JavaScript Haskell .

, - , — , — , .

— , , , , . , . , HolyJS , , , , , . — , .

, λ- , — λ-, , , . , λ-, , .

1936 , — . , .



: , ? Swift, , enum , Union, ?

: , , . : , , . , , Python , , .

, , Python, . , , , .

, , , , , . C#. C# : -, Microsoft Java, , , , Delphi, #, C# , Haskell, .

, . , JetBrains, Kotlin, . Kotlin, C#, Swift Apple, . , .

++ - , , , - , , , . , , , JavaScript , . , , .

, , .

: -, , , Mozilla Rust.

: , Mozilla — , , - open source-, . . , Rust , . , Rust , - , .

, Twitter — - Microsoft, , , C++ Microsoft Rust. , . , Rust. , , , , . , .

Rust , - , .



: ! , , , , , — , . , , , - , ?

: , , . , . -, , . . , , — . — , , . .

— , , -, , . , .

, , , . , , . . , , , , . - . . .

: ? , , , , , ?

: , . , , , , . , - , , , , . , . , — . , , .

, — .



: HolyJS ? , - ? , .

: , , , , , . , , . , .

, , AppsConf. . . , .

, , , . : « , ?». - , , : , , Twitter , Google . , .

. , , , , , , , .

, , , . — , .



Artyom : Noch eine Frage, vielleicht chaotisch. Haben Sie ein Buch über Haskell mit dem Titel Haskell in Depth geschrieben ?

Vitaliy : Leider wurde das Buch dabei nicht geschrieben. Dies wird als "Early-Access-Programm" bezeichnet. Und sie wurde leider verlangsamt, und ich kehre langsam zurück, um daran zu arbeiten. Etwa die Hälfte davon ist dort geschrieben, und die zweite Hälfte ist verspätet, wofür ich mich sehr schäme für diejenigen, die diesen frühen Zugang erworben haben.

Artyom : Hier ist eine interessante Tatsache: Es gibt eine Meinung in der Community, dass Bücher über Programmierung, insbesondere wenn es nicht um Grundkenntnisse geht, nicht sehr gut sind, da die Informationen schnell veraltet sind. Wie haben Sie als Autor des Buches eine solche Erfahrung gemacht? Und haben Sie ein solches Problem in Betracht gezogen, dass die Informationen, die Sie in einem Buch angeben, schnell veraltet sein können?

Vitaliy : Natürlich verstehe ich nicht, wie Bücher in JavaScript geschrieben sind - meiner Meinung nach ist dies überhaupt eine unmögliche Aufgabe. Mit Haskell in diesem Sinne etwas einfacher. Aber hier ist was ich sagen kann.

Wenn wir in der Schule Mathematik studieren, ist diese Mathematik im Allgemeinen auch sehr veraltet. Dies sind die Dinge, die vor ein paar tausend Jahren aufgetaucht sind, ein Satz von Pythagoras. Vielleicht wird es noch implementiert, aber zu sagen, dass jemand die Höhe der Pyramiden mit dem Satz von Pythagoras misst, ist ungefähr so, normalerweise werden Laser-Roulettes verwendet oder so ähnlich.

Hier ist es ungefähr gleich. Wenn jemand ein großartiger Profi in etwas ist und schon lange Technologie einsetzt, braucht er natürlich kein Buch. Nun, das Buch ist nicht für ihn und ist geschrieben, es wird benötigt, um in irgendeine Art von Technologie einzusteigen, um dies zu verstehen. Und wenn Sie bereits eingegeben haben, haben Sie andere Quellen für die Entwicklung.

Daher scheint es mir, dass die Bücher nirgendwo hingehen werden. Wenn Sie anfangen, etwas zu lernen, können Sie natürlich Programmiersprachen anhand von Artikeln lernen, aber in den meisten Fällen wird das Ergebnis nicht gut funktionieren. Meistens ist dies die Übertragung ihrer Ideen über eine andere Programmiersprache auf eine neue. Sie erkennen die idiomatischen Konstruktionen für diese Sprache nicht und wissen nicht, wie Sie sie richtig verwenden sollen.

Zuerst ist es besser, das Buch zu nehmen, es zu sortieren und die Basis zu bekommen. Lassen Sie es nicht die neuesten Versionen von Bibliotheken beschreiben, lassen Sie etwas zur Sprache hinzufügen, es ist alles möglich, um aufzuholen. Um die Basis zu bekommen, brauchst du meiner Meinung nach noch ein Buch. Dies gilt für alle Programmiersprachen, auch für JavaScript. Wie auch immer, wir brauchen eine Art Stabilität, einen solchen Bezugspunkt, auf den Sie sich beziehen können.

Dies ist übrigens eines der Ziele beim Schreiben eines Haskell-Sprachstandards, um einen so stabilen Punkt in der Geschichte der Sprache zu schaffen, mit der Sie ein Buch schreiben können. Auf die eine oder andere Weise kann sich die Sprache entwickeln, aber es gibt einen Standard, und jeder Schüler kann sich darauf konzentrieren.

Es ist interessant, wie Bücher für viele Programmiersprachen die Rolle eines Standards spielen. Zum Beispiel hat Straustrup ein Buch über C ++ geschrieben, und auf diesen Punkt können Sie sich immer beziehen. C ++ ist weit fortgeschritten, aber beim Erlernen der Sprache ist es durchaus möglich, sich auf diese Version zu konzentrieren, die von Straustrup beschrieben wird.

Artyom : Sie haben ein interessantes Thema über die Ressourcen angesprochen, die Menschen benötigen, die die Sprache nicht lernen, aber tiefer gehen und weitermachen möchten. Sie können einige Ressourcen empfehlen, die Sie zum Lernen verwenden, und Ressourcen, die für einen Ingenieur nützlich wären, um in eine Theorie einzutauchen. Informatik, in die Typentheorie oder, wie Sie sagten, eine gewisse Unwissenheit eines Ingenieurs beseitigen?

Vitaliy : Es fällt mir schwer, ein Beispiel zu nennen. Ich kann überhaupt nicht sagen, dass ich regelmäßig Informationsquellen habe. Die vielleicht wichtigste Quelle für mich ist Twitter. Es stellt sich heraus, dass alles über Twitter zu mir kommt. Einige interessante Links erscheinen mir, ich behalte sie für mich und lese sie regelmäßig. Ich habe das Gefühl, dass es zumindest in Haskell keine solche Quelle gibt, aber es gibt viele angesehene Leute, die vernünftige Dinge schreiben.

Ich habe irgendwie versucht, Reddit regelmäßig für diesen Zweck zu verwenden, aber irgendwie hat es bei mir nicht funktioniert, ich habe einfach nicht genug Zeit, um ihm zu folgen. Aber auf Twitter kommt mir sowieso alles, was früher oder später erscheint. Schnell gesucht, interessant - gespeichert, dann gelesen.

Um etwas im Bereich der Informatik oder IT zu empfehlen, bin ich im Allgemeinen nicht bereit, eine solche Site oder Ressource nicht zu kennen. Eine wichtige Quelle für diejenigen, die mit Programmiersprachen zu tun haben, ist die Website http://lambda-the-ultimate.org . Dort erscheinen die interessantesten Dinge und es wird diskutiert. Dies ist ein Muss für alle, die sich für die Theorie der Programmiersprachen interessieren.

Was dem Programmierer vorzulesen



Alexei : Sie sagen, dass Bücher nicht ablaufen. Gibt es eine Liste mit Must-Have-Dingen zum Lesen oder nur Ihre Lieblingsbücher, die Sie empfehlen können? Ich spreche von Programmiertheorie, von allgemeiner Ingenieurkompetenz.

Vitaliy : Ich werde regelmäßig gebeten, eine Liste zu erstellen. Ich übernehme keine solche Arbeit. Dies ist eine sehr schwierige Aufgabe.

Nach der Theorie der Programmiersprachen gibt es Pierces Buch "Typen in Programmiersprachen". Dies ist im Allgemeinen eine Grundierung, mit der Typen beginnen können. Wahrscheinlich wäre sein erstes Drittel für alle Programmierer nützlich.

Mein Kollege und ich übersetzten ein Buch mit dem Titel Einführung in die Theorie der Programmiersprachen . Es ist sehr klein und erklärt die formale Semantik, Typinferenz und theoretische Dinge aus der Kompilierung. Eine so nützliche Einführung in Programmiersprachen.

Es gibt ein Buch von Charles Petzold "Annotated Turing" . Dies ist ein erstaunliches Genre: Der Autor nahm 1936 einen Turing-Artikel, in dem Turing das beschrieb, was später als Turing-Maschine bekannt wurde, und schrieb ein dickes Buch, das diesen Artikel erklärt. Und der Artikel selbst ist Seite 15. Außerdem gibt es eine Geschichte aus dem Leben von Turing selbst, den Hintergrund dieser Aufgabe, wie alles passiert ist. Abschnitt für Abschnitt gibt er ein Fragment des Artikels und eine Erklärung dessen, was dort gemeint war.

Wenn wir den Artikel jetzt lesen, wird es für uns sehr schwierig. Aber dieses Buch von Petzold ist erstaunlich, es stellt den gesamten Kontext wieder her und beschreibt den Artikel selbst. Ich empfehle dies jedem, dies ist eine sehr interessante Lektüre, die den Geist erweitert. Es geht auch um λ-Kalkül, weil alles in der Nähe ist und philosophische Fragen im Zusammenhang mit Berechnungen aufgeworfen werden.

Auch aus technologischer Sicht bin ich natürlich ein großer Fan von McConnells Buch „Perfect Code“ . Es scheint mir, dass dies auch eine wichtige Lektüre ist. Sie können nicht alles hintereinander lesen, sondern es einfach auf zufälligen Seiten öffnen, ein paar Seiten lesen und schließen. Hier geht es darum, wie man Code schreibt.

Zwar habe ich kürzlich mit mehreren mobilen Arbeitern gesprochen, sie sagen, dass ein dummes Buch, in dem es nichts Nützliches gibt. Aber es geht darum, wie man solchen Code so schreibt, dass er lange lebt, unterstützt und geändert werden kann. Vielleicht haben sie wirklich keine solchen Bedürfnisse.

Ja, und es gibt dort nicht Swift, nicht Kotlin, eine Art Java, verschiedene Beispiele in verschiedenen Sprachen, über die moderne Programmierer nicht mehr wirklich sprechen. Das Buch begann zweitausendstel. Aber ich denke, dass diese Lektüre für jeden Programmierer sehr nützlich ist. McConnell ist immer noch gut darin, dass er alles mit Forschung bestätigt und sagt: „Also haben wir so und so eine Studie gemacht, aber so und so, und hier sind die Ergebnisse. Lassen Sie uns gemeinsam diskutieren, wie man Code schreibt, um ihn gut zu machen. “

Hier vielleicht genug von einer solchen Lektüre.

Artyom : Für eine speziellere Frage frage ich: Sie haben die "Modern Compiler Implementation" empfohlen, die in drei Versionen verfügbar ist - Java , C und ML .

Vitaliy : Ja, das ist ein Buch über Compiler. Ich weiß nicht, ob jeder es lesen muss, es ist wahrscheinlicher für diejenigen, die sich für Compiler interessieren. Aber ja, ich mag es - es ist klein und wenn Sie damit arbeiten, können Sie wirklich Ihren eigenen Compiler schreiben. Ich bin mir nicht sicher, ob alle Programmierer ihren eigenen Compiler schreiben müssen, aber wenn Sie plötzlich neugierig sind, sind Appels Bücher wirklich interessant, aber schon etwas Enges.

Jetzt kann ich mich einfach nicht mehr an alles erinnern. In regelmäßigen Abständen taucht etwas an der Oberfläche auf, weil ich einmal viel gelesen habe. Zum Beispiel ist „Die Struktur und Interpretation von Computerprogrammen“ auch ein Klassiker, der zum Lesen und Ausführen von Übungen nützlich ist. Auch wenn ich nicht ganz einverstanden bin, aber das Lesen selbst ist sehr nützlich.

Vitaly Bragilevsky wird am 8. und 9. November 2019 mit einem Bericht „JavaScript im Dienste der theoretischen Informatik“ zur Moskauer HolyJS 2019-Konferenz kommen . Tickets können auf der offiziellen Website gekauft werden .

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


All Articles