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
Most Interesting (?) Fixes
- 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
Check the included changelog.txt for the full list, and thanks to everyone who found and reported bugs and contributed to the development of patches and header updates!
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.
Linux Binaries
- 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.
DOS Binaries
- 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.
Documentation
- 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.
Source Code
- .tar.gz | .tar.xz | .zip | .7z
You can always find the latest FB source code in the fbc Git repository:
All the downloads are hosted over at SourceForge.