RSS

Po prostu BASIC

Liczba odsłon: 373

Beginners' All-purpose Symbo­lic Instruc­tion Code. W skrócie: BASIC. Jest z nami od bardzo dawna, lecz przez lata stra­cił na znacze­niu, kiedyś tak wielkim.

Gdy pod koniec lat siedem­dzie­siątych ubieg­łego wieku rozpo­częto opraco­wy­wanie pierw­szych popu­lar­nych mikro­kompu­terów domo­wych – takich jak Sin­clair ZX-80/81, ZX Spec­trum czy Atari 800XL – nie można było zakła­dać istnie­nia bogatej bazy goto­wego opro­gramo­wania. Konieczne stało się zatem udostęp­nienie użytkowni­kowi możli­wości two­rzenia włas­nych prog­ramów, a to wyma­gało zaimplemen­to­wania możliwie pros­tego do nau­czenia języka programo­wania.

Szczęś­liwie język taki istniał od ponad 15 lat. Już sam skrót nazwy – BASIC – odzwier­ciedlał jego prostotę. Kolejne wiersze prog­ramu opat­rzone były nume­rami, skład­nia była względnie natu­ralna, bez zbędnych sym­boli kończą­cych wyra­żenia lub towarzy­szących wywo­łaniom funkcji, a zmienne można było two­rzyć „w biegu”, bez koniecz­ności ich wcześ­niej­szego deklaro­wania. Wystar­czyło zapisać bieg myśli progra­misty pros­tymi wyraże­niami, by uzyskać gotowy program:

 10 CLS
 20 PRINT "WARTOSCI FUNKCJI SIN(X):"
 30 FOR X=0 TO 3.14 STEP 0.25
 40 PRINT X, SIN(X)
 50 NEXT X

Wielką zaletą języka BASIC była też moż­liwość wykony­wania poleceń w trybie bezpoś­rednim, bez pisania programu. Można było nawet łączyć pracę w trybie bezpoś­rednim i trybie reali­zacji prog­ramu: jeżeli program został przer­wany w wyniku błędu lub działa­nia użytkow­nika, można było dokonać spraw­dzenia wartości zmien­nych, zmodyfi­kować je i wznowić działanie prog­ramu od dowol­nego miejsca. Było to możliwe, ponieważ program w języku BASIC był na bieżąco inter­preto­wany: kolejne pole­cenia (naj­częściej zapisane w pamięci w postaci lekko skompreso­wanej, jako tak zwane tokeny) były rozpozna­wane przez trans­lator i wykony­wane na bieżąco.

Commodore BASIC V2
Commodore BASIC 2.0; prezen­tacja możli­wości modyfiko­wania zmien­nych w czasie działania prog­ramu (nawet po wystą­pieniu błędu) oraz funkcji kontynuo­wania działania prog­ramu od miejsca przer­wania

Ceną za pros­totę języka i samych trans­latorów była niska wydaj­ność oraz tragiczna jakość kodu. Z niską wydaj­nością, spowodo­waną potrzebą tłuma­czenia każdego rozkazu za każdym razem, gdy był on wykony­wany, można było walczyć stosując dodat­kowe kompila­tory, generu­jące – na pod­stawie kodu źródło­wego prog­ramu – gotowy kod w języku maszy­nowym.

Z jakością kodu było już gorzej. Język BASIC w swojej orygi­nalnej postaci nie dyspo­nował żadnymi mechaniz­mami umożli­wiają­cymi nada­wanie progra­mowi struktury. Podprog­ramy wywoły­wało się poprzez skok pod wskazany numer wiersza (z możli­wością auto­matycz­nego powrotu za pomocą instrukcji RETURN), jednak bez możli­wości przekazy­wania para­metrów inaczej niż za pomocą zmien­nych i bez możli­wości tworzenia zmien­nych lokal­nych. Wszystkie bardziej rozbudo­wane rodzaje pętli również trzeba było budować za pomocą zwykłej instrukcji warun­kowej IF...THEN (często bez ELSE!) oraz nieśmier­telnej, stano­wiącej pewnego rodzaju wizy­tówkę języka, instrukcji skoku bezwarunko­wego GO TO. Efektem była znikoma czytel­ność programu po pewnym czasie od zaprzes­tania prac — szcze­gólnie, jeżeli program liczył sobie więcej niż kilka­dziesiąt wierszy.

