2 Punkte von GN⁺ 2024-11-15 | 1 Kommentare | Auf WhatsApp teilen
  • Avalonia Visual Basic 6 ist ein Toy Project, das die klassische Visual-Basic-6-IDE und die Sprache mit Avalonia in C# neu erstellt
  • Die Webversion lässt sich im Browser öffnen, und auch eine Desktop-Version kann auf Basis von .NET 9.0 gebaut werden
  • Zu den wichtigsten Funktionen gehören ein Visual Designer, das Speichern und Laden von Projekten in einem VB6-kompatiblen Format, das Ausführen von Projekten sowie eingeschränkte Unterstützung der VB6-Sprache
  • Für die Browser-Version ist .NET 9.0 erforderlich; für den Desktop-Build kann durch Anpassen von Directory.Build.props auch .NET 8.0 verwendet werden
  • Die Rechte am Namen Visual Basic, an Icons und Grafiken liegen bei Microsoft Corporation; dieses Projekt verfolgt keine kommerziellen Absichten

Projektüberblick

  • Avalonia Visual Basic 6 ist ein Projekt, das die klassische Visual-Basic-6-IDE und die Sprache mit C# und Avalonia neu erstellt
  • Es wird als fun, toy project ohne kommerziellen Zweck beschrieben
  • Alle Rechte am Namen Visual Basic, an Icons und Grafiken liegen bei Microsoft Corporation
  • Die Webversion kann im Browser ausgeführt werden

Unterstützte Funktionen

  • Bietet einen Visual Designer
  • Projekte können in einem VB6-kompatiblen Format gespeichert und geladen werden
  • Bietet eine Funktion zum Ausführen von Projekten
  • Die Unterstützung der VB6-Sprache ist eingeschränkt

Desktop-Version bauen

  • In der Regel wird .NET 9.0 benötigt
  • Für die Desktop-Version kann .NET 8.0 verwendet werden, wenn Directory.Build.props angepasst wird
  • Für die Browser-Version ist .NET 9.0 erforderlich
  • Der Build-Befehl für den Desktop lautet wie folgt
dotnet build AvaloniaVisualBasic.Desktop/AvaloniaVisualBasic.Desktop.csproj

Antlr4-Fehler und Java

  • Wenn Antlr4-Fehler auftreten, konnte die Bibliothek Antlr4BuildTasks Java möglicherweise nicht automatisch herunterladen
  • In diesem Fall kann eine manuelle Installation von Java das Problem beheben

Desktop-Deployment

  • Das IDE-Projekt und die Runtime müssen jeweils separat per publish veröffentlicht werden
dotnet publish AvaloniaVisualBasic.Desktop -f net9.0 -o bin/
dotnet publish AvaloniaVisualBasic.Standalone -f net9.0 -o bin/standalone/
  • Nach dem Deployment kann die folgende Datei ausgeführt werden
./bin/AvaloniaVisualBasic.Desktop

Verwendete Projekte und Ressourcen

