On April 23, 2021, I helped Wayne Phillips introduce the world to twinBASIC at the Access DevCon Vienna conference. I boldly predicted that twinBASIC (along with the Monaco editor) would replace VBA and its outdated development environment by 2025. With that goal in mind, this weekly update is my attempt to keep the project fresh in the minds of the VBA development community.
Every Sunday, I will be providing updates on the status of the project, linking to new articles discussing twinBASIC, and generally trying to increase engagement with the project. If you come across items that should be included here, tweet me @NoLongerSet or email me at mike at nolongerset dot com.
Here are some links to get involved with the project:
- Custom twinBASIC IDE Installation Guide
- GitHub Issue Tracker (report bugs)
- twinBASIC Discord Server (chat about the project)
- twinBASIC/VBx LinkedIn Group
twinBASIC Roadmap Updated
Wayne updated the twinBASIC roadmap this week for the first time since June.
The bad news is the v1 release date has been pushed back to July 1, 2024 (was previously January 3, 2024).
The good news is that:
- The project continues making steady progress
- v1 Release Candidate builds are scheduled for Q2 2024 (April - June)
- Edit & Continue support will now be available with v1 (previously this was a post-v1 feature)
- Limited vbWatchdog support will be available with v1 (full support will be implemented shortly after the v1 release)
- Wayne is not rushing out a half-baked product simply to meet an arbitrary deadline
- The IDE is getting a lot more love than I expected for the version 1 release
I think the last point is important.
As the saying goes, you only get one chance to make a first impression.
And, fair or not, software applications are disproportionately judged based on the physical appearance of their user interface. What Wayne has accomplished with the twinBASIC compiler is nothing short of amazing. That said, the official v1 release is likely to draw in a surge of tire-kickers interested in the new language. That audience, in particular, is likely to make a lot of assumptions about the language based purely on the development environment.
I have a hunch that Wayne came to a similar conclusion and that is why he prioritized some of the more advanced IDE features (like fully customizable layouts as described below) to be available at launch.
For posterity, here is the current state of the twinBASIC roadmap. As always, dates and features are subject to change:
- Add MDI Forms support
- Finalize UserContol / ActiveX support
- Finish all remaining basic controls
- Complete the missing App object methods
- Add Printer/Printers support
- Add the missing features to the new IDE, e.g. rename-refactoring and Test Explorer
- Finish LLVM support, for optimized builds
- v1 Release Candidate builds available within this period
VERSION 1 RELEASE
- Tentative Release Date: 1st July 2024
- Start Analysis Extension API
- Support full inheritance (#73)
- Add full vbWatchdog support
- Add multi-threading syntax support
- Start cross-platform support for x86/x64 Linux/Mac
- Start cross-platform support for ARM Linux/Mac/Android
- Start of reimplementation of all remaining VB6 shipped controls, such as Winsock, MAPI, Adodc, DataGrid, MSCOMM, etc
- Support ActiveX controls on tB forms with unmatched bitness, using a proxy-process (e.g. 64-bit app using a 32-bit ActiveX control)
Upcoming IDE Docking Features
From Wayne in Discord:
The docking feature has been completely rewritten. It is extremely flexible, and should accomodate our current and future needs (for things like multi code editor support). Additionally:
- all panels can now be closed/shown individually
- the toolbar is also now docked and movable
- dragging the title bar of a panel brings it into "floating" mode.
- Using the grab icon brings it back into docked mode
As seen in the video, there's a couple of quirks when going from floating mode back to docked mode, but these will of course be fixed before release
I think my favorite review of the upcoming docking feature came from Andrew Mansell (aka, mansellan):
Damn, that's sweet.
So wait... @WaynePhillipsEA looked at the docking system for VS2022 and thought: hold my beer.
New Default IDE Layout
Obviously, this is still a work in progress. But the new default layout for the twinBASIC IDE will look like this:
The good news is that this is just a starting point.
You will be able to save and restore custom layouts. You will also be able to restore the default layout in case you get yourself into trouble customizing things.
Once keybindings are introduced, you will be able to easily switch between layouts. This will let you, for example, have a development layout and a debugging layout that you can quickly switch between depending on what you are doing at the time.
Wayne: "Menus are now receiving some love..."
Discord Chat Summary
* Auto-generated via Claude-2-100k on poe.com
Here is a summary of the key points from the General channel transcript:
twinBASIC General Channel Summary
Over the past week, the twinBASIC team made significant progress on the IDE UI overhaul. New features were showcased including a rewritten docking system, movable toolbar, tabbed menus, and an updated default layout. Multiple screenshots and videos demonstrated the new capabilities.
- The new docking system is extremely flexible and will support future features like multiple code windows. Panels can be individually opened/closed, floated, and docked.
- The toolbar is now docked and movable. The layout leaves room for more buttons. Extra toolbars can be easily added.
- Menus received visual updates and now support tabs for better organization. More menu options will be enabled soon.
- The default IDE layout was tweaked based on feedback to expand the Problems pane and consolidate the Debug Console on the left. This will likely become the standard layout.
- Support was confirmed for passing Decimal types ByVal to APIs, enabling stopgap 32/64 bit support for UDTs like RECT until full ByVal UDT marshaling is implemented.
- Multiple IDE windows are planned for v1 now thanks to the docking system changes. At minimum a split view code editor is desired.
- The team continues to consider open sourcing parts of the project, starting with the IDE components first. Community feedback on licensing options was gathered.
Overall, rapid progress is being made to overhaul the IDE and prepare for the next major release. The team aims to provide a modern, flexible interface while retaining the familiarity of the Visual Basic origins. Community excitement is building in anticipation of the upcoming version.
Around the Web
twinBASIC Features List
The Features page is not new this week, but it did come up in the Discord chat. It's been a long time since I've linked to it, so I thought it was worth mentioning again.
The page is broken down into the following sections:
- Language Syntax
- Project Configuration
- Standard Library
- GUI components (e.g. controls and forms)
- Design Experience
The features listed are "new" in the sense that they do not exist in VBA/VB6.
RadioMan - Radio Management
fafalone is back with another twinBASIC sample project. Unlike many of his others, which have been twinBASIC ports of code originally written for VB6, the RadioMan project was written from the ground up in twinBASIC.
Here's his announcement from the show-and-tell channel of the tB Discord server:
This app exposes undocumented radio management functionality in Windows. I've always been a big fan of making your own settings apps, so don't like being told the official one is the only way to do something. The
IRadioCollectioninterfaces are documented, but the coclasses representing the system objects actually implementing them are not; they're just documented for hardware providers to provide. There's three of these I could find: the WWAN manager, which includes cellular radios, the WLAN manager, which includes WiFi radios, and the Bluetooth manager (self explanatory). These provide control over individual radios. I tested this app on my Surface tablet, where I had one of each. The app lets you control them all individually; you choose one on the list then can query, enable, or disable. Also available is the
IRadioManagerinterface that controls the master switch for all radios - 'Airplane Mode', you can also enable/disable this mode.
Here are the updates from the past week. You can also find this information by visiting the GitHub twinBASIC Releases page.
No new releases this week.