QB64

QB64
The QB64 logo
Deweloper Rob Galleon, zespół QB64
Po raz pierwszy pojawiły się 8 września 2007 ; 15 lat temu ( 2007-09-08 )
Wersja stabilna
2.0.2 / 7 listopada 2021 r .; 16 miesięcy temu ( 07.11.2021 )
system operacyjny Microsoft Windows , Linux , macOS
Licencja MIT
Strona internetowa www.qb64.com _ _
Pod wpływem
QuickBASIC , QBASIC

QB64 (pierwotnie QB32 ) to samodzielny kompilator języka BASIC dla systemów Microsoft Windows , Linux i Mac OS X , zaprojektowany tak, aby był kompatybilny z Microsoft QBasic i QuickBASIC . QB64 to emiter C++ , który jest zintegrowany z kompilatorem C++ w celu zapewnienia kompilacji za pomocą kodu C++ i optymalizacji GCC .

QB64 implementuje większość instrukcji QBasic i może uruchamiać wiele programów QBasic, w tym gry Microsoft QBasic Gorillas i Nibbles . Co więcej, QB64 został zaprojektowany tak, aby zawierał IDE przypominające QBASIC IDE. QB64 rozszerza także język programowania QBASIC o 64-bitowe typy danych, a także lepszą obsługę dźwięku i grafiki. Może także emulować niektóre funkcje specyficzne dla DOS/x86, takie jak INT 33h i wiele timerów.

Od wersji 2.0 QB64 oferuje teraz możliwości debugowania za pomocą nowej metakomendy $DEBUG .

Historia

QB64 został pierwotnie skompilowany z QuickBASIC 4.5. Po znaczącym rozwoju Rob Galleon, programista, napotkał trudności związane z ograniczeniami pamięci QuickBASIC-a i przeszedł na Microsoft Basic PDS 7.1, co na krótki czas rozwiązało te problemy. Po wersji 0.63 QB64 był w stanie się skompilować , więc konwencjonalne ograniczenia pamięci nie miały już zastosowania.

Jeśli chodzi o impuls dla QB64, Galleon powiedział:

Zacząłem dostrzegać potrzebę QB64, kiedy stało się jasne, że wprowadzenie VISTA sparaliżuje QBASIC, sprowadzając go do starożytnego języka, który można uruchomić tylko na emulatorach, które dają niewielkie/żadne szanse na wykorzystanie nowoczesnych funkcji komputerów. Właściwe kodowanie QB64 rozpoczęło się na początku tego roku i od tego czasu QB64 poczyniło stałe postępy. Miałem już doświadczenie w pisaniu języków programowania, więc z góry wiedziałem, jakie wyzwania mnie czekają.

Składnia

Składnia QB64 została zaprojektowana tak, aby była całkowicie kompatybilna wstecz z QuickBASIC-iem. Numery linii nie są wymagane, a instrukcje są kończone znakami nowej linii lub oddzielane dwukropkami ( : ).

Przykład „Hello, World!” program to:

  DRUKUJ  „Witaj, świecie!” 

Przykład emulacji pamięci VGA QB64 w celu zapewnienia kompatybilności:


  
   
     
              

 CLS  S$  =  „Witaj, świecie!”  DEF SEG  =  &  HB800  'ustawia segment na pamięć wideo  FOR  I  =  1  TO  LEN  (  S$  )  POKE  160  +  (  I  -  1  )  *  2  ,  ASC  (  MID$  (  S$  ,  I  ,  1  ))  'znak  NEXT  DEF SEG   'zresetuj segment do ustawień domyślnych 

Przykład tego, jak QB64 umożliwia pliki audio:

   
  sound_effect&  =  _SNDOPEN  (  "sound.wav"  )  'WAV, OGG lub MP3  _SNDPLAY  sound_effect& 

Przykład tego, jak QB64 umożliwia pliki obrazów:

    
   
 0 0 
   SCREEN  _NEWIMAGE  (  800  ,  600  ,  32  )  'tworzy 32-bitową  nazwę obrazu ekranu&  =  _LOADIMAGE  (  "image__name.png"  )  'BMP, JPG, PNG itp.  _PUTIMAGE  (  ,  ),  nazwa obrazu&  _FREEIMAGE  nazwa obrazu&  'zwolnij przypisaną pamięć 

