Abschrift meines Interviews mit dem Ruby-Autor


Während der Herbstkonferenz geriet Ruby Russia I über die Rechte des Veranstalters an die Seiten des Autors, und Ruby gab ihm ein einstündiges Verhörinterview . Ich habe versucht, Fragen zu wählen, die nicht abgestumpft waren, damit die Antworten für uns nützlich sind und nicht „für alle Guten gegen alle Schlechten“. Und Großvater hat mich überrascht, der alte Plus-Entwickler! Unter dem Schnitt befindet sich das Protokoll des Interviews, die nicht triviale Meinung von Yukihiro Matsumoto zu den Typen im Allgemeinen und den Hacks im Besonderen sowie die Möglichkeit, all dies in den Kommentaren zu diskutieren. Ich bin mit dem Ruby-Team Evrone in Kontakt . Wir laden Matsumoto regelmäßig nach Moskau ein. Es besteht die Möglichkeit, im Voraus interessante Fragen für zukünftige Interviews zu stellen.

Als Begründer der Sprache erhalten Sie viele Vorschläge und Ideen. Worüber werden Sie am häufigsten gefragt?

Die Leute fragen oft: "Ich benutze die X-Sprache. Warum fügst du Ruby keine Funktion von X hinzu?" In den meisten Fällen antworte ich, dass dies nicht möglich ist. Wir haben unterschiedliche Sprachdesigns und unterschiedliche Sprachrichtlinien. Wir können nicht einfach einige Funktionen von X übernehmen und zu Ruby hinzufügen. Aber manchmal leihen wir uns immer noch gute Ideen aus anderen Sprachen wie Python, JS oder Elixir aus.

Dynamische Sprachen bieten jetzt die Möglichkeit, Typen explizit anzugeben. Dies ist bereits in Python, PHP und JavaScript (TypeScript) aufgetreten. Was denkst du darüber, wie wird sich die Arbeit mit Typen in der dritten Version von Ruby entwickeln?

Rust and Go sind statisch typisierte Sprachen. In großen Projekten erstellen und verwalten Hunderte von Entwicklern viel Code, Millionen von Zeilen. In solchen Fällen ist die Typprüfung praktisch und ermöglicht es Ihnen, Fehler zu erkennen. In anderen Fällen müssen wir einen Test schreiben, um sicherzustellen, dass die verwendeten Typen korrekt sind. Das Testvolumen steigt mit dem Wachstum des Projekts. Darin sehe ich den Grund für die Popularität der statischen Typisierung, da ihre Verwendung die Anzahl der Tests verringert.

Gleichzeitig ist eine explizite Typdeklaration eine redundante Information. Im Fall von Ruby kann sich die Sprache selbst um die Typen kümmern und unser Code funktioniert einfach. Wir möchten die Vorteile der Typprüfung nutzen, aber wir möchten nicht die Redundanz ihrer manuellen Spezifikation. Als Ruby-Sprachgemeinschaft sind wir bestrebt, Entwicklern alle Funktionen zur Verfügung zu stellen. Wir werden eine Datei mit Typen verwenden, die von unserem Ruby-Programm unabhängig sind. Daher enthält das Ruby-Programm keine Typinformationen.

Eine separate Typinformationsdatei, die wir als "Ruby-Signaturdatei" bezeichnen, enthält Informationen zu den in Bibliotheken, Edelsteinen und Ihrem Bibliothekscode verwendeten Typen. Wir werden auch ein neues Tool bereitstellen, den „Typprofiler“, der Typinformationen sammelt. Es kann Typkonflikte oder Konflikte basierend auf dem Code selbst oder Typanmerkungen erkennen.

Mithilfe von Signaturdateien können Sie die von Ihnen verwendeten Typen verfeinern und dem Profiler helfen, Ihren Code zu überprüfen. Nachdem der Profiler alle Typinformationen in den verwendeten Bibliotheken und Ihren Code gesammelt hat, verfügt er über genügend Informationen, um mögliche Fehler zu finden.

Zukünftige Versionen von Ruby können bis zu einem gewissen Grad statische Typprüfungen durchführen. Trotzdem ist Ruby eine dynamische Sprache, und die wichtigsten Typprüfungen sind bei der Ausführung unseres Codes üblich. Die Typprüfung "erste Ebene" verwendet Informationen zu den Typen im Code und hilft dem Entwickler, 40 bis 80 Prozent der Fehler zu erkennen. Die Typprüfung „zweite Ebene“ generiert Typinformationen basierend auf dem Code selbst. Mit Hilfe solcher Tools können wir in Zukunft eine statische Typprüfung in Ruby durchführen, ohne dass der Entwickler sie explizit angeben muss ...

Ich mag diese Idee und freue mich auf zukünftige Versionen von Ruby, um zu sehen, wie gut dieser Ansatz sein wird. Es ist großartig, dass Sie mit der Sprache experimentieren. Welche Zukunft sehen Sie für Ruby, in welche Richtung entwickeln Sie die Sprache?

