
Das Interesse an WebAssembly ist groß, aber bisher werden Sie in einem Arbeitsprojekt selten Leute treffen, die diese Technologie verwenden. Die Anwendungsentwicklung für Smart TV ist auch „atypisches JavaScript“, wenn jeder von etwas gehört hat, aber nur wenige es persönlich ausprobiert haben.
Und
Andrei andreynagih Nagih hat Erfahrung in beiden Bereichen: Er arbeitete zuvor an Smart-TV-Anwendungen des Peers.TV-Projekts und war in den letzten Monaten mit WebAssembly so vertraut, dass er schließlich auf unserer HolyJS-Konferenz darüber berichtete. Und in der Online-Sendung von HolyJS haben wir ihn nach beidem gefragt.
Und jetzt entschieden sie, dass es auch für Habrs Leser interessant sein könnte, und machten eine bearbeitete Textversion des Interviews.
(Wenn jemand mit dem Videoformat besser vertraut ist, können Sie das Originalvideo ansehen, anstatt den Beitrag zu lesen.)Eugene phillennium Trifonov: Sie haben hier eine Präsentation über WebAssembly gehalten - gab es viele Publikumsfragen und waren sie von „theoretisch interessiert“ oder wurden Sie bereits praktisch verwendet?Andrei Nagikh: Nach dem Bericht habe ich eine Stunde lang ganz andere Fragen im Diskussionsbereich beantwortet. Ich bin überrascht, dass es so viele im gesamten Spektrum gab. Die meisten Fragen kamen von denen, die „nur neugierig“ sind, aber es gab Leute, die es bereits benutzen. Was überrascht, weil es nur wenige solche Leute gibt. Es gab ziemlich praktische Fragen.
Eugene: Früher sagten sie über WebAssembly "sobald es gereift ist und anwendbar geworden ist". Und jetzt ist die Technologie wie "reif"?Andrey: Die Technologie selbst funktioniert bereits ziemlich gut, sie kann in der Produktion eingesetzt werden. Wir benutzen es. Das Problem liegt aber bei den Werkzeugen. Der Compiler selbst ist ziemlich gut, da er älter ist als die Technologie selbst - er ist ab der vorherigen Version mit asm.js verfügbar. Aber Debugging-Tools, Quellkarten, Debugger - das ist immer noch schwierig. Ich denke, in den nächsten ein oder zwei Browsern werden diese Punkte angesprochen.
Eugene: Und aufgrund dessen, was Sie ursprünglich für WebAssembly brauchten - welche Art von Projekt und was ist der Vorteil davon?Andrew: Eines unserer Projekte, ByteFog, ist eine Technologie für die Bereitstellung von P2P-Videoinhalten. Wir haben wahrscheinlich den idealsten Benutzerfall, den Sie sich für WebAssembly vorstellen können. Wir hatten bereits eine große Codebasis in C ++, wir wollten sie nicht in eine andere Sprache umschreiben und wir brauchten sie im Browser. Daher scheint diese Technologie hier hundertprozentig zu passen.
Zuerst dachten wir, wir würden es nehmen, es einfach kompilieren und es würde funktionieren. Aber das passiert natürlich nicht im Leben. Deshalb wurde dieser Bericht über den Rechen und darüber, wie man alles in die Produktion zieht, geboren.
Oleg olegchir Chirukhin: Und was sind die Hauptprobleme, die aufgetreten sind?Andrew: Das Hauptproblem ist, dass wir keinen Zugriff auf das System haben. Wir hatten eine native Anwendung, die alles kann. Wenn wir es auf den Browser portieren, können wir nichts anderes als JavaScript tun. Und Sie müssen irgendwie damit leben, Sie müssen Browser-APIs verwenden.
Der Portierungsprozess unserer Anwendung dauerte unter bestimmten Bedingungen acht Monate. Zwar haben wir in dieser Zeit eine gute Überarbeitung unserer Codebasis durchgeführt, was im Allgemeinen gut ist. Und jetzt können wir es woanders portieren.
Oleg: Tulling wurde bereits erwähnt, aber ist es genauer möglich? Debuggen, Tracing, Profiling, das ist alles.Andrew: Kurz gesagt, alles ist schlecht. Aber es gibt kleine Blitze von guten Dingen.
Nun, der Compiler hat sich mehr oder weniger beruhigt: Es ist Emscripten (ich spreche über C ++, in anderen Laufzeiten - Rust, Go, Kotlin / Native - auf andere Weise).
Debugging: Firefox unterstützt Quellkarten, was an sich nicht schlecht ist. In Google Chrome können Sie nur den Assembler-Code anzeigen. Sie können dort Haltepunkte setzen, aber das ist so lala.
Der Profiler funktioniert in Firefox besser, in Chrome etwas schlechter. Der Unterschied besteht darin, dass Firefox die Namen abwickelt, dh sie zu dem macht, was sie im Quellcode sind. Chrome zeigt verstümmelte Namen an, und Sie müssen schielen, um zu verstehen, was es ist.
Oleg: Wie passen sich Leute von JavaScript an C ++ an und umgekehrt?Andrey: Wahrscheinlich können Sie mich hier ansehen - anfangs das Frontend, das jetzt den nativen Code berührt hat. Aber um ehrlich zu sein, hatte ich schon vor dem Projekt den Wunsch, etwas von Natur aus zu pinkeln. Ich bin also wahrscheinlich nicht sehr repräsentativ.
Wir haben viel mit meinem Kollegen Yura gesprochen, der im Projekt auf der C ++ - Seite spricht: Er erzählte mir von den „Pluspunkten“, ich erzählte ihm von JavaScript. Und er interessierte sich für JavaScript. Zufall - zehn von zehn: native möchte, dass JavaScript lernt, wann es war? Und wir haben ein gutes Team.
Es gibt noch eine dritte Person - dies ist Kolya, ein Architekt, der sich im Allgemeinen den Assembler-Code ansah und sagte: „Leute, er kann sowieso debuggt werden. Nun, schauen Sie, alles ist klar: Dies ist eine gestapelte Maschine, hier arbeiten wir mit Speicher, hier Arithmetik ... Leute, warum brauchen wir Quellkarten? “ Nun, er weiß, wie man für eingebettete Systeme schreibt, in seiner Freizeit macht er es.
Oleg: Und hatten Sie besondere Überraschungen von C ++: von der Sprache, von der Benutzerfreundlichkeit, von der Arbeit damit?Andrei: Nun, natürlich war ich bereit dafür. Die wichtigste Überraschung ist, dass wir nach einem Gespräch mit den Pluspunkten während des Projekts festgestellt haben, dass JS und C ++ viel gemeinsam haben. Es scheint, dass völlig andere Sprachen, aber Sie können die Schnittpunkte finden. Sie können sogar einen separaten Bericht zu diesem Thema erstellen. Sie müssen darüber nachdenken.
Eugene: Und jetzt, nach dem einen oder anderen, worüber möchten Sie schreiben?Andrew: Eigentlich bin ich nicht bereit, in der C ++ - Produktion zu schreiben. Ich würde etwas für mich tun. Aber JavaScript - wohin geht es?
Oleg: Und was ist mit der Tatsache, dass C ++ schnell ist und eine Reihe cooler Funktionen wie Vorlagen bietet? Könnten die Vorlagen dem Frontend beim Schreiben von Super-Standard-Code helfen?Andrei: Es gibt so einen Witz: "Wenn Sie ein Problem haben und es mit regulären Ausdrücken lösen möchten, dann gratulieren Sie, Sie haben jetzt zwei Probleme." Ich habe das Gefühl, dass etwas mit Vorlagen ähnlich ist. In unserem Projekt versuchen wir, keine Vorlagen zu verwenden. Der Architekt ist sehr widerstandsfähig, wenn C ++ - Entwickler versuchen, dort etwas zu implementieren. Das Problem tritt beim Debuggen auf: Es ist nie klar, wo genau es schief gelaufen ist.
Oleg: Das heißt, es ist nicht klar, was in dem generierten Code passiert? Er kann die Quellkarte nicht zur Quelle erstellen?Andrew: Soweit ich weiß, ist das Debuggen selbst in nativem C ++ mit Vorlagen schwierig. Wenn wir es unter WebAssembly ziehen, treten Probleme beim Debuggen unter WebAssembly auf. Deshalb denke ich, dass es insgesamt die Hölle sein wird.
(schaut genau in die Kamera) Kinder, verwenden Sie keine C ++ - Vorlagen!
Oleg: Ohne Vorlagen wird er zu C. Es wird möglich sein, in reinem C zu schreiben.Andrew: Aber was ist mit den Objekten?
Oleg: Nun ... "C mit Klassen", ja. Ich denke nur, dass das Schreiben von Code in C mit Klassen und in idiomatischem C ++ mit Vorlagen zwei völlig unterschiedliche Methoden sind.Andrew: Ja, das ist möglich.
Oleg: Die philosophische Frage: Glauben Sie nicht, dass sich ein Portal zur Hölle öffnet, wenn WebAssembly zu Browsern hinzugefügt wird?Andrew: Es scheint so. Da es jetzt wahrscheinlich in Mode sein wird, Bibliotheken oder C ++ - Programme, die für die gesamte Existenz von C ++ geschrieben wurden, zu verwenden, versuchen Sie, sie im Browser zu kompilieren und zu sehen, was passiert. Heute habe ich eine Demo von Windows 2000 im Browser gezeigt.
Oleg: Ich meine, ist das nur ein volles Windows 2000?Andrew: Ja, dies ist das gleiche Windows 2000, das vor 18 Jahren war und für dessen Ausführung ein ganzer Computer benötigt wurde - und jetzt braucht Chrome ihn.
Oleg: Und was ist mit den Dingen, die den Kernel-Modus erfordern, ist das alles?Andrew: Sie läuft im QEMU-Emulator und wurde von WebAssembly von Fabrice Bellar (Autorin von QEMU) persönlich portiert. Dort können Sie natürlich nicht auf das Dateisystem, das Netzwerk, zugreifen. Aber das ist Windows 2000, es startet, streut und alles ist da. Sie können sehen.
Oleg: Kommen wir zum Thema Anwendungen für Smart TV. Können Sie dort übrigens etwas Interessantes mit WebAssembly machen?Andrew: Es wäre möglich, wenn es dort unterstützt würde. Was ist das Problem mit Smart TV? Diese Entwicklung ähnelt der Entwicklung des Frontends vor zehn Jahren, da Smart-TVs nicht aktualisiert werden. Ein Mann kaufte einen Fernseher, hängte ihn an die Wand und hängt dort jahrelang.
Oleg: Aber ich habe ständig da "warte, die Firmware wird geladen". Bereits wütend.Andrei: Die Firmware wird möglicherweise geladen, aber soweit ich weiß, wird das System und der Browser nicht direkt aktualisiert. Aus diesem Grund unterstützen wir noch Fernsehgeräte von vor vielen Jahren, auf denen der Browser als Chrome 5 angezeigt wird.
Oleg: Ich erinnere mich nicht einmal daran.Andrew: Ich erinnere mich auch nicht. Die Entwicklung für Smart TV, insbesondere für die alten, ist ein solches Minenfeld, ähnlich dem Frontend des Browserkrieges.
Oleg: Sie mussten also ein Super-Cross-Browser-Layout erstellen, das sowohl für alte als auch für neue Versionen funktioniert?Andrew: Ja. Tatsächlich liegt das Problem weniger beim Layout als vielmehr bei JavaScript - Inkompatibilität durch API, jetzt werde ich nicht alles erwähnen.
Oleg: Und was ist sonst noch in Browsern verfügbar, die Sie auf Smart TV verwenden möchten, aber nicht?Andrew: Eine Million Dinge, angefangen mit Flexes (es ist nicht einmal JavaScript) bis hin zu WebRTC. ByteFog verwendet WebRTC. Es wäre großartig, wenn wir den Code ziehen würden, den wir bereits auf Smart TV haben ...
Eugene: Und neben dem erwähnten Problem die Entwicklung für Smart TV - wie ist es? Was waren die Empfindungen?Andrew: Manchmal schien es, dass die Entwickler von Smart-TV-Browsern die Programmierer, die Anwendungen für Smart-TV entwickelten, nicht mochten, weil die Debugging-Tools sehr schlecht waren und es praktisch keine gab. Dies gilt nicht für moderne Tizen- und webOS-Plattformen, sie haben es dort besser gemacht. Aber ich habe das früher gemacht, dann gab es alte Plattformen und dort war alles schlecht. Das beste Debugging-Tool war
weinre , das eigentlich kein Debugger ist - Sie können JavaScript dort nicht stoppen. Dies ist die Art von Chrome DevTools-Port, der auf Web-Sockets ausgeführt wird. Im Allgemeinen war es möglich, das Layout zu debuggen, aber mit JavaScript war es praktisch unmöglich, irgendetwas zu tun. Irgendwie haben wir gelebt.
Oleg: Aber warum auf Smart TV selbst debuggen, wenn Sie es in einem Browser ausführen können?Andrew: Im Browser haben wir JavaScript und es gibt eine API, die der Browser uns gibt. Dies sind zwei verschiedene Dinge. Ebenso haben wir auf dem Fernseher JavaScript, wir haben die API von der Browser-Engine ...
Oleg: Höchstwahrscheinlich ist dies WebKit.Andrew: Ja, in der Regel. Und es gibt noch eine andere Kategorie von APIs - die, die die Plattform dieses Fernsehgeräts bietet. Dies ist zunächst ein Player, dann andere Funktionen - Fernbedienung und so weiter. Diese APIs befinden sich nicht im Browser.
Es gibt Emulatoren, die Hersteller stellen sie wirklich zur Verfügung, aber sie passen nicht vollständig zur Hardware. Daher ist es keine Tatsache, dass das Debuggen auf einem Emulator auf einem Fernseher funktioniert. Und umgekehrt: Es funktioniert möglicherweise nicht auf dem Emulator, aber es läuft perfekt auf dem Fernseher. Am Ende kamen wir zu dem Schluss, dass wir keine Emulatoren verwenden, sondern versuchen, auf echter Hardware zu debuggen. Es stellt sich schneller heraus: Sie verschwenden keine Zeit mit Fehlern, die nicht vorhanden sind.
Oleg: Und mit wie vielen Plattformen mussten Sie sich befassen, und im Laufe der Zeit wurden sie kleiner oder größer?Andrei: Als ich an Smart TV beteiligt war, gab es einen Übergang von Herstellern von den alten Betriebssystemen, die bedingt als Linux bezeichnet wurden und jeweils ihre eigene Sauce hatten, zu einigen neuen. Dann mussten wir drei verschiedene Anwendungen schreiben - für Samsung, LG und Panasonic. Diese Anwendungen haben relativ gesehen den Code kopiert. Und dann kommt fast gleichzeitig die Nachricht, dass Samsung zu Tizen wechselt, LG zu webOS wechselt und Panasonic zu Firefox OS wechselt (danach hat es nicht überlebt und Panasonic ist jetzt eine Gabel).
Im Allgemeinen scheint es, dass jeder die Plattform ändert - warum nicht auf einer konvergieren? Es wäre viel besser für alle, insbesondere für Entwickler: Es würde mehr Software geben, Benutzer würden nützlichere Programme erhalten. Aber nein, wir schreiben immer noch verschiedene Anwendungen.
Oleg: Ist es möglich, auf allen Plattformen irgendwie zu tanken?Andrew: Nun, am Ende sind wir zu einem einzigen Framework gekommen, wir ersetzen plattformspezifische Dinge und versuchen, plattformübergreifende Geschäftslogik zu schreiben. Dies scheint jedoch hätte vermieden werden können.
Oleg: Und es gibt Android-Fernseher?Andrew: Es gibt und zwei Arten. Wie hast du das vorher gemacht? Wir haben ein normales Android in den Fernseher gesteckt und losgelassen. Und dann hat Google einen speziellen Zweig von Android TV entwickelt, der besser für das D-Pad optimiert ist, dh die Fernbedienung. Es gibt auch solche Fernseher. Dies ist jedoch eine separate Geschichte und ein separater Laden.
Und wenn bei Android-Mobilgeräten alle gewonnen haben und sich eine Vielzahl von Herstellern für dieses Betriebssystem entschieden hat, konnte Google dies mit Fernsehgeräten nicht tun. Anstatt alles auf eine Plattform zu beschränken, gibt es eine weitere, wie im xkcd-Bild.
Eugene: Ich habe einen Fernseher unter meinem Android-Fernseher mit einem 4K-Bildschirm, aber er akzeptiert wirklich 4K vom HDMI-Eingang, aber das eingebaute Android ist in 720p vorhanden. Warum passiert das? Spart der Hersteller wahrscheinlich Hardware, da der Fernseher für 4K-Standards budgetfreundlich ist?Andrei: Ja, ich denke, hier ruhen sie gegen die Tatsache, dass das Betriebssystem auf dieser Hardware kein 4K-Bild rendern kann. Tatsächlich ist dies eine häufige Situation, wenn Smart TV (dh der Teil auf dem Fernseher, der aus Anwendungen stammt) nicht die Vollbildauflösung verwendet. FullHD wurde auf HD Ready, 4K auf FullHD oder sogar 720p übertragen. Dies ist ein so interessanter Moment, in dem wir keine 4K-Inhalte auf einem 4K-Fernseher anzeigen können, obwohl wir sowohl TV als auch Inhalte haben.
Fernseher haben im Allgemeinen oft eine Schnittstelle - dies ist leider die Geißel der Smart-TV-Plattformen. Aktivieren Sie auf Yandex.Market außerdem nicht "TV, das nicht langsamer wird" und filtern Sie es. Anscheinend bleibt es, in den Laden zu kommen und dort zu wählen.
Oleg: Und wie wirkt sich das auf die Anwendungsentwicklung aus? Wenn Sie viele Divs hinzufügen, wird die Anwendung immer langsamer?Andrew: Natürlich. Wenn Sie eine große Liste rendern müssen, müssen Sie sie nicht nur pervertieren und rendern, sondern in Teilen. Wir könnten zweihundert davon in der Liste der Kanäle haben, und wir könnten nicht die gesamte Liste rendern - er hatte dann beim Scrollen Bremsen.
Ich spreche über die Situation vor ein paar Jahren. Auf den Fernsehgeräten, die jetzt veröffentlicht werden, könnten die Dinge viel besser sein. Aber auch hier wechseln die Leute selten den Fernseher.
Oleg: Was denkst du, was ist die Zukunft von allem, was wir jetzt in Smart TV sehen?Andrew: Ich bin pessimistisch. Ich hoffe, meine Prognose wird nicht wahr, aber wir haben den Rückgang der 3D-Technologie auf Fernsehgeräten gesehen, als alle Hersteller sagten: „Okay, niemand kauft dies, dies ist kein Schlüsselfaktor bei der Auswahl eines Geräts.“ Es scheint, dass Smart TV dieses Schicksal erleiden kann, obwohl ich es nicht möchte.
Oleg: Und was ist dann das Hauptmuster für die Verwendung dieses Dings, wenn Sie kein Smart-TV haben? Nehmen Sie einen großen, fetten PC und kleben Sie ihn auf den Fernseher?Andrew: Ein großer Computer, ich denke niemand wird bleiben. Konsolen sind vielleicht die beste Wahl, aber Smart-TV und Konsolen haben eines gemeinsam: Fernbedienung. Und eine gute Fernbedienung zu machen ist sehr schwierig. Manchmal stellen sie Joysticks mit einem Beschleunigungsmesser her, dh sie implementieren eine Gestensteuerung oder emulieren eine Maus, aber dies ist auch alles andere als ideal. Im Allgemeinen liegt das Problem mit Smart TV eher im UI / UX-Bereich. Zum Teil kann die Sprachsteuerung der UX des Fernsehgeräts helfen - bei Peers.TV wird sie über das Smartphone des Benutzers unterstützt, und jetzt arbeiten wir an einer speziellen Fernbedienung mit Mikrofon.
Eugene: Ja, ich sehe, dass Google das Fernsehen fleißig in Richtung Sprachsteuerung führt. Dies geschieht zwar mit unterschiedlichem Erfolg. Aber dann beenden wir das Gespräch folgendermaßen: Hoffen wir, dass es in Zukunft für unsere Zuschauer ausreicht, zu sagen: "Starten Sie die Ausstrahlung von HolyJS für mich"!Wenn Sie beim Lesen von WebAssembly oder Smart TV Fragen haben, wenden Sie sich in den Kommentaren an Andrey.
Und achten Sie auch darauf, dass vom 24. bis 25. Mai das nächste HolyJS in St. Petersburg stattfindet. Ihr Programm wurde noch nicht angekündigt, aber es wird wahrscheinlich auch einen Platz für ein „atypisches Javascript“ geben, das über das übliche Frontend hinausgeht - und Tickets werden allmählich teurer.