twinBASIC Update: September 1, 2026

Highlights include a twinBASIC shout-out from an ignominious source and the anticipated release of LLVM compiler optimization integration.

twinBASIC Update: September 1, 2026

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. (And I was oh so close...) 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 Monday week, 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, please leave a comment below.

Here are some links to get involved with the project:


Highlights

No New Delays Announced

The long-awaited LLVM beta launch is still presumably due out this Friday, September 4. As a reminder, LLVM is the platform twinBASIC is using for compiler optimizations. Once this new feature lands, twinBASIC applications should start seeing performance improvements over the same code written in VB6 (generally speaking).

This remains the most recent update on the projected release date of the twinBASIC LLVM beta addition.

That's still the latest projected date from Wayne Phillips. There were no additional delays announced–nor confirmations provided–with respect to that date.

So, either this is a case of "no news is good news" and the new feature will launch on schedule or "absence of evidence is not evidence of absence" and the feature launch will be delayed, but Wayne simply hasn't announced that yet.

I guess we'll know which by next week's update.

Discord Chat Summary

* Auto-generated via Claude Sonnet 5.

Overview

This week's discussion centered on a deep technical exploration of VB6 Collection internals, prompted by community efforts to add a fast "Exists" style lookup without relying on error-trapping. Alongside that, contributors traded IDE debugging bugs (a BindToArray RC5/RC6 inconsistency, native exceptions, and IDE memory crashes), FPU-related runtime behavior, and practical advice on third-party grid controls for VB6 migration. Engagement was steady and highly technical, driven mainly by Tier 3 and Tier 5 members with occasional clarifications from Wayne Phillips.

Language Enhancements & VB6/COM Compatibility

  • wqweto demonstrated redefining Collection's default interface (IVBCollection) with PreserveSig-style non-raising methods so Item/Remove return an HRESULT instead of forcing error-object population, enabling a fast SearchCollection/KeyExists pattern without On Error Resume Next.
  • deletedewd ported the interface to tB's friendlier declare syntax and iterated on the KeyExists function, uncovering and fixing an object-leak bug caused by tB's [out] parameter handling ("tB absolutely hates [out] parameters and overwrites them with impunity!").
  • Follow-up exchanges (wqweto, bclothier, krool5045) clarified that IsObject is the correct check over VarType since VarType evaluates default properties, and that IsObject returns False for pure IUnknown (VT_UNKNOWN) implementations—fafalone summarized: "Object basically means IDispatch."
  • deletedewd later refined the function further, using pointer-swapping via a lightweight PtrOps helper to avoid deep-copy overhead when transferring strings/arrays out of Variants, calling it "the closest you can get to C programming in VB6."

IDE & Debugging Issues

  • yereverluvinunclebert_49972 tracked down a subtle inconsistency between RC5 and RC6 in BindToArray: RC5 throws a "subscript out of range" error only inside the IDE (not when compiled), while RC6 locks the array correctly and avoids the issue. The repro was shared for consideration in the RC6-reimplementation effort per jpbrown's request.
  • The same investigation surfaced a native ACCESS_VIOLATION exception tied to third-party PSD-parsing code, alongside a licensing prompt anomaly requiring key re-entry.
  • Wayne Phillips confirmed the license key is stored in the registry and "shouldn't generally need to be re-entered," suggesting the issue was environment-specific.
  • fafalone noted a recurring "Out of Memory" IDE crash pattern tied to insufficient save intervals, a known pain point for larger projects.

Runtime Behavior & FPU Notes

  • twixydon asked why CDbl(1/0) and CLng(1/0) return 1.#INF and -2147483648 respectively instead of raising a Division by Zero error.
  • Wayne Phillips explained this occurs when FPU error checks are turned off, resolving the question directly.
  • .grandpam_in_fl suggested this behavior should be called out explicitly in the documentation to avoid future confusion.

Third-Party Controls & VB6 Migration

  • braja_07733 asked about the VB FlexGrid Control 1.8 package as a ComponentOne VSFlexGrid replacement, citing missing row/column drag and hierarchical (TreeView-like) display features.
  • fafalone recommended vhGrid or LynxGrid (both usable in tB via a subclassing method swap) and shared a modified LynxGrid test project; also pointed to the commercial iGrid, noting it targets tB specifically with a 64-bit build.
  • krool5045 pointed to a VBForums example demonstrating simulated hierarchy and drag functionality using DragRow/DragCol in VBFlexGrid.

Low-Level Debugging Techniques

  • fxl447098457 and fafalone discussed using Sysinternals DebugView to capture debug output from OutputDebugString/DbgPrint in real time without attaching a debugger, including kernel-mode drivers.
  • fafalone showcased using DbgPrint/DbgPrintEx from user mode in tB via cdecl-compatible declares, enabling printf-style formatted output—though noting the Variant-API-based implementation currently prevents this technique in kernel mode.

Conclusion

The week's most substantial thread was a collaborative deep dive into COM Collection semantics, showing how tB and VB6 diverge in subtle but important ways around [out] parameters, Variant handling, and interface marshaling. Combined with concrete IDE bug reports (BindToArray inconsistency, native exceptions) and practical migration guidance for VB6 grid controls, the discussion reflects the community's continued focus on compatibility fidelity and performance as tB approaches its v1 milestones. Contributions from Wayne Phillips on FPU behavior and licensing helped resolve smaller but user-impacting questions, reinforcing steady forward momentum on both language internals and everyday developer experience.

Around the Web

"Twin bah SEE" Gets an AI Slop Shout-out

You know it's a slow newsweek when I'm posting links to stuff like this, but I still can't figure out how the AI text-to-voice is butchering the pronunciation of twinBASIC this badly:

"Initiatives have also emerged in the community that try to recover lost continuity. One of the best known is twin bah SEE, a modern project that aims for very high compatibility with vivver and veebuh projects."

I mean, "twin bah SEE" is clearly "twinBASIC" and "veebuh" is almost certainly "VBA." But I have no earthly idea what "vivver" is supposed to represent.

Here's how not to make a video with AI:

NOTE: the link above and embedded video below should both start at the 33:50 mark; I can't subject you to 45+ minutes of that drivel

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.
  • No new releases this week.
  • Next release is tentatively scheduled for September 4, 2026.

All original code samples by Mike Wolfe are licensed under CC BY 4.0