Is XYplorer really written in VB6?
228 points by ethanpil 4 days ago | 210 comments
  • VB6-Programming 3 days ago |
    The 64 bit version of XYplorer is written in the twinBASIC programming language (actually an import of the VB6 source code and forms).
    • neverartful a day ago |
      This is the first I've heard of twinBASIC. I'm happy to see it on the dev tools scene.
      • gramie a day ago |
        A dev tool with a monthly subscription? That's enough to stop me right there.

        An alternative is B4J, a free (as in beer) BASIC that compiles to Java, so should run just about anywhere. It also has

        * B4A - a free version for Android * B4R - a free version for Arduino and ESP8266 * B4I - a paid version for iOS

        The main (sole?) developer is ridiculously responsive and helpful.

        • wilg 19 hours ago |
          it seems pretty reasonable to charge $30-50 a month for somebody doing the hero's work of reimplementing and building on top of a 30 year old programming environment. also there's a free one! spray money the people who do crazy niche work! that's what makes the world beautiful!
        • forgotpwd16 19 hours ago |
          >A dev tool with a monthly subscription?

          It seems that can buy a perpetual license for GBP £5000 / developer, which is equal to 16 years of monthly subscription (quite optimistic for a 3yo project).

          • gilbertbw 13 hours ago |
            They actually have a new year deal [0] on a perpetual licence to all v1 versions for £249, equal to 10 months of the subscription.

            [0] https://twinbasic.com/NEWYEAR25

        • neverartful 12 hours ago |
          They do have a free tier. It's nice having more dev tool options than fewer options.
    • jimnotgym 17 hours ago |
      Never heard of this before. I'm always happy to hear of new attempts to replace vb6, and a backwards compatible one is such an achievement
  • andsoitis a day ago |
    I recently discovered Remobjects and their development tools. Amongst other things, they create Mercury, with they describe as a modern Visual Basic that can compile for:

    - .Net

    - JVM

    - Android (JDK and NDK)

    - iOS, macOS, tvOS, and watchOS

    - Windows

    - Linux

    - WebAssembly

    https://www.remobjects.com/elements/mercury/

    • pryelluw a day ago |
      Feels weird to pay for this. I’m definitely spoiled by open source tooling.
      • benatkin a day ago |
        With Moonbit and Wolfram Language, it feels like a renaissance of paid programming languages.
        • forgotpwd16 18 hours ago |
          Wolfram ie Mathematica language predates VB1. Being commercial was the norm back then, and due to its academia widespread use has remained as such.
      • tonyedgecombe 14 hours ago |
        I have mixed feelings on this. On one hand it's great that people can write software without any financial friction, on the other I think developers should be rewarded for their work and I have little doubt the remote objects tools wouldn't exist without some kind of commercial reward.
    • neverartful a day ago |
      Yes, Remobjects makes some nice tools. I absolutely adore their Oxygene language.
    • dr_kiszonka 21 hours ago |
      Is there any documentation or tutorial on how to create a cross platform mobile app using any of their languages? The value proposition is great, but I can't find any actual code.
      • neverartful 11 hours ago |
        Have a look at their github repos. They have a fair bit of sample code sprinkled about.
  • benatkin a day ago |
    They should have written Dogecoin in VB, then it would have been even sillier.
  • KetoManx64 a day ago |
    I used XYPlorer for about 5-6 years until I made the switch to using Linux on all my machines last year. The scripting, speed, dual panes, customization, portability between machines (i used Syncthing to sync my configs between 3 machines) on XyPlorer are phenomenal and I've sadly not been able to find a Linux native file manager that's at the same level. Dolphin comes close but even with qdbus commands it sadly not as customizable as XYPlorer. I think it's the one thing I miss the most about Windows.
    • captn3m0 a day ago |
      My one thing was “Everything by Voidtools”. It piggy backed on the NTFS index, something no tool does for Linux-native filesystems.

      Does XYPlorer work with Wine?

      • forgotpwd16 18 hours ago |
        >Linux-native filesystems

        Because they lack something (for worse or better depending on one's requirements) equivalent to NTFS' MFT & USN Journal. Closest is building own file db by first-time full scan and then updating via fanotify/inotify. This is what FSearch tool does.

      • pacifika 7 hours ago |
        http://cboxdoerfer.github.io/fsearch/ FSearch is a Linux alternative.
    • jlahijani 21 hours ago |
      I've used XYplorer daily since 2008. It's a fantastic piece of software and updated all the time. Wish there were something comparable in Linux.
    • porker 18 hours ago |
      What did you script in XYPlorer? I've used Explorer for so long that's a feature I can't even imagine what I would use it for.
      • darekkay 18 hours ago |
        Not the OP, but I've been using XYplorer for 10 years now. I have a sidebar with a few scripts. Here are the ones I use the most:

        - Extract selected archives

        - Flatten current folder

        - Convert selected file(s) to various formats (e.g. JPG to WebP or vice versa)

        - Optimize selected image file(s) (smaller file size)

        - Prepare image file(s) for publishing on my photography blog: strip irrelevant EXIF, create two variants (thumbnail and a bigger picture); see my post: https://darekkay.com/blog/photography-website/#pipeline

        - Prepare image file(s) for sharing - similar as above, but more for sharing vacation photos with my family on WhatsApp)

        - Rename files to a certain format (e.g. images to "YYYY-MM-DD HH:mm:ss")

        - Check selected file with Virus Total

        - Start a weekly backup to my external drive

        - Backup my server files to my local drive

        - Create a rectangle "album art" file, see my post: https://darekkay.com/blog/resize-album-art-images/

        Many of those are just shell scripts and apps that I run right from XYplorer, but it's way faster than through CLI.

        I've documented some of the XYplorer stuff here (see also the "scripts" folder): https://github.com/darekkay/config-files/tree/master/xyplore...

    • moogly 18 hours ago |
      If you thought going from XYplorer to what's available on Linux was bad, now try going from Directory Opus to what's available on Linux :/
      • pimeys 14 hours ago |
        Dolphin on Linux is very nice. It even can connect with ssh and SFTP. Best file manager I've used.
        • moogly 12 hours ago |
          I'd say Dolphin is OK, adequate. But Directory Opus is a masterpiece, a labor of love.
    • ioqy 17 hours ago |
      Have you considered Double Commander?
  • pyeri a day ago |
    Both VB6 and FreePascal/Delphi are highly capable tools even in today's context, they just need more marketing.
    • ianhawes a day ago |
      > VB6 highly capable

      > VB6 only available in 32-bit

      • trinix912 16 hours ago |
        I really don't see how this invalidates the statement, regarding that VB's primary domain is rapid CRUD application development. Those applications usually don't use >2GBs of RAM, at least from what I've seen working on several old ones written in VB6, Delphi, PowerBuilder... Is a 64-bit Electron CRUD app that much more capable/better in getting the job done than a 32-bit VB6 equivalent? Both are merely an SQL client in the end.
    • _blk a day ago |
      Yeah, I used VB5 as one of my first languages and today did half a day of VBA. Definitely enough to quickly make me want to raise my hourly rate. Esp. in that office macro editor. Btw and totally unrelated office can now interpret VBA, (office)TypeScript and Python. Did I miss any?
    • mardifoufs a day ago |
      Delphi, maybe, sure. But starting a new project with vb6 is just weird unless it's the only language someone is familiar with. It's a dead end, even on the only platform where it makes sense to use it.
    • unscaled 19 hours ago |
      FreePascal/Delphi and VB6 are entirely different beasts. For one, FreePascal and Delphi are still under development. Delphi had the following language features added since 1998 (this is just a small selection):

      Extension methods/properties ("class helpers"), generics, enum types, for..in loops, static methods, closures, smart pointers, value types ("records"[1]), attributes, variables can be declared anywhere (removing Pascal's limitation), type inference, multiline strings.

      Besides all of this, modern Delphi can compile code for Windows, Linux and Mac, as well as Android and iOS. It seems like there's even a cross-platform library for writing apps that can run on both Mobile and Desktop called FireMonkey.

      VB6, on the other hand, is a language frozen in time. It never supported any other platform than 32-bit Windows[2]. It only really works on the new Microsoft Surface Laptops thanks to emulation, but I can also run Nintendo 8-bit games on a Surface Pro 11 using an emulator — that doesn't say much.

      Unicode support is also a mess. VB6 always used Unicode internally, but this was implementing during the UCS-2 heyday (so you need hacks to use Emoji for instance). Worse yet, is that VB6 was never really designed to run natively on Windows NT, so it's mostly using using the XxxYyyA family of APIs instead of the XxxYyyW family of APIs. This means that you can only display text in a non-English writing if your system's ANSI codpeage is set to that language (in the past you had to restart Windows to change this, not sure if it has improved). To make things worse, some languages (from countries that were too pair to get ANSI pages in Microsoft during the 1990s). So no Ethiopian languages or Mongolian as the author claims. Windows ANSI codpeages also do not "fully support" Japanese and Chinese as the author claims. Over the years the governments of Japan, China, Taiwan and Hong Kong have updated their national standards (which defined tables of characters that should be digitally encodable) and introduced more characters that were previously not mapped. These characters were not new or fake[3] — they were just less common, but still in use. All of these various government standards (like JIS X 0213, GB 18030, Big5-2003) got quickly incorporated into newer versions of Unicode, but the Windows ANSI codepages stagnated and they don't support some of the characters in these codepages. I'm not sure how it's going to affect VB6, but I'm pretty sure that some Unicode CJK characters would just not map into ANSI and would not be displayed even if your system code page is set correctly.

      With all of these things considered, no developer who cares about their users should choose VB6 for writing a modern app. I'd also argue that no developer who cares about themselves would do that. VB6 wasn't a great language to begin with. It was better than VB3, but it was still inferior to Delphi even when it was out. Customizing the UI beyond the basics, often needed custom ActiveX components written in C++ or messing around with a lot of raw Windows API calls. Error handling was very painful too. It was never a great developer experience even back of the day if you wanted to do anything beyond the basics.

      ---

      [1] To be fair, Borland's Pascal dialects had value types support since they've implemented object oriented programming (that came in either Turbo Pascal 5.5 or 6.0, I don't exactly remember). Turbo Pascal "objects" could be put on the stack or as pointers like in C++. They even had destructors that would be invoked automatically when the object went out-of-scope, again like C++'s RAII. But the old "objects" kinda botched polymorphism (I don't even remember the details), so when Delphi came out they've been replaced with "classes" that are Reference-only (like Java, but initially without any form of automatic memory management).

      [2] VBA was originally ported to Mac, but it is not exactly the same language, lacks the GUI designer and can't run most VB6 apps

      [3] In most cases, at least: https://www.dampfkraft.com/ghost-characters.html

      • robocat 16 hours ago |
        Delphi pricing is USD1400 for the developer edition and they are corporately mercenary chasing their payment. In 1996 Delphi 2 was released at USD500 for the cheapest Desktop version (which is ==USD1000 accounting CPI). Edit: I converted from NZD to get the USD1400 figure - the actual USD cost will be less in USD without our GST/VAT.
  • RajT88 a day ago |
    Early in my career, I worked in support for a company which made developer tooling.

    Male programmers would call in and do a bit of intro so you knew they were not dumb, just busy.

    VB6 programmers would say things like "I am a very senior VB developer". They were the only "very senior" programmers who did not seem to understand things about OS stuff. Like exported functions and their different calling conventions, why you need to "register" COM .dlls, environment blocks, handles, etc.

    • j16sdiz a day ago |
      > They were the only "very senior" programmers...

      Don't forget nodejs.

      • noduerme 18 hours ago |
        Really? I feel like those of us maintaining PHP stacks are much more "senior" by now...
    • treve a day ago |
      I feel this narrative about less experienced developers probably made sense to you back then, but it might be time to update it!
      • RajT88 5 hours ago |
        This narrative was about how VB did not produce senior developers that understood how computers worked.

        Never observed such a thing with any other language. (Of course I am too young to have met people building business apps off COBOL or BASIC).

    • flomo a day ago |
      Point taken that VB was a programming ghetto. But the actual seniors were fighting the language to call Win32, writing MTS servers, and etc, they 'got' all that stuff.

      I did some VBS ASP back in the day (not VB), and the language was more just annoying, at least partially due to the BASIC legacy stuff. Like it didn't even have a hashmap, you had to import something from Internet Explorer.

      • pacifika 7 hours ago |
        Scripting.Dictionary!
  • tombert a day ago |
    I debated writing an app in ColdFusion (well OpenBluedragon or Railo or something) about a year ago, partly out of curiosity to how well it holds up, but mostly out of sentimentality for the language. I had a bit of trouble getting started, and eventually the project morphed less into web and more into data-processing so I ended up using Java, but I still occasionally get the urge to write using a “dead” language.
  • silisili a day ago |
    VB3 was my first real intro to programming. Well, I started with C++ but abandoned it as an impatient child as describing a window in code wasn't fun.

    I wish we had a new drag and drop WYSIWYG to get people interested. Put Python or Go or even Basic behind it. QT maybe? Heck make it Electron.

    I'm not sure I would be where I am today without VB having existed, and it's a shame kids today don't have the same tools available.

    • xtracto a day ago |
      Have a look at Gambas3 [1] it kind of continued where Vb6 stopped. It's super useful for quick GUI based software.

      [1] https://gambas.sourceforge.net/en/main.html#

      • graemep 12 hours ago |
        Gambas is Linux (and presumably Unix) only, right? A VB6 substitute that does not run on Windows seems very niche.
    • profsummergig a day ago |
      Even a tool like Frontpage was a game changer.

      Simple website in a minute without any need to know HTML.

      No free tool that does that today. Dreamweaver does, but it's paid.

      • cfn 18 hours ago |
        That's how I learned HTML, building the page in Frontpage and then looking at the markup. I don't remember it being free though.
        • rbanffy 14 hours ago |
          It was very easy to get from the usual “alternative” software sources.
      • d1sxeyes 18 hours ago |
        Not sure what you mean by “no free tool does that today”, there are plenty of free site builders out there, both on the web and desktop apps. Even more if you consider “freemium” site builders.
      • kragen 17 hours ago |
        There are too many to count. WordPress, MediaWiki (on Fandom or Miraheze if you want), Mastodon, Blogger (you can still sign up apparently), Twitter, Linktree, Facebook, Google Docs, Google Drive, GitHub Gists in Markdown, ...

        I went to a restaurant last night that had QR codes instead of a menu. The QR code took you to their Linktree, which linked to some PDFs on Google Drive. You could criticize that for looking unprofessional, but it sure looked better than a Frontpage site.

        The other day I went looking for information on a neighborhood business that's a bit cagey about saying what they do. Their website (built by a consultancy that charges US$450, according to the Wayback Machine) seems to have been online from 02013 to 02018, but they have active pages on Facebook, Instagram, and YouTube, which apparently is good enough for them. (It turns out to be a school for mentally disabled teenagers, if I've interpreted the multiple layers of euphemisms correctly.)

        So the niche of "build a web page for free without learning HTML" where Frontpage and GeoCities followed NaviPress is not just not dead; it's thriving.

      • rbanffy 14 hours ago |
        It was, but it created some nightmare HTML that even FrontPage had trouble rendering.

        We called it Don’tPage.

      • ciupicri an hour ago |
        MS Word / LibreOffice Writer → Save as… → HTML :-)
    • bragr 20 hours ago |
      You can use Cambalache [1] to create GTK4 based GUIs (comparable to Glade for older versions of GTK).

      [1] https://gitlab.gnome.org/jpu/cambalache

    • yard2010 19 hours ago |
      First language I've learned. I remember the visual window editor was something so special, I didn't have to code the windows which was good because English was basically Chinese to my eyes at that age.
    • jamesfmilne 17 hours ago |
      • jimnotgym 17 hours ago |
        Have you used it? Did you like it? How did it compare to vb6?
        • pcdoodle 12 hours ago |
          It's pretty good. Lots of walls to bump against but very active community. I do lots of HMI stuff / interact with MCUs over serial.
    • lionkor 17 hours ago |
      QtCreator has a WYSIWYG editor
    • alexvitkov 17 hours ago |
      We've forgotten how to do it - the idea of dragging a button offends our modern sensibilities. You can't just drag a button, what about the layout?! What about responsive design, how will it look on a 300x200 screen and a 8k one? What about scaling? Reactivity?
      • trinix912 16 hours ago |
        Yes, and most of these problems can be very well mitigated by just implementing some sort of a layout constraint system. Xcode does it (AutoLayout), however, it's not nearly as pleasant and straightforward to use as the old VB form designer.
      • jeroenhd 15 hours ago |
        Visual Studio's form editor had decent solutions for that. And most application developers don't care about tiny or huge screens anyway, applications will just be broken if you resize them too much. The software stack they're using should allow them to make the design work on any form factor and resolution, but most of the time nobody cares about those edge cases.
        • rbanffy 14 hours ago |
          And even then, UI designers worked on abstract units and changing screen density changed the size of the elements (if you used bitmaps you would suffer, but that would be on you). VB6 paid for my first apartment in Brazil.
    • throwaway06544 16 hours ago |
      Lazarus has been around for years, but people don't know about it.

      https://www.lazarus-ide.org/

      "What is Lazarus? Lazarus is a cross-platform integrated development environment (IDE) that lets you create visual (GUI) and non-visual Object Pascal programs, and uses the Free Pascal compiler to generate your executable. Its aim is write once, compile anywhere: you should be able to just recompile your program source code with Lazarus running on another operating system (or a cross compiler) and get a program that runs on that operating system."

    • jeroenhd 15 hours ago |
      Windows still has Windows Forms with C#. Download Visual Studio Community edition for free (not VSCode), create a new forms project, and you'll have a GUI in minutes. Even beats VB6 in areas like automatic resizing because it has better docking support. It'll only target Microsoft's proprietary .NET but because Mono has supported that forever, you can run those applications anywhere Mono exists.

      There are also tools like Gambas and Gnome Builder that'll let you drag and drop UI components, but I find the software designed to run on Linux kind of lacking in comparison.

    • integricho 15 hours ago |
      The Delphi ecosystem was similarly good back in the day. Today, the Lazarus IDE is considered as a spiritual successor to it, and it indeed has all the bells and whistles, drag and drop a UI quickly together, build a standalone EXE in a single click (not a single DLL dependency - not counting win32), just a wonderful experience.
  • giancarlostoro a day ago |
    Microsoft has open sourced so much, I wish they would work on an effort to fully open source VB6 at least the bits they fully own and control. I have a feeling the community might rally to fill in the gaps, even if its over a few years.

    I mean, look at EverQuest Online, insanely old MMO client, still has people building private servers, and even clients.

  • actuallyalys a day ago |
    I don't think being written in VB6 is actually a good reason not to use XYPlorer, which seems like a capable tool, but this page doesn't seem really reassuring? What would reassure me is knowing that there is a maintained version of VB6 for modern systems. Luckily, there apparently is such an implementation, twinBasic, and they are already using it for 64-bit releases.
  • ryukoposting 21 hours ago |
    I think VB is totally fine. It's a pragmatic solution to a real problem, and the ugliest things about it today are all a product of hindsight.

    On the other hand, this rubs me the wrong way:

    > So, wouldn’t it be logical to conclude: If such an application can be written in VB6 then VB6 cannot be that bad after all?

    Yes, it absolutely could be bad. Our industry consists, in no small part, of turd polishing. Plenty of good software is written in bad (or ill-fitted) languages, and vice versa.

    • jeswin 19 hours ago |
      > Plenty of good software is written in bad (or ill-fitted) languages, and vice versa.

      That's because you mention VB6 as a language. VB6 is not about the language, but about the platform and vertical integration; from the IDE to the app to the distribution.

      It was magical that dropping a telephony component into a form enabled the form to make phone calls. Or you could drag-drop a Web Browser component, and have a browser inside your app. Or a database component, and a thousand other things. Few of these required reading the docs.

      There are many apps that can be written (and deployed!) faster in legacy VB than with anything available today.

      • chii 19 hours ago |
        > It was magical that dropping a telephony component into a form enabled the form to make phone calls

        the magic of COM[0]!

        But when it crashed it crashed hard. And the underlying programming model (beyond just using premade ones) are a bit hard to grok and fraught with footguns that shoot not only yourself, but the OS as well.

        [0]: https://en.wikipedia.org/wiki/Component_Object_Model

        • unscaled 19 hours ago |
          And COM/OLE/ActiveX components (whatever Microsoft fancied calling them that year) could have been used just as easily from Delphi.

          And you don't even need COM. You could do the same things today with RAD components in, say, Java. But it's just no longer a fad. Programmers nowadays don't think that dragging a component that makes phone calls and linking it to a button.

          Nowadays, they would just write "npm install telephony" and then add a couple of lines that they got from the README.md on GitHub (or from their AI assistant) to make a call:

            import { Dialer } from "telephony";
            const dialer = new Dialer();
            dialer.call("+1 800 1234 1234");
          • chii 18 hours ago |
            The way COM model worked, is that an application (for example, microsoft word) would implement this COM interface (that they'd have to anyway, for various reasons such as interoperability), and it would become available as a component to be used in another application.

            It's a grandiose vision. It just didnt work out because of how complicated it is in practise to implement the COM interface(s), and not enough apps did it anyway.

            It is slightly different from a library, since that library would have to be useable from your language (or have some sort of FFI mechanism).

            • Joker_vD 18 hours ago |
              I personally think one of the main design problems of COM was that, ironically (given its name), it never really had "component" as a first-class concept. It was all about interfaces, and the rules on how implementation of IUnknown's QueryInterface must behave really highlight that: it's almost impossible to delegate to/compose over another component if that component was not written with this scenario in mind.
            • agarren 17 hours ago |
              It was (is) an ABI, more stable than something available through a C/C++ compiler. It’s been years since I’ve lived in a Windows world, but as I understand it, it’s still very much alive and well. It didn’t fail because it was complicated, although it was, but it continued to evolve and was eventually superseded by .net. I worked with win32 & mfc quite a bit and had to interface with Com/activex a little, usually through wrappers of some kind, but it was always under the covers. I also wouldn’t say that it failed because not enough apps did it. I can’t speak to drivers or system components, but if you were distributing windows apps prior to and early into .net, you dealt with com directly or indirectly.
              • projektfu 10 hours ago |
                I remember some things being very tiresome, esp. from a C or C++ view of the world. There weren't any default implementations for most things, as you would find in Java. So for Java you might have an abstract class that got you 95% there, in COM/OLE you needed to do that 95% yourself, and this was before you had lots of public domain things available. Later, we could go on Codeguru or whatever and get a good example.

                Many things were designed at the level of Microsoft App 1 (e.g. Word), and then when they needed something different for another app (e.g. Shell) they extended the interface in a different interface, and so on. The only authority for interfaces was Microsoft. Nobody else was really able to come along and make a set of interfaces that would become universal for something new, so you had to wait for Microsoft's design, and then it would be designed to support the way it was implemented in Word, Excel, or Internet Explorer, and they would not release the implementation details, just an interface specification and some hastily-written documentation.

                Naming things was hard for Microsoft, so they came up with idiotic names like "IClassFactory" because they couldn't decide if they wanted to call something a Class (Smalltalk-style) or a Factory.

                It took forever to learn because the documentation was not oriented around practical things, it was toy examples that didn't even work within the system. As a young programmer, it took me a long time to understand how everything was registered, what the difference between a CoClass and an interface really was, where to get that initial IUnknown pointer, etc., because the books were so focused on vtables and toy examples, etc.

                The system was mostly replicated by Netscape/Mozilla for XPCOM, so it had areas where you could apply the same principles on other platforms. It also had superficial similarity to SOM/CORBA so learning those systems (thankfully mostly gone now) was also somewhat easier after learning COM.

                There were several categories of applications.

                - Those that used COM/OLE fully, as the underlying basis of everything they did, used structured storage, and exposed components and automation to the rest of the world.

                - Those that implemented some sort of automatability and things like shell preview.

                - Finally, those that used the minimal amount to support drag and drop and the like.

                After a while, Microsoft's habit of introducing the next big thing and mostly abandoning it a few years later caused Windows application development to decline. COM has always been around, but many related technologies come and go. .NET blurred the lines between COM and the .NET runtime, and then Microsoft started making substantial overhauls of the Windows runtime without, IMO, getting buy-in. Why write WPF when it's similar to but incompatible with UWP? Why write UWP when Win32 works just fine? I wonder if they're going to introduce yet another? Oh, sure, Windows App SDK. Should we use GDI+ or Direct2D? Which one is going to "win"? Why do any of this when Microsoft themselves is using Electron in VS Code?

            • HeyLaughingBoy 9 hours ago |
              I don't remember it being difficult to implement a COM interface. DCOM, OTOH, was another level of hell.
          • wruza 17 hours ago |
            The closest I can actually find on npm is this:

            https://www.npmjs.com/package/react-native-telephony

            And it’s nowhere near these neat 3 lines. Same for ui.

            I agree that the spirit of VB/Delphi is in theory easily transferrable to any modern runtime. But in practice we suck at it and there’s nothing even remotely close to just dropping a component on a form. All we have is miles of vaguely explained boilerplate and the most convoluted idioms that don’t connect. The basic technology is lost and only miraculously exists as a windows support artifact.

          • robocat 17 hours ago |
            > And COM/OLE/ActiveX components [] could have been used just as easily from Delphi

            I wanted to use Excel from within Delphi - I wasted more than a few weeks and ultimately failed. I always suspected that the COM/OLE integration had problems with some of the advanced features I was trying to use (I was trying to do something rather complicated). Plus the documentation and support was lacking for Delphi - Microsoft best supports Microsoft tools. I did use Delphi and COM successfully in many other situations but that one failure really soured me towards COM and Delphi together. I am typically capable of making complex integrations work, so I was surprised to fail.

          • 1oooqooq 14 hours ago |
            because npm+electron is the vb3 of today
        • fuzzfactor 16 hours ago |
          Dropping that little telephone icon on the form was designed to act like most of the other objects at your disposal, but it had an additional footgun all its own.

          It depended on the existence of the RS-232 Communication Port object, MSCOMM32.OCX. Which often turned up missing :\

          Plus unlike most of the other activex objects, mscomm32 had a certificate that was set to expire, and in only about 5 years, but loads of people never knew it until about 5 years later when it happened, and it's been a shitshow ever since Windows XP.

          Just searched a bit and the situation may be looking up:

          https://www.vbforums.com/showthread.php?897698-MSCOMM32-OCX-...

          You may still need to "locate" a suitable version of mscomm32.ocx since there are probably more expired versions in archives than there are acceptable files which will register properly.

          This may be one, still referred to as a trick at the time:

          https://github.com/davidanger/MSCOMM32

          You may need to copy mscomm32.ocx to additional Windows folders and register the file there for different versions of Windows and/or Office too.

        • tonyedgecombe 14 hours ago |
          I had a client with a C++ application that used COM for everything. They wouldn't write a simple C++ class or structure but rather would always fire up the wizard in Visual Studio to create a COM object. It was horrendous.

          Having said that COM itself wasn't that bad. If you read the Don Box book he justifies pretty much all the technical decisions they made.

          In the end my productivity doubled when I shifted from C++/COM to C#/.Net.

      • Zardoz84 16 hours ago |
        Have you tried Gambas, or the current version of Delphi ?
    • unscaled 19 hours ago |
      I agree with your conclusion, but when you say "VB is totally fine" do you mean VB6?

      I can get Modern iterations of Visual Basic such as VB.Net. The syntax and semantics hurt my eye and my brain, but if that's your thing, yeah the language is very serviceable. It's a modern language with modern features and a lot of legacy baggage. It's not worse than PHP or maybe even JavaScript (though I would much prefer JavaScript).

      But VB6 means taking the language and tooling as they were in 1998, frozen in time, and writing a modern application to a modern user base.

      • self_awareness 18 hours ago |
        Could you specify what legacy baggage you would like to eliminate, and what modern features you miss in VB6?
        • jcncncn 18 hours ago |
          The author has listed quite a few like unicode and 64 bit support ^^
          • KronisLV 11 hours ago |
            Those are both good examples!
        • gus_massa 15 hours ago |
          I still have a VB6 program in production. I miss a nice `sort` function.

          Also opening the standard window to open/save a file is a missing feature. You can use a vbx control but it's difficult to distribute, or you can use the API, but the null characters are a small problem.

      • Kwpolska 16 hours ago |
        Microsoft considers VB.NET legacy as well. Most notably, ASP.NET Core applications cannot be written in VB6 due to missing language features.
  • rkagerer 21 hours ago |
    Works on Windows XP, Vista, 7, 8, 8.1, 10, 11

    That's better than you can say for a lot of software these days

    • nolok 18 hours ago |
      It's a feature of limiting yourself to the win32 api (and functions of it available since 2001 only).

      Eg the moment you need to deal with security like certificate or whatever this goes out the window.

      • layer8 7 hours ago |
        You can always program it to be conditional on the runtime environment.
      • rkagerer 6 hours ago |
        In some ways I wish they just kept building on that API instead of introducing lots of competing (or complimentary, depending on your viewpoint) frameworks and philosophies.
  • 29athrowaway 20 hours ago |
    You can use GAMBAS as a replacement.
  • p0w3n3d 20 hours ago |
    Back in 1999 for me most important was to have a great gui design, and VB was cool for this. Then later I would focus on native binary, performance and size of the build hence I switched to Delphi and then to C++. But tbh nowadays I can see that this is this famous triangle: either good and fast but expensive, either fast and cheap but not good, or good and cheap but not fast. So instead of writing in C++ i coded in 2 days a tray helper in pyside. I have no longer size complexes, as other apps tend to be written in electron nowadays, which is super size XXL

    The point is: prejudice is bad. Use whatever floats your boat

    • nasretdinov 19 hours ago |
      Please use float64 for your boat though
  • kgeist 20 hours ago |
    >Yep, it’s written in VB6. Who cares?

    I'd say security is a problem if one uses a 30 year old piece of software but apparently Microsoft still releases security updates: https://www.microsoft.com/en-us/download/details.aspx?id=507...

    >A security issue has been identified that could compromise your Windows-based system running Microsoft Visual Basic 6.0 Service Pack 6

    >The Visual Basic 6.0 IDE is no longer supported as of April 8, 2008, however, the Visual Basic team is committed to “It Just Works” compatibility for Visual Basic 6.0 applications

    >Date Published: >3/23/2021

  • wiseowise 19 hours ago |
    I always love a story of impressive software written in “underdog” languages and not hype Go, Rust, Zig etc.
    • chii 19 hours ago |
      these rare stories are rare, because the creators of these software aren't bragging about which platform they're using, and merely focus on the software!
  • qwertox 19 hours ago |
    > No multi-threading. A pity. But for a file manager not that important.

    It's honestly blazingly fast in comparison to Windows Explorer on Windows 11.

    • brokencode 18 hours ago |
      As much as I like C# the language, I honestly think that it and .NET are fundamentally flawed when it comes to performance.

      Native Windows apps just never seem load that fast or work that great. It’s kind of crazy how much better the basic OS apps feel in macOS compared to Windows.

      I wish Microsoft would have gone in a direction more similar to Apple, with an AOT compilation and reference counting.

      JIT and garbage collection sound great in theory, but in practice I’ve found them both to be loaded with footguns that more than eliminate any benefits. At least with .NET, that is.

      • neonsunset 18 hours ago |
        Most Windows apps that are guilty of being slow and poorly made do not use the .NET you speak of at all. If they did they would work much better!
        • brokencode 17 hours ago |
          Do you have some examples of large and complex C# applications with really good performance?

          I’m hard pressed to think of any Microsoft software at all that I think feels really nice. Except for VSCode, which is of course built on Electron and not .NET.

          The only thing that comes to mind is Paint.NET, which doesn’t seem like all that big of an application. It’s very nicely done, but I think it’s only got like a single dev working on it, so couldn’t be that big.

          • dagaci 16 hours ago |
            Devtoys is great and open-source and .NET and cross-platform * https://devtoys.app/

            and in context to the thread files-community/files is great and open-source and .NET * https://files.community/ (its actually 96% .net and 3.1% c++)

          • neonsunset 16 hours ago |
            > Do you have some examples of large and complex C# applications with really good performance?

            Most of them. An implementation would have to go out of its way to make itself perform poorly if it is built on top of, say, .NET 8.

            Have you heard of Ryujinx? Or Nethermind? Or Garnet? Or have you seen that .NET's Regex engine, written in pure C#, is the third fastest in the world after Intel's Hyperscan and Rust's Regex crate?

            • brokencode 8 hours ago |
              Fair enough, maybe my perceptions of .NET performance are mostly based on old versions of .NET without all the tiered compilation and other features to make JIT warmup less of an issue.

              We are only just now wrapping up the conversion at work to .NET 8 from 4.8, so it will be interesting to see the performance numbers once that is complete.

              Our .NET application has millions of lines of code, so JIT compilation time in particular in the old .NET could be very painful.

              • neonsunset 8 hours ago |
                At my previous employer, moving from .NET Framework 4.6.1 to .NET Core 3.1 resulted in response latency of one of the particularly heavy requests going from ~2s to ~300ms :)

                The difference between 4.8 and 8 can easily be tenfold, depending on the workload and bottlenecks (if it's a slow DB query - EF Core might compile it to a more efficient variant in, say, EFC 8, but if it's linear scan - not much can be done).

          • tonyedgecombe 14 hours ago |
            Isn't Visual Studio (not VSCode) written in .Net.
            • brokencode 9 hours ago |
              That's specifically an example of an application that I think is slow. It's slow to load and often slow to respond. The support for Git has to be amongst the slowest of any professional application in the world. But I'm pretty sure it has a deeply flawed architecture compared to VSCode.
              • neonsunset 9 hours ago |
                It's written in C++ and .NET Framework. VS is mostly an exception anyway. I much prefer to use VS Code + Rider instead. Your comments leave me with impression that you are not interested in understanding the performance profile of .NET and are looking to engage in a language flamewar instead.

                Edit: I stand corrected, based on reply in a sibling comment most of the perception stems from how .NET Framework works. Understandable.

      • sedatk 17 hours ago |
        .NET supports native AOT for a while now.
        • brokencode 17 hours ago |
          I don’t have a lot of experience with this, but that’s mainly because there’s no way to compile my company’s application with Native AOT. At least not without a significant amount of work.

          This is because there are many limitations in what can be compiled this way, and most C# applications and libraries were never built with such limitations in mind.

          • sedatk 9 hours ago |
            AFAIK, the limitations are just some (not all) reflection API is missing, and trimming can cause problems. That’s pretty much about it. Obviously it’s a problem if you need those, but I wouldn’t call it “many limitations”.
      • Kwpolska 16 hours ago |
        Most applications that ship with Windows are not written in C#/.NET. Microsoft tried to rewrite everything this way around Vista, but they failed hard due to stability and performance issues. In Windows 11/Server 2025, the only things written in .NET are administrative tools, like most MMC snap-ins (e.g. Event Viewer), Virtual Machine Connection, or Server Manager.
        • neonsunset 16 hours ago |
          To be fair, .NET back then was just not where it is today. And the C++ faction within Microsoft did not help that either.

          But a lot of people are completely out of touch, thinking something along the lines of "Clearly Golang is managed by YouTube and Google Search teams" except about .NET whenever complaining about whatever happens to Windows nowadays.

      • p_ing 12 hours ago |
        > Native Windows apps just never seem load that fast or work that great.

        On NT, process creation is very slow compared to most (all modern?) other operating systems, where-as thread creation is near-instant.

        Not sure what you mean by 'work that great'.

        > JIT and garbage collection sound great in theory, but in practice I’ve found them both to be loaded with footguns that more than eliminate any benefits.

        I can't think of a single C# Console, Web, or WPF app I've created where I have to explicitly concern myself with JIT or GC. That doesn't mean they're not out there (games? maybe? Fez? Stardew Valley?), but I think you'd find one calling explicit GC methods somewhat rare, or being concerned with how long an app takes to JIT.

        I used to deal with SharePoint Server quite a bit which is _slow_ to start due to JIT, but I didn't care because I'd just have an uptime monitor app fetch a page or few on the front end to make sure it JITs before (re)adding it to the load balancer.

      • kgeist 11 hours ago |
        I've built many apps using C#/Winforms and the runtime's performance was never an issue.

        In my experience, main performance killers are:

        - calling blocking functions on the UI thread

        - N+1 problem

        And there's nothing specific to C# about it. .NET garbage collection becomes an issue only when you allocate lots of objects per second (100k or millions), and very few UI apps do that. If there's perceived sluggishness, I doubt it's the runtime.

    • fuzzfactor 17 hours ago |
      If you haven't tried the File Explorer in W11 24H2 it turned into a complete joke overnight now.

      Slow as a dog and will often not render after all, compared to how it would act for decades up until less than a year ago.

      It's a new defect in relation to the video drivers, badly incompatible with the default Microsoft Standard Display Driver, so what can you say?

      I would expect that's an indication that XYplorer is a much more advanced, well-developed and mature alternative not relying on flaky emerging APIs that have too few decades of reliability to compare.

  • skirge 19 hours ago |
    I know that one of the best bug bounty hunter scripted his work using VB (unlike rest of the world who uses Python/Golang or Rust), if it works and you know it why not? Actually looking for perfect tools is procrastination.
    • wiseowise 12 hours ago |
      Does he maintain a blog somewhere to read how he does it?
  • gdgghhhhh 18 hours ago |
    The program doesn't look like a typical VB6 application, I guess the author draws all UI elements himself?
  • gdgghhhhh 18 hours ago |
    I wonder how the code looks, it must be a maze of "on error goto" lines to not crash at the slightest error.
    • Deeg9rie9usi 18 hours ago |
      The person that has down voted this doesn't seem to know that error handling in VB6 works like that. Most functions don't return an error code you can check, neither are exceptions available.
  • aquir 18 hours ago |
    It is a great software, now I know why there is no MacOS builds :)
  • darekkay 18 hours ago |
    I've been using XYplorer for 10 years now and it's fantastic. There are just so many features and quality of life improvements over the Windows explorer.

    It's written by a single person, and they're very responsive. I've recently reported a bug with the search (the first that I've noticed in all those years), and it's been fixed within a day. I'm only worried about the bus factor a little.

    I have a GitHub repo with some of my settings/scripts/notes for XYplorer if someone's interested: https://github.com/darekkay/config-files/tree/master/xyplore...

  • ltbarcly3 18 hours ago |
    Sorry VB apologists, it's a weird language with lots of legacy weirdness. If you chuckle at silly things in JS, you'll cry when you learn VB.
  • nolok 17 hours ago |
    For no specific reason other than life random offers I've gone through a few of those "dead and bad" reputational language in my career (VB6, Delphi, PHP), mostly as a case of "there is a lot of money being a decent programmer who can use these correctly".

    And there are three things I learned about it

    1. There is a lot more money in it than you would think. The good part of "there is a lot of newbie using it" is that there is a lot of newbie using it and tons of software in it out there, and once you prove you know what you're doing you drown in high paid work, and with a bit of job selection it's not the bad horrible maintenance kind but decent fun too.

    2. There is no need trying to argue with people about it online or whatever. You're not going to convince anyone they're better language than they think. PHP 8 is a top notch language and people are still dumping on it using php 4 things.

    3. Ultimately there are people who spend their time talking about what language is right and people who get things done, build something great and it doesn't matter if it's cpp or Javascript or whatever. So at the end of day I've made a fair bit of money improving or building stuff used by lots of people to generate tons of revenue, and everyone involved is happy about it.

    • IshKebab 17 hours ago |
      > PHP 8 is a top notch language

      Maybe the things they've added lately have been well designed, but did they ever actually fix the WTFs from PHP 4?

      JavaScript has the same problem. They added `let` and `const` but never removed `var` or `==`. If you take a look at ESLint rules there are dozens of footguns that could have been fixed in the language. Not as bad as PHP's footguns, but still...

      • stefanfisk 16 hours ago |
        I spend all of my working hours with modern PHP.

        IMHO, although its improved A LOT it’s still a mess. But with the right tooling you can kinda-sorta make it behave like a sane language if you squint a bit.

        • dalemhurley 16 hours ago |
          Every single language is a mess. Just look at time and floating point numbers in Java (not having a go at Java).
          • IshKebab 16 hours ago |
            Every single language has parts that are a mess, or at least not perfectly designed. But that doesn't mean that languages all have an equal amount of mess. Python clearly has less mess than Perl. Rust clearly has less mess than C++. Zig clearly has less mess than C.

            There should be a name for the "nothing is perfect so everything is equally bad" fallacy. It's surprisingly common.

            • networked 15 hours ago |
              The fallacy of gray?

              https://www.greaterwrong.com/posts/dLJv2CoRCgeC2mPgj/the-fal...

              > The Sophisticate: “The world isn’t black and white. No one does pure good or pure bad. It’s all gray. Therefore, no one is better than anyone else.”

              > The Zetet: “Knowing only gray, you conclude that all grays are the same shade. You mock the simplicity of the two-color view, yet you replace it with a one-color view . . .”

              > —Marc Stiegler, David’s Sling

              • IshKebab 13 hours ago |
                Ah nice, thanks!
            • guenthert 15 hours ago |
              > There should be a name for the "nothing is perfect so everything is equally bad" fallacy. It's surprisingly common.

              I think this falls under splitting (black-and-white thinking), a form of defense mechanism or (I suspect) mere rhetorical tool.

              https://en.wikipedia.org/wiki/Black_and_white_thinking

              • IshKebab 8 hours ago |
                No, black and white thinking is a different thing. It's "the fallacy of grey", linked in a sibling comment.
            • donatj 12 hours ago |
              In Python, default arguments are mutable. That's the ultimate WTF and footgun.
              • orbisvicis 11 hours ago |
                That's somewhat of misnomer. The root cause is that default arguments are evaluated during function creation rather than when the function called. And... this is invaluable for forcing immediate evaluation of otherwise late-binding closures.

                What can be confusing is mixed lifetimes of nested generators using `yield from`. If any outer generator has a shorter lifetime, when it is garbage collected `yield from` will forward `close()` to the inner generator. Attempting to re-use the inner generator will result in a premature `StopIteration`. Iterators do not have `close()` and so are unaffected. This affects only `yield from` and not `for i in gen: yield i`.

              • IshKebab 8 hours ago |
                Yeah that is definitely a footguns but I think calling it the ultimate footgun is overselling it. Perl implicitly casts between strings and integers. That's a waaaay bigger footgun.
            • aspenmayer 8 hours ago |
              > There should be a name for the "nothing is perfect so everything is equally bad" fallacy. It's surprisingly common.

              https://en.wikipedia.org/wiki/Perfect_is_the_enemy_of_good

              • IshKebab 8 hours ago |
                That's a totally different thing.
                • aspenmayer 8 hours ago |
                  • IshKebab 4 hours ago |
                    Also not the same thing. That would be someone saying "we can't use any language because they all have flaws".

                    The one I'm talking about is the fallacy of grey, linked from a sibling comment.

          • DanielHB 15 hours ago |
            There are lasting languages and good languages, but there are no lasting good languages.
            • nycdotnet 12 hours ago |
              “There are only two kinds of languages: the ones people complain about and the ones nobody uses.”. Bjarne Stroustrup
            • IshKebab 4 hours ago |
              Nonsense. There are plenty of good languages that have lasted a while, unless your standard for "good" is unreasonably high.

              Java is probably the longest lasting language that I would consider good. Are there things that I hate about it? Of course. But it got a lot of things right - even things that more modern languages have done much worse at, like IDE support.

          • desdenova 15 hours ago |
            Taking two of the worst languages as an example of "every single language" doesn't really work.
          • MrBuddyCasino 14 hours ago |
            > Just look at time and floating point numbers in Java

            What do you mean? The time & date API in Java is excellent, and the float and double types follow the IEEE standard.

            • badlibrarian 12 hours ago |
              It took nearly 20 years to sort it out. Before Java 8, January was 0 and getYear() for today would return 125.
              • stefanfisk 10 hours ago |
                Wasn’t Java 8 released 11 years ago? If PHP had been in its current state back then it would have been a masterpiece.
              • IshKebab 4 hours ago |
                January as 0 seems like a very definsible choice. Presumably they did it to match C. If anything the WTF there is that the day of the month doesn't start from 0.

                Dunno what's up with getYear() though!

        • tonyedgecombe 13 hours ago |
          >I spend all of my working hours with modern PHP.

          I'd love to see a PHP without the warts. Something that is trivial to embed in a web page just the way PHP is but without the foot guns.

      • mschuster91 16 hours ago |
        > but did they ever actually fix the WTFs from PHP 4?

        If you have a background in C programming, most of the "wtf" is completely reasonable - the only thing "modern" and novice PHP programmers will still raise the WTF flag about is the standard library, mostly the string manipulation functions, their names and argument order. Old dogs know that this comes from early PHP being not much more than a thin wrapper around libc and various other C libraries.

        Other than that, if you write modern PHP it's almost like Java, just without threads/concurrency in general, and without extremely braindead tooling required to get something built. PHP Composer is a breeze compared to Gradle, Maven and messing around with Tomcat, Glassfish and classpaths to get your application deployed...

        • dalemhurley 16 hours ago |
          Then add in Laravel and chefs kiss.

          Honestly 90% of web apps could be easily built with PHP, Laravel, Inertia and React/Vue in half the time.

          • odie5533 11 hours ago |
            How is that any better than React + <insert any backend here>?
            • AdrianB1 10 hours ago |
              PHP is extremely simple to use. That makes it extremely simple to onboard new people and also to support. Complexity brings associated costs, sometimes bigger than the development itself.
              • odie5533 9 hours ago |
                Last time I created a Laravel app it created dozens of default files and folders for me. How is that simpler than Go/Gin or Python/Fastapi? When does the extremely simple part come in?
                • mschuster91 9 hours ago |
                  For one, PHP doesn't require bundlers to work, nor does it require compilers, transpilers, watchers or whatever. You just save your code in your editor of choice and that's it.
                  • odie5533 8 hours ago |
                    The proposition was PHP, Laravel, Inertia and React/Vue. Pretty sure Inertia is basically a transpiler to JS, and building the components in React will use a watcher for compilation. Not sure if it has TypeScript support.

                    Also, you still run artisan to view your code after you save. Same thing with Python's FastAPI: I run FastAPI's server. I just save my code just like PHP.

                • AdrianB1 3 hours ago |
                  You don't have to use Laravel. If you want more advanced stuff to be built in, go for it, but I can write reasonably complex apps with plain PHP. How simple is it? I showed a DBA with no programming experience (other than SQL) to make a change in an existing app in ~ 2 hours. The change was a new feature in the app, about ~ 100 loc. I also gave a complete non-technical colleague a small PHP application to own and support and it works quite fine 2 years later.
      • AlienRobot 14 hours ago |
        It's not possible to remove anything without potentially breaking backwards compatibility. Removing ANYTHING in Javascript would be a tremendously bad idea.

        If webpages from 30 years ago stopped working because 2025 developers favor aesthetics and disrespect legacy, I'd be pretty angry.

        • IshKebab 13 hours ago |
          > It's not possible to remove anything without potentially breaking backwards compatibility

          https://developer.mozilla.org/en-US/docs/Web/JavaScript/Refe...

          • AlienRobot 9 hours ago |
            >In sloppy mode, a number beginning with a 0, such as 0644, is interpreted as an octal number (0644 === 420)

            How does something like this even happens.

            Anyway, if you "use" strict mode, but the browser doesn't support it, you're effectively not running in strict mode, so you can't actually assume the Javascript will execute differently.

            • bakkoting 5 hours ago |
              Every version of a browser released after 2011 has supported strict mode.
            • IshKebab 3 hours ago |
              Any code that works in strict mode will also work in sloppy mode.

              0777 style octal numbers are a footguns inherited from C. Don't ask my why they made that mistake! Modern languages use 0o777.

        • tonyedgecombe 13 hours ago |
          I do like the way Rust has language editions which let you work around this, at least partially.

          Mostly though I don't care if we break old stuff. It happened all the time when developing for the desktop. People just dealt with it. The ones most impacted are lazy enterprises and I have no sympathy for them.

          Clinging on to the past stifles innovation.

          • AlienRobot 9 hours ago |
            The loss of being unable to access old information is unknowable and therefore infinite. People can't just "deal with it." Every year there is more technical baggage that someone new to the environment is just supposed to learn. At some point it becomes an impregnable barrier.

            If you start telling people they have to install an obsolete web browser, and then an obsolete operating system, and then patch the drivers because all the hardware doesn't support it anymore, you have effectively gatekept information that was once available in the open web to the tech elite.

            Yes, "tech" is redone from scratch every 6 months so 5 years ago is an eternity, but there are plenty of fields where 30 year old information is just as invaluable as something published today.

            Nobody is maintaining webpages published in the 90's. Nobody is going to update them. They are just there, sitting on some university's server that barely gets any hits. The author probably died 12 years ago and nobody even remembers who is responsible for it or that it's running. And it's in everyone's best interest to keep it that way: online.

        • philistine 12 hours ago |
          What do you mean?

          We could implement a version declaration system that removes and fixes elements of JavaScript when properly declared.

      • deergomoo 13 hours ago |
        > but did they ever actually fix the WTFs from PHP 4

        Depends what you class as a WTF. The older parts of the standard library are still wildly inconsistent in function naming and argument order, but that’s never going to change because it’s simply not worth the BC break.

        But they’ve done a good job cleaning up the actually problematic bits of the language. Previous horribly insecure defaults like register_globals and magic quotes are long gone. And in recent years they’ve worked on tightening things up: many obviously incorrect behaviours have been promoted from notices or warnings to outright errors.

        • andai 13 hours ago |
          >depends on what you class as a WTF

          It might take a while to enumerate them all ;)

          https://eev.ee/blog/2012/04/09/php-a-fractal-of-bad-design/

          • deergomoo 13 hours ago |
            There’s some fair points in there, some unfair ones, and some outdated ones (unsurprisingly given it’s nearly 13 years old).
      • lordgroff 12 hours ago |
        PHP never did do a py2->3, but instead took the js route of adding things while being very cautious indeed if breaking compatibility.

        I really have very little annoyance with PHP despite retaining some WTFs. In fact, with a modern language server and psalm I find it downright comfortable.

      • p_ing 11 hours ago |
        What is PHP good for these days? What does it do better as a metric than any other language?

        It's easy to use, easy to get into for beginners, and is a requirement for WordPress. But performance? Flexibility? Some other random metric-word?

        • kgeist 10 hours ago |
          For me, 2 main advantages PHP has, for real production code, are:

          1) Easy hotfixing/debugging on production servers. Just edit a file and save. Our teams which program in PHP solve blockers way faster than the Go teams.

          2) "Shared nothing" architecture, which has two advantages:

          a) it's scalable without additional effort, because PHP processes are stateless

          b) better security, especially if you're doing multitenant SaaS, because all requests are isolated from each other (there was a bug in ChatGPT when you could view chats of other users because requests from different users were served by the same OS process in Python and they had a race condition bug when switching between users inside the same OS process - such bugs are very rare in PHP)

          Not saying it's unique to PHP, but these 2 advantages for real production code are often overlooked; people instead focus on non-essential minutiae like "inconsistent function name, I'd name it differently tbh"

          • IshKebab 3 hours ago |
            You can trivially do 2. in any language, although it is true that people rarely do that in other languages because of the downsides. As for live editing production... I dunno if that is a good thing!
        • AdrianB1 10 hours ago |
          For me: I can quickly build a small thing and run it directly. It is interpreted, no build/CI/CD/whatever. It's not just a more powerful PowerShell, but also something that I can use to build a web page with a data source, Datatables.js and ... 30 minutes later it's good to go.

          For my company: minor apps with laxe requirements, hotfixes usually involve editing a single file, in place, then push to Git. We don't have "serious" apps in PHP, but we have a few low tier apps using it, it's simple and convenient.

    • mschuster91 16 hours ago |
      > I've gone through a few of those "dead and bad" reputational language in my career (VB6, Delphi, PHP)

      It's been ages since I've last seen Delphi in real life - must be over 20 years ago by now.

      But I'd not put PHP in the same league of "dead and bad" with it... yes, it's not the "hipster" language these days, that's been taken over by <insert JS framework of the day> in frontend, NodeJS in the backend and Go for "need to quickly cobble something together"... but it still powers dominant parts of the web. Obviously Wordpress, Typo3 and Drupal in the CMS area which power a large amount of individual websites, and then the large behemoths Facebook, Wikipedia and Fandom/Wikia.

      • dalemhurley 16 hours ago |
        Hipster JS frameworks are making the mistakes PHP and VBScript discovered 20 years ago.
      • tonyedgecombe 14 hours ago |
        >But I'd not put PHP in the same league of "dead and bad" with it.

        It's dead to the extent that you are unlikely to start a new project in it but I wouldn't classify it as bad. It's just of it's time.

        • deergomoo 14 hours ago |
          There’s still tons of new projects being started in PHP. Frameworks like Laravel and Symfony are massive and actively popular.
          • tonyedgecombe 13 hours ago |
            Oops, I meant to refer to Delphi rather than PHP.
      • kijin 14 hours ago |
        The great thing about working with a non-hipster language or framework is that everything is incredibly stable. There's no need to worry about the latest update breaking something, or argue about which design pattern is more correct. All the tooling has been battle-tested for 10 years and will be supported for another 10 years. You just follow established best practices, build things, ship them, and focus on business.
      • AdrianB1 10 hours ago |
        My brother build something quick and dirty in Delphi for his company in 4 hours, back in 2016. It was supposed to be a stopgap for 3 months until the real developers (he is in infrastructure, but used to write in Delphi 25 years ago) will write a "proper" app. 3 years later the developers said it will take 3 months for 4 people to write it, so they were denied. App still running today. Company with over 1 billion in yearly sales.
    • jeroenhd 15 hours ago |
      Delphi is a funny one. Delphi applications certainly have a certain feel (and often instability) with them, but thanks to everything being a website now, they're incredibly fast and responsive compared to what we have now. Sure, they don't do fancy transitions and they look like someone wrote a Windows 8 theme for Windows 95, but when they work, they work.
      • neverartful 12 hours ago |
        "incredibly fast and responsive compared to what we have now"

        Agreed! Also, typically far lower memory usage.

      • odie5533 11 hours ago |
        Everything now is just a website in a bloated Chrome wrapper.
    • AlienRobot 14 hours ago |
      I toyed with Lazarus a bit and I honestly think it's insane it's not more popular. Instant build times for GUI. You want to add a plugin? Press one button to recompile the entire IDE. You can recompile the IDE from GTK to Qt. With one button. I think I'd prefer it over Qt Creator, for example, for building GUIs on Linux.

      The catch? I don't know Pascal, and there is no way to learn it. There are so many versions of Pascal that every tutorial you find will be about a different version. The GUI tutorials are for Borland Delphi, not Lazarus. There is no documentation or recipes for doing basic things, e.g. if you want to make a simple to do list CRUD that adds items to a list, you have no idea which widget is the correct list widget. Normally in this case you have a model-view list and a string list. Doing anything with lists that have columns is often a confusing nightmare, but and it becomes even more confusing with no documentation about it.

      On the forums, the recommendation is to just press F1 in the source code editor to read the documentation for a function, but that doesn't help you when you have no idea what function you need to call, and you won't know it often. How do you append an item to an array, for example. How do you REMOVE an item. Is there a splice function? A remove function? Where are the dynamic arrays. Is there something like classes, and if not, how are you supposed to organize objects that you want to instantiate. How the lifetime of things work. Every time you ask "is this the correct way to do it using this tool?" you'll have no answers. How do you structure your project? It's completely different from how modern languages work and from how even C works.

      • graemep 12 hours ago |
        I am in exactly the same position. It looks interesting but it seems very much oriented towards people who already know pascal and/or are maintaining legacy systems.
      • odie5533 11 hours ago |
        Never heard of Lazarus before. I used Delphi back in the day. Now I want to again!
      • KronisLV 25 minutes ago |
        This seems like a decent starting point: https://castle-engine.io/modern_pascal

        > Why: There are many books and resources about Pascal out there, but too many of them talk about the old Pascal, without classes, units or generics. So I wrote this quick introduction to what I call modern Object Pascal.

    • mvdwoord 12 hours ago |
      I have had plenty fun and made good money writing KiXtart, VBScript, a variety of outdated shells and niche product specific DSLs etc etc. Also had great fun reversing VB6, and remember there was a wonderful VB6 decompiler from Russia with which I spent more hours than I care to admit.

      Beauty in languages or tool chains is one thing, but the satisfaction of solving an issue for someone within some weird constraints for whatever reasons is real.

    • YeGoblynQueenne 8 hours ago |
      I'll add a number 4:

      5. Poor coding practices can produce unmaintainable code in any language.

      The pain of the maintenance programmer is caused by the implementation programmer, not the implementation language.

    • bvan 7 hours ago |
      Absolutely agree. Software development is, in real-life, a means to an end. A tool first and foremost. VB6 and its excellent tooling allowed many to develop high quality tools and solutions which got the job done. VB6 was accessible, and well supported. Too bad it’s no longer around.
  • stef-13013 17 hours ago |
    It does the job, so "Who Cares?"
  • jonatron 17 hours ago |
    I know someone that still has a VB6 job. It's apparently repetitive and they haven't had a new client for many years, but I guess it'll continue until their clients don't need the software.
  • peteforde 17 hours ago |
    In the late 90s, I was a member of Microsoft's MVP program for VB6 and later IIS/ASP. Having used every version of VB (including DOS) I was one of the many who was furious when they petulantly refused to commit to updating VB6 on a parallel track. At one point there was a significant number of us with a petition, and they basically told us to pound sand...

    So, I did. This was literally the push I needed to switch to open source tooling, and it put me in the right time and place to be a Rails early adopter.

    I downloaded XYplorer mostly out of curiousity, and it's actually so fast that I am slightly shocked to say that I might be switching to it.

  • zvrba 16 hours ago |
    Recently I wished for "VB for Web". Something that'd make it easy for a tech-competent, but a non-programmer, person to prototype a functional web application.
  • dalemhurley 16 hours ago |
    Your article hits the nail on the head. I loved programming for VB6, VBA and VBScript.

    PHP has the same issue, it is awesome and powerful but gets a bad rep because the versions before 2004 had issues and the low barriers to get started means beginners love PHP.

  • pjmlp 15 hours ago |
    While VB.NET 1.0 had indeed lots of compatibility issues with VB 6, most of them were fixed in later versions, so I wonder why not at least VB on .NET Framework (Core brings quite a few compatibility issues)

    I do know VB since VB 3.0 days, did quite a couple of VB 6 to VB.NET, and VB.NET to C# portings, so it isn't like I don't know the subject.

  • pantulis 15 hours ago |
    I think it was Joel Spolsky who said that the sweet spot with VB was throwing seasoned C++ programmers at it, and that became a huge productivity boost to the teams. I think this goes to say that the bad name of VB6 is due to its lower entry barrier, which made it easy for beginner devs to deliver terrible software.
  • ximeng 15 hours ago |
    https://photodemon.org/ is a photo editing tool written in VB6
  • summarity 14 hours ago |
    Can't mention VB6 without one of the biggest archives of source-available software for it: https://github.com/Planet-Source-Code

    On the topic of "wait what that's VB6", here's an entire 3D modeling and rendering suite in pure VB6: https://github.com/Planet-Source-Code/kaci-lounes-a-3d-digit...

  • rbanffy 14 hours ago |
    VB was the he first viable way to easily tap the “business programmer” who was writing code in Clipper for building competent-looking GUI applications. Along with Windows for Workgroups, it was a game changer for Windows in small businesses who could now afford bespoke Windows applications.

    Other options all had their quirks that made their apps look out of place on Windows. It was easy to say an app was built with Delphi or FoxPro. VB apps just looked like Microsoft apps and felt perfectly at home.

    I remember how easy it was to even get the 3D look popularised by Office in VB apps.

  • movetheworld 11 hours ago |
    I love XYPlorer, it's my favorite program and I use it every day.
  • RaiausderDose 9 hours ago |
    Seems cool, I'm using free commander and need 2 vertical panels, because of the ease of coping files.

    I guess I skipped this app before because on the screenshot it looks like it just has one panel. But after trying it out, it has "dual pane" mode, so I will give this a shoot.

  • layer8 7 hours ago |
    > No multi-threading

    That isn’t quite correct, because you can take the address of a VB6 procedure and pass it to win32 CreateThread. See the related chapter in Hardcore Visual Basic for example. And of course you can use win32 mutexes and such. Thanks to the win32 interoperability, there aren’t a lot of limits of what you can do in VB6.

  • bdeshi 7 hours ago |
    nice to see this on hn. the dev has just announced[1] start of codebase migration from vb6 to twinbasic which should negate all of the cons described in the article.

    xyplorer has been providing partial compatibility with 64-bit windows shells by way of some "sidecar" executables, which act like hosts for 64-bit shell extensions, thumbnailers, and whatnot.

    iirc some of these sidecar tools were originally written in autohotkey; now that's another interesting language.

    [1]: https://www.xyplorer.com/xyfc/viewtopic.php?t=28273