FreeBASIC

FreeBASIC — Sintaksisi boʻyicha QuickBASICga eng yaqin boʻlgan yuqori darajadagi dasturlash tili, shuningdek uning uchun kompilyator (FreeBASIC Compiler). Boshida kompilyator Microsoft QuickBasicning erkin alternativasi sifatida yaratilayotgan edi, lekin tez fursatda yangi imkoniyatlarga ega boʻldi va kuchli dasturlash vositasiga aylandi. Garchi birinchi versiyalari Visual Basicda yozilgan boʻlsada, endi u oʻzini oʻzi kompilyatsiya qila oladi.

Kompilyator 
QBasic va FreeBASIC kodni 32 va 64-bit Win32, DOS (himoyalangan rejimda) va Linux x86 modullariga kompilyatsiya qiladi.

Assemblerlash va tarkiblash GNU Binutils yordamida amalga oshiriladi.

Kompilyator GNU GPL shartlari tarqatiladi, standart biblioteka esa — GNU LGPLda.

Bir nechta dasturlash muhiti mavjud, tuzatgich sifatida GNU Debuggerni ishlatish mumkin (shuningdek gprof ham qoʻllaniladi).

Til 
Kompilyator QuickBasic bilan mos kelishiga qaramasdan, zamonaviy talablarga, standartlarga mos kelishi uchun hamda C/C++da yozilgan biblioteka va APIga mos kelishi uchun FreeBASIC tiliga koʻp kengaytma va imkoniyatlar qoʻshilgan. 0.17 versiyasida boshlab foydalanuvchi kompilyatsiya qilishning uchta tartibdan birini tanlashi mumkin (-lang sozlanmasi): QuickBASIC (qb) bilan, FreeBASICning eski versiyalari bilan  (deprecated) moslik tartibi va barcha oxirgi oʻzgarishlar va imkoniyatlarni oʻz ichiga oluvchi standart tartib (fb).

Yangi imkoniyatlar va kengaytmalar 
 Yunikodni qoʻllanilishi.
 Oʻzgaruvchilarning koʻpchilik oʻrnatilgan turlari (Byte, UByte, Short, UShort, Integer, UInteger, LongInt, ULongInt, Single, Double, Boolean, String, ZString, WString).
 Foydalanuvchi tomonidan aniqlanadigan maʼlumotlar turi (cheksiz solinish, Union, maydon turi (array, function, bit fields)).
 Nomfazolar.
 Sanaladigan tur (Enum).
 Massivlar bilan ishlashda yangi imkoniyatlar (2 GB oʻlchamgacha, Redim Preserve).
 Koʻrsatkichlar (ixtiyoriy maʼlumotlar turiga koʻrsatkichlar, cheksiz bilvosita murojaat qilish).
 Funksiya va operatorlarni qayta yuklash.
 Funksiyalarning majburiy boʻlmagan argumentlari.
 Oʻrnatilgan assembler (dastur manba kodida assembler instruksiyalari).
 Preprotsessorlar.
 Typedefs.
 Sinflarning konstruktor va destruktorlari.
 Kengaytirilgan grafik bibliotekasi.

Amaliy dasturlash funksiyalari bibliotekalarini qoʻllab-quvvatlashi 
 Interfeyslar yaratish: GTK, FLTK, IUP, WINAPI va b.
 Muntazam ifodalar: PCRE
 IE va Microsoft Office avtomatizatsiyasi: Disphelper
 Ovoz: BASS, fbsound, FMOD va b.
 Grafika: Сairo, FreeType, Allegro, DevIL, FreeImage, DISLIN va b.
 PDF yaratish: CD, LibHaru 
 Maʼlumotlar bazasi: mysql, sqlite, postgresql
 Tarmoq: Curl va b.
 Arxivlar: Zlib, libzip va b.

Dasturlar misollari

Hello, World! 
FreeBASICning oʻrnatilgan bibliotekasini ishlatgan holda:
Print "Hello, World!"

C standart bibliotekasini ishlatgan holda:
#Include "crt.bi"

puts(!"Hello, World!\n")

Windows APIni ishlatgan holda:
#Include "windows.bi"

MessageBox(Null, "Hello, World!", "Message", MB_OK)

Obyektga moʻljallangan dasturlash 
' Vektor sinfi
Type Vector
	W As Integer
	H As Integer
	Declare Constructor(nW As Integer, nH As Integer)
End Type
 
Constructor Vector(nW As Integer, nH As Integer)
	W = nW
	H = nH
End Constructor
 
' Obyekt yaratish uchun sinf
Type AObject
	Private:
		X As Integer
		Y As Integer
		Movement As Vector Pointer
	Public:
		' Tashqarida koʻrinadigan metodlar, konstruktor va destruktor bilan birga
		Declare Constructor(nX As Integer, nY As Integer)
		Declare Destructor()
		Declare Sub SetMotion (Motion As Vector Pointer)
		Declare Sub Move()
		Declare Property GetX As Integer
End Type
 
' Boshlangʻich qiymatlarni oʻrnatish
Constructor AObject(nX As Integer, nY As Integer)
	X = nX
	Y = nY
End Constructor
 
' Xotirani boʻshatish
Destructor AObject()
	Delete Movement
End Destructor
 
' Vektorni oʻrnatish
Sub AObject.SetMotion(Motion As Vector Pointer)
	Movement = Motion
End Sub
 
' Obyektni vektor boʻyicha koʻchirish
Sub AObject.Move()
	X += Movement->W
	Y += Movement->H
End Sub
 
' Tashqaridan ruxsat berilmagan X koordinatasini qaytaradi
Property AObject.GetX As Integer
	Return X
End Property
 
' Dasturning haqiqiy boshlanish joyi 
 
' Sinf nusxasini koordinatalar (100, 100) bilan yaratish
Dim Player As AObject = Type<AObject>(100, 100)
 
' Vektorni boshlangʻich qiymatlar bilan yaratish (-10, 5) va obyekt oʻrnini koʻchirish
Player.SetMotion(New Vector(-10, 5))
 
' Obyektni koʻchirish
Player.Move()
 
' X koordinatasini olamiz va konsolga chiqaramiz
Print Player.GetX
 
' «Player» obyekti destruktori, qachonki obyekt koʻrinish zonasini tark etganda chaqiriladi
' «Player» mahalliy oʻzgaruvchi boʻlganligi uchun destruktor avtomatik chaqiriladi

'Ixtiyoriy tugmacha bosilishini kutamiz
Sleep

Izoh

Yana qarang 
 QB64

Manbalar 
 FreeBASIC Manual

Havolalar 
 
 Rus tilidagi sayt 
 Rus tilidagi forum

IDE
 FBIde — FreeBASIC uchun IDE
 FbEdit — FreeBasic uchun yana bir IDE
 WinFBE - Windows uchun zamonaviy FreeBASIC IDE
 VisualFBEditor — FreeBASIC uchun IDE

Basic
Kompilyatorlar
Basic kodi misollari bor maqolalar
Erkin kompilyatorlar va interpretatorlar