twinBASIC Update: February 25, 2024

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:


Highlights

Reduced Memory Consumption

The release of BETA 454 came with two key improvements:

  • significantly reduced WebView2 memory pressures when editing large documents
  • (IDE) reduction in RAM leaks during editing sessions

As for some of the other project priorities, Wayne addressed that in a Discord comment:

As already mentioned, there will be a big push on UI finishing work, including MDI forms in March.  Hang on in there...  we need reasonably solid foundations to build everything else upon.    I understand it's frustrating when you see that the issues that matter most to you don't seem to be getting attention.  I'm constantly performing a juggling act to try to keep everyone happy.  Perhaps I should join the circus. 😂

Please appreciate that everyone has different priorities/wants/needs, and I'm trying my best.

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:

Introduction

The General channel covers a wide range of topics related to the development of the new programming language twinBASIC, including discussions around new features, bug fixes, compatibility with VB6, and more.

Key Points

  • There was discussion around getting multiple windows to show in the taskbar, replicating VB6 behavior. A bug was found where setting WS_EX_APPWINDOW had no effect.

  • Nested loops reusing the loop variable were discussed, which is allowed in twinBASIC but not VB6. The reasons behind VB6's restrictions were debated.

  • Several bugs were reported and fixed relating to IDE shortcuts, error messages, and project loading issues.

  • There was much debate around focusing twinBASIC's development on finishing VB6 compatibility versus working on new features. Overall the project aims for a balance between the two.

  • A new VIP Gold sponsorship tier was announced to help fund development. Its pricing and benefits were discussed.

  • Significant work was done investigating pointer syntax to call APIs and implement features like vbNullPtr. This enables passing null pointers to byref arguments.

  • The channel reached 500 members, showing the growing interest in twinBASIC.

Conclusion

Over the past week, the conversations highlighted twinBASIC's progress in bug fixes and new features, while also revealing there is still much work to reach the goal of high VB6 compatibility. The team continues to balance adding new capabilities with finishing the VB6 fundamentals. With the community's continued growth and feedback, twinBASIC is steadily marching towards its version 1 release.

Around the Web

Explorer Browser Custom View

From fafalone's announcement in the Discord show-and-tell channel:

I've posted a twinBASIC x64 compatible port of my VB6 project showing how to use IResultsFolder in IExplorerBrowser to display a set of search results. This gets you the fancy file display shown with only a few lines of code.

Check out the GitHub project for details:

GitHub - fafalone/ExplorerBrowserCustomView: Display search results or other custom file set in IExplorerBrowser
Display search results or other custom file set in IExplorerBrowser - GitHub - fafalone/ExplorerBrowserCustomView: Display search results or other custom file set in IExplorerBrowser

Direct2D/DirectWrite Samples

fafalone posted a 64-bit-compatible twinBASIC port of The trick's Direct2D effects samples over on GitHub at the D2DSamples project:

GitHub - fafalone/D2DSamples: Ports of The trick’s Direct2D examples
Ports of The trick’s Direct2D examples. Contribute to fafalone/D2DSamples development by creating an account on GitHub.

The project also uses fafalone's WinDevLib Windows API development library, rather than directly relying on typelibs.

Here are a few sample screenshots.  Check out the GitHub project for more.

Multiplicity 2: Waynes Whirled

The key to unlocking productivity in any situation is to identify the biggest bottlenecks and systematically eliminate them.

For twinBASIC, the biggest bottleneck has been the paucity of Waynes.  As Fred Brooks taught us in The Mythical Man Month, you can't boost productivity on a software project by throwing more people at it.  But as Harold Ramis taught us in Multiplicity, you can boost productivity if you throw more of the exact same person at a project.

Now, Ramis was able to bring his idea to life through the magic of the silver screen.

This raises the question, what tool do we have at our disposal to generate extra Waynes?  Why, twinBASIC itself, of course!  

In fact, jpbro already has the problem 90% solved, as he shared on Discord:

All that's left to do is implement one simple method: WaynePhillips.Clone.

How hard can it really be?  

["Paging Dr. fafalone, you're needed in the surgical wing..."]

Changelog

Here are the updates from the past week.  You can also find this information by visiting the GitHub twinBASIC Releases page.

Releases · WaynePhillipsEA/twinbasic
Contribute to WaynePhillipsEA/twinbasic development by creating an account on GitHub.

ChatGPT Changelog Summary

* Auto-generated via ChatGPT, sorted in order of ChatGPT's opinion of "most impactful changes."

  • Improved: Enhanced sensitivity for panel movement in the IDE and fixed issues with disappearing docked panels to prevent accidental layout changes.
  • Fixed: Implemented missing IDE shortcuts for copy (CTRL+INSERT), cut (SHIFT+DELETE), and find (CTRL+F3, SHIFT+CTRL+F3) operations.
  • Fixed: Corrected issues with displaying twinBASIC version information in the OS titlebar and fixed cursor icon inaccuracies in the form designer.
  • Improved: The IDE now detects infinite compiler crash-restart loops and automatically switches to SAFE mode to avoid disruption.
  • Added: Introduced a new IDE command (tbFindWidget_Hide) bound to the ESCAPE key for enhanced navigation.
  • Improved: Reduced memory usage by WebView2 when editing large documents and decreased RAM leaks during extended editing sessions.

WARNING: The following issues are present in BETA builds 424 - 454 (the latest build as of publication):

BETA 453

  • improved: tweaked the docking/floating panel movement sensitivity to try to avoid accidental changes [ fafalone, discord ]
  • improved: tweaked the floating to docked panel implementation to try avoid the case of the dissapearing panels [ fafalone, discord ]
  • fixed: added missing IDE shortcuts CTRL+INSERT (Copy), SHIFT+DELETE (CUT), CTRL+F3 (tbEditor_FindSelectedNext) SHIFT+CTRL+F3 (tbEditor_FindSelectedPrev) [ wqweto, discord ]
  • fixed: real OS titlebar caption did not show twinBASIC version information [ sokinkeso, discord ]
  • fixed: cursor icon not always correct when moving a control in the form designer [ sokinkeso, discord ]
  • improved: infinite compiler crash-restart loop now gets detected and the IDE will auto switch to SAFE mode [ fafalone, discord ]

BETA 454

  • improved: VIP gold supporter logos now link to their respective websites
  • improved: space character is now expected between attributes combined witha comma (auto prettified) [ fafalone, discord ]
  • added: IDE command tbFindWidget_Hide, default assigned to ESCAPE key [ Krool, discord ]
  • fixed: ALT+F4 keybinding to IDE command tbIdeWindow_Close was missing [ wqweto, discord ]
  • fixed: stick-scroll feature would sometimes not show semantic highlighting
  • improved: significantly reduced WebView2 memory pressures when editing large documents
  • improved: (IDE) reduction in RAM leaks during editing sessions