PureBasic

**PureBasic** là ngôn ngữ lập trình máy tính sử dụng thủ tục được phân phối thương mại và môi trường phát triển tích hợp dựa trên BASIC và được Fantaisie Software phát triển cho Microsoft Windows 32/64-bit, Linux 32/64-bit và macOS. Một phiên bản cho Amiga là có sẵn, mặc dù nó đã bị ngừng và một số phần của nó được phát hành dưới dạng mã nguồn mở. Bản phát hành công khai đầu tiên của PureBasic cho Windows là vào ngày 17 tháng 12 năm 2000. Phần mềm này đã được cập nhật liên tục kể từ đó.

PureBasic có một "mô hình giấy phép trọn đời". Như được trích dẫn trên trang web, người dùng PureBasic đầu tiên (đăng ký vào năm 1998) vẫn có quyền truy cập miễn phí vào các bản cập nhật mới nhất và điều này sẽ không thay đổi.

PureBasic biên dịch trực tiếp các tập lệnh x86, x86-64, PowerPC hoặc 680x0, tạo ra các tập tin thực thi độc lập nhỏ và các tập tin DLL không cần các tập tin thư viện đặc biệt mà chỉ cần các thư viện hệ thống chuẩn. Các chương trình được phát triển mà không sử dụng các giao diện lập trình ứng dụng cụ thể cho nền tảng (API) có thể được xây dựng dễ dàng từ cùng một tập tin nguồn mà gần như không phải sửa đổi gì.

PureBasic hỗ trợ hợp ngữ trên dòng lệnh, cho phép nhà phát triển đưa vào các lệnh hợp ngữ FASM trong mã nguồn PureBasic, trong khi sử dụng các biến được khai báo trong mã nguồn PureBasic, cho phép các lập trình viên có kinh nghiệm cải thiện tốc độ của các đoạn mã cần tốc độ. PureBasic hỗ trợ và đã tích hợp Môi trường 3D OGRE. Các môi trường 3D khác như Engine Irrlicht được hỗ trợ không chính thức.

## Ngôn ngữ lập trình
### Đặc điểm
PureBasic là một trình biên dịch BASIC 32 bit và 64 bit. Mã có tính di động cao. Các hệ thống được hỗ trợ hiện tại là Windows, Linux, macOS. Phiên bản AmigaOS hiện tại là di sản và mã nguồn mở. Trình biên dịch tạo ra các tệp thực thi rất nhanh, được tối ưu hóa cao và cú pháp của PureBasic rất đơn giản và dễ hiểu. Nó có thể biên dịch các ứng dụng giao diện điều khiển, các ứng dụng GUI, và các tệp DLL.

### Ví dụ Hello World
Dòng lệnh đơn giản sau của mã PureBasic sẽ tạo một tệp thực thi x86 độc lập (4,5 KB (4,608 byte) trên phiên bản Windows) hiển thị hộp thông báo có văn bản " Hello World ". 

```purebasic
MessageRequester("Message Box", "Hello World")
```


Và biến thể sau của cùng một mã nguồn, thay vào đó sử dụng một lệnh Windows API trên dòng lệnh mà không cần khai báo hoặc tham chiếu bên ngoài khác, sẽ tạo một tệp thực thi x86 độc lập 2.0 KB (2.048 byte) cho Windows.

```purebasic
MessageBox_(0, "Hello World", "Message Box", 0)
```


Sau đây là một phiên bản console của ví dụ Hello World.

```blitzbasic
OpenConsole()        ; Mở cửa sổ bảng điều khiển.
 Print("Hello, World!")
```


### Lập trình thủ tục
PureBasic là một ngôn ngữ "BASIC thế hệ thứ hai", với các điều kiện có cấu trúc và các vòng lặp, và lập trình hướng thủ tục được hỗ trợ. Người dùng không bắt buộc phải sử dụng các thủ tục, do đó, một lập trình viên có thể chọn kiểu mã hóa bao gồm Goto, Gosub Label và Return.

Dưới đây là một thủ tục mẫu để sắp xếp một mảng, mặc dù SortArray bây giờ là một hàm dựng sẵn của PureBasic. 

```blitzmax
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
```


Dưới đây là một chương trình mẫu hiển thị một trình soạn thảo văn bản khá lớn với hai mục menu.

```blitzmax
;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
```

Lưu ý rằng PureBasic không ngắt chuỗi bằng các dấu ngoặc kép vì vậy chúng phải được nối với Chr(34).

### Lập trình hướng đối tượng
Fred, nhà phát triển của PureBasic, đã tuyên bố rằng PureBasic sẽ không bao giờ hướng đối tượng. Tuy nhiên, nhiều người dùng đã tạo ra các hệ thống hỗ trợ hướng đối tượng.

## Chú thích

## Liên kết ngoài
* 
* 

;Bài báo
*  PureBasic - The Perfect Cross-Platform & Native Development Language
* A little PureBasic review

;Thư viện và mã nguồn mở
* Andre Beer's Open Source PB code archive