(defpost REPL i PHP – czyli Telnetem do rakiety :)

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++.

(tags , , , , , , , , , , )

One Response to “REPL i PHP – czyli Telnetem do rakiety :)”

  1. [...] współbieżność (concurrency), lekkie procesy (lightweight processes), język funkcyjny, interaktywność. Język ten powstał w laboratoriach firmy Ericsson (tak, tej od Sony Ericsson) i pozwolił jej [...]

Leave a Reply

XHTML: You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

SexpCode: You can use SexpCode tags.

) ;end of defpost