Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
QB64PE v 4.4.0
#1
https://github.com/QB64-Phoenix-Edition/...tag/v4.4.0

I know it wasn't long ago that we brought you guys version 4.3.0, but we've got you a brand new shiny and nifty new little 4.4 to enjoy!!

v4.4.0 Latest Enhancements

#670 - Allow interleaving SUB/FUNCTIONs with main program, fixing #504 - @flukiluke
This renders the error Statement cannot be placed between SUBs and FUNCTIONs obsolete.
It also makes building libraries easier, as everything (CONST, TYPE, DIM, SUB, FUNCTION) can go into the same file now.

Library Updates
#674 - Miniaudio rolled back to the previous version - @RhoSigma-QB64
This is now the same version we had in QB64-PE v4.2.0, as the updated version in v4.3.0 had issues with music streaming when tailing at the same time (writing more data to the stream while it is playing).

Bug Fixes
#665 - Export As... fixes - @RhoSigma-QB64
Now auto-closing strings at line end if required.
Fixed look-ahead logic to avoid partly name matches causing wrong output.

#666 - Restore IDE behavior when Autobrackets is disabled - @SteveMcNeill
With the change to autobrackets in v4.3.0, the IDE suddenly started to just skip over end bracket type symbols if one were to type them and the next character was an end bracket. This makes sense with the autobracket enabled, but when it's turned off, those keystrokes should be processed as before, without skipping that next character.

#671 - Do not over-apply auto-semicolon insertion, fixing #575 - @flukiluke
String literals in a PRINT statement may be subject to automatic semicolon insert on either side. For instance, PRINT "abc"123, 123"abc" is equivalent to PRINT "abc"; 123, 213; "abc". The logic was not accounting for the possibility of a comparison operator before/after a string literal, and so PRINT "abc" = "def" gets turned into the invalid PRINT "abc"; <>; "def". These operators are now checked for.



This is one of those enhancements which STEVE thinks everyone should grab and enjoy as soon as possible!!  This does one of the things that I personally think we've been needing for a long time now:

It allows library creators to make libraries with just a single $INCLUDE file in them!!

No longer do you need a *.BI file for the top of your library, and a *.BM file for the bottom of your library.  Just one single file is good enough.  Place it at the start of your code and you're golden!!

Note that this also allows you to do some odd looking stuff, which I really don't recommend, but which *is* technically possible.  Notice the following code:

Code: (Select All)
foo

Sub foo
    Print "Hello";
End Sub

Print " World"

See the SUB in the middle of the program there? 

That's actually 100% QB45-compatible code.  It's not something which we supported before, but it WORKS and has worked in QB45 and QBASIC since forever.  This is why QB45 had only one single $INCLUDE, while old versions of QB64 had to be separated into the top and bottom portions of your code base.

In most cases, writing code like this will make things harder for the programmer to understand and follow, and I discourage doing it.

For people writing library style code for use with $INCLUDE, however, this is a great change as you can now put your entire library into a single file and share it, $INCLUDE it, work with it, format it, and all that as just a single file.

I imagine a LOT of libraries are going to start adapting to this new single file format before long, as it's just easier in general for most of the creators to keep up with things, maintain them, and share them, as a single file, so if you like to $INCLUDE others stuff in your code, you'll probably want to grab the latest version here and update without skipping this release.
Reply
#2
Quote:It also makes building libraries easier, as everything (CONST, TYPE, DIM, SUB, FUNCTION) can go into the same file now.

dang! I just got 4.3 setup! But this (above) is good reason to update.

And so now can the $Include statement be put anywhere in the program as well? Though putting it at top makes the most sense for clarity. Don't think it will be good inside a subroutine though.
  724  855  599  923  575  468  400  206  147  564  878  823  652  556 bxor cross forever
Reply
#3
(01-29-2026, 02:21 PM)bplus Wrote:
Quote:It also makes building libraries easier, as everything (CONST, TYPE, DIM, SUB, FUNCTION) can go into the same file now.

dang! I just got 4.3 setup! But this (above) is good reason to update.

And so now can the $Include statement be put anywhere in the program as well? Though putting it at top makes the most sense for clarity. Don't think it will be good inside a subroutine though.

Put it at top.   You want to put your SUBS with your DIM statements, not your DIM statements with your SUBs.

Imagine this:

Code: (Select All)
LIBRARY with the following code: 
  DIM foo
  SUB whatever
END LIBRARY

Now you write your main program

foo = 3
'$INCLUDE:'This_sexy_Library.BI'

Can you visualize what you've done here?  You've basically assembled your code so it would be like:

foo = 3
DIM foo
SUB whatever

See where you're trying to use that variable before you DIM it?  That's not what you want!



So instead, let's change the order of those statements:

Code: (Select All)
'$INCLUDE:'This_sexy_Library.BI'
foo = 3

Now what you've basically have here would be this:

DIM foo
SUB whatever
foo = 3

Since SUBS can now go between code, all is well and good and life is happy for you.  You have your variable DIMmed properly.  The sub works.  Life is good.

So put those combined library files at the TOP of your code so the DIM and such can be there first.  Putting them after your code probably isn't what you were looking to accomplish at all.
Reply
#4
yeah that agrees with my intuition though more definitely made clear the disasters of NOT putting the $Include at the top.

Yeah life was made better with only one $Include file needed for QB64PE code as it use to be.
  724  855  599  923  575  468  400  206  147  564  878  823  652  556 bxor cross forever
Reply
#5
Congrats guys! Nice!  Wink
Reply
#6
Another feature I miss from the QuickBASIC Period was the ability to put $INCLUDE in the code and the IDE loaded the file, automatically. It also re-saved the files. This made it much faster to use just on instance of the IDE to make edits or add code. Come to think of it, there was also a LOAD command in the File menu. I remember using that to load modules into the IDE. Maybe a LOAD feature could load the included libraries as an option.

Pete
Reply
#7
Nice update!  Installed without a hitch and works great in kubuntu 24.10.  

Great job, guys!

- Dav

Find my programs here in Dav's QB64 Corner
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)