Kolejne wersje interpre­terów próbo­wały zwalczyć ten problem. W niektórych implemen­tacjach pojawiły się mecha­nizmy two­rzenia procedur, przekazy­wania para­metrów i budo­wania petli typu whiledo...while, choć zawsze wiązało się to z jesz­cze większym narzu­tem wydajnoś­ciowym i ograni­czeniem ilości dostępnej pamięci.

ZX-BASIC
Inter­preter języka BASIC w kompu­terach ZX-80, ZX-81 i ZX Spectrum dyspo­nował niezbyt wygodnym edy­torem wier­szowym, jednak sam dialekt był dosyć bogaty

Siła prze­bicia języka BASIC – którego naj­popular­niejsza implemen­tacja, często stano­wiąca pod­stawę innych wersji, została napi­sana przez firmę Microsoft – była jednak olbrzymia. Trudno było znaleźć domowy mikro­kom­puter, którego podsta­wowym, dostępnym od razu po włą­czeniu trybem pracy nie byłby tryb języka BASIC. Ba, nawet przezna­czone do poważnych zadań kompu­tery IBM PC wyposa­żono we wbudo­wany w pamięci ROM inter­preter języka BASIC, urucha­miany, gdy maszyna nie była w stanie zała­dować systemu operacyj­nego z dyskietki. Klony PC, które – ze względów licen­cyjnych – nie posiadały takiego inter­pretera w pamięci ROM, często były dostar­czane z inter­pre­terem GW-BASIC dla systemu operacyj­nego MS/PC-DOS. BASIC zdawał się stanowić standard nie do prze­bicia, choć używali go głównie początku­jący informa­tycy: profesjona­liści od zawsze trakto­wali go jak zło konieczne, uży­wając wyłącznie języków umożliwia­jących programo­wanie struktu­ralne i zapewnia­jących kompi­lację programu (w szczegól­ności języka Pascal) lub szczycąc się perfek­cyjnym opano­waniem asemblera.

Dopiero poja­wienie się kompila­tora Turbo Pascal zmieniło nieco podejście początku­jących do języka BASIC. Nagle okazało się, że wystarczy pojąć nieco inny język programo­wania: samo środo­wisko jest tak przyjazne, że pozwala zapomnieć o koniecz­ności kompilo­wania programu przed jego urucho­mieniem. Gotowy kod działał też znacznie szybciej niż w dowol­nym inter­pre­terze języka BASIC i algo­rytmy, które dotych­czas implemen­to­wano tylko z cieka­wości (gdyż były zbyt powolne) okazy­wały się całkiem uży­teczne. Poza tym język Pascal był wychwa­lany przez wszystkich jako dosko­nały do nauki programo­wania, idealny przy pisaniu dużych projektów i świetnie wspomaga­jący matema­tyków w obli­czeniach.

Posu­nięcie, które podtrzy­mało pozycję języka BASIC, wyszło – co ciekawe – ze strony produ­centa kompil­atora Turbo Pascal: firmy Borland Inter­national. Zakupione przez nią środo­wisko programis­tyczne, nazwane później Turbo Basic, stano­wiło zupełnie nową jakość. Sam język programo­wania różnił się znacząco od stan­dardu: wiersze programu nie były numero­wane, lecz wykony­wane po prostu w kolej­ności występo­wania w tekście, skoki bez­poś­rednie (mocno odra­dzane!) wykonywane były do ściśle zadeklaro­wanych etykiet, pętlę FOR uzupełniał cały wachlarz bardziej rozbudo­wanych konstrukcji, a proce­dury i funkcje umożli­wiały wygodne wydzie­lanie powtarza­jących się bloków programu i tworzenie w ich wnętrzu własnego zestawu zmien­nych lokalnych, nie kolidu­jących z global­nymi. Co najważ­niejsze jednak, efektem pracy transl­atora był nie tylko działa­jący program, ale też nieza­leżny plik EXE ze skompilo­wanym do postaci kodu maszyno­wego programem!

Turbo Basic 1.0
Turbo Basic 1.0: zupełnie nowe podejście do programowania w języku BASIC, na razie w tekstowym środowisku systemu operacyjnego MS-DOS

W takim języku można było już tworzyć naprawdę skompliko­wane projekty. Choć do nowych możli­wości trzeba było się przyz­wyczaić, zyski rekompen­sowały poświę­cony na to czas. Programy działały błyska­wicznie, zajmo­wały niewiele pamięci, a nowo­czesna struk­tura kodu źródło­wego znako­micie uprasz­czała jego zrozu­mienie przez innych progra­mistów i przez samego autora.