1 Kommentare

 
GN⁺ 2024-11-15
Meinungen auf Hacker News
  • Zugehöriger Thread von vor 3 Tagen: https://news.ycombinator.com/item?id=42105869 — 224 Kommentare
  • Meine Güte, dazu muss ich einfach etwas kommentieren. Programmieren gelernt habe ich als Kind genau so
    Im Bücherregal der Grundschule fand ich "Write Your Own Adventure Programs" (1983 - Usborne: https://colorcomputerarchive.com/repo/Documents/Books/Write%...); der Code war in BASIC, und zu Hause hatten wir damals keinen richtigen Computer
    Ein paar Jahre später sah ich Visual Basic und dachte, das müsste ähnlich sein, und bis zu einem gewissen Grad stimmte das auch. Anfangs hatte ich kein Buch zum Lernen, also klickte ich mich durch alle Menüs und Buttons, um herauszufinden, was sie tun, lud per Einwahlverbindung alle möglichen Third-Party-VB-Form-Controls herunter, warf sie auf ein Form und schaute, was sie machten
    Am Ende baute ich durch Kopieren, Einfügen und Anpassen Hausaufgabenhelfer, die etwa die Fläche eines Kreises berechneten, und auch Scherzprogramme, die ein Icon im Infobereich neben der Uhr anzeigten oder ein Fenster versteckten und im Hintergrund nervige Geräusche machten. Wenn ich sie allerdings auf dem Computer eines Freundes installieren wollte, scheiterte das oft, weil die benötigte .dll nicht auf eine einzelne Diskette passte
    Es war manchmal frustrierend, aber ich empfinde es als großes Glück, dass meine Eltern mich ein damals wohl teures Gerät weitgehend frei anfassen ließen und ich so Programmieren lernen konnte
    Sogar Tutorials waren damals unterhaltsamer. So etwas wie: „hypnoMan37s Windows-Registry-Tutorial!!! HEyyeyeyy Guuyzs :-)))) Kommt in meinen IRC-Channel #blabla auf EFNet! Ruft zuerst RegistryCreateNewKey32(...) auf …“, und natürlich hatte ich keine MSDN-CD
    Lernen im Code-Camp-Stil ist sicher viel effizienter, aber im Vergleich dazu viel zu trocken. Ich frage mich, ob die Kosten dafür, Anfänger zu Tode zu langweilen, nicht ziemlich hoch sind
    • Ich hatte mit VB6 eine ähnliche Erfahrung, aber mein Ausgangspunkt war umgekehrt. Ich las kein BASIC-Buch, sondern ein VB.NET-Buch
      Mein erster Kontakt mit Visual Basic war VBA in MS Word; als ich es öffnete, verstand ich zwar, dass das der Ort zum Coden war, hatte aber überhaupt keine Ahnung, was ich eingeben sollte. Damals kannte ich keine einzige Programmiersprache
      Später fand ich in einer Buchhandlung ein VB.NET-Buch und war so begeistert, dass ich es sofort in VBA nachmachte, aber der Code lief überhaupt nicht, was mich sehr entmutigte. Ich nahm mir vor, es ein letztes Mal zu versuchen und dann aufzugeben, falls es nicht klappte; zum Glück lief es dann
      Wie sich herausstellte, basierte MS Word VBA auf meinem Computer auf VB 6, während das Buch ein VB.NET-Buch war, daher unterschied sich der Code ein wenig
      Danach kaufte ich jedes VB-6-Buch, das ich finden konnte, und stieß in einem Stapel CDs von Verwandten zufällig auf ein Installationsmedium für die VB-6-IDE und installierte sie. Bis heute halte ich den VB-6-GUI-Builder für den besten, den ich je benutzt habe
    • Der Teil, dass du per Einwahlverbindung jedes verfügbare Third-Party-VB-Form-Control heruntergeladen und in ein Form gesetzt hast, weckt wirklich Erinnerungen
      In der örtlichen Bibliothek gab es auch "Visual Basic How-To: The Definitive Vb3 Problem Solver", und mir wurde irgendwann gesagt, dass ich es nicht mehr ausleihen dürfe, weil ich es zu oft verlängert hatte. Ich erinnere mich noch daran, auf Basis des „Peanut Computer“-Interfaces aus dem Anfang von Out of this World ein tatsächlich funktionierendes Interface gebaut zu haben
    • Ich wünschte, meine Kinder könnten dieselbe Erfahrung machen, aber heutzutage weiß ich nicht so recht, wie man das ohne BASIC anstellt. Tools, mit denen man einfach per WYSIWYG ein Plattformspiel bauen kann, reizen mich nicht besonders
      Hat jemand gute Ideen?
    • Mein Ausgangspunkt war Christopher Lamptons "How to Create Adventure Games" (1986) in der Stadtbibliothek. Auf dem Computer meines Vaters war QBASIC vorinstalliert, also tippte ich den BASIC-Code direkt ein
    • Als Kind hatte ich exakt dieselbe Erfahrung. Ich fand ein GW-BASIC-Buch im Bücherregal meiner Eltern, entdeckte, dass Windows QBASIC enthielt und die meisten Beispielprogramme aus dem Buch liefen, und war sofort gefesselt
      Wenn mir langweilig war, las ich gern das MS-DOS-6-Handbuch von vorn bis hinten
      In einer Zeit, in der Internetzugang noch nicht verbreitet war, war die Qualität der Dokumentation und des Beispielcodes beeindruckend
  • Eine wirklich inspirierende Vision, aber nachdem ich es etwa 2 Minuten benutzt habe, fehlen doch einige kleine Funktionen. Zumindest gilt das für den Web-Build
    Das Ampersand in Button-Labels erzeugt keine Tastenkürzel. Zum Beispiel unterstreicht &Go das G nicht
    Im echten VB6 konnte man ein Label-Control platzieren und direkt tippen, dann änderte sich der Inhalt; hier muss man zuerst den Fokus auf das Eingabefeld setzen. Auf die Überschrift „Caption“ zu klicken funktioniert auch nicht, man muss in die Eingabespalte klicken
    Für höhere Wiedergabetreue müsste im GUI-Designer beim Auswählen eines Controls immer eine Zeile im Properties-Grid hervorgehoben sein. Bei Label war der Standardwert meiner Erinnerung nach Caption, und bei Controls ohne Default-Property war es Name
    Wenn man zu einem anderen Control wechselte und es eine Property mit demselben Namen wie die aktuell ausgewählte gab, behielt VB6 diese Auswahl bei. So konnte man die Tag-Property mehrerer Controls hintereinander mit minimalen Klicks schnell ändern
    Dass Menüs wie Debugging, Speichern, Hilfe und Add-ins noch nicht implementiert sind, ist klar. Ein funktionierender Build-Button, der eine im Browser laufende „ausführbare Datei“ ausspuckt, wäre großartig
    Diese pingeligen Hinweise kommen aus Zuneigung ;-)
    • In Avalonia ist das Shortcut-Zeichen eigentlich der Unterstrich _, aber ich habe gerade ein Update hochgeladen, das auch & unterstützt :)
      Speichern funktioniert tatsächlich. Allerdings nur auf dem Desktop, und es ist sogar formatkompatibel mit VB6. Da die allgemeine Unterstützung begrenzt ist, ist auch die Kompatibilität begrenzt, aber ich plane, sie noch etwas zu verbessern
      Build funktioniert auch, aber ebenfalls nur auf dem Desktop ;)
    • Dass das Ampersand in Button-Labels keine Tastenkürzel erzeugt, ist keine VB-spezifische Funktion, sondern eine Funktion der Windows Common Controls, deshalb wurde es vielleicht übersehen
    • Wenn du einen Build-Button brauchst, der eine im Browser laufende „ausführbare Datei“ erzeugt, kannst du dir Jon Aasendens Quartex Pascal ansehen: https://quartexdeveloper.com/
  • Ich verstehe immer noch nicht, wie wir von so etwas zu modernen GUI-Toolkits gekommen sind

