버전 1.3 기준 QB64 언어 로고 | |
| 개발자 | 롭 갈레온(Rob Galleon), QB64Team |
|---|---|
| 발표일 | 2007년 9월 8일 |
| 최근 버전 | 2.1 |
| 최근 버전 출시일 | 2022년 9월 9일 |
| 운영 체제 | 마이크로소프트 윈도우, 리눅스, macOS |
| 라이선스 | MIT |
| 웹사이트 | qb64 |
| 영향을 받은 언어 | |
| 퀵베이직, 큐베이직 | |
QB64(원래 이름은 QB32)는 마이크로소프트 윈도우, 리눅스, macOS를 위한 자체 호스팅 베이직 컴파일러이며, 마이크로소프트 큐베이직 및 퀵베이직과 호환되도록 설계되었다. QB64는 C++로 변환하는 트랜스파일러이며, C++ 코드와 GCC 최적화를 통한 컴파일을 제공하기 위해 C++ 컴파일러와 통합되어 있다.
QB64는 대부분의 큐베이직 구문을 구현하며, 마이크로소프트의 큐베이직 게임인 고릴라 및 니블을 포함한 많은 큐베이직 프로그램을 실행할 수 있다. 또한 큐베이직 IDE와 유사한 IDE를 포함하도록 설계되었다. QB64는 큐베이직 프로그래밍 언어를 확장하여 64비트 자료형을 포함하고, 사운드 및 그래픽 지원을 개선했다. 또한 INT 33h 마우스 액세스 및 다중 타이머와 같은 일부 DOS/x86 특화 기능을 에뮬레이션할 수 있다.
버전 2.0부터 QB64는 새로운 $DEBUG 메타명령을 통해 디버깅 기능을 제공한다.
QB64는 원래 퀵베이직 4.5로 컴파일되었다. 상당한 개발 이후, 개발자인 롭 갈레온은 퀵베이직의 메모리 제한으로 어려움을 겪었고 마이크로소프트 베이직 PDS 7.1로 전환하여 잠시 동안 이 문제를 해결했다. 버전 0.63 이후, QB64는 스스로를 컴파일할 수 있게 되어 더 이상 기본 메모리 제한의 영향을 받지 않게 되었다.
QB64의 동기에 관하여, 갈레온은 다음과 같이 말했다:
비스타의 도입이 큐베이직을 마비시키고, 에뮬레이터에서만 실행 가능한 고대 언어로 전락시켜 현대 컴퓨터의 기능을 활용할 기회를 거의 주지 않게 될 것이 분명해졌을 때 QB64의 필요성을 느끼기 시작했다. QB64의 실제 코딩은 올해 초에 시작되었으며 그 이후로 꾸준히 발전했다. 나는 이전에 프로그래밍 언어를 작성해 본 경험이 있었기 때문에 어떤 도전들이 기다리고 있는지 미리 알고 있었다.
2016년부터는 그래픽 사용자 인터페이스 빌더와 이벤트 기반 통합 개발 환경인 InForm 작업이 시작되어, 비주얼 베이직과 유사한 기능을 제공하게 되었다.
QB64의 문법은 퀵베이직과 완전히 하위 호환되도록 설계되었다. 줄 번호는 필요하지 않으며, 문장은 새줄 문자로 끝나거나 콜론(:)으로 구분된다.
"Hello, World!" 프로그램 예시는 다음과 같다:
PRINT "Hello, World!"
호환성을 위한 VGA 메모리의 QB64 에뮬레이션 예시:
CLS
S$ = "Hello, World!"
DEF SEG = &HB800 '세그먼트를 비디오 메모리로 설정
FOR I = 1 TO LEN(S$)
POKE 160 + (I - 1) * 2, ASC(MID$(S$, I, 1))'문자
NEXT
DEF SEG '세그먼트를 기본값으로 재설정
QB64에서 오디오 파일을 허용하는 예시:
sound_effect& = _SNDOPEN("sound.wav") 'WAV, OGG 또는 MP3
_SNDPLAY sound_effect&
QB64에서 그림 파일을 허용하는 예시:
SCREEN _NEWIMAGE(800, 600, 32) '32비트 화면 생성
imagename& = _LOADIMAGE("image__name.png") 'BMP, JPG, PNG 등.
_PUTIMAGE (0, 0), imagename&
_FREEIMAGE imagename& '할당된 메모리 해제
QB64에서 다중 타이머를 사용하는 예시:
t1 = _FREETIMER
t2 = _FREETIMER
ON TIMER(t1, 1) GOSUB Timer.Trap 'Timer.Trap 레이블 다음 코드가 1초마다 실행됨
ON TIMER(t2, .5) mySub 'QB64는 TIMER로 SUB 프로시저도 트리거할 수 있음;
' 이 경우 mySUB는 500밀리초마다 트리거됨
'타이머 활성화:
TIMER(t1) ON
TIMER(t2) ON
DO '창이 닫힐 때까지 무한 루프
_LIMIT 1 '타이머가 메인 프로그램 흐름과 독립적임을 보여주기 위해 메인 루프를 초당 1회 주기로 실행
LOOP
Timer.Trap:
PRINT "1s; ";
RETURN
SUB mySub
PRINT "500ms; ";
END SUB
QB64의 확장 명령어는 퀵베이직 프로그램에서 사용될 수 있는 이름과의 충돌을 피하기 위해 밑줄 문자로 시작한다. 버전 1.4부터는 $NOPREFIX 메타명령을 사용하여 밑줄 접두사를 생략할 수 있다.
QB64는 퀵베이직 언어를 여러 방식으로 확장한다. _BIT, _BYTE, _INTEGER64, _FLOAT를 포함한 새로운 자료형과 unsigned 자료형을 추가한다. 새로운 자료형들은 전통적인 베이직 자료형과 마찬가지로 접미사를 가진다. QB64는 또한 MP3, Vorbis, WAV 파일을 포함한 대부분의 일반적인 오디오 형식을 재생할 수 있는 오디오 라이브러리와, 퀵베이직이 제공하는 640×480 해상도보다 높은 그래픽을 사용할 수 있도록 해주는 라이브러리, 다른 글꼴을 사용하고 BMP, PNG, JPEG 형식으로 이미지를 그릴 수 있는 라이브러리를 포함한다. 또한 원래 제공되었던 제한된 256(또는 16) 색상 대신 32비트 색상을 사용할 수 있다.
또한 QB64가 자동으로 처리하므로 프로그래머가 포함할 프로그래밍 라이브러리를 지정할 필요가 없다. 프로그래머는 퀵베이직과 마찬가지로 $INCLUDE 명령을 통해 자신만의 라이브러리를 포함할 수 있다.
추가된 또 다른 중요한 기능은 네트워킹이다. 초기에는 Input#/Print# 명령을 사용하여 읽고 쓸 수 있는 TCP/IP 스트림을 열 수 있었다. 이 모드에는 고유한 독점 패킷 캡슐화 형식이 있었는데, 이는 큐베이직에서 사용하기는 쉽지만 다른 QB64 프로그램이나 특정 애플리케이션을 위해 제작된 사용자 지정 인터페이스가 있는 서버 백엔드와 통신하는 데만 사용할 수 있었다. 이후 버전에서는 스트림에서 원시 바이트를 읽고 쓰기 위한 GET#와 PUT#가 추가되었다. 이를 통해 SMTP 및 HTTP와 같은 표준 프로토콜의 네이티브 구현이 가능해졌다.
QB64는 그래픽과 텍스트를 위해 FreeGLUT를 통합한다.
깃허브에서 호스팅되는 저장소의 개발 브랜치는 수정 사항과 개선 사항으로 자주 업데이트되며, 이는 결국 다음 안정화 릴리스가 된다. 개발 빌드는 사용자가 베타 테스트를 할 수 있도록 공식 웹사이트를 통해서도 제공된다.
QB64는 또한 윈도우용 DLL 라이브러리와 DECLARE LIBRARY 블록이 포함된 C++ 헤더를 사용할 수 있다. 사용자는 C 헤더 파일에 액세스하여 C 함수를 실행할 수도 있다.
2022년 커뮤니티의 개편으로 인해, 현재 최소 두 개의 QB64 프로젝트 포크가 존재한다. "QB64 Team" 깃허브 저장소는 더 이상 활성화되어 있지 않으며, 모든 새로운 개발은 새로운 포크에서 이루어지고 있다:
QB64 comes with a WYSIWYG IDE editor called InForm which brings it closer to everyday use as a quick and dirty language for automation for Windows.
So does QB64, although the dust has yet to completely settle over a split among its developers. A community called QB64 Phoenix is actively developing a new Phoenix Edition.