블리츠 베이직

블리츠 베이직(Blitz BASIC)은 뉴질랜드 기반 개발자 마크 시블리가 고안한 최초의 블리츠The word "Blitz" means "lightning" in German. 컴파일러의 프로그래밍 언어 방언이다. 베이직에서 파생된 블리츠 문법은 프로그래밍을 처음 배우는 초보자가 쉽게 익힐 수 있도록 설계되었다. 이 언어는 게임 프로그래밍 지향적이지만, 대부분의 응용 프로그램 유형에 사용할 수 있을 만큼 범용적이다. 블리츠 언어는 새로운 제품이 출시됨에 따라 발전했으며, 최근 버전에서는 객체 지향 및 다중 스레딩과 같은 고급 프로그래밍 기술을 지원한다. 이로 인해 이 언어는 나중에 BASIC이라는 명칭을 잃게 되었다.

 역사 
블리츠 언어의 첫 번째 버전은 아미가 플랫폼용으로 만들어졌으며 오스트레일리아 회사인 메모리 앤 스토리지 테크놀로지(Memory and Storage Technology)에서 발행했다. 뉴질랜드로 돌아온 후, 블리츠 베이직 2는 몇 년 후(이 보도 자료에 따르면 1993년경) 지역 아미가 게임 퍼블리셔인 Acid Software에서 발행했다. 그 이후로 블리츠 컴파일러는 여러 플랫폼에서 출시되었다. 상업적으로 실용적인 플랫폼으로서 아미가가 사라진 후, 블리츠 베이직 2 소스 코드는 아미가 커뮤니티에 공개되었다. 개발은 오늘날까지 AmiBlitz라는 이름으로 계속되고 있다.

 블리츠베이직 
Idigicon은 2000년 10월 마이크로소프트 윈도우용 블리츠베이직을 출시했다. 이 언어는 기본적인 2D 그래픽 및 오디오 작업을 수행하기 위한 내장 API를 포함했다. 블리츠3D 출시 이후 블리츠베이직은 종종 블리츠2D와 동의어로 언급된다.

블리츠베이직의 인지도는 PC 포맷과 같은 인기 있는 영국 컴퓨터 잡지에 "무료" 버전이 제한적으로 배포되면서 높아졌다. 이로 인해 개발자와 퍼블리셔 간에 법적 분쟁이 발생했지만, 결국 원만하게 해결되었다.

 블리츠플러스 
2003년 2월, 블리츠 리서치(Blitz Research Ltd.)는 윈도우용 블리츠플러스를 출시했다. 블리츠3D의 3D 엔진은 없었지만, 네이티브 GUI 생성을 위한 제한적인 윈도우 제어 지원을 구현하여 언어의 2D 측면에 새로운 기능을 제공했다. 2D 엔진의 하위 호환성도 확장되어 컴파일된 블리츠플러스 게임 및 응용 프로그램이 DirectX 1만 지원하는 시스템에서도 실행될 수 있었다.

 블리츠맥스 

최초의 블리츠맥스 컴파일러는 2004년 12월 Mac OS X용으로 출시되었다. 이로써 *nix 플랫폼에서 컴파일될 수 있는 최초의 블리츠 방언이 되었다. 마이크로소프트 윈도우 및 리눅스용 컴파일러는 2005년 5월에 출시되었다. 블리츠맥스는 객체 지향 개념을 포함하도록 타입 시스템을 확장하고 OpenGL에 더 적합하도록 그래픽 API를 수정함으로써 현대 블리츠 제품군에 가장 큰 언어 구조 변화를 가져왔다. 블리츠맥스는 또한 ASCII가 아닌 문자로 구성된 문자열 리터럴에 대한 네이티브 지원을 허용하는 UCS-2를 사용하여 내부적으로 문자열을 표현하는 최초의 블리츠 언어였다.

블리츠맥스의 플랫폼 독립적인 명령 집합은 개발자가 여러 플랫폼에서 소스 코드를 컴파일하고 실행할 수 있도록 한다. 그러나 공식 컴파일러 및 빌드 체인은 실행 중인 플랫폼용 바이너리만 생성한다. 비공식적으로 사용자는 리눅스와 Mac OS X에서 윈도우 플랫폼으로 크로스 컴파일할 수 있었다.

블리츠맥스는 또한 블리츠 언어의 최초 모듈형 버전으로, 명령 집합의 확장성을 향상시킨다. 또한 컴파일러와 함께 제공되는 모든 표준 모듈은 오픈 소스이므로 필요한 경우 프로그래머가 수정하고 다시 컴파일할 수 있다. 공식 블리츠맥스 크로스 플랫폼 GUI 모듈(MaxGUI로 알려짐)은 개발자가 리눅스(FLTK), Mac(코코아), 윈도우에서 응용 프로그램용 GUI 인터페이스를 작성할 수 있도록 한다. 다양한 사용자 기여 모듈은 WxWidgets, 카이로, Fontconfig와 같은 라이브러리 및 다양한 데이터베이스 모듈을 래핑하여 언어의 사용을 확장한다. MiniB3D – 블리츠맥스에서 지원하는 세 가지 플랫폼 모두에서 컴파일 및 사용할 수 있는 오픈 소스 OpenGL 엔진을 비롯한 여러 타사 3D 모듈도 제공된다.

