In the following article we are going to delve into the topic of Liberty BASIC, which has generated great interest and debate in recent times. From its origins to its relevance today, Liberty BASIC has been the subject of study and analysis by different specialists in the field, who have contributed different perspectives and approaches to this topic. Through this article, we will explore the different facets of Liberty BASIC, from its practical implications to its impact on society. Additionally, we will examine its evolution over time and analyze the current trends surrounding it. Without a doubt, Liberty BASIC is a fascinating topic that deserves to be addressed exhaustively and critically, so we invite you to enter this exciting world and discover everything behind Liberty BASIC.
Paradigm | Event-driven, Procedural |
---|---|
Designed by | Carl Gundel |
Developer | Shoptalk Systems |
First appeared | 1992 |
Stable release | 4.5.1
/ May 31, 2017 |
Typing discipline | Dynamic, weak |
OS | Microsoft Windows; Linux in unreleased Liberty Basic 5 |
License | proprietary |
Filename extensions | .bas, .fr3 |
Website | libertybasic |
Major implementations | |
Run BASIC, GLBCC | |
Influenced by | |
QuickBASIC | |
Influenced | |
Just BASIC, Leopard |
Liberty BASIC (LB) is a commercial computer programming language and integrated development environment (IDE). It has an interpreter, developed in Smalltalk, which recognizes its own dialect of the BASIC programming language. It runs on 16- and 32-bit Windows and OS/2.
Liberty BASIC was written by Carl "Gunner" Gundel and published in its first release by his company, Shoptalk Systems, in 1991. It has progressed steadily since then. The last published update to the software, version 4.5.1, was in June 2018.[1]
Though Liberty BASIC has its share of limitations in its design for advanced programming, it provides an introductory integrated development environment, IDE, for moderate to advanced users of Windows and OS/2. Dynamic-link libraries (DLLs) are available. In its current version, it runs only on Microsoft Windows, and under Wine on Linux. Alpha testing of Liberty BASIC v5.0 is underway with versions that run on Microsoft Windows, Mac OS X, Linux and on the Raspberry Pi as well.
Liberty BASIC does not compile to native code. Instead it compiles the code written in the IDE to an encrypted file with the extension TKN. This file is then executed by an EXE file that carries the same file name, although this may change with the release of version 5.
Liberty BASIC allows for procedural programming in a style similar to DOS BASICs that run in console mode, using a default "main window" that displays formatted text and accepts user input. It also supports event-driven programming based on a graphical user interface (GUI), using several types of windows that may contain the standard controls such as buttons, menus, textboxes, etc.
A central idea in creating Liberty BASIC was to model the handling of windows after the syntax for file handling. For example, (from the Liberty BASIC Help File):
"The OPEN command opens communication with a device, which can be a disk file, a window, a dynamic-link library or a serial communications port."
OPEN device FOR purpose AS #handle {LEN = n}
Once a “device” is open, data and also commands to control that device can be “printed” to it. For each type of device there is a set of commands which can be sent to it in this way. In the more recent versions of LB the word "print" may be dropped from the "print" statement, making the syntax even simpler.
Simplicity has been at the heart of Liberty BASIC from the beginning. This makes it easier to learn but at some cost, perhaps, in limiting functionality. Only two data types are supported in LB v4.03 — numeric and string. No type declarations are required; any variable with a $ sign at the end of its name is a string variable, otherwise it is numeric. (The plan for LB v5 is to support other types and user defined types as well as these.) For the purpose of making calls to an API or third-party DLLs there is a STRUCT and the additional types necessary for the DLL. The only other data structure supported is the ARRAY. Arrays of one or two dimensions are supported. LB v5 may support arrays of user-defined types.
Here are some examples of the language:
"Hello, World!" program:
print "Hello, World!"
end
Program to display a pop-up message box with the words "Hello, World!" on it:
nomainwin
notice "Hello, World!"
end
nomainwin
notice "Example program" + CHR$(13) + "Hello, World!"
end
Program to display an input box:
nomainwin
prompt "Enter your name:"; response$
notice "Response:" + CHR$(13) + response$
end
Running another application:
nomainwin
run "notepad.exe"
end
Printing multiplication table of 5 on form:
for i = 1 to 15
res = 5 * i
print res
next i
end
The GNU/Liberty Basic Compiler Collection (GLBCC), by Anthony Liguori, is a set of tools to compile Liberty Basic programs, runs on Windows and Linux systems, but the project has not been updated since 2001.
In 2012 an alternative Windows implementation of Liberty BASIC, LB Booster (LBB), became available. Although substantially compatible with the Liberty BASIC 4 language syntax, LBB was developed entirely independently by Richard Russell and is written in BBC BASIC.
LBB offers (typically) increased execution speed, smaller self-contained executables and some additional capabilities. However LBB is not 100% compatible with LB4 and while many programs will run without modification, some may need to be adapted, or may even be unsuitable for running under LBB.
Liberty Basic does not provide for data declarations. Instead any new data name is treated as a new declaration. Some regard this as a benefit, others see it as a debugging issue for imperfect typers. In 2019 Peter J. D. Matthews devised a method for adding declarations and checking for undeclared data - without changing the code seen by the LB interpreter. In 2023 this system was ported to GitHub in public repository "LBPrePass" for anyone to use. This repository also contains program documentation. The program is written in Liberty Basic 4.5.1 and is intended to analyse 4.5.1 code.