twinBASIC Update: October 8, 2023

Highlights include debug-time evaluation of expressions on mouse hover and an x64-compatible version of sokinkeso's tB IDE addin, Usercontrol Builder.

twinBASIC Update: October 8, 2023

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

This was a relatively quiet week with a handful of mostly bug fix releases.  As always, see the Changelog section below for details on each release over the past week.

Debugger Improvements

From the BETA 401 release notes:

[H]overing over a function call with arguments whilst debugging should now evaluate the full function call expression

Notes from Wayne

Wayne Phillips dropped the following noteworthy nuggets in the Discord chat:

In case you are not aware:
1) type alias support is planned (within tB syntax)
2) in tB there is a project setting for changing all DLL entry points from normal late-bound, into early-bound (therefore making them the same as TLB defined DLL entry points)
3) you can use tB packages to do the same thing I'm not trying to force anyone to use tB syntax instead of TLBs, but it does make life a lot easier, in general, to keep everything in tB syntax.

Discord Chat Summary

* Auto-generated via Claude-2-100k on poe.com

General Channel

Here is a summary of the key points from the 7-day Discord chat transcript about the development of twinBASIC:

twinBASIC is an open source project led by Wayne Phillips that aims to recreate the Visual Basic 6.0 environment with a native 64-bit compiler. Over the past week, the conversations focused on new features, bug fixes, comparisons to VB6, and future plans.

  • New beta releases included bug fixes, hover evaluation of function calls in the debugger, and a user control builder add-in.

  • Some API declarations were updated for 64-bit compatibility. The tbShellLib package was highlighted as a source of 64-bit API declarations.

  • There were discussions around default events in user controls and specifying 32-bit vs 64-bit type libraries.

  • OpenGL support was brought up as an area for future improvement, along with image support for PictureBox and Form.

  • Wayne gave an update that progress had slowed due to family and other commitments, and the community expressed appreciation for his dedication.

Overall, good progress continues to be made on recreating the VB6 environment in a native 64-bit compiler. The discussions demonstrated a collaborative community supporting the project and pushing it forward. While some key features are still in development, twinBASIC already provides an impressive development experience.

twinBASIC IDE Add-ins Channel

Here is a summary of the key points from the Discord chat transcript about twinBASIC IDE add-ins development over the past week:

  • User @fafalone demonstrates a bug when inserting text containing a comment block (/* */) without a trailing newline. It causes the line after the comment to be deleted one character at a time.

  • The issue is reproducible by simply typing that text pattern into the IDE.

  • @waynephillipsea confirms being able to reproduce the bug.

  • The cause is identified as likely an off-by-one error in the IDE's prettifier, which is responsible for removing extra spaces. Specifically, there is a rule to allow only one space after a comment block end (*/) before the next symbol.

  • The prettifier is not a full tokenizer, just a formatting pass.

  • The bug appears to be related to the prettifier's handling of space removal after comment blocks.

  • The fix is expected to be relatively straightforward.

Overall, the key points cover the bug report, reproduction steps, root cause analysis, and expected resolution of the IDE comment block text insertion bug.

Around the Web

Usercontrol Builder BETA 3 Released

Over on the Discord server's show-and-tell channel, sokinkeso released BETA 3 of his twinBASIC IDE Add-in, Usercontrol Builder.

Here's a link to the announcement and a list of his changes:

  • Fixed: codebuilder falsely inserts to all properties the last selection of RunTimeState and DesignTimeState
  • Fixed: Design Time state error raising, not imported correctly
  • Added: Settings page
  • Improved: AddinSettings goes global
  • Improved: WriteLog goes global
  • Added: More Log points
  • Fixed: code not declared to run on x64
  • Improved: x64 version compiled successfully !
  • Fixed: Code not imported when ActiveX control template was used (@fafalone)

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."

Here is a summary of the significant updates to twinBASIC:

  1. Improved Debugging Experience: Enhanced the debugger to evaluate the full function call expression when hovering over a function call with arguments.

  2. Added Memory Management Features: Introduced [_HiddenModule].GetMemPtr and [_HiddenModule].PutMemPtr to broaden the functionality of existing memory management options.

  3. Fixed Key Functionality: Resolved issues with UserControl.Refresh when Windowless property is set to True, ensuring the UI behaves as expected.

  4. Improved IDE Compatibility: Addressed some filesystem differences that prevented the twinBASIC IDE from running on Windows-on-Arm systems.

  5. Fixed Debugger Crashes: Fixed an issue where hovering over an object variable in debugging could cause a crash if the object doesn't support IDispatch.

  6. Fixed Control Properties: Addressed issues with FileListbox.Selected and Frame.Enabled properties to ensure they work correctly under specified conditions.

  7. Resolved Regression Issue: Fixed a regression where DefaultDesignerEvent attribute was being ignored for some controls.


WARNING: The following issue is present in BETA builds 202 - 3xx (the latest build as of publication):

  • there are known memory leaks in these versions, so memory usage will be higher than normal

BETA 400

  • fixed: UserControl.Refresh not working when Windowless property is set to True
  • fixed: some filesystem differences in Windows-on-Arm that prevented tB IDE from running [ Aliensoft, discord ]
  • fixed: misleading 'CDecl' calling convention being reported on Win64 type library viewing [ Digimaloko, discord ]
  • fixed: some initial issues identified with Windowless UCs [ fafalone, discord ]
  • fixed: bizarre edge case in prettification of inline comment blocks [ fafalone, discord ]

BETA 401

  • fixed: FileListbox.Selected (property-let) not working correctly when MultiSelect = False [ nextKast, discord ]
  • fixed: Frame.Enabled (property-let) could cause a frame border to be drawn even when BorderStyle is None [ sokinkeso, discord ]
  • fixed: hovering over an object variable when debugging could cause a debugger crash if the object doesn't support IDispatch [ AlienSoft, discord ]
  • improved: hovering over a function call with arguments whilst debugging should now evaluate the full function call expression [ AlienSoft, discord ]

BETA 402

  • fixed: (IDE) code selector dropdown scrolbars are now visible [ fafalone, discord ]
  • fixed: (IDE) auto case-correction of datatype symbols used outside of procedures not working [ Tecman, discord ]

BETA 403

  • added: [_HiddenModule].GetMemPtr to expand upon existing GetMemX offerings
  • added: [_HiddenModule].PutMemPtr to expand upon existing PutMemX offerings
  • fixed: coercing Image control to IPictureDisp was causing a hard crash [ nextKast, discord ]
  • fixed: reading form hDC property before the form was loaded would result in zero being returned [ fafalone, discord ]

BETA 404

  • fixed: (regression) DefaultDesignerEvent attribute was being ignored for some controls

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