twinBASIC Update: February 11, 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

Option to Enable a Traditional Windows Title Bar

One of the things that has mildly annoyed me about the new IDE is the custom title bar.  I find it makes it unnecessarily difficult to move the IDE around on my screens, as the whole left side of the title bar consists of menus.  If I try to click and drag on the left side of the title bar, it would instead open whichever menu was under my mouse.

As of BETA 438, the following option ("IDE: Show real OS titlebar") is now available via Tools > IDE Options...

Custom Title Bar (default)

The screenshot below shows the default twinBASIC IDE title bar:

Standard Title Bar

Here's a screenshot of the twinBASIC IDE with the "IDE: Show real OS titlebar [√]" option enabled:

Judging by the reaction on Discord, I'm not the only user who found the above behavior at least mildly annoying.

Discord Chat Summary

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

General Channel

Here is a summary of the key points from the General channel transcript for twinBASIC development over the past week:

Introduction

The transcript covers general discussions about the ongoing development of the new programming language twinBASIC, which aims to be a modern successor to Visual Basic 6.

Key Points

  • Discussed how twinBASIC handles COM objects, coclasses, and interfaces compared to VB6, and how to properly implement COM classes in twinBASIC code.

  • Excited about the new real Windows titlebar option added in beta 438, though default color scheme needs tweaking. Dark mode helps aesthetics.

  • Debated best practices around backwards compatibility promises for twinBASIC syntax long-term, and exceptions for future language evolution.

  • Debugged issues getting legacy OpenGL code samples working relating to typelib type mismatches permitted in VB6 but not twinBASIC.

  • Added new VIP Gold lifetime subscription license option for twinBASIC.

  • Worked to fix IDE bugs and stability regressions introduced in recent builds. Focus is on addressing remaining v1.0 blockers.

  • Discussed potential future features like VBScript execution, unsigned integer types, and alias support.

  • Ported more VB6 code samples and libraries to twinBASIC, uncovering bugs.

Conclusion

Good progress made towards twinBASIC v1.0, with main focus on finishing implementation of VB6 compatibility features and addressing IDE bugs before release. Community very engaged in testing and discussing future of the language.

Docs Channel

Here is a summary of the key points from the twinBASIC Docs channel transcript:

Introduction

The transcript covers discussions related to documentation and install instructions for twinBASIC.

Key Points

  • Discussed adding a new FAQ entry to address false positives from antivirus engines when scanning twinBASIC executables. Wanted feedback on wording to avoid being too condescending to new users.

  • Finalized wording for the FAQ entry to clarify it refers to twinBASIC's executables rather than user-built apps. Also recommends excluding twinBASIC folders from antivirus scans.

  • Suggested the install instructions should warn about potential false positives and how to exclude folders from scanning.

  • Discussed frustrations around code signing certificates being required for things like drivers on Windows, and the weaknesses of multi-factor authentication in some online services.

  • Had an extensive off-topic discussion about security practices by various online payment platforms like PayPal.

Conclusion

The main outcome was finalizing docs to educate new users that false positives in a few antivirus engines is expected for twinBASIC and not an indication of actual malware. This should boost confidence for new adopters evaluating the language.

Around the Web

VIP Gold Perpetual (Lifetime) License Offer

Many people interested in twinBASIC have asked about a perpetual license option.

While this may not be exactly what people had in mind, there is at least now an option for a perpetual twinBASIC license.  Notably, this license would also include access to all future major releases of twinBASIC (e.g., v1.0, v2.0, v3.0, etc.).  That is beyond what most perpetual software licenses offer (and is priced accordingly).

For your convenience, I've reproduced Wayne's announcement on GitHub below:


We're introducing an exclusive opportunity: the VIP Gold Licence for twinBASIC. This isn't just any offer; it's a game-changer for those who are as passionate about twinBASIC as we are. 🚀

What's the VIP Gold Licence?

