Here's the new release, finally. It comes with multiple new features, and the amount of bug fixes is huge -- but see for yourself!
New Stuff
- VIRTUAL and ABSTRACT methods, including virtual destructors, in UDTs extending OBJECT
- STATIC member variables in UDTs
- BYREF function results: FUNCTION F( ) BYREF AS INTEGER
- '=>' is now allowed for assignments to solve syntax ambiguities with the '=' equality operator
- IIF() now fully supports strings, UDTs, and mixing of different integer/float types
- Unary and binary operations will now consistently promote their operands to INTEGER or UINTEGER (except for LONGINT/float)
- INTEGER<n>/UINTEGER<n> with n=8/16/32/64 to explicitly choose integer types of a specific size
- #If now accepts any normal constant FB expression
- #assert statement for compile-time checks
- LBound/UBound( array ) now return 0 and -1 for empty dynamic arrays
- LBound/UBound( array, 0 ) now return 1 and the array's dimension count
- BSAVE now has a bpp parameter, and defaults to 32bit instead of 24bit in 32bit screen modes.
- Work-in-progress LLVM backend (-gen llvm)
- fbc no longer depends on libbfd
- Many headers for external libraries have been updated
- The C backend has become stable, with many bugs fixed
- Several code generation bugs in the ASM backend have been fixed
- Using ThreadCall no longer causes internal compiler errors
- Many bugs with temporary variables, destructor calls, parameter initializers, and SELECT CASE have been fixed
- Linux X11 graphics GetKey/Inkey/ScreenEvent and DOS console-mode GetKey now return proper keycodes
- On Win32, the graphics window will no longer be truncated to fit the screen
- EXEPATH() no longer omits the slash at the end of root paths
- DOS CURDIR() and COMMAND(0) now use backslashes and upper-case drive letters
- Initialization of unions is now well-defined: only the first member can be initialized, as in C
- In functions returning UDTs with constructors, the compiler now ensures that the function result is constructed once, instead of being left unconstructed or constructed twice.
- Functions returning UDTs now correctly follow the GCC ABI on each platform
- typeof() (and #print typeof()) is now reliable
- Single-line IF statements will now open a scope, to prevent "leaking" variables to the outside
Win32 Binaries
- FreeBASIC-0.90.0-win32.exe
Windows installer. - FreeBASIC-0.90.0-win32.zip (or as .7z)
FB in a .zip - can be extracted anywhere. - fbc-0.90.0-mingw32.zip (or as .7z)
fbc for installation into a MinGW tree, like a MinGW.org package. Built for the MinGW.org toolchain.
- FreeBASIC-0.90.0-linux.tar.gz (or as .tar.xz)
FB in a .tar.gz - can be extracted anywhere. Run sudo ./install.sh -i to install into /usr/local. Built on OpenSUSE; should work on all current distros. - FreeBASIC-0.90.0-linuxmusl.tar.gz (or as .tar.xz)
FB setup based around musl libc and static linking. If the normal Linux package does not work, try this one.
- FreeBASIC-0.90.0-dos.zip
FB for DOS. (beware of long filenames on some examples) - fbc0900b.zip
fbc for installation into a DJGPP tree, like a DJGPP package.
- FB-manual-0.90.0-chm.zip
The FB manual CHM. - FB-manual-0.90.0-fbhelp.zip
For the fbhelp program (QB-like help viewer). - FB-manual-0.90.0-html.zip
HTML, with 00index.html start page, useful as offline documentation when there is no CHM viewer. - FB-manual-0.90.0-txt.zip
For printing to paper.
- .tar.gz | .tar.xz | .zip | .7z
You can always find the latest FB source code in the fbc Git repository: