PureBasic
Template:Short description Template:DMCA
Page Module:Message box/ambox.css has no content.
This article includes a list of general references, but it lacks sufficient corresponding inline citations. (June 2011) |
Page Module:Infobox/styles.css has no content.
| PureBasic | |
|---|---|
| Lua error in package.lua at line 80: module 'Module:InfoboxImage/data' not found. | |
| Paradigm | Structured, imperative, procedural |
| Family | BASIC |
| Designed by | Fantaisie Software |
| Developer | Fantaisie Software |
| First appeared | Script error: No such module "Date time". |
| Template:Infobox software/simple | |
| OS | Windows, Linux, macOS, Raspberry Pi OS, AmigaOS |
| License | Trialware |
| Filename extensions | .pb, .pbi, .pbf, .pbp |
| Website | www |

PureBasic is a commercially distributed procedural computer programming language and integrated development environment based on BASIC and developed by Fantaisie Software for Windows, Linux, macOS and Raspberry Pi. An Amiga version is available, although it has been discontinued and some parts of it are released as open-source. The first public release of PureBasic for Windows was on 17 December 2000. It has been continually updated ever since.
PureBasic has a "lifetime license model". As cited on the website, the first PureBasic user (who registered in 1998) still has free access to new updates and this is not going to change.[1]
PureBasic compiles directly to IA-32, x86-64, arm32 and arm64, PowerPC or 680x0 instruction sets, generating small standalone executables and DLLs which need no runtime libraries beyond the standard system libraries. Programs developed without using the platform-specific application programming interfaces (APIs) can be built easily from the same source file with little or no modification.
PureBasic supports inline assembly, allowing the developer to include FASM assembler commands within PureBasic source code, while using the variables declared in PureBasic source code, enabling experienced programmers to improve the speed of speed-critical sections of code. PureBasic supports and has integrated the OGRE 3D Environment. Other 3D environments such as the Irrlicht Engine are unofficially supported.
Since version 6.00 (June 2022), in addition to compilation using ASM, PureBasic offers compilation with a C backend. This enables access to new platforms (e.g. Raspberry) and should make it easier to add new libraries in the future.
Programming language
Characteristics
PureBasic is a native cross platform 32 bit and 64 bit BASIC compiler. Currently supported systems are Windows, Linux, macOS. The AmigaOS version is legacy and open-source. The compiler produces native executables and the syntax of PureBasic is simple and straightforward, comparable to plain C without the brackets and with native unicode string handling and a large library of built-in support functions.[2] It can compile console applications,[3] GUI applications,[4] and DLL files.[5]
Hello World example
The following single line of PureBasic code will create a standalone x86 executable (4.5 KiB (4,608 bytes) on Windows version) that displays a message box with the text "Hello World".
MessageRequester("Message Box", "Hello World")
And the following variant of the same code, which instead uses an inline Windows API call with no need for declarations or other external references, will create an even smaller 2.0 KiB (2,048 bytes) standalone x86 executable for Windows.
MessageBox_(0, "Hello World", "Message Box", 0)
The following is a console version of the Hello World example.
OpenConsole() ; Open a console window.
Print("Hello, World!")
Delay(5000) ; Pause for 5 seconds
Procedural programming
PureBasic is a "Second generation BASIC" language, with structured conditionals and loops, and procedure-oriented programming supported. The user is not required to use procedures, so a programmer may opt for a coding style which includes Page Template:Mono/styles.css has no content.Goto, Gosub Label, and Page Template:Mono/styles.css has no content.Return.
Below is a sample procedure for sorting an array, although SortArray is now a built-in function of PureBasic.
Procedure bubbleSort(Array a(1))
Protected i, itemCount, hasChanged
itemCount = ArraySize(a())
Repeat
hasChanged = #False
itemCount - 1
For i = 0 To itemCount
If a(i) > a(i + 1)
Swap a(i), a(i + 1)
hasChanged = #True
EndIf
Next
Until hasChanged = #False
EndProcedure
Below is a sample program that displays a sizeable text editor with two menu items.
;Create Window:
OpenWindow(0, #PB_Ignore, #PB_Ignore, 800, 600, "Simple Text Editor", #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget)
;Add 2 menus:
CreateMenu(0, WindowID(0))
MenuItem(1, "&OK")
MenuItem(2, "&Cancel")
;Add Editor:
EditorGadget(0, 0, 0, 0, 0)
SetGadgetFont(0, LoadFont(0, "Courier New", 10))
;Process window messages until closed:
Repeat
Select WaitWindowEvent()
Case #PB_Event_Menu
Select EventMenu()
Case 1: MessageRequester("OK clicked directly or with '&' mnemonic.", GetGadgetText(0))
Case 2: Break
EndSelect
Case #PB_Event_SizeWindow: ResizeGadget(0, 0, 0, WindowWidth(0, #PB_Window_InnerCoordinate), WindowHeight(0, #PB_Window_InnerCoordinate))
Case #PB_Event_CloseWindow: Break
EndSelect
ForEver
PureBasic does not escape double quotes in strings so these must be concatenated with Page Template:Mono/styles.css has no content.Chr(34).
Object-oriented programming
Fred, the developer of PureBasic, has stated that PureBasic will never be object oriented.[6] However, numerous users have created object oriented support systems.[7][8][9]
Data types
Variable data type specified when you first use it (and optionally - in the future), and is separated from the name of the point. There is a set of basic types - Page Template:Mono/styles.css has no content..f, .d (float and double numbers), Page Template:Mono/styles.css has no content..b, .c, .w, .l, .q (integers - from single-byte and 8-byte), Page Template:Mono/styles.css has no content..s - strings.
| Type | Suffix | Memory usage | Numerical range |
|---|---|---|---|
| Byte | Page Template:Mono/styles.css has no content.b | 1 byte (8 bits) | −128 ... +127 |
| Ascii | Page Template:Mono/styles.css has no content.a | 1 byte (8 bits) | 0 ... +255 |
| Character | Page Template:Mono/styles.css has no content.c | 1 byte (8 bits) (ascii) | 0 ... +255 |
| Word | Page Template:Mono/styles.css has no content.w | 2 bytes (16 bits) | −32768 ... +32767 |
| Unicode | Page Template:Mono/styles.css has no content.u | 2 bytes (16 bits) | 0 ... +65535 |
| Character | Page Template:Mono/styles.css has no content.c | 2 bytes (16 bits) (unicode) | 0 ... +65535 |
| Long | Page Template:Mono/styles.css has no content.l | 4 bytes (32 bits) | −2147483648 ... +2147483647 |
| Integer | Page Template:Mono/styles.css has no content.i | 4 bytes (32 bits) x86 | −2147483648 ... +2147483647 |
| Float | Page Template:Mono/styles.css has no content.f | 4 bytes (32 bits) | Depending on the ratio of the decimal number. |
| Integer | Page Template:Mono/styles.css has no content.i | 8 bytes (64 bits) x64 | −9223372036854775808 ... +9223372036854775807 |
| Quad | Page Template:Mono/styles.css has no content.q | 8 bytes (64 bits) | −9223372036854775808 ... +9223372036854775807 |
| Double | Page Template:Mono/styles.css has no content.d | 8 bytes (64 bits) | Depending on the ratio of the decimal number. |
| String | Page Template:Mono/styles.css has no content.s | (String length + 1) * SizeOf(Character) | No limit. |
| Fixed String | Page Template:Mono/styles.css has no content.s{length} | (String length) * SizeOf(Character) | No limit. |
- Page Template:Mono/styles.css has no content.Len(String) used to count the length of a string will not exceed the first null character (Page Template:Mono/styles.css has no content.Chr(0)).
In addition to basic types, the user can define the type of construction via
Structure type_name
field_name.type ; Single field. Perhaps the structures attachment.
field_name[count].type ; Static arrays.
; ...
; Optional construction StructureUnion .. EndStructureUnion allows you
; to combine multiple fields into one area of memory
; that is sometimes required for the conversion types.
StructureUnion
type_name.type
; ...
EndStructureUnion
EndStructure
Variables can be single (actually, standard variables), dynamic array (declared using the Dim var_name.type_name (size1, size2, ... ), a linked list (List() var_name.type_name), an associative array (in new versions of language) (Map var_name.type_name())
Form Designer RAD
PureBasic has its own form designer to aid in the creation of forms for applications, but other third-party solutions are also available.[10][11] The original non-integrated Visual Designer was replaced with a new integrated Form Designer on 14 Feb 2013.[12]
User community
PureBasic provides an online forum for users to ask questions and share knowledge. On 17 february 2025 the English language forum had 6,484 members and contained 70,174 threads comprising 578,646 posts since 17 May 2002.[13]
Numerous code sharing sites show PureBasic is used to create tools[14] and games in a fast and easy way,[15] and share large amounts of open-source code.[16]
Further reading
- Page Module:Citation/CS1/styles.css has no content.Willoughby, Gary (2006). Purebasic: A Beginner s Guide to Computer Programming. Aardvark Global. ISBN 1-4276-0428-2.
- Page Module:Citation/CS1/styles.css has no content.Logsdon, John. Programming 2D Scrolling Games.This book is now freely downloadable
- Page Module:Citation/CS1/styles.css has no content.Basic Compilers: QuickBASIC, PureBasic, PowerBASIC, Blitz Basic, XBasic, Turbo Basic, Visual Basic, FutureBASIC, REALbasic, FreeBASIC. ISBN 1-155-32445-5.
References
Page Template:Reflist/styles.css has no content.
- ^ FAQ lifetime licence details
- ^ PureBasic home page
- ^ PureBasic - Console
- ^ PureBasic - Gadget
- ^ Building a DLL
- ^ PureBasic won't be object oriented
- ^ PureObject: PureBasic OOP support
- ^ OOP tutorial
- ^ Another OOP PreCompiler
- ^ PureVision, Professional form design for PureBASIC.
- ^ ProGUI, DLL library comprising more than 100 well documented commands to quickly incorporate rich, customizable GUI components into your applications.
- ^ PureBasic 5.10 is released
- ^ English forum, Official forum.
- ^ Horst Schaeffer's Software Pages
- ^ PureArea
- ^ Andre Beer's code archive.
General references
- Page Module:Citation/CS1/styles.css has no content.Hale Ligh, Michael (2010). Malware Analysts Cookbook Tools for Thwarting Malicious Attacks. Indianapolis, IN: John Wiley & Sons Inc. p. 241. ISBN 978-0-470-61303-0.
- Page Module:Citation/CS1/styles.css has no content.Galbreath, Nick (2002). Cryptography for Internet and database applications : developing secret and public key techniques with Java. Indianapolis, Ind.: Wiley. pp. 300. ISBN 978-0-471-21029-0.
- Page Module:Citation/CS1/styles.css has no content."Learning to Crack Code". Manly Daily. 25 June 2004.
- Page Module:Citation/CS1/styles.css has no content.Georges, Philippe. "La programmation avec PureBasic". PROgrammez (141).
- Page Module:Citation/CS1/styles.css has no content.Svoboda, Luboš (2012). Překvapivý PureBasic (Surprising PureBasic: A Czech ebook for prospective users of PureBasic). p. 89.
External links
- Official website
- Official Purebasic Forums (English)
- PureBasic Team Blog - Official Blog "Random thoughts on PureBasic development"
- Articles
- Libraries and Open Source Code Archives
Lua error in package.lua at line 80: module 'Module:Navbox/configuration' not found. Lua error in package.lua at line 80: module 'Module:Navbox/configuration' not found. Template:GUI builders