World Library  
Flag as Inappropriate
Email this Article

ThinBasic

Article Id: WHEBN0002046810
Reproduction Date:

Title: ThinBasic  
Author: World Heritage Encyclopedia
Language: English
Subject: Interpreted language, Basic4android, GW-BASIC, FutureBASIC, NS Basic
Collection:
Publisher: World Heritage Encyclopedia
Publication
Date:
 

ThinBasic

ThinBasic
ThinBasic Logo
Developer Eros Olmi
Stable release v1.8.9.0 / September 04 - 2011
Preview release v1.9.14.0 / October 15 - 2014
Dialects BASIC
Influenced by Powerbasic
OS Windows
License Freeware / Proprietary
Website http://www.thinbasic.com/

thinBasic is a BASIC-like computer programming language interpreter[1] with a central core engine architecture surrounded by many specialized modules. Although originally designed mainly for computer automation, thanks to its modular structure it can be used for wide range of tasks.

Main features

Syntax

As the name suggests, the biggest influence on the syntax of this language was the BASIC language. But, unlike traditional BASICs, as known from the 8-bit era, thinBASIC does differ in few important points.

For example, it requires the programmer to declare variables and it does not feature the infamous GOTO and GOSUB statements. Some aspects of the syntax are even inspired in non-BASIC languages, such as C/C++.[2] Thanks to this, thinBASIC optionally allows use of implicit line continuation, simplified addition, subtraction, multiplication and division operators, shortened variable declaration and initialization:

' Traditional syntax allowed in thinBASIC
DIM a AS INTEGER  ' a is initialized to 0
a = 1             ' a now contains 1
a = a + 1         ' a now contains 2

' C/C++ inspired syntax allowed in thinBASIC
INTEGER a = 1     ' a is initialized to 1
a += 1            ' a now contains 2

' New syntax introduced in 1.9.10.0 allows defining type from string expression
STRING sType = "INTEGER"
DIM a LIKE sType  

Another source of inspiration are the modern versions of BASIC, such as Visual Basic or PowerBASIC.

ThinBASIC does offer the main flow control statements, such as SELECT CASE, IF ... THEN/ELSEIF/ELSE/END IF, loops (infinite, conditional, FOR, WHILE/WEND, DO/LOOP WHILE ..., DO/LOOP UNTIL ...) and it also puts very strong effort on providing wide range of built-in functions for number crunching and especially string handling.

Variables and data types

ThinBASIC supports a wide range of numeric[3] and string[4] data types.

Integer Floating point String Other
BYTE SINGLE STRING VARIANT
WORD DOUBLE STRING * n GUID
DWORD CURRENCY ASCIIZ * n BOOLEAN
INTEGER EXTENDED, EXT UDT (user-defined type)
LONG UNIONS
QUAD

Besides those mentioned in the table above, a programmer can define pointers, user-defined types and unions.

The special features related to user-defined types in thinBASIC are:[5]

  • the possibility to inherit members from one or more other user-defined types
  • static members (members whose value is shared among all variables of given UDT)
  • dynamic strings

Variables can be defined in global, local or static scope. ThinBASIC supports arrays of up to three dimensions.

Modules

The elemental functionality of the language is provided by the so-called Core module, which is loaded by default, and takes care of parsing too.

Besides the Core module, thinBASIC offers other modules, each covering a specific area of functionality, for example:

  • GUI creation
  • console handling
  • file handling
  • 3D graphics
  • networking
  • ...

Each module is represented by single DLL, with specific structure. This allows the module to contain not just typical functions and procedures, but also for example constants and user-defined types definitions, immediately available for script without need for header file. The only thing needed is to explicitly mention the usage of module in the code – for file handling it would look like:

' This loads the module for use
Uses "File"

' Function File_Load comes from the module, it returns the content of passed file in form of String
String sBuffer = File_Load("C:\text.txt") 

Functions and procedures

To better structure the code, thinBASIC provides the functions and procedures functionality. There is one function with special treatment, called TBMAIN, which is guaranteed to be executed first. It represents the same function as main() function in C programming language, but its use is optional.

A programmer can define custom functions and procedures (called Subs); they can have up to 32 parameters. Both functions and procedures do not need to be declared before use. Parameters can be marked as optional, and they can also be initialized to default values. Each parameter can be specified to be passed by value (default) or by reference.

Uses "Console"

' Program body starts in TBMain function
Function TBMain()

  MyFunction(10)        ' This will print 10 20 30, because unused optional parameters #2 and #3 are initialized to 20 and 30

  MyFunction(10, 3)     ' This will print 10 3 30, because unused optional parameter #3 is initialized to 30

  MyFunction(10, 3, 5)   ' This will print 10 3 5, because we specify all the parameters, so the defaults are discarded

  Console_WaitKey

End Function

' User defined function with optional parameters with default values
Function MyFunction( a As Number, Optional b As Number = 20, c As Number = 30)

    Console_PrintL(a, b, c)

End Function

The functions can be called directly, as in the listing above, or by composing their name at run-time.

Binding to third-party APIs

ThinBASIC supports calling functions from third-party DLLs; programmer needs to declare them first to be able to access the functionality.

Thanks to this mechanism, thinBASIC allows using technologies such as OpenGL, OpenCL,[6] XML, ODE and many others.

Code organization

ThinBASIC does not support any form of project files at the moment, but it encourages splitting code to units by providing multiple file extensions for different use:

  • .tBasic - main code
  • .tBasicI - include file, containing declaration of functions from 3rd party DLLs for example
  • .tBasicU - code unit containing auxiliary routines

