Telneting into your rocket is sort of fundamentally cool.
Wiele języków – Lisp, Python, Perl czy Ruby posiadają tzw. pętlę wczytaj-wykonaj-wypisz – z angielskiego Read-Eval-Print Loop, czyli w skrócie REPL. Chodzi oczywiście o tryb interaktywny, w którym możemy wpisywać wyrażenia w danym języku, które są natychmiast wykonywane a rezultaty działania zwracane. Poza oczywistym zastosowaniem jakim jest mądrzejszy kalkulator
REPL może przydawać się też do debugowania kodu, często pracującego. Python ma nawet swojego on-line REPLa do wypróbowania
.
PHP jest językiem, na którego temat można znaleźć bardzo wiele negatywnych opinii – jednak pomimo tego i tak jest szeroko wykorzystywany do tworzenia aplikacji webowych. Biorąc pod uwagę specyfikę działania skryptów PHP – są one wykonywane od nowa ‘na czysto’ przy każdym zapytaniu HTTP – REPL mógłby być dla tego języka przydatnym narzędziem; szkoda tylko, że autorzy tego nie uwzględnili (ściślej rzecz ujmując PHP posiada tryb interaktywny wywoływany parametrem -a, ale z bliżej mi nieznanych powodów tryb ten jest raczej krytykowany).
Podczas opracowywania wyników Eksperymentu powstał problem – jak pracować na danych, których samo wyciągnięcie z bazy i przetworzenie zajmuje (na localhost’cie) ok. 1.5 minuty? Zwłaszcza kiedy jeszcze na początku nie wie się, co się chce osiągnąć? W takich sytuacjach przydaje się REPL – i na szczęście takowy dla PHP został stworzony.
phpsh to projekt Facebook’a, będący Open-Source i napisany głównie… w Pythonie. Szczegóły pod adresem:
http://www.phpsh.org/ Całość wykonana jest bardzo ładnie i dobrze wykorzystuje możliwość wyświetlania w konsoli kolorowego tekstu. Po rozpakowaniu na serwerze działa po prostu ‘z marszu’
.
Dalsze poszukiwania pozwoliły znaleźć trzy kolejne projekty: php shell, phpa oraz pozwalający na zdalną pracę przez przeglądarkę (i potrafiący wyświetlać wyjście w HTMLu) PHP Interactive. Niech więc każdy wybierze co lubi (ja zamierzam raczej zmienić język
).
Przydatność narzędzia jakim jest REPL jest nieoceniona, wypadałoby zacytować pracownika NASA JPL dotyczący awarii na pokładzie sterowanego zdalnie pojazdu kosmicznego:
Debugging a program running on a $100M piece of hardware that is 100 million miles away is an interesting experience. Having a read-eval-print loop running on the spacecraft proved invaluable in finding and fixing the problem.
Edit 15.09.2009 17:39
Fus donosi, że nawet C# ma swojego REPL’a. Podjęte też zostały próby stworzenia takiego narzędzia dla C i C++.