Tatsächlich kontrolliere ich weder die Sprache noch die Community. Ich biete nur Technologie an und die Community entscheidet, welchen Weg sie einschlagen soll. Wir haben genug Technologie für fast alle Bereiche, um Ruby flexibel und produktiv zu machen. Beispielsweise wird Ruby hauptsächlich zum Erstellen von Webanwendungen verwendet. Aber ich möchte, dass Ruby in anderen Bereichen angewendet wird: Forschung und Computer, künstliche Intelligenz, maschinelles Lernen im Bereich Innovation. Wir versuchen, die Technologie für eine breitere Anwendung geeignet zu machen.

Wir Entwickler nennen Dinge gerne andere Namen. "Dies ist ein Sportwagen", und dies ist ein "Familienauto". JavaScript ist eine Webentwicklungssprache. C ist eine einfache Systemsprache. Wie nennt man Ruby, positioniere es?

Ich würde Ruby "eine produktive Programmiersprache" nennen. Produktivität ist eines der Hauptziele, die Hauptaufgaben von Ruby. Es wurde für Menschen entwickelt, nicht für Autos. Manchmal beschweren sich Entwickler über das Design der Sprache, wenn es schwierig ist, einen Teil der Syntax effizient zu implementieren. Rubys Design konzentriert sich nicht auf Produktivität, sondern auf Produktivität. Dadurch können Entwickler komplexere Aufgaben im Zusammenhang mit dem Projekt selbst lösen. Wir versuchen, Ruby so produktiv wie möglich und so produktiv wie möglich zu gestalten.

Python verfügt aufgrund der Komplexität der Entwicklung nicht über mehrzeilige anonyme Funktionen. Es ist schön zu hören, dass Sie und die Kernentwickler für Ruby versuchen, Programmierern trotz der Komplexität der Implementierung das Leben zu erleichtern. Übrigens, wenn wir über Komplexität sprechen würden. Stellen Sie sich vor, Sie haben die Möglichkeit, in die Vergangenheit zu reisen und sich selbst einen Rat zu geben, als Sie anfingen, Ruby zu entwickeln. Welcher Rat wäre das?

Leihen Sie sich nicht zu viel aus anderen Skriptsprachen aus. Ihre Programmiersprache ist die beste Allzwecksprache. Ein großer Fokus auf Skripte wird in Zukunft zu einer Art Rudiment werden.

Während der Entwicklung der Ruby-Sprache haben Sie viele Änderungen vorgenommen und viele Experimente durchgeführt. Einige von ihnen waren erfolgreich, andere nicht. Was ist für Sie der größte Erfolg bei der Entwicklung einer Sprache, was gefällt Ihnen am besten?

Wenn Sie eine Sache auswählen müssen, dann sind dies Blöcke. Blöcke in Ruby sind einzigartig, dies ist eine nützliche Abstraktion einer Funktion höherer Ordnung. Sie sind viel einfacher als in anderen Sprachen. Dies bietet sowohl Einschränkungen als auch Benutzerfreundlichkeit.

Zufall, aber Blöcke sind das, was mir an Ruby am besten gefällt. In meinen eigenen Reden und Interviews spreche ich über Ruby als Sprache mit DSL, syntaktischem Zucker und Blöcken. Blöcke sind sehr cool.

In anderen Sprachen, wie z. B. Swift, kann sich diese Argumentfunktion wie ein Block in Ruby verhalten, wenn eine andere Funktion als letztes Argument für eine Funktion angegeben wird. Es gibt einen Vorschlag für einen solchen syntaktischen Zucker, sogar für JavaScript. Ich bin sehr stolz darauf.

Ja, JavaScript mit seiner dicken Pfeilsyntax verwendet häufig das letzte Argument einer Funktion als "so etwas wie Blöcke in Ruby". Ich kann nicht anders, als die gegenteilige Frage zu stellen. Wie kann man den größten Fehler in einem Projekt nennen, der behoben werden muss oder bereits behoben ist?

Gibt es wenig. Beginnen wir mit globalen Variablen. Sie waren nützlich für die Skriptsprache, aber jetzt sehen sie wie ein Rudiment aus. Ich bedauere auch, dass ich Streams explizit hinzugefügt habe - wir brauchen eine bequemere Abstraktion für die Parallelität. Ein weiterer meiner Designfehler ist die mangelnde Immunität einiger Objekte. Jetzt können Sie beispielsweise die Zeitzone für ein Zeitobjekt ändern. Anstatt nur ein neues unveränderliches Objekt zu erstellen. Das bedauere ich.

Die Veränderlichkeit ist komplex und kann leicht zu Fehlern führen. Aber genug technische Fragen! Wir Menschen sind soziale Wesen, und es wäre interessant, etwas über Ihr Leben zu erfahren, wie Sie die Arbeit organisieren?