Przykład wykorzystania wielu timerów przez QB64:

  
  
    

   



 t1  =  _FREETIMER  t2  =  _FREETIMER  NA TIMERZE  (  t1  ,  1  )  GOSUB  Timer  .  Trap  'kod następujący po etykiecie Timer.Trap będzie uruchamiany co 1 sekundę  ON TIMER  (  t2  ,  .5  )  mySub  'QB64 może również wywołać procedurę SUB za pomocą TIMER;  ' w tym przypadku mySUB będzie uruchamiany co 500 milisekund  'aktywuj timery:  TIMER  (  t1  )  
 

 
      



 


 
     
  ON  TIMER  (  t2  )  ON  DO  'przejdź do nieskończonej pętli, aż okno się zamknie  _LIMIT  1  'uruchom główną pętlę z szybkością 1 cyklu na sekundę, aby pokazać, jak timery są niezależne od głównego przebiegu programu  LOOP  Timer  .  Pułapka:  WYDRUKUJ  „1s;”  ;  POWRÓT  SUB  mySub  PRINT  "500ms; "  ;  KONIEC  POD 

Rozszerzenia do QBASIC-a

Rozszerzone polecenia QB64 zaczynają się od podkreślenia , aby uniknąć konfliktów z nazwami, które mogą być użyte w programie QuickBASIC. Począwszy od wersji 1.4, przedrostek podkreślenia można usunąć za pomocą metakomendy $NOPREFIX . QB64 rozszerza język QuickBASIC na kilka sposobów. Dodaje nowe typy danych , w tym _BIT , _BYTE , _INTEGER64 i _FLOAT , a także typy danych bez znaku . Nowe typy danych mają przyrostki podobnie jak tradycyjne typy danych BASIC. QB64 zawiera również bibliotekę audio , która umożliwia odtwarzanie najpopularniejszych formatów audio, w tym plików MP3 , Ogg Vorbis i WAV , a także biblioteki umożliwiające użytkownikom korzystanie z grafiki o wyższej rozdzielczości niż 640×480 oferowanej przez QuickBASIC, używanie różnych czcionek i kreślenie obrazów w formacie BMP , PNG i JPEG formaty. Umożliwia także użycie kolorów 32-bitowych w przeciwieństwie do pierwotnie oferowanych ograniczonych 256 (lub 16, w zależności) kolorów. Programista nie musi także określać, które biblioteki programistyczne ma uwzględnić, ponieważ QB64 robi to automatycznie. Programista ma możliwość dołączenia własnej biblioteki za pomocą $INCLUDE, tak jak zrobił to QuickBASIC .

Kolejną istotną funkcją, która została dodana, jest obsługa sieci. Początkowo umożliwiało to otwarcie strumienia TCP/IP, który można było odczytywać i zapisywać przy użyciu Wejście#/Print# . Tryb ten ma swój własny, zastrzeżony format enkapsulacji pakietów, który choć jest łatwy w użyciu z QBasic, oznacza, że ​​może być używany tylko do komunikacji z innymi programami QB64 lub backendami serwerów z niestandardowymi interfejsami stworzonymi specjalnie dla aplikacji. Późniejsze wersje dodają GET# i PUT# do odczytu i zapisu surowych bajtów ze strumienia. Umożliwia to natywne implementacje standardowych protokołów, takich jak smtp i http.

Zalety QB64

  • Obsługuje różne formaty plików, a także zapewnia dostęp do schowka.
  • QB64 zapewnia natychmiastowy dostęp do 32-bitowych plików graficznych (najpopularniejsze formaty).
  • QB64 zapewnia natychmiastowy dostęp do kilku formatów audio.
  • Jest obsługiwany przez większość nowoczesnych systemów operacyjnych, więc nie jest wymagana emulacja.

Biblioteki

QB64 integruje FreeGLUT ze względu na grafikę i tekst.

Gałąź rozwojowa repozytorium hostowanego na GitHubie jest często aktualizowana o poprawki i ulepszenia, które ostatecznie staną się kolejną stabilną wersją. Wersje rozwojowe są również oferowane za pośrednictwem oficjalnej strony internetowej, aby użytkownicy mogli przetestować wersję beta.

QB64 może także używać bibliotek DLL dla nagłówków Windows i C++ z blokiem DECLARE LIBRARY. Użytkownicy mogą również uzyskać dostęp do plików nagłówkowych C w celu uruchomienia funkcji C.

Widelce

Ze względu na wstrząsy w społeczności w 2022 r. istnieją obecnie co najmniej dwa rozwidlenia projektu QB64. Repozytorium Github „QB64 Team” nie jest już aktywne, a cały rozwój odbywa się w nowych forkach:

Linki zewnętrzne