twinBASIC Update: December 30, 2024
Highlights include the 2024 Year in Review for twinBASIC along with several minor bug fix releases to address regressions introduced in last week's major BETA release.
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 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:
- Custom twinBASIC IDE Installation Guide
- twinBASIC Discord Server (chat about the project)
- twinBASIC Wiki (list of new features not in VBx)
- GitHub Issue Tracker (report bugs)
- twinBASIC/VBx LinkedIn Group
Highlights
Regression Fixes
This was a quiet week, both in terms of new features and Discord conversation. This was to be expected with Christmas falling on Wednesday and Wayne dropping a major release on Christmas Eve (which I covered in last week's update).
There were actually a fair number of small releases this week, most of them addressing various regressions that popped up as a result of the major experimental feature release on Tuesday.
Expect additional small releases over the next few weeks as Wayne recovers from the intense development work over the past two months and continues to play Whack-A-Mole with the associated regressions.
Discord Chat Summary
* Auto-generated via Claude-3.5-Sonnet-200k on poe.com
Overview
The week's discussions centered around the release of twinBASIC BETA 624, with significant focus on UserControl implementation and compatibility issues. Community members reported various bugs and compatibility challenges, particularly with control arrays and project imports. The period showed active engagement around the Christmas holiday, with both core team members and users working on technical issues.
Bug Reports & Technical Issues
- Several users reported issues with project imports and UserControls in BETA 623/624, with @waynephillipsea confirming that UserControls from active projects are temporarily disabled
- @forliny_44092 identified an issue with the VBCCR18 UpDown control requiring manual resync when switching between Win32/Win64 modes
- Control array handling bugs were reported, specifically regarding the Unload statement not properly updating array bounds
IDE & Development Progress
- @waynephillipsea acknowledged that breakpoint changes triggering full exports is a known behavior that may need optimization
- The team identified ContainedControls implementation as a key factor affecting tab control functionality
- Work continues on establishing proper 64-bit support for critical controls, with tab controls being a current priority
Community Support & Documentation
- Multiple new users sought clarification about twinBASIC's compatibility with VB6, confirming they can be installed side-by-side
- @bclothier provided guidance on bug reporting practices, clarifying the distinction between Discord and GitHub issue reporting
- An interesting discussion arose about AI platforms' knowledge of twinBASIC, highlighting some misconceptions about the project's origins
Control Development
- @sokinkeso announced plans to complete the SSTabEx control once UserControl functionality is fully restored
- @eduardovb reported an important update to the NewTab control, including property name standardization changes
- @waynephillipsea identified the root cause of tab control issues related to unimplemented ContainedControls functionality
Conclusion
The week demonstrated continued progress on core functionality despite the holiday period, with particular emphasis on control implementation and bug fixes. The community remains actively engaged in testing and reporting issues, while the development team maintains focus on critical components like UserControls and tab functionality. The systematic approach to addressing these challenges suggests steady progress toward stable implementations of key features.
Around the Web
2024 Year in Review
While we didn't get the v1.0 release we were hoping for this year, Wayne did make plenty of progress toward that goal. Here's an AI-generated recap of the year, based on the change logs from BETA 424 - 628:
The year 2024 marked a pivotal period in twinBASIC's evolution as it marched steadily toward its first stable release.
Throughout the year, Wayne Phillips and the development team delivered over 100 beta releases, dramatically improving the IDE's performance, enhancing ActiveX control support, and introducing sophisticated new features like MDI forms and reporting capabilities. Key architectural improvements included a complete rewrite of form engine internals, significant memory optimization, and enhanced COM interoperability, setting the stage for the upcoming v1.0 release.
With the v1 release candidate builds expected to start appearing in early 2025, twinBASIC is positioned to deliver on its promise of modernizing Visual Basic while maintaining complete backwards compatibility with VB6 and VBA codebases.
January 2024
- Core Language Improvements
- Added C static library support for direct use of LIB/OBJ files
- Improved codegen resulting in 20-30% code size reduction
- Added experimental support for local variable type inference using
As Any
- Enhanced If() operator function performance for basic types
- IDE Enhancements
- Implemented flexible docking panel system
- Added comprehensive keyboard shortcut customization (~300 commands)
- Added inline runtime-error monaco widget
- Added support for individually hiding left/right/bottom dock panels
- Added grayscale effect when IDE loses focus
February 2024
- Development Tools
- Added library tracing capabilities with Debug.TracePrint
- Added unique compiler error IDs
- Enhanced type library parsing
- IDE Improvements
- Added WEBPAGE panel for embedded web content
- Improved semantic highlighting performance
- Enhanced intellisense sorting algorithm
- Added timestamp support for Debug Console
- Improved Light theme contrast
- Performance
- Reduced memory consumption for large projects
- Optimized form designer rendering
March 2024
- ActiveX/COM Support
- Added type library versioning with auto-increment
- Added support for
[NonBrowsable]
attribute - Improved compatibility with windowless ActiveX controls
- Enhanced UserControl focus handling
- VBx Compatibility
- Added DeclareWide support for Unicode DLL calls
- Improved type library GUID handling
- Diagnostic Tools
- Added comprehensive trace logging system
- Added date/time placeholders for logs
April 2024
- Core Language Features
- Added Emit() for direct assembly injection
- Added EmitAny() for flexible value emission
- Added StackOffset() intrinsic function
- Added naked procedure definitions
- IDE Improvements
- Added experimental object view for Project Explorer
- Enhanced project loading with tab restoration
- Added panel feature locking
- Development Tools
- Added warning system for unused variables/parameters
- Enhanced property sheet categorization
May 2024
- Core UI Features
- Added full MDI form support
- Added ImageList control with PNG transparency
- Implemented universal opacity and transparency keys
- VBx Compatibility
- Added support for MDI child window management
- Enhanced form designer compatibility
- Development Tools
- Added StartUpPosition support for MDI children
- Improved form designer grid options
June 2024
- VBx Compatibility
- Added CommandButton Default/Cancel properties
- Added Label vertical alignment
- Added Label line spacing
- Development Tools
- Enhanced compiler diagnostics categories
- Added multi-line support for tooltips
- Improved attribute handling
- IDE Improvements
- Enhanced property sheet editing
- Improved form designer responsiveness
July 2024
- New Controls
- Added Reports feature with visual designer
- Added QRCode control
- Added CheckMark control
- Added gradient fill styles for Shape controls
- UI Enhancements
- Added Image.Angle property
- Added Shape.Angle property
- Added Label.Angle property
- Added BorderCustomOptions support
- Development Tools
- Added TbExpressionService for data binding
- Enhanced form designer with mini toolbar
September 2024
- Core Architecture
- Major form engine rewrite for improved efficiency
- Reduced ActiveX control extender codegen size
- Added experimental delegate syntax support
- VBx Compatibility
- Enhanced form/control loading sequence
- Improved IDispatch implementation
- Better legacy OS support
- IDE Improvements
- Improved control instantiation
- Enhanced serialization support
October 2024
- VBx Compatibility
- Refined focus handling to match VB6
- Enhanced GotFocus/LostFocus event handling
- Development Tools
- Enhanced compiler diagnostics for delegates
- Improved AddressOf support for return types
- IDE Improvements
- Added Watch panel keyboard shortcuts
- Enhanced debugger stability
November 2024
[No releases this month - major internal development work]
December 2024
- IDE Improvements
- Enhanced keyboard handling with OEM physical keys
- Improved form designer performance
- Reduced UI/GDI leaks
- VBx Compatibility
- Enhanced control array handling
- Improved type library generation
- Fixed critical UserControl initialization
- Development Tools
- Enhanced LBound/UBound compile-time checks
- Improved array bounds validation
Changelog
Here are the updates from the past week. You can also find this information by visiting the GitHub twinBASIC Releases page.
AI-Generated Changelog Summary
* Auto-generated via Claude-3.5-Sonnet, sorted in order of its opinion of "most impactful changes."
Here's a summarized changelog for the recent twinBASIC updates:
-
Form Designer Enhancements
- Improved overall performance and responsiveness
- Fixed GDI resource leaks during editing
- Resolved several menu option failures including 'center in container'
-
Runtime Behavior Improvements
- Control array
LBound
/UBound
properties now properly update when elements are unloaded - Form and UserControl initialization events now work as expected
- Added compile-time validation for array bounds checking functions
- Control array
-
Type Library Generation
- Fixed parameter naming conventions in generated typelibs to match VB6
- Corrected handling of UDTs containing array members of other UDTs
- Improved Windows 7 x64 compatibility
-
IDE Experience Updates
- Keyboard shortcuts now properly map to physical OEM keys
- Resolved 64-bit mode switching issues on Windows 7
WARNING: The following issues are present in BETA builds 623 - 628 (the latest build as of publication):
- IMPORTANT: This is an interim/experimental release. It includes significant changes, so some instability is to be expected. [Editor's Note: Rolling back to BETA 622 may be necessary until the BETA 623+ version stabilizes or if any of the KNOWN ISSUES below affect your project.]
- KNOWN ISSUE: UserControls from the ACTIVE project will not appear correctly in the form designer in this release (they are purposely disabled until next release). Packaged controls, such as VBCCR will work.
- KNOWN ISSUE: Menus currently not appearing in MDI Forms (broken in this build)
- KNOWN ISSUE: 'Scale*' properties are often not settable in the IDE property sheet (broken in this build)
- KNOWN ISSUE: Setting Width/Height via the property sheet often does not work correctly (broken in this build)
- KNOWN ISSUE: Controls are not being destroyed properly by the form designer, causing big memory leaks (broken in this build)
- there are known memory leaks in these versions, so memory usage will be higher than at the Version 1.0 release
BETA 624
- fixed: (regression in BETA 623) hDC property not giving a valid value in the UserControl Initialize event [ Tecman, discord ]
- fixed: hard compiler crash when encountering some
Const
statements [ KemoHena / TinyGFX, discord ] - fixed: hard compiler crash when opening a particular form [ KemoHena / iICO, discord ]
- fixed: (regression in BETA 623) Form_Initialize event was not always firing
- fixed: (regression) couldn't call UC custom methods from within the Form_Initialize event
- fixed: prevented a possible recursion in UserControl Resize event
BETA 625
- fixed: some form designer UI/GDI leaks during editing
- improved: some performance issues with the form designer (more to come soon) [ sokinkeso, discord ]
BETA 626
- improved: some form designer performance issues
BETA 627
- fixed: IDE keyboard shortcuts are now based off OEM physical keys [ Tecman, discord ]
- fixed: (regression in recent BETAs) some form designer menu options failing (such as 'center in container')
- fixed: control array LBound/UBound properties were not updated when an element is unloaded at runtime [ franic, discord ]
- fixed: generated typelib resources would use unconventional {retval} symbol for out-retval parameter names [ https://github.com/twinbasic/twinbasic/issues/1976 ]
- fixed: (regression since BETA 623) IDE would fail to change to 64-bit mode on Windows 7 X64 [ https://github.com/twinbasic/twinbasic/issues/1975 ]
BETA 628
- fixed: (regression) UDTs containing member types that are arrays of other UDTs would not be outputted correctly in generated type libraries [ kimpos, private ]
- improved: LBound/UBound now do compile time sanity checks to make sure the passed argument is, or could possibly be, an array [ kimpos, private ]