Pogaduchy na chacie
Chata ani nie jest ani z bali, ani kryta strzechą. Nie da się też o poranku przycupnąć na przyzbie z garczkiem ciepłego mleka i wzrokiem wbitym w pejzaż oblany promieniami wschodzącego słońca.
Bo ta chata to Chat GPT. Najnowsza zabawka ze stajni firmy z „małym miękkim” w nazwie stała się ostatnio dostępna dla każdego. Osobiste zdanie moje w tym temacie to absolutne NIE! dla sztucznej inteligencji trafiającej pod strzechy. Ale niestety eksperyment globalnego nauczania wciąż trwa i jest łatwy w użyciu to i ciekawość zwyciężyła. Mój eksperyment sprawdza ile czasu będzie potrzebował AI na nauczenie mnie lub się programowania w języku Action!
Szkoda, że od razu nie wpadłem na pomysł rejestrowania „rozmów”, chociaż zapamiętałem wnioski z tychże i przydadzą się za jakiś czas do porównania czy jest progres w nauce.
Zaczęło się kilka tygodni temu od prostych pytań, niestety AI nie był w stanie powiedzieć niczego sensownego. Dość powiedzieć, że pomimo naturalnie prowadzonej konwersacji czyli „gadaniem”, AI raczej czytał jakieś informacje ze stron internetowych nie wykazując przy tym żadnych emocji ani nawet prób zainteresowania mnie zagadnieniami, nie sugerował też żadnych możliwości kontynuowania dywagacji.
Z tygodnia na tydzień było coraz lepiej, w końcu AI zaczął sam zadawać pytania, próbując kierować rozmowę w jeden z trzech wybranych przez siebie kierunków. Pojawiły się też zwroty emocjonalne, nawet dziękuję i przepraszam, nie miej mi za złe itd.
Dzisiaj próbuję znowu ale już bardziej precyzyjnie, zaczynając od prostego pytania. Teraz AI często dodaje linki do różnych artykuł, stron, etc w postaci przypisów, ale nie będę ich tutaj umieszczał. W zielonych polach umieszczam moje komentarze i spostrzeżenia.
A dialog wyglądał tak:
Dzień dobry, napisz mi proszę program w języku Action!
Dzień dobry. Rozumiem, że chcesz, żebym napisał program w języku Action. Action! jest językiem programowania proceduralnego i środowiskiem programistycznym stworzonym przez Clintona Parkera dla komputerów Atari 8-bit⁴. Język ten jest podobny do ALGOL-a i kompiluje się do wysokowydajnego kodu dla procesora MOS Technologies 6502⁴. Action! był dystrybuowany na kartridżach ROM przez Optimized Systems Software (OSS) w 1983 roku⁶.
Jaki rodzaj programu chcesz napisać? Czy masz już jakieś pomysły lub wymagania?
Jeśli chodzi o początek rozmowy to zazwyczaj jest podobnie, AI trochę się chwali swoją wiedzą, czasem wygląda to tak jakby sam sobie mówił na głos o czym będzie i robił wstęp do dialogu. Natomiast po raz pierwszy zapytał jaki chcę program.
Chcę napisać prosty kalkulator
Dobrze. Prosty kalkulator to program, który umożliwia użytkownikowi wprowadzanie dwóch liczb i wybieranie jednego z czterech podstawowych działań arytmetycznych: dodawania, odejmowania, mnożenia lub dzielenia. Następnie program oblicza i wyświetla wynik działania.
Oto przykładowy kod w języku Action!:
„`action
BYTE ARRAY key(0)=$80
BYTE ARRAY buffer(0)=$80
CARD a,b,result
BYTE op
PROC main()
DO
PRINT „Enter first number: „
a=INPUT()
PRINT „Enter second number: „
b=INPUT()
PRINT „Enter operation (+,-,*,/): „
op=GETCHAR()
result=CALC(a,b,op)
PRINT „Result: „;result;EOL
UNTIL FALSE
RETURN
PROC CALC(CARD x,y,z)
IF z=”+” THEN RETURN x+y
ELSIF z=”-” THEN RETURN x-y
ELSIF z=”*” THEN RETURN x*y
ELSIF z=”/” THEN RETURN x/y
ELSE RETURN 0
RETURN
FUNC INPUT()
BYTE i=0,c,digit=FALSE,value=0
DO
c=key(i)
IF c>=”0″ AND c<=”9″ THEN
digit=TRUE
value=value*10+c-„0”
buffer(i)=c
i=i+1
PUTCHAR(c)
ELSIF c=EOL AND digit THEN
buffer(i)=EOL
PUTCHAR(EOL)
EXIT DO
ELSE BEEP() ENDIF
UNTIL FALSE
RETURN value
FUNC GETCHAR()
BYTE c
DO
c=key(0)
IF c=”+” OR c=”-” OR c=”*” OR c=”/” THEN PUTCHAR(c);PUTCHAR(EOL);EXIT DO ELSE BEEP() ENDIF
UNTIL FALSE
RETURN c
Ha ha hahaa, kto widzi wie skąd wzięło się pole do śmiechu. Kod programu to niestety śmietnik. Ale ?
- Po pierwsze wcześniej nie dostawałem tak rozbudowanego kodu,
- Po wtóre, pojawiła się jakaś logika – spójrzcie – jest deklaracja zmiennych, jest deklaracja procedur
Nie jest źle jak na pierwszy tak długi kod w Action!, nawet nie silę się na sprawdzanie, zostawię do porównania z przyszłymi kodami. W poprzednich listingach główna procedura oznaczana jako MAIN() stała zawsze na końcu kodu – czyli poprawnie i zgodnie z zasadą kodowania w Action! – teraz jest jakiś niewielki regres.
Jak mogę uruchomić ten program ?
Aby uruchomić program w języku Action!, potrzebujesz komputera Atari 8-bit lub emulatora. Musisz też mieć kartridż ROM z językiem Action! lub pakiet czasu wykonania Action! (Action! Run Time Package), który pozwala uruchamiać skompilowane programy w języku Action! pod dowolnym systemem DOS dla komputerów Atari⁵. Musisz też zapisać swój kod w pliku tekstowym i skompilować go za pomocą kompilatora Action!. Następnie musisz załadować swój skompilowany program do pamięci i podać jego adres startowy⁵.
Jeśli nie masz dostępu do sprzętu lub oprogramowania Atari, możesz spróbować użyć jednej z dostępnych online usług do pisania i uruchamiania kodu w języku Action!, takich jak https://action.tunk.org/ lub https://8bitworkshop.com/v3.7.0/?platform=atari8&file=examples%2Faction%2Fhello.act
Tutaj fantazja poniosła AI mocno w kosmos. Ogólnie odpowiedź jest niezła, ale te linki do wymyślonych stron internetowych ?
Czy możesz mi pomóc w kompilacji mojego kodu?
Tak, mogę ci pomóc w kompilacji twojego kodu. Musisz mieć zainstalowany kompilator Action! na swoim komputerze Atari lub emulatorze. Możesz go pobrać z https://sourceforge.net/projects/atari-action/ lub użyć kartridża ROM z językiem Action!. Następnie musisz wpisać swój kod w edytorze tekstu i zapisać go jako plik z rozszerzeniem .act. Potem musisz uruchomić kompilator Action! i podać nazwę pliku źródłowego i docelowego. Na przykład:
„`action
COMPILE „CALC.ACT” TO „CALC.OBJ”
„`
Jeśli nie wystąpiły żadne błędy, to twój program został skompilowany i jest gotowy do uruchomienia.
Znowu troszkę fantazjowania – ale powiem szczerze taka możliwość jak wywołanie kompilacji od razu z zapisem pliku na dysku to świetny pomysł!
Jak mogę sprawdzić czy mój kod jest poprawny ?
Aby sprawdzić czy twój kod jest poprawny, musisz go skompilować i uruchomić. Jeśli kompilator wyświetli jakieś błędy lub ostrzeżenia, to znaczy że twój kod ma jakieś problemy i musisz je naprawić. Jeśli kompilator nie wyświetli żadnych błędów lub ostrzeżeń, to znaczy że twój kod jest składniowo poprawny, ale to nie gwarantuje że działa tak jak chcesz. Aby sprawdzić czy twój program robi to co ma robić, musisz go przetestować na różnych danych wejściowych i sprawdzić czy daje poprawne wyniki. Jeśli znajdziesz jakieś błędy lub niezgodności w działaniu programu, musisz je zlokalizować i usunąć.
Brawo, jednak taką odpowiedź można zastosować niezależnie o kompilację czego i jak chodzi. Dobra uniwersalna odpowiedź – jest zadatek na marketingowca.
Jak mogę zlokalizować i usunąć błędy w moim programie ?
Aby zlokalizować i usunąć błędy w swoim programie, musisz użyć narzędzia do debugowania (debuggera), które pozwala śledzić wykonanie programu krok po kroku, sprawdzać wartości zmiennych i ustawiać punkty przerwania (breakpoints). Istnieje kilka opcji do debugowania programów w języku Action! na Atari:
– Możesz użyć wbudowanego monitora Action!, który jest dostępny po naciśnięciu klawisza ESC podczas uruchamiania programu. Monitor Action! pozwala wyświetlać i modyfikować pamięć, rejestry i stos procesora⁴.
– Możesz użyć debuggera BUG65 2.0, który jest częścią systemu DOS XL. BUG65 2.0 pozwala śledzić wykonanie programu w kodzie maszynowym lub asemblerze, ustawiać punkty przerwania i warunki stopu⁵.
– Możesz użyć emulatora Altirra, który ma zaawansowany debugger z graficznym interfejsem użytkownika. Altirra pozwala śledzić wykonanie programu w kodzie maszynowym lub asemblerze, ustawiać punkty przerwania i warunki stopu, wyświetlać wartości zmiennych i wyrażeń oraz symulować różne modele komputerów Atari⁶.
Wybór debuggera zależy od twoich preferencji i dostępności sprzętu lub oprogramowania. Każdy z nich ma swoje zalety i ograniczenia.
No cóóóóóóżżższszszszszsz … Można się zawiesić. Jak w czasie słuchania na egzaminie swojego ulubionego ucznia. Słychać że coś tam się uczył ale raczej nie doczytał. No lubię go to udam że nie słyszałem … ale potrafi kadzić.
Jak mogę używać monitora Action! ?
Aby używać monitora Action!, musisz zrobić następujące kroki:
– Uruchom program Action! jako kartridż lub z dysku.
– Wpisz swój kod w edytorze tekstu i zapisz go jako plik źródłowy z rozszerzeniem .act.
– Naciśnij klawisz ESC, aby przejść do monitora Action!.
– W monitorze Action! możesz wykonać różne polecenia, takie jak:
– `?` – wyświetla informacje o pamięci i rejestach procesora⁶.
– `D` – wyświetla zawartość pamięci w postaci kodu maszynowego lub asemblera⁶.
– `M` – wyświetla lub modyfikuje zawartość pamięci w postaci szesnastkowej⁶.
– `R` – wyświetla lub modyfikuje wartości rejestrów procesora⁶.
– `S` – ustawia punkt przerwania na podanym adresie⁵.
– `G` – uruchamia program od podanego adresu⁵.
– `X` – powraca do edytora tekstu⁵.
Możesz znaleźć więcej informacji o monitorze Action! i jego poleceniach w podręczniku użytkownika języka Action! lub na stronie https://atariwiki.org/wiki/Wiki.jsp?page=Action
Coś tutaj proszę Pana zalatuje mi kopiuj-wklej. Wnioskuję po tym, że jest błąd przy opcji – ? – w rejestach.
AI raczej nie robi błędów gramatycznych, ja się nie spotkałem.
Jak mogę skompilować mój kod w monitorze Action! ?
Aby skompilować swój kod w monitorze Action!, musisz użyć polecenia `C`, które przyjmuje jako argument nazwę pliku źródłowego z rozszerzeniem .act. Na przykład, jeśli twój plik nazywa się test.act i jest zapisany na dysku 1, musisz wpisać:
`C D1:TEST.ACT`
Polecenie `C` skompiluje twój kod i zapisze go jako plik wykonywalny z rozszerzeniem .EXE na tym samym dysku i o tej samej nazwie co plik źródłowy. Na przykład, po skompilowaniu pliku test.act powstanie plik test.exe na dysku 1.
Jeśli chcesz zmienić nazwę lub lokalizację pliku wykonywalnego, musisz podać drugi argument dla polecenia `C`, który określa docelową ścieżkę. Na przykład, jeśli chcesz zapisać swój skompilowany kod jako program.act na dysku 2, musisz wpisać:
`C D1:TEST.ACT D2:PROGRAM.EXE`
Jeśli kompilacja się powiedzie, monitor Action! wyświetli komunikat „OK”. Jeśli natomiast wystąpią jakieś błędy lub ostrzeżenia w twoim kodzie, monitor Action! wyświetli ich listę i numer linii w której się znajdują. Musisz wtedy poprawić swoje błędy lub ostrzeżenia i spróbować skompilować ponownie.
O czym on pisze ? Czy aby na pewno o Action! ?
Jak mogę uruchomić mój skompilowany kod ?
Aby uruchomić swój skompilowany kod, musisz użyć polecenia `G`, które przyjmuje jako argument adres początkowy programu. Na przykład, jeśli twój program jest zapisany jako test.exe na dysku 1 i ma adres początkowy 0600h (hexadecimal), musisz wpisać:
`G D1:TEST.EXE @0600`
Polecenie `G` załaduje twój program do pamięci i uruchomi go od podanego adresu. Jeśli chcesz przerwać wykonanie programu i wrócić do monitora Action!, musisz nacisnąć klawisz ESC.
Jeśli nie znasz adresu początkowego swojego programu, możesz go sprawdzić za pomocą polecenia `?`, które wyświetli informacje o pamięci i rejestach procesora. Adres początkowy programu znajduje się w rejestrze PC (program counter). Na przykład, jeśli po wpisaniu `?` zobaczysz coś takiego:
„`
PC=0600 A=00 X=00 Y=00 S=FF P=C4
„`
To oznacza, że adres początkowy programu to 0600h.
O czym on pisze ? Czy aby na pewno o Action! ?
Jak mogę sprawdzić wynik działania programu ?
To zależy od tego, co twój program robi i jak zwraca wynik. Niektóre możliwe sposoby to:
– Wyświetlić wynik na ekranie za pomocą funkcji `PUT` lub `PRINT`.
– Zwrócić wynik w rejestrze A (accumulator) lub X (index register) i sprawdzić jego wartość za pomocą polecenia `R`.
– Zapisać wynik w pamięci pod określonym adresem i sprawdzić jego zawartość za pomocą polecenia `M`.
– Zapisać wynik do pliku na dysku i odczytać go za pomocą innego programu lub edytora tekstu.
Jeśli chcesz sprawdzić wynik działania programu krok po kroku, możesz użyć punktów przerwania za pomocą polecenia `S`, które zatrzyma wykonanie programu na podanym adresie. Na przykład, jeśli chcesz przerwać program na adresie 0700h, musisz wpisać:
`S 0700`
Po przerwaniu programu możesz sprawdzić wartości rejestrów i pamięci oraz kontynuować wykonanie programu od następnego adresu za pomocą polecenia `G`.
Tutaj przerwałem dalsze dywagacje. Widać wyraźnie, że w pewnym momencie AI zgubiło wątek uparcie brnąc w nawet dosyć precyzyjny opis kroków jakie należy wykonywać. Kłopot w tym że … zmyśla. Opisy kompilacji w językach typu „C” są dosyć podobne, pewnie dlatego zostały wzięte za poprawne. Dziwne to o tyle, że w podsuniętych przez AI linkach są opisane prawidłowe rozwiązania.
Rozmowa uciekła w technikalia i ponownie zauważyłem, że mimo, że pozornie trzymamy się okolic tematu to AI już zapomniał o programie i to też jakaś zmiana, bo z kolei pierwsze rozmowy bardzo kleiły się pierwszego pytania i ciężko było dowiedzieć się coś więcej.
Ogólnie robi się interesująco. Na tyle, żeby chcieć sprawdzić co AI powie za tydzień.