Auch optisch und in der Bedienung wirklich intuitiv

  • Weg von Widgets, die geschmacklich vertraut und unauffällig sind, hin zu einem ausgefeilten, tief durchgestylten Design, das die Marke zeigt.
    Es zeigte sich: Wenn man sich auf auffällige und ungewöhnliche Marken konzentriert, zieht das nicht nur neue Nutzer an, sondern macht den Wechsel anderswohin auch ungewohnter und frustrierender, was die Abwanderung reduziert. Damit ließ sich leichter Geld verdienen als mit dem früheren Fokus auf Nutzereffizienz und funktionale Differenzierung.
    Auch die Technik folgte diesem Trend und gab ihr Komplexitätsbudget für Style-Customizing, Animationen, verbessertes Font-Rendering usw. aus; der Versuch, eine standardisierte Designsprache zu fördern, an die sich Ersteller und Nutzer gemeinsam gewöhnen konnten, wurde aufgegeben.

  • In allen späteren Versionen von Visual Studio gibt es denselben Builder. Ich benutze diesen Builder täglich, wenn ich kleine persönliche Apps erstelle. Selbst im neuen Visual Studio 2022 von gestern ist er fast zu 100 % identisch.
    Eigentlich ist es heute sogar besser, weil Ausrichten und Ändern von Eigenschaften einfacher geworden sind. Aber das Interface ist gleich und hat sich buchstäblich 25 Jahre lang nicht verändert.
    Ich habe gerade VS2022 gestartet und diese App in unter 60 Sekunden gebaut: https://imgur.com/a/qHOCasJ

  • Mich haben an VB zwei Dinge angezogen. Das eine war, dass man GUIs direkt zeichnen konnte; nach damaligen Maßstäben Software zu erstellen, die „wie Software aussieht“, und das mit minimalem Aufwand, war eine wirklich coole und ermächtigende Erfahrung.
    Das andere war, dass man sich zum Erstellen einer GUI statt mit VB mit Klassenbibliotheken herumschlagen musste. Damals war OOP für Hobbyprogrammierer wie mich völlig undurchschaubar, und selbst eine minimale „Hello World“-App unter Windows oder auf dem Mac erforderte mehrseitige Anleitungen.
    In den folgenden Jahrzehnten sind die Anforderungen an hochwertige GUIs gestiegen, und gleichzeitig scheinen die Programmierkenntnisse, die man braucht, um kleine GUIs per Code zu erstellen, verbreiteter geworden zu sein. Vielleicht haben auch die Sprachen das schrittweise einfacher gemacht.
    Heute schreibe ich eine GUI auf dem Niveau, das ich brauche, einfach per Code; in meinem Fall ist es befriedigender, Tkinter sie mit einem halbwegs passenden Standard-Layout platzieren zu lassen. Meine Opfer, nein, Nutzer haben nichts Besseres verlangt.

  • Das ist der Arbeitsweise von Xcodes Interface Builder für macOS- und iOS-Apps ziemlich ähnlich.
    Wie andere gesagt haben: Es funktioniert gut, bis man Bildschirmgrößen, Layouts, Animationen, Touch-Interaktionen usw. unterstützen muss.

  • Nachdem ich sowohl native Desktop-Apps als auch browserbasierte Apps gebaut habe, sehe ich nach Überwinden der Lernkurve Effizienz darin, Widget-Layouts als Text in Code oder Markup zu schreiben.
    Soweit ich weiß, haben auch Qt und wxWidgets Auto-Layout-Funktionen, aber da das auf C++ aufsetzt, kann die Erfahrung weniger glatt sein. Bislang verlangt der Forms Designer von Visual Studio manuelle Pixelplatzierung, was umso mühsamer wird, je komplexer die GUI wird.
    Controls per Drag-and-drop zu platzieren ist leicht zu lernen und für Anfänger gut, aber schon bei etwa einem Dutzend Controls fällt die Zeit auf, die man mit manuellem Ziehen, Ausrichten und Größenanpassen verbringt. Markup-basierte oder prozedural erzeugte GUIs übernehmen solche Layout-Berechnungen.

  • Die Windows-UI von etwa 1995 bis 2001 wirkte wirklich wie der Höhepunkt von Windows.
    Sie war sehr klar und sauber. Visual C++ und Visual Basic waren damals nicht perfekt, aber sie ließen einen einfach die Arbeit erledigen.
    XP stand direkt bevor, und danach ging es meiner Meinung nach bergab.

    • Nichts kommt an ein sauber installiertes Windows 2000 heran.
    • In XP, Vista und 7 kann man dieses Gefühl mit dem klassischen Modus erzeugen.
  • Ein bisschen off-topic, aber das hier wurde mit Avalonia gebaut, wovon ich zum ersten Mal höre. Hat das jemand benutzt? Das Versprechen, mit einer einzigen .NET-Codebasis schöne Cross-Plattform-Anwendungen zu bauen, ist beeindruckend; ich frage mich, ob es das in der Praxis auch hält.
    https://avaloniaui.net/

  • Das hier zu sehen freut mich wirklich.
    Ich war einer der frühen Entwickler, die den „visuellen“ Teil von Visual Basic gebaut haben.
    Damals hieß es Ruby und hatte nichts mit der Programmiersprache Ruby zu tun. Es sollte eine anpassbare Shell für Windows 3.0 werden. Die Idee war, dass einzelne Windows-Nutzer mit einem visuellen Editor und „gizmos“ ihre eigene persönliche Desktop-Umgebung bauen; diese gizmos wurden später viel langweiliger „controls“ genannt.
    Microsoft entschied wohl klugerweise, dass sich das eher als Entwicklerwerkzeug als als Endnutzerwerkzeug eignete, und kombinierte Ruby mit Basic zu Visual Basic.
    Falls du jemals eigene VBX-Custom-Controls gebaut hast, darfst du mir diese furchtbare API anlasten.
    Und falls du dich fragst, woher der Ausdruck „fire an event“ kommt, findest du die Antwort in Retools VB-Artikel: https://retool.com/visual-basic
    Content-Warnung: Es gibt Ausdrücke mit Drogenbezug. Sozusagen ein „Fragt mich alles“.
    Als etwas schamlose Eigenwerbung: Ich suche gerade Arbeit. Bei IBM wurde unser Team in der jüngsten Entlassungsrunde ziemlich hart getroffen, und wir haben McDonald's verloren, unseren einzigen dedizierten Kunden.
    Ich kenne viele Sprachen und Frameworks, aber nicht alles. Gibt es so jemanden überhaupt?
    Ich arbeite gern mit Kunden zusammen, um ihre Bedürfnisse zu verstehen. Wie alle Programmierer code ich auch gern, aber Code ist nur ein Mittel, um Kunden glücklich zu machen.
    Wenn du neugierig bist, findest du mich hier: http://linkedin.geary.com/, http://resume.geary.com/

    • Wegen solcher Beiträge komme ich immer wieder auf diese Seite zurück :-)
      Ich bin die Person, die oben den langen, begeisterten Kommentar geschrieben hat. Ich würde gern mal etwa eine Stunde mit dir per Zoom zusammensitzen und Geschichten aus dieser Zeit hören; wenn wir das Video hier posten, würden die Leute es sicher mögen.
      Ich habe keinerlei Interviewerfahrung und auch keinen Medienkanal, aber ich würde mein Bestes geben, interessante Fragen zu stellen. Wenn du Interesse hast, schick mir einfach eine E-Mail. Sie steht in meinem Profil.
    • Danke, dass du mir den Einstieg in meine erste professionelle Softwareentwicklung ermöglicht hast. Es war damit wirklich einfach, kleine Utilities zu bauen, die Dinge erledigten.
    • Erstaunlich, dass du auch SQLWindows gebaut hast. Ich bin beeindruckt.
  • Hat das auch etwas mit dem MS Dialog Editor zu tun?

  • Wenn man sich den Code genauer ansieht, sieht man, dass der Autor nur das Minimum implementiert hat, um eine coole Demo zu bauen.
    Zum Beispiel werden nur zwei Funktionen unterstützt, MsgBox und InputBox: https://github.com/BAndysc/AvaloniaVisualBasic6/blob/383a005...
    Trotzdem ist es beeindruckend, wenn man sich die Commit-Historie ansieht: So etwas Komplexes in nur vier Tagen zu bauen, ist beachtlich. Es ist auch ein guter Ausgangspunkt, um daraus eine vollständige IDE zu entwickeln.
    Fortgeschrittene Funktionen wie Syntax-Highlighting und Autovervollständigung fehlen leider. Ich habe es nicht ausprobiert, weil ich macOS nutze, aber ich gehe davon aus, dass es auch keinen Debugger gibt.
    Um auch eine Geschichte aus meiner Jugend zu erzählen: Meine Entwicklerreise begann zunächst mit Turbo Pascal und ging später zu Delphi 7 über. Delphi war VB6 ziemlich ähnlich; man entwarf Apps, indem man Komponenten auf ein Formular zog.
    Meine erste App war ein Notepad++-Klon, und ich habe den Code noch, aber er ist so schlecht, dass es mir jedes Mal peinlich ist, wenn ich ihn anschaue.

    • Syntax-Highlighting gibt es tatsächlich. Es wurde nach der Aufnahme des GIFs hinzugefügt und ist in der Webversion zu sehen. Autovervollständigung — nun ja, vielleicht irgendwann :)
      Auch die Unterstützung der VB6-Sprache ist eingeschränkt. Es war eher ein Spielzeug oder ein Proof of Concept, aber die positive Resonanz macht mir Lust, mehr Funktionen zu implementieren. Vor allem, weil das Speicherformat mit VB6 kompatibel ist. Es wird weiterhin ein Spielzeug bleiben, aber vielleicht ja eines, das tatsächlich funktioniert?
  • Die Webversion lässt sich im Browser öffnen: https://bandysc.github.io/AvaloniaVisualBasic6/

    • In Firefox und Chrome ist sie sehr schnell, aber in Microsoft Edge (Chromium) wird sie aus irgendeinem Grund so langsam, dass sie sich fast eingefroren anfühlt.
      Update: Ich habe die Ursache gefunden. Die Edge-Option Enhance your security on the web macht sie deutlich langsamer. Wenn man diese Option deaktiviert, ist das Performance-Problem behoben.
  • In heutigen Anwendungen vermisse ich Frame-Komponenten wirklich. Alle scheinen zu denken, dass eine fette Überschrift und ein bisschen Abstand am Ende ausreichen, um Elemente zu gruppieren.

    • In HTML gibt es dafür fieldset, das genau so aussieht. Aber viel zu viele CSS-Frameworks machen es kaputt. Ich mag dieses Aussehen tatsächlich.
      Zum Ausprobieren kann man Folgendes in eine leere HTML-Datei einfügen und schauen, wie es gerendert wird: Frame1, HTML, CSS, JavaScript
    • Genau. GroupBox ist eine unverzichtbare UI-Verzierung, aber in heutigen Toolkits fehlt sie, also baue ich sie selbst. Wenn eine ganze Gruppe von Controls mit einer Funktion zusammenhängt, die ein- und ausgeschaltet werden kann, setze ich auch eine Checkbox mit Label auf die Umrandung. In vielen älteren UIs wurde das quasi als Standard verwendet und war sehr klar.
      Eine weitere verwandte Sache, die verschwunden, aber wichtig ist, ist eine richtige TabView. Ich weiß nicht, wer als Erster behauptet hat, eine simple Reihe normaler Buttons sei eine TabView — vermutlich Apple —, aber das ist schlecht. Denn wie beim Fehlen einer GroupBox wird dadurch keine Grenze angezeigt, die zeigt, dass die darunterliegenden Controls zur Ansicht des ausgewählten Tabs gehören. Eigentlich sollte das doch offensichtlich sein.