Czas systemu MS-DOS, czy nawet środowisk tekstowych jako takich, powoli się jednak kończył. Na scenę wkraczały graficzne środo­wiska Micro­soft Windows i Micro­soft OS/2, działa­jące na zupełnie innej zasadzie i wymaga­jące innych narzędzi programis­tycznych. Pierwszym językiem programo­wania dostoso­wanym do ich potrzeb stał się język C, który – choć podobny nieco do Pascala – wymagał całko­witej zmiany nawyków, a to w zasadzie wyklu­czało z grona progra­mistów systemu Windows wszystkich ama­torów mających dotych­czas do czynienia tylko z językami BASIC i Pascal.

Firma Micro­soft wykonała jednak krok, który zadziwił wszystkich: na bazie języka BASIC stworzyła nowo­czesne środo­wisko programis­tyczne... dla nakładki Windows! Pierwsza wersja nowego produktu – Visual Basic 1.0 – pojawiła się w 1991 roku i praco­wała pod kon­trolą Windows 3.0.

Pod pewnymi wzglę­dami Visual Basic stanowił krok wstecz. Efektem działania transla­tora nie był kod maszy­nowy, lecz p-kod (pseudo-kod), wymaga­jący interpre­tacji przez maszynę wirtu­alną. Maszyna ta, wraz z biblio­teką standar­dową funkcji i podprog­ramów, zapi­sana była w dosyć sporym pliku VBRUN.DLL, który musiał być dołą­czany do każdego rozpro­wadza­nego programu. Interpre­tacja p-kodu – choć szybsza, niż interpre­tacja czystego (czy nawet tokenizowa­nego) kodu źródło­wego – powodowała spowol­nienie, choć wielu słusznie argumento­wało, że jest to widoczne tylko podczas samych obliczeń: p-kod obsługu­jący graficzny inter­fejs użytkow­nika często był tak samo szybki, jak realizu­jący te same funkcje kod maszynowy.

Visual Basic 3.0
Visual Basic 3.0: środo­wisko rewolu­cyjnie proste i rewolu­cyjnie przydatne

Najważ­niejsze w środo­wisku Visual Basic było jednak nowe podejście do procesu tworzenia programu. Progra­mista nie zaczynał już pracy od wprowa­dzenia pierwszych wierszy kodu, lecz od naryso­wania okna. Przecią­ganie elementów graficz­nych – przycis­ków, etykiet, list i menu – umiesz­czonych na palecie i wklejanie ich w pustej formatce towa­rzyszy nam do dziś, lecz to właśnie Visual Basic spopulary­zował ten sposób kreo­wania warstwy wizualnej programu.

Również frag­menty kodu realizu­jące to, czego nie da się nary­sować myszką, nie były wpisy­wane „jak leci” w kod programu. Kod zapisany w języku BASIC (silnie zresztą zmodyfiko­wanym jeżeli chodzi o składnię) pojawiał się bezpoś­rednio jedynie w proce­durach reagu­jących na zdarzenia: klik­nięcie przycisku, wybranie pozycji menu czy zmianę wyboru na liście rozwijanej. W ten sposób połą­czono ściśle sekwen­cyjny charakter tego języka z minimali­zacją: wyelimino­wano w praktyce konieczność tworzenia kodu tworzą­cego interfejs użytkownika czy sterują­cego prze­biegiem sterowania.

Prostota tworzenia programów w środo­wisku Visual Basic była poraża­jąca. Nawet osoby, które dotych­czas niewiele miały do czynienia z programo­waniem, mogły tworzyć krótkie programy wykonu­jące proste czyn­ności automatyzu­jące pracę. Z jednej strony spowodowało to zwięk­szenie zaintereso­wania programo­waniem; z drugiej — zaowoco­wało poja­wieniem się setek programów wątpliwej jakości, powolnych, zależnych od zewnętrz­nych biblio­tek i czasem niezbyt wygodnych w użyciu. Nazbyt wyraźnie było widać, że tworzenie oprogramo­wania o odpo­wiedniej jakości wymaga właści­wego przygoto­wania teoretycz­nego oraz doświadczenia.