2007년 10월, 성찰 모듈이 추가된 블리츠맥스 1.26이 출시되었다. 블리츠맥스 1.32에는 새로운 스레딩 및 루아 스크립팅 모듈이 포함되었으며, 대부분의 표준 라이브러리 함수가 유니코드 친화적으로 업데이트되었다.BlitzMax V132 for Windows and MacIntel now up!  on blitzbasic.com

 블리츠3D SDK 
블리츠3D SDK는 블리츠3D 엔진을 기반으로 한 3D 그래픽 엔진이다. C++, C 샤프, 블리츠맥스, 퓨어베이직과 함께 사용하도록 판매되었지만, 호환 가능한 호출 규약을 따르는 다른 언어와도 사용할 수 있었다.

 Max3D 모듈 
2008년에 C++ 기반 크로스 플랫폼 3D 엔진인 Max3D의 소스 코드가 BSD 라이선스로 공개되었다. 이 엔진은 OpenGL에 중점을 두었지만 다른 그래픽 드라이버(예: DirectX)를 위한 추상화된 백엔드를 가졌고, Assimp, Boost, ODE와 같은 여러 오픈 소스 라이브러리를 사용했다.

블리츠 커뮤니티에서 Max3D가 블리츠3D의 오랫동안 기다려온 후속작이라는 기대에도 불구하고, 소스 코드 출시 직후 관심과 지원이 사라졌고 결국 개발은 중단되었다. 블리츠 리서치에서 이 프로젝트를 다시 시작할 것이라는 징후는 없다.

 오픈 소스 출시 
블리츠플러스는 2014년 4월 28일 깃허브에 오픈 소스로 Zlib 라이선스하에 공개되었다.BlitzPlus Source Code Released  by simonh (2014-04-29)Blitz3D open sourced!  on Blitz3D Forums by (2014) 블리츠3D도 곧이어 2014년 8월 3일 오픈 소스 소프트웨어로 공개되었다.Blitz3D Now Free and Open Source!  by simonh (2014-08-03)blitz3d on GitHub 블리츠맥스는 2015년 9월 21일 오픈 소스 소프트웨어로 출시되었다.blitzmax on GitHub

 평가 
블리츠 베이직 2.1은 아미가 잡지로부터 좋은 평가를 받았다. CU 아미가는 AMOS Basic과 달리 AmigaOS 호환 응용 프로그램과 게임을 만들 수 있는 능력을 강조했으며, 아미가 쇼퍼는 강력한 프로그래밍 언어라고 불렀다.

 예시 
화면에 출력하고, 키가 눌릴 때까지 기다린 다음 종료하는 Hello, World! 프로그램:Print "Hello, World!" ; Prints to the screen.
WaitKey()             ; Pauses execution until a key is pressed.
End                   ; Ends Program.세 가지 주요 데이터 유형(문자열, 정수형, 부동소수점)을 사용하여 변수를 선언하고 화면에 출력하는 프로그램:name$        = "John"   ; Create a string variable ($)
age          = 36       ; Create an integer variable (No Suffix)
temperature# = 27.3     ; Create a float variable (#)

print "My name is " + name$ + " and I am " + age + " years old."
print "Today, the temperature is " + temperature# + " degrees."

Waitkey()               ; Pauses execution until a key is pressed.
End                     ; Ends program.

현재 시간을 이진 및 십진 형식으로 표시하는 창 응용 프로그램을 생성하는 프로그램. 블리츠맥스 및 블리츠베이직 버전은 아래를 참조하십시오:

 BlitzBasic version BlitzMax versionAppTitle "Binary Clock"
Graphics 150,80,16,3

;create a timer that means the main loop will be
;executed twice a second
secondtimer=CreateTimer(2)

Repeat
 	Hour = Left(CurrentTime$(),2)
 	Minute = Mid(CurrentTime$(),4,2)
 	Second = Right(CurrentTime$(),2)

 	If Hour >= 12 Then PM = 1
 	If Hour > 12 Then Hour = Hour - 12
 	If Hour = 0 Then Hour = 12

 	;should do this otherwise the PM dot will be
 	;left up once the clock rolls past midnight!
 	Cls

 	Color(0,255,0) ;make the text green for the PM part
 	If PM = 1 Then Text 5,5,"PM"
 	;set the text colour back to white for the rest
 	Color(255,255,255)

 	For bit=0 To 5
        xpos=20*(6-bit)
        binaryMask=2^bit

        ;do hours
        If (bit<4)
            If (hour And binaryMask)
                Text xpos,5,"1"
            Else
                Text xpos,5,"0"
            EndIf
        EndIf

        ;do the minutes
        If (minute And binaryMask)
            Text xpos,25,"1"
        Else
            Text xpos,25,"0"
        EndIf

        ;do the seconds
        If (second And binaryMask)
 			Text xpos,45,"1"
        Else
 			Text xpos,45,"0"
        EndIf
    Next

    ;make the text red for the decimal time
    Color(255,0,0)
    Text 5,65,"Decimal: " + CurrentTime$()
    ;set the text back to white for the rest
    Color(255,255,255)

    ;will wait half a second
    WaitTimer(secondTimer)