It's the most premium package yet, designed to provide you with unparalleled access and benefits, including:

  • Lifetime access to the best tier of twinBASIC (all updates, forever)
  • Priority consideration for your feature requests
  • Special recognition on our website and within the IDE
  • Exclusive swag pack (because who doesn't love swag?)
  • 20 hours of custom tB IDE/compiler development time tailored for you
  • And more!

Why should you care?

This is more than an exclusive licence; it's a chance to be part of twinBASIC's journey at the highest level. Plus, by opting for the VIP Gold Licence, you're not just getting an amazing deal; you're also supporting the final stages towards the v1 release. 🌈

Limited Availability

The VIP Gold Licence is a limited-time offer. Only a small number of licences are available to ensure that those who join this elite group get the attention and exclusivity they deserve.

Interested?

If you're as excited as I am and want to secure your VIP Gold Licence, or if you're curious and want to learn more, don't hesitate to reach out directly or visit our dedicated page at https://www.twinbasic.com/vip.html

We appreciate that this offer is not for everyone.  It's designed for those that can afford to invest in the future of twinBASIC to help us accelerate development plans in return for joining a very exclusive club with special benefits.


Attribute Syntax Discussion on GitHub

With the initial release of twinBASIC v1 on the horizon, there is renewed discussion around how to implement certain new language features, including attributes: Attributes syntax change.

One of the key missions of twinBASIC is to provide 100% backwards compatibility with VB6.  A related goal will be to maintain backwards compatibility within twinBASIC itself.  For example, code written in tB v1.0 should work without changes in v1.1, v1.2, etc.  While I don't think Wayne has directly addressed this, one would hope that breaking changes would at least be minimized–if not outright avoided–when moving to future major releases of twinBASIC, like v2.0, v3.0, etc.

During this initial development period, while twinBASIC is still in beta, there is no guarantee of backward compatibility with earlier beta releases of the language.  This is typical of most major software projects, as typified in the semantic versioning specification:

A pre-release version indicates that the version is unstable and might not satisfy the intended compatibility requirements as denoted by its associated normal version

To be clear, the twinBASIC project does not strictly adhere to semantic versioning.  However, the quote from the semantic versioning spec is a good example of the concept that pre-release software should not be expected to maintain backward compatibility.  For this reason, the community is working to achieve consensus around the best syntax to use for new language features, as these types of decisions will likely have permanent consequences.

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

  • added: New IDE options to manage the display and behavior of signature-help and hover information widgets.
  • improved: User experience enhancements in the IDE, including better intellisense positioning, increased hover delay, and prompt for unsaved changes when closing project settings.
  • fixed: A series of regressions from BETA 424 affecting keyboard shortcuts, debug console behavior, IDE functionality, and form design.
  • improved: The code editor's behavior, with better formatting after pressing ENTER and the ability to cancel dialogues with the ESC key.
  • changed: Option to enable a real OS titlebar for the IDE for a more native window appearance.
  • improved: Stability improvements and fixes for ActiveX control issues and graphical glitches in the IDE.
  • fixed: Various bugs related to parser, debugging, and project explorer, aiming to enhance the reliability of the twinBASIC environment.

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

BETA 436

  • fixed: (regression since BETA 424) some IDE keyboard shortcuts like CTRL+F were being bound to key-up rather than key-down, causing issues
  • fixed: (regression since BETA 424) debug console history cycling (up/down keys) quirks
  • improved: formatting/cursor position after ENTER key in the code editor in some cases
  • fixed: shortcut keys such as CTRL-C/V/X would sometimes trigger intellisense inappropriately
  • improved: intellisense horizontal position is now anchored to the start of the word to help reduce flickering
  • fixed: intellisense would sometimes pop up during editing a string literal
  • improved: reduced the size of the signature-help widget (smaller padding and font)
  • improved: signature-help widget horizontal position is now anchored to the procedure symbol
  • improved: signature-help widget was dark with the light theme activated

BETA 437

  • fixed: key shortcut processing debug messages wrongly being seen in the debug console

BETA 438

  • added: IDE boolean option 'Signature-Help Show First Line Of Docs' to allow further reduction of signature-help widget size
  • improved: some keys would incorrectly trigger intellisense such as Page-Down/Up
  • improved: hover delay time in the IDE is increased from 300ms to 1000ms to try to reduce/avoid accidental hover widget activation [ https://github.com//issues/1758 ]
  • added: IDE boolean option 'Show Information When Hovering' to allow to turn off the hover feature [ https://github.com//issues/1758 ]
  • improved: max-height of hover widgets now set to 250px in an attempt to reduce unnecessary screen coverage
  • improved: reduced hover widgets padding of text elements to reduce overall sizes
  • improved: clicking X in the project settings modal dialog now prompts if you've made unsaved changes
  • improved: pretiffier now removes spaces in attributes, e.g. [ Description ("Foo Bar") ] becomes [Description("Foo Bar")]
  • fixed: (regressions since BETA 424) drag/drop of project explorer items and tabs now working again [ fafalone, discord ]
  • improved: escape key can now be used to cancel the front-page 'New / Open project' dialog
  • changed: you can now enable a real OS titlebar for the IDE, via the 'IDE: Show real OS titlebar' setting [ https://github.com//issues/1713 ]
  • fixed: [CoClassId] attribute did not offer the codelens feature for inserting a random GUID [ benhut1, discord ]
  • fixed: (regression since BETA 424) menu editing via the form designer broken [ OlimilO1402, discord ]
  • fixed: debugger was ignoring (exitting) some unhandled runtime errors instead of breaking [ fafalone, discord ]
  • fixed: selecting 'new project' (and similar) menu option doesn't close the exising editing project until a new project is actually loaded [ https://github.com//issues/1764 ]
  • fixed: ActiveX control sample had code using to ExperimentalLog event that has since been removed from the implementation

BETA 439

  • improved: some stability improvements, particularly with samples 15 & 16 [ sokinkeso, discord ]
  • fixed: (regression) WebView2 control was not bein shown correctly in the IDE toolbox
  • fixed: ProgressBar ForeColor would be lost when the control lost activated state with visual styles off [ fafalone, discord ]
  • fixed: NATIVE EXCEPTION errors now report the local time (with DST if appropriate) [ adakordev, discord ]
  • fixed: (regression in 438) graphical glitches in hover widgets in the IDE [ fafalone, discord ]
  • fixed: (regression since 423) auto-close feature with parenthesis was not working correctly [ fafalone, discord ]
  • fixed: 'Object not set' error in Label.twin when opening form designer in some instances [ fafalone, discord ]

BETA 440

  • fixed: (regression since BETA 424) Ctrl+Up/Down not working to select prev/next procedure in the code editor [ https://github.com//issues/1757 ]
  • added: commands tbEditor_MoveToProcedurePrev and tbEditor_MoveToProcedureNext
  • fixed: (regression) Function key shortcuts not always working reliably [ FullValueRider, discord ]
  • fixed: (regression since BETA 424) 'Import from file...' in Project references not working [ fafalone, discord ]
  • fixed: parser bug; can't declare WithEvents on same line as other class field definitions seperated by comma [ https://github.com//issues/1767 ]
  • fixed: unable to disambiguate InStr() in some instances due to too strict overload resolution issue [ https://github.com//issues/1759 ]

BETA 441

  • fixed: (regression) tbEditor_StepOver apperaing in the debug console when stepping through code [ FullValueRider, discord ]
  • fixed: type-library parsing had incorrect handling of Alias-void types [ https://github.com//issues/1688 ]
  • added: warning TB0017 array argument does not precisely match the expected type as the alias subtypes are different, but this is supported for VBx compatibility [ https://github.com//issues/1688 ]
  • fixed: the case of the missing PREVIEW button [ adakordev, discord ]
  • fixed: selecting an item in the project explorer would open, but not focus the editor

BETA 442

  • fixed: menus seperator issue [ https://github.com//issues/1771 ]

BETA 443

  • fixed: ActiveXExtender regression [ fafalone, discord ]

BETA 444

  • fixed: some DirListBox issues [ sokinkeso, discord ]
  • fixed: Debug Console would sometimes report 'Unrecognized member 'foo' on type 'bar' [non-extensible object]' incorrectly
  • fixed: (regression since BETA 424) breakpoint changes not effective until next recompile [ FullValueRider, discord ]
  • fixed: compiler will no longer crash upon loading a project with duplicate reference entries [ fafalone, discord ]
  • fixed: missing information in hover widget for interfaces [ https://github.com//issues/1721#issuecomment-1934813523 ]
  • fixed: project explorer right-click focus issue, preventing cut/copy/rename/delete/etc from being accessible in the context-menu [ fafalone, discord ]

BETA 445

  • fixed: (regression since BETA 423) Form/PictureBox/UC Picture property could cause a runtime error when AutoRedraw was True [ axisdj, discord ]

BETA 446

  • improved: turned on incremental parsing stage 1 (baby steps)
  • improved: added window.onerror JS error logging to the DEBUG CONSOLE for helping identify IDE unhandled errors

BETA 447

  • fixed: a few 'IDE internal error' messages that have been reported [ fafalone, discord ]

BETA 448

  • fixed: removed DEBUG CONSOLE messages when scrolling inside the monaco editor [ fafalone, discord ]
  • fixed: form designer errors when opening a form and the TOOLBAR panel is closed [ erez, discord ]
  • fixed: "IDE internal error" when editing a non-code file [ FullValueRider, discord ]