PureBasic

Revision as of 06:20, 14 March 2025 by 1.46.17.219 (talk) (→‎External links)
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)

Template:Short description Template:Use dmy dates Template:More footnotes needed Template:Infobox programming language

File:PureBasic IDE 5.10.png
PureBasic IDE 5.10

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.<ref name="Lifetime License">FAQ lifetime licence details</ref>

PureBasic compiles directly to IA-32, x86-64, 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 languageEdit

CharacteristicsEdit

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.<ref name="PureBasic home page">PureBasic home page</ref> It can compile console applications,<ref name="PureBasic - Console">PureBasic - Console</ref> GUI applications,<ref name="PureBasic - Gadget">PureBasic - Gadget</ref> and DLL files.<ref name="Building a DLL">Building a DLL</ref>

Hello World exampleEdit

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". <syntaxhighlight lang="blitzbasic">

MessageRequester("Message Box", "Hello World")</syntaxhighlight>

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. <syntaxhighlight lang="blitzbasic">

MessageBox_(0, "Hello World", "Message Box", 0)</syntaxhighlight>

The following is a console version of the Hello World example. <syntaxhighlight lang="blitzbasic">

OpenConsole()          ; Open a console window. 
Print("Hello, World!")
Delay(5000)            ; Pause for 5 seconds</syntaxhighlight>

Procedural programmingEdit

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 Template:Mono, and Template:Mono.

Below is a sample procedure for sorting an array, although SortArray is now a built-in function of PureBasic. <syntaxhighlight lang="blitzbasic" line highlight="1,15">

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</syntaxhighlight>

Below is a sample program that displays a sizeable text editor with two menu items. <syntaxhighlight lang="blitzbasic">

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 </syntaxhighlight> PureBasic does not escape double quotes in strings so these must be concatenated with Template:Mono.

Object-oriented programmingEdit

Fred, the developer of PureBasic, has stated that PureBasic will never be object oriented.<ref name="PureBasic won't be object oriented">PureBasic won't be object oriented</ref> However, numerous users have created object oriented support systems.<ref name="PureBasic Forum: PureObject - PureBasic OOP support">PureObject: PureBasic OOP support</ref><ref name="PureBasic Forum: OOP tutorial added to the nxSoftware site!">OOP tutorial</ref><ref name="PureBasic Forum: Another OOP PreCompiler">Another OOP PreCompiler</ref>

Data typesEdit

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 - Template:Mono (float and double numbers), Template:Mono (integers - from single-byte and 8-byte), Template:Mono - strings.

Type Suffix Memory usage Numerical range
Byte Template:Mono 1 byte (8 bits) −128 ... +127
Ascii Template:Mono 1 byte (8 bits) 0 ... +255
Character Template:Mono 1 byte (8 bits) (ascii) 0 ... +255
Word Template:Mono 2 bytes (16 bits) −32768 ... +32767
Unicode Template:Mono 2 bytes (16 bits) 0 ... +65535
Character Template:Mono 2 bytes (16 bits) (unicode) 0 ... +65535
Long Template:Mono 4 bytes (32 bits) −2147483648 ... +2147483647
Integer Template:Mono 4 bytes (32 bits) x86 −2147483648 ... +2147483647
Float Template:Mono 4 bytes (32 bits) Depending on the ratio of the decimal number.
Integer Template:Mono 8 bytes (64 bits) x64 −9223372036854775808 ... +9223372036854775807
Quad Template:Mono 8 bytes (64 bits) −9223372036854775808 ... +9223372036854775807
Double Template:Mono 8 bytes (64 bits) Depending on the ratio of the decimal number.
String Template:Mono (String length + 1) * SizeOf(Character) No limit.
Fixed String Template:Mono} (String length) * SizeOf(Character) No limit.

In addition to basic types, the user can define the type of construction via <syntaxhighlight lang="text"> 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 </syntaxhighlight>

Variables can be single (actually, standard variables), dynamic array (declared using the <syntaxhighlight lang="blitzbasic" class="" style="" inline="1">Dim var_name.type_name (size1, size2, ... )</syntaxhighlight>, a linked list (<syntaxhighlight lang="blitzbasic" class="" style="" inline="1">List() var_name.type_name</syntaxhighlight>), an associative array (in new versions of language) (<syntaxhighlight lang="text" class="" style="" inline="1">Map var_name.type_name()</syntaxhighlight>)

Form Designer RADEdit

PureBasic has its own form designer to aid in the creation of forms for applications, but other third-party solutions are also available.<ref name="Form design 1">PureVision, Professional form design for PureBASIC.</ref><ref name="Form design 2">ProGUI, DLL library comprising more than 100 well documented commands to quickly incorporate rich, customizable GUI components into your applications.</ref> The original non-integrated Visual Designer was replaced with a new integrated Form Designer on 14 Feb 2013.<ref name="PureBasic 5.10 is released !">PureBasic 5.10 is released</ref>

User communityEdit

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.<ref name="English forum">English forum, Official forum.</ref>

Numerous code sharing sites show PureBasic is used to create tools<ref name="Tools 1">Horst Schaeffer's Software Pages</ref> and games in a fast and easy way,<ref name="PureArea">PureArea</ref> and share large amounts of open-source code.<ref name="Code snippets">Andre Beer's code archive.</ref>

Further readingEdit

ReferencesEdit

Template:Reflist

General referencesEdit

External linksEdit

Articles
Libraries and Open Source Code Archives

Template:BASIC Template:Integrated development environments Template:GUI builders