ForeverImport BRL.Timer
Import BRL.TimerDefault
AppTitle = "Binary Clock"
Graphics 145,85

'create a timer that means the main loop will be
'executed twice a second
Local secondtimer:TTimer = CreateTimer(2)
Local Hour:Int
Local Minute:Int
Local Second:Int
Local PM:Int
local bit:Int
local xpos:Int
Local binaryMask:Int

Repeat
    Hour = CurrentTime()[..2].ToInt()
    Minute = CurrentTime()[4..6].ToInt()
    Second = CurrentTime()[6..].ToInt()

    If Hour >= 12 Then PM = 1
    If Hour > 12 Then Hour = Hour - 12
    If Hour = 0 Then Hour = 12

    'should do this otherwise the PM dot will be
    'Left up once the clock rolls past midnight!
    Cls

    SetColor(0,255,0) 'make the text green For the PM part
    If PM = 1 Then DrawText "PM",5,5
    'set the text colour back To white For the rest
    SetColor(255,255,255)

    For bit=0 Until 6
        xpos=20*(6-bit)
        binaryMask=2^bit

        'do hours
        If (bit < 4)
            If (hour & binaryMask)
                DrawText "1",xpos,5
            Else
                DrawText "0",xpos,5
            EndIf
        EndIf

        'do the minutes
        If (minute & binaryMask)
            DrawText "1", xpos,25
        Else
            DrawText "0", xpos,25
        EndIf

        'do the seconds
        If (second & binaryMask)
            DrawText "1",xpos,45
        Else
            DrawText "0",xpos,45
        EndIf
    Next

    'make the text red For the decimal time
    SetColor(255,0,0)
    DrawText "Decimal: " + CurrentTime(),5,65
    'set the text back To white For the rest
    SetColor(255,255,255)

 	Flip

    'will wait half a second
    WaitTimer(secondTimer)
 	If KeyHit(KEY_ESCAPE) Then Exit
Forever

 블리츠베이직으로 작성된 소프트웨어 

 Eschalon: Book I – BlitzMax
 Eschalon: Book II – BlitzMax
 Fairway Solitaire – BlitzMax
 GridWars – BlitzMax
TVTower (MadTV의 오픈 소스 클론) – BlitzMax
 플래티퍼스 – Blitz2D (Mac 포트, BlitzMax)
 SCP - Containment Breach – Blitz3D
 웜즈 – 원래 "Total Wormage"라는 제목으로 상업 출시 전 아미가에서 블리츠 베이직으로 개발됨IGN. Worms Blast Preview  on ign.com

 유산 
2011년에 BRL은 Monkey라는 크로스 플랫폼 프로그래밍 언어와 Mojo라는 첫 공식 모듈을 출시했다. Monkey는 BlitzMax와 유사한 구문을 가지고 있지만, 어셈블리 코드로 직접 컴파일하는 대신 Monkey 소스 파일을 선택한 언어, 프레임워크 또는 플랫폼(예: 윈도우, Mac OS X, iOS, 안드로이드, HTML5, 어도비 플래시)용 소스 코드로 직접 변환한다.

2015년부터 Monkey X의 개발은 마크 시블리가 언어의 업데이트 버전인 Monkey 2를 선호하여 중단되었다.

블리츠 베이직의 개발자인 마크 시블리는 2024년 12월 초에 사망했다.

 각주 

 더 읽을거리 
NRS Developer Book for Blitz Basic, 1997.
alt=NRS Developer Book Vol I - Photo of Book Cover|섬네일|NRS Developer Book Vol I - Book Cover 사진

 외부 링크 
 Blitz Research 하위 사이트 on Itch.io (BlitzPlus, Blitz 3D, Monkey X, Monkey 2)
 Monkey X 하위 사이트 (오픈 소스)
 Monkey 2 하위 사이트
 blitz-research (마크 시블리) on 깃허브 (BlitzPlus, BlitzMax, Blitz3D, Monkey, BlitzMax, Blitz3D for MSVC-CE 2017)
 Blitz Research 웹사이트 (아카이브 2017년 6월 3일)
 Monkey X 웹사이트 (아카이브 2017년 7월 15일)

분류:객체 지향 프로그래밍 언어
분류:베이직 프로그래밍 언어 계열
분류:베이직 컴파일러
분류:뉴질랜드의 비디오 게임
분류:비디오 게임 개발 소프트웨어
분류:Zlib 라이선스 소프트웨어
분류:비디오 게임 IDE