Beginners' All-purpose Symbolic Instruction Code. W skrócie: BASIC. Jest z nami od bardzo dawna, lecz przez lata stracił na znaczeniu, kiedyś tak wielkim.
Gdy pod koniec lat siedemdziesiątych ubiegłego wieku rozpoczęto opracowywanie pierwszych popularnych mikrokomputerów domowych – takich jak Sinclair ZX-80/81, ZX Spectrum czy Atari 800XL – nie można było zakładać istnienia bogatej bazy gotowego oprogramowania. Konieczne stało się zatem udostępnienie użytkownikowi możliwości tworzenia własnych programów, a to wymagało zaimplementowania możliwie prostego do nauczenia języka programowania.
Szczęśliwie język taki istniał od ponad 15 lat. Już sam skrót nazwy – BASIC – odzwierciedlał jego prostotę. Kolejne wiersze programu opatrzone były numerami, składnia była względnie naturalna, bez zbędnych symboli kończących wyrażenia lub towarzyszących wywołaniom funkcji, a zmienne można było tworzyć „w biegu”, bez konieczności ich wcześniejszego deklarowania. Wystarczyło zapisać bieg myśli programisty prostymi wyrażeniami, 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ść wykonywania poleceń w trybie bezpośrednim, bez pisania programu. Można było nawet łączyć pracę w trybie bezpośrednim i trybie realizacji programu: jeżeli program został przerwany w wyniku błędu lub działania użytkownika, można było dokonać sprawdzenia wartości zmiennych, zmodyfikować je i wznowić działanie programu od dowolnego miejsca. Było to możliwe, ponieważ program w języku BASIC był na bieżąco interpretowany: kolejne polecenia (najczęściej zapisane w pamięci w postaci lekko skompresowanej, jako tak zwane tokeny) były rozpoznawane przez translator i wykonywane na bieżąco.
Commodore BASIC 2.0; prezentacja możliwości
modyfikowania zmiennych w czasie działania
programu (nawet po wystąpieniu błędu)
oraz funkcji kontynuowania działania programu
od miejsca przerwania
Ceną za prostotę języka i samych translatorów była niska wydajność oraz tragiczna jakość kodu. Z niską wydajnością, spowodowaną potrzebą tłumaczenia każdego rozkazu za każdym razem, gdy był on wykonywany, można było walczyć stosując dodatkowe kompilatory, generujące – na podstawie kodu źródłowego programu – gotowy kod w języku maszynowym.
Z jakością kodu było już gorzej. Język BASIC w swojej oryginalnej postaci nie dysponował żadnymi mechanizmami umożliwiającymi nadawanie programowi struktury. Podprogramy wywoływało się poprzez skok pod wskazany numer wiersza (z możliwością automatycznego powrotu za pomocą instrukcji RETURN), jednak bez możliwości przekazywania parametrów inaczej niż za pomocą zmiennych i bez możliwości tworzenia zmiennych lokalnych. Wszystkie bardziej rozbudowane rodzaje pętli również trzeba było budować za pomocą zwykłej instrukcji warunkowej IF...THEN (często bez ELSE!) oraz nieśmiertelnej, stanowiącej pewnego rodzaju wizytówkę języka, instrukcji skoku bezwarunkowego GO TO. Efektem była znikoma czytelność programu po pewnym czasie od zaprzestania prac — szczególnie, jeżeli program liczył sobie więcej niż kilkadziesiąt wierszy.
Kolejne wersje interpreterów próbowały zwalczyć ten problem. W niektórych implementacjach pojawiły się mechanizmy tworzenia procedur, przekazywania parametrów i budowania petli typu while i do...while, choć zawsze wiązało się to z jeszcze większym narzutem wydajnościowym i ograniczeniem ilości dostępnej pamięci.
Interpreter języka BASIC w komputerach ZX-80, ZX-81
i ZX Spectrum dysponował niezbyt wygodnym edytorem
wierszowym, jednak sam dialekt był dosyć bogaty
Siła przebicia języka BASIC – którego najpopularniejsza implementacja, często stanowiąca podstawę innych wersji, została napisana przez firmę Microsoft – była jednak olbrzymia. Trudno było znaleźć domowy mikrokomputer, którego podstawowym, dostępnym od razu po włączeniu trybem pracy nie byłby tryb języka BASIC. Ba, nawet przeznaczone do poważnych zadań komputery IBM PC wyposażono we wbudowany w pamięci ROM interpreter języka BASIC, uruchamiany, gdy maszyna nie była w stanie załadować systemu operacyjnego z dyskietki. Klony PC, które – ze względów licencyjnych – nie posiadały takiego interpretera w pamięci ROM, często były dostarczane z interpreterem GW-BASIC dla systemu operacyjnego MS/PC-DOS. BASIC zdawał się stanowić standard nie do przebicia, choć używali go głównie początkujący informatycy: profesjonaliści od zawsze traktowali go jak zło konieczne, używając wyłącznie języków umożliwiających programowanie strukturalne i zapewniających kompilację programu (w szczególności języka Pascal) lub szczycąc się perfekcyjnym opanowaniem asemblera.
Dopiero pojawienie się kompilatora Turbo Pascal zmieniło nieco podejście początkujących do języka BASIC. Nagle okazało się, że wystarczy pojąć nieco inny język programowania: samo środowisko jest tak przyjazne, że pozwala zapomnieć o konieczności kompilowania programu przed jego uruchomieniem. Gotowy kod działał też znacznie szybciej niż w dowolnym interpreterze języka BASIC i algorytmy, które dotychczas implementowano tylko z ciekawości (gdyż były zbyt powolne) okazywały się całkiem użyteczne. Poza tym język Pascal był wychwalany przez wszystkich jako doskonały do nauki programowania, idealny przy pisaniu dużych projektów i świetnie wspomagający matematyków w obliczeniach.
Posunięcie, które podtrzymało pozycję języka BASIC, wyszło – co ciekawe – ze strony producenta kompilatora Turbo Pascal: firmy Borland International. Zakupione przez nią środowisko programistyczne, nazwane później Turbo Basic, stanowiło zupełnie nową jakość. Sam język programowania różnił się znacząco od standardu: wiersze programu nie były numerowane, lecz wykonywane po prostu w kolejności występowania w tekście, skoki bezpośrednie (mocno odradzane!) wykonywane były do ściśle zadeklarowanych etykiet, pętlę FOR uzupełniał cały wachlarz bardziej rozbudowanych konstrukcji, a procedury i funkcje umożliwiały wygodne wydzielanie powtarzających się bloków programu i tworzenie w ich wnętrzu własnego zestawu zmiennych lokalnych, nie kolidujących z globalnymi. Co najważniejsze jednak, efektem pracy translatora był nie tylko działający program, ale też niezależny plik EXE ze skompilowanym do postaci kodu maszynowego programem!
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ę skomplikowane projekty. Choć do nowych możliwości trzeba było się przyzwyczaić, zyski rekompensowały poświęcony na to czas. Programy działały błyskawicznie, zajmowały niewiele pamięci, a nowoczesna struktura kodu źródłowego znakomicie upraszczała jego zrozumienie przez innych programistó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 środowiska Microsoft Windows i Microsoft OS/2, działające na zupełnie innej zasadzie i wymagające innych narzędzi programistycznych. Pierwszym językiem programowania dostosowanym do ich potrzeb stał się język C, który – choć podobny nieco do Pascala – wymagał całkowitej zmiany nawyków, a to w zasadzie wykluczało z grona programistów systemu Windows wszystkich amatorów mających dotychczas do czynienia tylko z językami BASIC i Pascal.
Firma Microsoft wykonała jednak krok, który zadziwił wszystkich: na bazie języka BASIC stworzyła nowoczesne środowisko programistyczne... dla nakładki Windows! Pierwsza wersja nowego produktu – Visual Basic 1.0 – pojawiła się w 1991 roku i pracowała pod kontrolą Windows 3.0.
Pod pewnymi względami Visual Basic stanowił krok wstecz. Efektem działania translatora nie był kod maszynowy, lecz p-kod (pseudo-kod), wymagający interpretacji przez maszynę wirtualną. Maszyna ta, wraz z biblioteką standardową funkcji i podprogramów, zapisana była w dosyć sporym pliku VBRUN.DLL, który musiał być dołączany do każdego rozprowadzanego programu. Interpretacja p-kodu – choć szybsza, niż interpretacja czystego (czy nawet tokenizowanego) kodu źródłowego – powodowała spowolnienie, choć wielu słusznie argumentowało, że jest to widoczne tylko podczas samych obliczeń: p-kod obsługujący graficzny interfejs użytkownika często był tak samo szybki, jak realizujący te same funkcje kod maszynowy.
Visual Basic 3.0: środowisko rewolucyjnie proste
i rewolucyjnie przydatne
Najważniejsze w środowisku Visual Basic było jednak nowe podejście do procesu tworzenia programu. Programista nie zaczynał już pracy od wprowadzenia pierwszych wierszy kodu, lecz od narysowania okna. Przeciąganie elementów graficznych – przycisków, etykiet, list i menu – umieszczonych na palecie i wklejanie ich w pustej formatce towarzyszy nam do dziś, lecz to właśnie Visual Basic spopularyzował ten sposób kreowania warstwy wizualnej programu.
Również fragmenty kodu realizujące to, czego nie da się narysować myszką, nie były wpisywane „jak leci” w kod programu. Kod zapisany w języku BASIC (silnie zresztą zmodyfikowanym jeżeli chodzi o składnię) pojawiał się bezpośrednio jedynie w procedurach reagujących na zdarzenia: kliknięcie przycisku, wybranie pozycji menu czy zmianę wyboru na liście rozwijanej. W ten sposób połączono ściśle sekwencyjny charakter tego języka z minimalizacją: wyeliminowano w praktyce konieczność tworzenia kodu tworzącego interfejs użytkownika czy sterującego przebiegiem sterowania.
Prostota tworzenia programów w środowisku Visual Basic była porażająca. Nawet osoby, które dotychczas niewiele miały do czynienia z programowaniem, mogły tworzyć krótkie programy wykonujące proste czynności automatyzujące pracę. Z jednej strony spowodowało to zwiększenie zainteresowania programowaniem; z drugiej — zaowocowało pojawieniem się setek programów wątpliwej jakości, powolnych, zależnych od zewnętrznych bibliotek i czasem niezbyt wygodnych w użyciu. Nazbyt wyraźnie było widać, że tworzenie oprogramowania o odpowiedniej jakości wymaga właściwego przygotowania teoretycznego oraz doświadczenia.
Przystępność środowiska Visual Basic uczyniła jednak z niego świetną kandydaturę do osadzenia w aplikacjach w roli jezyka skryptowego. Visual Basic for Applications (VBA) pojawił się najpierw w programach Microsoft Excel i Microsoft Word, zastępując dotychczas dostępne, różnorodne składniowo własne makrojęzyki tych aplikacji. Tak zrealizowana unifikacja była świetnym pomysłem: wystarczyło poznać zasady tworzenia programów w języku VBA programu Word, by szybko nauczyć się tworzenia makropoleceń VBA w programie Excel, a nawet by później opanować tworzenie samodzielnych aplikacji Windows w środowisku Visual Basic.
Visual Basic for Applications w edytorze tekstów Microsoft Word 2003;
niby „visual”, a jednak po swoim wizualnym przodku ten język odziedziczył
praktycznie tylko składnię
Niezależne środowisko Visual Basic również ewoluowało. Pojawiła się wersja 32-bitowa, a prosty interpreter p-kodu zastąpiono możliwością kompilacji do postaci niezależnego pliku wykonywalnego. Wersja 6.0, długo rozwijana i szeroko rozpowszechniona, stała się podstawą wielu poważnych aplikacji bazodanowych oraz wewnętrznych systemów informatycznych organizacji i przedsiębiorstw. Doszło wręcz do tego, że gdy firma Microsoft zapowiedziała zaprzestanie rozwoju i obsługi technicznej języka, środowisko programistów zareagowało bardzo żywiołowo, broniąc swego ulubionego narzędzia.
Koncernowi udało się jednak przeforsować swoją decyzję i dokonać kolejnej rewolucji. Przy okazji tworzenia całej nowej rodziny języków programowania opartych o wspólną maszynę wirtualną dokonującą kompilacji w trybie just in time (JIT), postanowiono wykonać „renowację” środowiska VB. Trudno sobie wyobrazić lepszą okazję, by zerwać z określonymi całe lata wcześniej zasadami języka i stworzyć nowy produkt, podobny tylko do dotychczasowego, lecz zapewniający nowe możliwości.
Trzy najważniejsze cechy nowego języka to:
Krótko mówiąc, po raz pierwszy sprowadzono język Visual Basic na poziom równy C, C++, C# czy Javie. Przestał to być język drugiej kategorii, pozbawiony narzędzi i wydajności niezbędnych podczas tworzenia nowoczesnego, profesjonalnego oprogramowania. Ceną za to była jednak całkowita niezgodność z ustalonym standardem, co oznaczało, że wszyscy programiści musieli w zasadzie uczyć się programowania w VB od nowa.
Visual Basic 2005: niby podobny, a jednak zupełnie inny
i – nareszcie – całkiem przyzwoity
Od dłuższego czasu język BASIC nie zajmuje pozycji, którą kiedyś gwarantowała mu obecność w pamięci stałej większości komputerów. Typowy komputer klasy PC nie jest wyposażony w ogóle w interpreter czy kompilator tego języka. Instalacja pakietu Microsoft Office zawiera interpreter Visual Basic for Applications, jest to jednak język o możliwościach okrojonych do poziomu systemu makropoleceń. Osobny produkt Visual Basic używany jest przez nielicznych, stracił bowiem swój charakter superprostego środowiska programistycznego, stając się względnie skomplikowanym i dosyć „przegadanym” składniowo narzędziem dla zawodowców.
I choć ostatnie wcielenia języka BASIC usuwają praktycznie wszystkie wady, kiedyś stanowią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...