The main code can reference these files using #include directive, which can use wildcards:

#include "MyDLLWrapper.tBasicI"
#include "MyRoutines.tBasicU"

#include "dialog_*.tBasicU"    ' This would include all files matching the wildcard dialog_*.tBasicU, when present

Function TBMain()
  
  ' -- Main code goes here, and can use functionality from #included files

End Function

Customization

The language can be enhanced by module development using SDK for many languages (PowerBASIC, FreeBASIC, C, MASM).

Documentation

The development team puts strong focus on documentation of the language and on the learning resources. The language itself is documented in extensive help file[7] and the default installation contains tutorial and much example code too.

Various articles on use of thinBASIC have been published in form of ThinBasic Journal and on the homepage of the programming language as well (please see external links).

Integrated development environment (IDE)

thinAir, thinBasic IDE

ThinBASIC comes with own IDE, called thinAir, in the default installation.[8] It offers:

  • Customizable syntax highlighting
  • Code templates
  • Multiple source files opened at once in tabs
  • Ability to view one source using multiple views
  • Optional script obfuscation
  • Creation of independent executable from the script[9]
  • Access to the help file


thinAir allows using the debugger as well.
This component is called thinDebug[10] and can be watched on the image linked below.

  • thinDebug, thinBasic Debugger

Code samples

Console program, which asks user about name and then greets him:

' Specifies program will use functions from console module
uses "Console"

' TBMain represents main body of the program
function TBMain()
  ' Creates variable to hold user name
  local UserName as string

  ' Asks user for the name
  Console_Print("What is your name?: ")

  ' Stores it to variable
  UserName = Console_ReadLine

  ' If length of username is 0 then no name is specified, else program will say hello
  if len(UserName) = 0 then
    Console_PrintLine("No user name specified...") 
  else
    Console_PrintLine("Hello " + UserName + "!")  
  end if

  ' Waits for any key from user before program ends
  Console_WaitKey
end function  

Pros and cons

ThinBASIC was designed for the Windows platform and this is why it makes a good use of resources provided by this system, such as registry, user interface, work with processes, COM, DLLs. Although interpreted, thinBASIC is considered to have usually fast execution.[11] When the interpreter nature of the language hits the limits, it is possible to perform optimizations using partial JIT compilation. Another strength of the language is a wide range of commands covering various areas of interest and for BASIC traditionally - strong focus on string handling. The language is under continuous development and maintenance.

The fact that thinBASIC is designed for Windows only can be seen as disadvantage as well, for those who seek cross-platform tools. The speed of execution without the use of optimizations is lower compared to output of compilers, thanks to language interpreter nature. Another possible disadvantage could be that while there started some initiative on bringing object-oriented programming features to the language, it is still in its early stage, so programmers can use only the predefined classes, but they are not allowed to create his own at the moment.

Compatibility

thinBASIC has been developed under Microsoft Windows XP Professional using PowerBASIC,[12] and requires Internet Explorer version 5.50 or above.

See also

References

  1. ^ Olmi, E. ThinBASIC Help Manual. Introducing thinBASIC. Retrieved 2011-09-21
  2. ^ basic.mindteq.com. THINBASIC. Retrieved 2013-02-15
  3. ^ Olmi, E. ThinBASIC Help Manual. Numeric variables. Retrieved 2011-09-21
  4. ^ Olmi, E. ThinBASIC Help Manual. String variables. Retrieved 2011-09-21
  5. ^ Olmi, E. ThinBASIC Help Manual. Type. Retrieved 2011-09-21
  6. ^ SCHREIBER, P.; ONDROUŠEK, V.; VĚCHET, S.; KREJSA, J.. Parallelizing the Precomputed Scan Matching Method for Graphics Card processing. Proceedings of the 1st international conference Robotics in Education, RiE2010. 2010. p. 202
  7. ^ Olmi, E. ThinBASIC Help Manual. How to use. Retrieved 2011-09-21
  8. ^ Olmi, E. ThinBASIC Help Manual. How to use. Retrieved 2011-09-21
  9. ^ basic.mindteq.com. THINBASIC. Retrieved 2013-02-15
  10. ^ Olmi, E. ThinBASIC Help Manual. thinTools/thinDebug. Retrieved 2011-09-21
  11. ^ basic.mindteq.com. THINBASIC. Retrieved 2013-02-15
  12. ^ http://www.powerbasic.com Built with PowerBASIC!. Retrieved 2011-09-21

External links

  • Official web site
  • Community forum
  • Online help
  • Download page
  • thinAir, thinBasic official IDE
  • thinDebug, thinBasic Debugger
  • Graphics tutorials
  • thinBASIC Adventure Builder
  • PCOPY! Issue #40, November 16, 2007, About ThinBasic, Eros Olmi.
  • PCOPY! Issue #50, March 15, 2007, 3D graphics in ThinBASIC, Petr Schreiber.
  • ThinBasic Journal #1, July 5, 2008, PDF
  • ThinBasic Journal #2, November 26, 2008, PDF
  • MovieFX: Combining photo with 3D object, September 1, 2010
  • MovieFX: Blending based bokeh, January 1, 2011
  • ThinBasic review at basics.mindteq.com
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and USA.gov, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for USA.gov and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
 
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
 
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.
 


Copyright © World Library Foundation. All rights reserved. eBooks from Project Gutenberg are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.