twinBASIC Update: October 17, 2021

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.


Highlights

The GUI has Arrived!!! (sort of)

CustomControls are now available.  This is an experimental feature.  For now, it is only open to those who have pre-ordered a twinBASIC license.  

Here are some brief demos that Wayne posted:

Initial documentation is available via the brand new wiki (detailed below).

Around the Web

twinBASIC Gets a Wiki

It's still nascent, but with the arrival of CustomControls, there is now a twinBASIC wiki with documentation related to this new feature.

Quirks Mode Discussion

There is an ongoing spirited (but friendly) debate about the proper role of a "Quirks mode" in twinBASIC.  

The root of the disagreement lies in the fact that there is no objectively correct answer; there are only tradeoffs.  You need to support quirks for backwards compatibility, but you want to discourage new users from adopting bad practices.  There should be only one way to do things, but fundamental features should not be buggy.  Providing module-level settings allows for fine-grained control for experienced users, but increases the learning curve for new users.

To further complicate things, certain VBx design decisions were utterly baffling in hindsight.  Making basic file I/O operations programming language statements rather than functions or procedures in a standard library limits twinBASIC's flexibility in this area.  Not to mention the fact that it unnecessarily pollutes the language keyword pool.

As my mentor Bruce Grandjean likes to say, "For every complex problem there is a solution that is simple, easy to understand, and wrong."  

twinBASIC Presentation for Access User Group España

For my Spanish-speaking readers: AUGE president, Juanjo Luna, will be giving a presentation on twinBASIC this Thursday, 21 October 2021, at 9 PM Spanish time.  If you are interested, check out the event details.

Changelog

Here are the updates from the past week.  You can also find this information by installing the twinBASIC VS Code extension and clicking on the Changelog tab of the extension page:

[v0.11.45, 17th October 2021]

[v0.11.41, 16th October 2021]

  • fixed: JSON serialization was outputting floating point values with regional settings (e.g. '1,234' rather than '1.234' as expected by JSON)

[v0.11.37, 16th October 2021]

  • improved: further tweaks to WebView loading for form designer

[v0.11.36, 16th October 2021]

[v0.11.16, 16th October 2021]

  • improved: WebView logging in form designer

[v0.11.14, 16th October 2021]

  • improved: further tweaked the WebView loading to attempt to fix the stuck form designer loading (and removed previous temporary fix from v0.11.1)
  • improved: (temporary) form designer now shows a log of initialization actions until fully loaded and ready
  • fixed: form engine crash if an anchored control gets resized where it has a negative virtual width/height

[v0.11.1, 15th October 2021]

  • fixed: tweaked the twinBASIC VSCode extension to have a 1-sec delay before sending communication data to the form designer webview
  • fixed: removed unnecessary Microsoft Add-In Designer reference enabled on the new Sample 6 for CustomControls

[v0.11.0, 15th October 2021]

  • added ALPHA / EXPERIMENTAL support for CustomControls (available to pre-order customers only for now)
  • added Sample project 6 to demonstrate some of the CustomControl features
  • added: ClassId() and InterfaceId() attributes, and auto-generate feature
  • added: AddressOf support for class members, generating function stubs that last the lifetime of the object instance (Subroutines only for now)
  • improved: changed the VS code 'debug.saveBeforeStart' setting so that it doesn't kick in automatically upon a compiler crash