Ich bin ein Vollzeit-Ruby-Entwickler. Die Hälfte meiner Zeit arbeite ich am Design der nächsten Version der Sprache. Den Rest der Zeit arbeite ich an einer alternativen Implementierung von MRuby. Die Mainstream-Implementierung wird von Kernentwicklern erstellt, und ich treffe nur Entscheidungen, die sie im Code widerspiegeln.

Die Anzahl der Commits auf Ihrem GitHub ist beeindruckend, insbesondere die Commits an dem Tag, an dem Sie nach Russland fliegen. In letzter Zeit haben Entwickler viel über Burnout gesprochen. Haben Sie Freizeit, Hobbys und etwas, das Sie vor dem Ausbrennen schützt?

Glücklicherweise verbringe ich meine ganze Zeit mit Open Source. Ich habe keinen Druck von Kunden, ich habe keine Chefs, ich stelle mir die Aufgaben. All dies ermöglicht es mir, ohne Stress zu arbeiten. Ich habe keine anderen Fristen als das nächste Ruby-Veröffentlichungsdatum. Diese Freiheit ermöglicht es mir, mich entspannt zu fühlen. Ich versuche auch, Zeit nicht am Computer zu verbringen, auf meine Verwandten, meine Familie zu achten, der örtlichen Kirche zu helfen, mit dem Hund spazieren zu gehen und mit meiner Katze zu spielen.

Viele russische Ruby-Entwickler mögen Japan als Land, seine Kultur. Sie schauen sich Anime an, lesen Manga und kommen als Touristen nach Japan. Welche Orte und Aktivitäten können Sie als gebürtiger Japaner und Softwareentwickler anderen Entwicklern empfehlen, die Japan besuchen?

Japan ist ein vielfältiges Land. Sie können das futuristische Tokio besuchen, wo es viel Popkultur wie Manga und Anime gibt. Gleichzeitig haben wir Berge, Wälder und historische Stätten wie alte Schreine und Tempel. Wir schätzen die Schönheit der Sakura-Blüte und die Farbe des Herbstlaubs. Es hängt also alles von Ihrem Geschmack und Ihren Vorlieben ab. Sie können viele Dinge genießen: Essen, Natur, Technologie. Sie können viele Orte besuchen, insbesondere in Tokio. Ich empfehle Kollegen, auf die Vielfalt unseres Landes zu achten und sich bei Ihren Touristenreisen genau darauf zu verlassen.

Gibt es irgendetwas in der japanischen Kultur und Sprache, das die Entstehung von Ruby beeinflusst hat?

Wir haben keine Kontrolle über einen solchen kulturellen Einfluss und es ist schwierig zu bewerten. Auf Japanisch werden beispielsweise Sätze zusammengeklebt. Genauso wie die Methodenverkettung in Ruby funktioniert. Vielleicht ist dies der Einfluss der japanischen Sprache. Japan ist ein reiches Land und wir brauchen keine ständige harte Arbeit. Open Source verdient kein Geld, aber indem ich an meinem Hauptjob arbeite oder mich auf das Geld von Sponsoren verlasse, können ich und die Mitwirkenden die Sprache unterstützen und entwickeln und bessere Technologie entwickeln. Dies ist auch der Einfluss Japans und die damit verbundenen Möglichkeiten.

Und die letzte heimtückische Frage. Menschen stellen sich oft an die Stelle anderer, überlegen, was sie tun würden, wie sie sich verhalten würden. Gibt es etwas in der Position des Autors einer populären Programmiersprache, das von außen nicht offensichtlich ist?

Das Erstellen einer Programmiersprache ist keine sehr schwierige technische Aufgabe. Viele Studenten, die Kurse zur Entwicklung von Programmiersprachen an der Universität besuchen, können ihre eigene Sprache lernen, und es gibt nichts, was unerschwinglich kompliziert wäre. Die Schwierigkeit besteht darin, dass Sprache eine Möglichkeit ist, Gedanken auszudrücken. Dies gilt sowohl für Programmiersprachen als auch für natürliche Sprachen: Russisch, Englisch, Japanisch. Programmiersprachen wie Ruby, Python oder JavaScript - sie helfen unserem Geist, Gedanken zu formulieren. Dies ist die Hauptaufgabe von Programmiersprachen. Eine gute Programmiersprache bietet einen Ansatz zur Formulierung von Gedanken. Für Ruby ist dieser Ansatz "Entwicklungsproduktivität und das Vergnügen, Code zu schreiben". Für andere Sprachen könnte es "Einfachheit", "Effizienz" oder etwas anderes sein. Jede Sprache hat ihren eigenen Ansatz. Und wenn es dir gefällt,Was Ruby anbietet, um Gedanken zu formulieren, ist Ihre Sprache.

All Articles