Przystępność środo­wiska Visual Basic uczyniła jednak z niego świetną kandyda­turę do osa­dzenia w apli­kacjach w roli jezyka skrypto­wego. Visual Basic for Appli­cations (VBA) pojawił się najpierw w programach Microsoft Excel i Microsoft Word, zastę­pując dotychczas dostępne, różno­rodne składniowo własne makro­języki tych aplikacji. Tak zrealizo­wana unifi­kacja była świetnym pomysłem: wystar­czyło poznać zasady tworzenia programów w języku VBA programu Word, by szybko nauczyć się tworzenia makro­poleceń VBA w programie Excel, a nawet by później opanować tworzenie samo­dzielnych aplikacji Windows w środo­wisku Visual Basic.

Visual Basic for Applications
Visual Basic for Applications w edytorze tekstów Microsoft Word 2003; niby „visual”, a jednak po swoim wizualnym przodku ten język odzie­dziczył prak­tycznie tylko składnię

Nieza­leżne środo­wisko Visual Basic również ewoluowało. Pojawiła się wersja 32-bitowa, a prosty inter­preter p-kodu zastą­piono możli­wością kompi­lacji do pos­taci niezależ­nego pliku wykonywal­nego. Wersja 6.0, długo rozwi­jana i szeroko rozpowszech­niona, stała się podstawą wielu poważnych apli­kacji bazo­danowych oraz wewnętrznych systemów informa­tycznych organi­zacji i przedsię­biorstw. Doszło wręcz do tego, że gdy firma Micro­soft zapowie­działa zaprzes­tanie rozwoju i obsługi tech­nicznej języka, środo­wisko progra­mistów zareagowało bardzo żywiołowo, broniąc swego ulubionego narzędzia.

Koncernowi udało się jednak przefor­sować swoją decyzję i dokonać kolejnej rewolucji. Przy okazji tworzenia całej nowej rodziny języków programo­wania opartych o wspólną maszynę wirtu­alną dokonującą kompi­lacji w trybie just in time (JIT), postano­wiono wykonać „reno­wację” środo­wiska VB. Trudno sobie wyobrazić lepszą okazję, by zerwać z określo­nymi całe lata wcześniej zasadami języka i stworzyć nowy produkt, podobny tylko do dotych­czaso­wego, lecz zapewnia­jący nowe możliwości.

Trzy najważ­niejsze cechy nowego języka to:

Krótko mówiąc, po raz pierwszy sprowa­dzono język Visual Basic na poziom równy C, C++, C# czy Javie. Przestał to być język drugiej kate­gorii, pozba­wiony narzędzi i wydaj­ności niezbędnych podczas tworzenia nowoczes­nego, profesjonal­nego oprogramo­wania. Ceną za to była jednak całko­wita niezgod­ność z usta­lonym standardem, co ozna­czało, że wszyscy progra­miści musieli w zasadzie uczyć się programo­wania w VB od nowa.

Visual Basic 2005
Visual Basic 2005: niby podobny, a jednak zupełnie inny i – naresz­cie – całkiem przyzwoity

Od dłuż­szego czasu język BASIC nie zajmuje pozycji, którą kiedyś gwaranto­wała mu obecność w pamięci stałej większości kompu­terów. Typowy komputer klasy PC nie jest wyposa­żony w ogóle w inter­preter czy kompi­lator tego języka. Instalacja pakietu Micro­soft Office zawiera inter­preter Visual Basic for Appli­cations, jest to jednak język o możli­wościach okrojonych do poziomu systemu makro­poleceń. Osobny produkt Visual Basic używany jest przez nielicz­nych, stracił bowiem swój charakter super­prostego środo­wiska progra­mistycz­nego, stając się względnie skompliko­wanym i dosyć „przega­danym” skład­niowo narzędziem dla zawodowców.

I choć ostatnie wcielenia języka BASIC usuwają praktycznie wszystkie wady, kiedyś stano­wiące podstawę szerokiej krytyki, z jaką się spotykał, raczej nie należy spodziewać się jego powrotu do łask. Miejsce, które mogł zająć, od dawna okupują C++, Java i C#. Może to i dobrze...


Nie zawsze potrzeba używać jakiś wyszukanych języków programowania. Jak widać, BASIC, chociaż został sprowadzony do najniższego poziomu przez wielkich programistów dalej święci tryumfy. Co ciekawe, jego mnemonik jest używany w skryptach programów CAD/CAM i ich pochodnych. Może nie jest taki najgorszy?