프리베이직
1. 개요
프리베이직(FreeBASIC)은 GNU Binutils를 사용하여 콘솔 및 GUI 애플리케이션을 생성하는 BASIC 계열의 프로그래밍 언어이다. C, C++ 라이브러리를 지원하며, C 스타일 전처리기, 매크로, 조건부 컴파일 등을 제공한다. 초기에는 Microsoft QuickBASIC 구문을 에뮬레이션하여 호환성을 유지하면서 객체, 연산자 오버로딩, 네임스페이스 등 현대적인 기능을 지원한다. FBgfx를 통해 QuickBASIC 호환 그래픽 지원을 제공하며, OpenGL 또는 DirectX를 백엔드로 사용한다. fb, fb-lite, qb의 세 가지 언어 방언을 지원하며, GNU 컴파일러 컬렉션의 프런트 엔드가 되는 것을 목표로 개발이 진행 중이다.
| 이름 | FreeBASIC |
|---|
이미지 준비중입니다.
이미지 준비중입니다.
| 웹사이트 | FreeBASIC 공식 웹사이트 |
|---|
| 설계자 | Andre Victor |
|---|---|
| 개발자 | FreeBASIC 개발팀 |
| 첫 공개 년도 | 2004년 |
| 최신 버전 | 1.10.1 |
| 최신 릴리스 날짜 | 2023년 12월 25일 |
| 프로그래밍 패러다임 | 절차적 프로그래밍 객체 지향 프로그래밍 |
|---|---|
| 타이핑 | 정적 |
| 영향 받은 언어 | QuickBASIC C |
| 운영 체제 | MS-DOS FreeBSD 리눅스 마이크로소프트 윈도우 |
| 라이선스 | GNU GPLv2+ GNU LGPLv2+ 표준 라이브러리 |
|---|
-
베이직 컴파일러 -
비주얼 베이직
비주얼 베이직은 1991년 마이크로소프트에서 출시된 GUI 기반 응용 프로그램 개발에 강점을 가진 프로그래밍 언어이며, 윈도우용 응용 프로그램 및 데이터베이스 조작 프로그램 개발에 주로 사용되었고, 2005년 표준 지원이 중단되었다. -
베이직 컴파일러 -
퀵베이직
퀵베이직은 마이크로소프트에서 개발한 BASIC 프로그래밍 언어로, 통합 개발 환경을 통해 코드 편집과 디버깅을 지원하며, 현재는 취미 프로그래머 커뮤니티에서 활용되고 빈티지 컴퓨터에서도 사용된다. -
자유 라이브러리 -
Tk (소프트웨어)
Tk는 Tcl 스크립팅 언어의 크로스 플랫폼 GUI 툴킷으로, 다양한 플랫폼 이식과 여러 프로그래밍 언어 바인딩을 지원하며 사용자 정의 가능한 위젯들을 제공한다. -
자유 라이브러리 -
SQLite
SQLite는 D. 리처드 히프가 설계한 서버리스 구조의 임베디드 SQL 데이터베이스 엔진으로, 별도의 DBMS 없이 프로그램에 통합되어 작동하며 전체 데이터베이스를 단일 파일로 저장하는 특징이 있고, 다양한 운영체제와 환경에서 널리 사용된다. -
2004년 소프트웨어 -
DragonFly BSD
DragonFly BSD는 FreeBSD에서 파생되어 모놀리식 커널과 마이크로커널의 장점을 결합한 하이브리드 커널 구조를 채택한 자유 운영 체제로, HAMMER 및 HAMMER2 파일 시스템 지원, CPU별 스레드 스케줄러, 유저랜드 가상 커널 기능 등을 제공한다. -
2004년 소프트웨어 -
구글 데스크톱
구글 데스크톱은 컴퓨터 내 파일, 이메일, 웹 검색 기록 등을 빠르게 검색하는 데스크톱 검색 프로그램으로, 윈도우, 맥 OS X, 리눅스 운영체제를 지원했으나 개인 정보 보호 문제 등으로 2011년 서비스가 종료되었다.
2. Compiler features
GNU Binutils를 백엔드로 사용하여 콘솔 및 그래픽 사용자 인터페이스 애플리케이션을 생성한다. C 정적 및 동적 라이브러리 연결 및 생성을 지원하며, C++ 라이브러리에 대한 제한적인 지원도 제공한다. 따라서 FreeBASIC에서 컴파일된 코드는 대부분의 네이티브 개발 환경에서 재사용할 수 있다.
최적화 컴파일러는 아니지만, 선택적으로 C로 트랜스파일하여 최적화와 함께 컴파일할 수 있다. 인라인 어셈블리, 멀티스레딩을 지원하며, 자동 가비지 수집은 사용하지 않는다.
C 스타일 전처리, 다중 행 매크로, 조건부 컴파일 및 파일 포함이 지원된다. 전처리기는 또한 언어 방언과 같은 기호 정보 및 컴파일러 설정에 접근할 수 있다.
2.1. Syntax
FreeBASIC은 QuickBASIC 구문을 최대한 가깝게 에뮬레이션하며, 지속적인 발전을 통해 객체, 연산자 오버로딩, 함수 오버로딩, 네임스페이스 등과 같은 현대적인 기능도 지원한다.
줄 바꿈 문자는 문장의 끝을 나타내며, 밑줄(_)을 사용하여 문장을 여러 줄에 분산시킬 수 있다. 콜론(:)으로 각 문을 구분하여 여러 문장을 한 줄에 쓸 수도 있다.
주석은 블록 주석과 줄 끝 주석을 모두 지원한다. 아포스트로피(')는 줄 끝 주석에 사용되고, /'와 '/는 블록 주석에 사용된다.
FreeBASIC은 대소문자를 구분하지 않으며, BASIC, 특히 QuickBASIC과 유사한 구문을 따른다. 동시에 최신 코딩 기술을 도입하여 표준 절차적 프로그래밍 기능 외에도 객체 지향적인 데이터 형식이나 객체 개념을 통해 연산자 및 함수의 오버로드, 네임스페이스와 같은 기능을 추가했다.
FreeBASIC에서 행의 끝은 개행 코드 또는 콜론으로 나타낸다. 따라서 C 언어의 세미콜론과 같은 특별한 행 끝 기호는 필수가 아니다. 여러 줄의 코드를 작성하는 경우, 개행하기 전에 콜론으로 구분한다.
주석은 행 단위 주석과 블록 단위 주석이 있으며, 행 단위 주석은 작은따옴표(')로 시작하고, 블록 주석은 /'로 시작하여 '/로 끝난다. 블록 주석은 중간에 개행 코드가 있어도 된다.
2.2. Graphics library
FreeBASIC은 `SCREEN` 명령을 호출하는 프로그램에 자동으로 포함되는 FBgfx를 통해 내장된 QuickBASIC 호환 그래픽 지원을 제공한다. 백엔드는 기본적으로 리눅스에서는 OpenGL을, 마이크로소프트 윈도우에서는 DirectX를 사용한다. 이러한 추상화 덕분에 FBgfx 그래픽 코드는 크로스 플랫폼 호환이 가능하다. 하지만, FBgfx는 하드웨어 가속을 지원하지 않는다.
OpenGL 또는 Windows API와 같은 외부 그래픽 유틸리티에 익숙한 사용자는 내장 그래픽 라이브러리를 방해하지 않고 사용할 수 있다. FreeBASIC에는 QuickBASIC 호환의 내장 2차원 그래픽스 라이브러리가 있으며, 기본적인 그리기(사각형, 직선, 원 등) 및 BitBlt가 가능하며, 동시에 QuickBASIC에는 없었던 기능도 추가되었다. 라이브러리 자체는 OS에 독립적이며, 코드는 이식성이 있다.
그래픽스 라이브러리는 내장이지만, FBgfx Screen 명령을 사용하여 사용을 선언하지 않으면 사용할 수 없다. OpenGL 및 플랫폼의 GUI에 따른 윈도우 생성은 별도 라이브러리로 존재한다.
2.3. Language dialects
FreeBASIC은 이전 스타일의 구문을 깨뜨려야 하는 변경 사항이 있었다. 이전 구문을 사용하여 작성된 프로그램을 계속 지원하기 위해 FreeBASIC은 다음과 같은 방언(dialect)을 지원한다.
* 기본 방언 ('-lang fb'): 모든 새로운 컴파일러 기능을 지원하며 구식 구문은 허용하지 않는다.
* FB-lite 방언 ('-lang fblite'): 이전 스타일의 프로그래밍 외에도 대부분의 새로운 객체 지향이 아닌 기능의 사용을 허용한다. 암시적 변수, 접미사, `GOSUB` / `RETURN`, 숫자 레이블 및 기타 기능이 이 방언에서 허용된다.
* QB 방언 ('-lang qb'): QuickBASIC 동작을 복제하려고 시도하며 수정 없이 많은 QuickBASIC 프로그램을 컴파일할 수 있다.
`-lang` 옵션을 통해 방언을 설정할 수 있다.
* `-lang fb`: FreeBASIC의 최신 기능을 모두 사용할 수 있다.
* `-lang deprecated`: 이전 버전의 FreeBASIC과 호환되는 구문을 사용할 수 있다.
* `-lang qb`: 가능한 한 QuickBASIC 호환 구문을 사용할 수 있다. QuickBASIC과의 호환성을 손상시키는 새로운 기능은 사용할 수 없다.
3. 예시 코드
vbnet
Print "Hello, World!"
sleep:end '주석, 프로그램 창이 즉시 닫히는 것을 방지합니다.
```
표준 프로그램인 "Hello, World!" 프로그램은 QuickBASIC과 마찬가지로 수행된다.
```vbnet
Type Vector
Private:
x As Integer
y As Integer
Public:
Declare Constructor (nX As Integer = 0, nY As Integer = 0)
Declare Property getX As Integer
Declare Property getY As Integer
End Type
Constructor Vector (nX As Integer, nY As Integer)
x = nX
y = nY
End Constructor
Property Vector.getX As Integer
Return x
End Property
Property Vector.getY As Integer
Return y
End Property
```
FreeBASIC은 객체 지향 기능에 대한 지원을 추가하여 메서드, 생성자, 동적 메모리 할당, 속성 및 임시 할당과 같은 기능을 제공한다.
```vbnet
Dim As Vector Ptr player = New Vector()
*player = Type
Print player->getX
Print player->getY
Delete player
Sleep '프로그램 창이 즉시 닫히는 것을 방지합니다.
```
```vbnet
print "Hello, World!"
sleep
```
두 경우 모두, 이 언어는 학습 목적에 적합하다.