Rebol - Rebol

Rebol
Rebol logo.png
Paradygmat programowanie językowe , wymiana danych , funkcjonalne , oparte na prototypach , imperatyw
Zaprojektowany przez Carl Sassenrath
Deweloper Technologie REBOL
Po raz pierwszy pojawiły się 1997 ; 24 lata temu  ( 1997 )
Wersja stabilna
2.7.8 / styczeń 2011 ; 10 lat temu  ( 2011-01 )
Wersja zapoznawcza
2.101.0 / grudzień 2012 ; 8 lat temu  ( 2012-12 )
Dyscyplina typowania dynamiczny , mocny
OS wieloplatformowy
Licencja 2.7.8 to oprogramowanie , które można dowolnie redystrybuować , wersja 2.101.0 ma licencję Apache 2.0
Rozszerzenia nazw plików .r, .reb
Stronie internetowej www .rebol .com
Wpływem
Self , Forth , Lisp , Logo
Pod wpływem
JSON , czerwony

REBOL ( / R ɛ b əl / REB -əl ; historycznie REBOL ) jest między platformami język wymiany danych i wielu paradygmat język programowania dynamicznego zaprojektowany przez Carl Sassenrath komunikacji sieciowej i przetwarzania rozproszonego . Wprowadza koncepcję dialektu : małe, zoptymalizowane , specyficzne dla domeny języki kodu i danych, co jest również najbardziej godną uwagi cechą języka według jego projektanta Carla Sassenratha :

Chociaż może być używany do programowania, pisania funkcji i wykonywania procesów, jego największą zaletą jest możliwość łatwego tworzenia języków lub dialektów specyficznych dla domeny

-  Carl Sassenrath

Douglas Crockford , znany ze swojego zaangażowania w rozwój JavaScript , opisał Rebol jako „bardziej nowoczesny język, ale z kilkoma bardzo podobnymi pomysłami do Lispa, ponieważ wszystko jest zbudowane na reprezentacji danych, które są następnie wykonywalne jako programy” i jako jeden z wpływów JSON .

Pierwotnie język i jego oficjalna implementacja były zastrzeżone i zamknięte, opracowane przez REBOL Technologies. Po dyskusji z Lawrencem Rosenem , interpreter Rebol w wersji 3 został wydany na licencji Apache 2.0 w dniu 12 grudnia 2012 roku. Starsze wersje są dostępne tylko w formie binarnej i nie planuje się dla nich wydania źródła.

Rebol był używany do programowania aplikacji internetowych (zarówno po stronie klienta, jak i serwera ), aplikacji baz danych , narzędzi i aplikacji multimedialnych .

Etymologia

REBOL początkowo skrótem R elativus e Xpression B ased O bject L anguage zapisany w całości osłony. Aby dostosować się do współczesnych trendów w nazewnictwie języków, reprezentowanych np. Przez zamianę historycznej nazwy LISP na Lisp , programiści zaprzestali praktyki pisania REBOLa w całości. Sassenrath ostatecznie postawił kwestię nazewnictwa w debacie społeczności na swoim blogu. W późniejszym piśmie Sassenrath przyjął konwencję zapisu nazwy języka jako Rebol .

Historia

Po raz pierwszy wydany w 1997 roku Rebol był projektowany przez 20 lat przez Carla Sassenratha, architekta i głównego programistę AmigaOS , w oparciu o jego badanie semantyki denotacyjnej i wykorzystanie koncepcji z języków programowania Lisp , Forth , Logo i Self .

  1. Firma REBOL Technologies powstała w 1998 roku.
  2. REBOL 2 , tłumacz, który stał się rdzeniem rozszerzonych edycji tłumaczeniowych, został wydany po raz pierwszy w 1999 roku.
    1. REBOL / Command , który dodał silne szyfrowanie i dostęp do ODBC , został wydany we wrześniu 2000 roku.
    2. REBOL / View został wydany w kwietniu 2001 roku, dodając możliwości graficzne w podstawowym języku.
    3. REBOL / IOS , rozszerzalne środowisko współpracy zbudowane za pomocą REBOL zostało wydane w sierpniu 2001 roku.
    4. REBOL / SDK , zapewniający wybór jąder do wiązania, a także preprocesor, został wydany w grudniu 2002 roku.
  3. Rebol 3 [R3], najnowsza wersja interpretera , miała wersje alfa wydane przez REBOL Technologies od stycznia 2008 roku. Od czasu wydania jako projekt Apache 2 w grudniu 2012 roku, jest rozwijany przez społeczność Rebol.

Projekt

Łatwość użycia

Jedną z zasad projektowania Rebol jest „robienie prostych rzeczy w prosty sposób”. W poniższym przykładzie dialekt interfejsu wizualnego jest używany do opisu prostego programu Hello world z graficznym interfejsem użytkownika:

view layout [text "Hello world!" button "Quit" [quit]]

Oto jak podobny przykład wygląda w R3-GUI:

view [text "Hello world!" button "Quit" on-action [quit]]

R3-GUI Przykład Hello world

Dialekty

Języki specyficzne dla domeny Rebol , zwane dialektami , to mikrojęzyki zoptymalizowane do określonego celu. Dialekty mogą służyć do definiowania reguł biznesowych, graficznych interfejsów użytkownika lub sekwencji ekranów podczas instalacji programu. Użytkownicy mogą definiować własne dialekty, ponownie wykorzystując istniejące słowo Rebol i nadając mu określone znaczenie w tym dialekcie. Dialekty są interpretowane przez funkcje przetwarzające bloki Rebol (lub analizujące łańcuchy) w określony sposób.

Przykład zdolności Rebol do wybierania numerów można zobaczyć za pomocą słowa return . W dialekcie wymiany danych return to tylko słowo, które nie ma żadnego konkretnego znaczenia. W dialekcie zrób , return to zmienna globalna odnosząc się do natywnej funkcji przechodzi z powrotem wartość wynikową funkcji. W wizualnej dialekcie interfejsu (VID) , return to słowo kluczowe powodując silnik układu do symulacji powrotu karetki , przesuwając pióro „oddawania” w dół do początku następnej linii.

Tłumacz Rebol ze zdolnościami graficznymi musi rozumieć i interpretować wiele dialektów. W poniższej tabeli wymieniono najważniejsze z nich w kolejności ich znaczenia.

Nazwa dialektu Zinterpretowany przez Cel, powód
Dialekt wymiany danych load funkcjonować reprezentuje dane i metadane; wspólna platforma dla dialektów Rebol
Czy dialekt do funkcjonować programowanie
Analiza dialektu parse funkcjonować dopasowanie wzorców
Dialekt specyfikacji funkcji make funkcjonować definicja funkcji ; programowanie funkcjonalne
Dialekt specyfikacji obiektu make funkcjonować Przedmiotem określenie / dziedziczenie; programowanie prototypowe
Dialekt interfejsu wizualnego (VID)
lub
RebGUI
layout funkcja
lub
display funkcja
określa graficzny interfejs użytkownika
Narysuj dialekt view funkcjonować definiuje elementy graficzne (linie, wielokąty itp.)
Dialekt specyfikacji skryptów do funkcjonować definicja skryptu
Dialekt polityki bezpieczeństwa secure funkcjonować określa politykę bezpieczeństwa

Składnia

Składnia Rebol jest dowolna i nie wymaga specjalnego pozycjonowania. Jednak często stosuje się wcięcia, aby lepiej przekazać strukturę tekstu czytelnikom.

Właściwości syntaktyczne różnych dialektów mogą się różnić. Wspólną platformą dla wszystkich dialektów Rebol jest dialekt wymiany danych ; z niego wywodzą się zwykle inne dialekty. Oprócz tego, że jest wspólną platformą dla wszystkich dialektów, dialekt wymiany danych jest bezpośrednio używany do reprezentowania danych i metadanych, wypełniania struktur danych, wysyłania danych przez Internet i zapisywania ich w pamięci.

W przeciwieństwie do języków programowania, takich jak C , dialekt wymiany danych nie składa się z deklaracji , instrukcji , wyrażeń ani słów kluczowych. Poprawna wymiana danych dialekt strumień tekst jest struktura danych drzewo składające się z bloków (blok główny jest niejawna, podbloków są rozdzielane przez nawiasy kwadratowe ), parens (rozdzielany przez nawiasach okrągłych ), smyczki (rozdzielany przez cudzysłów lub klamrowych odpowiednich dla wielu -line ciągi; notacja daszka jest używana do znaków niedrukowalnych), adresów URL , adresów e-mail, plików, ścieżek lub innych wartości złożonych . W przeciwieństwie do bloków ALGOL, bloki Rebol są wartościami złożonymi podobnymi do cytowanych wyrażeń s w Lisp . Fakt, że kod jest napisany w postaci bloków Rebol sprawia, że ​​język jest homoikoniczny .

Bloki, jak również pareny, mogą zawierać inne wartości złożone (blok może zawierać podbloki, pareny, ciągi znaków, ...) lub wartości skalarne, takie jak słowa, set-words (słowa zakończone dwukropkiem ), get-words (słowa poprzedzone prefiksem dwukropek), oświetlone słowa (słowa poprzedzone apostrofem ), cyfry, pieniądze, znaki itp., oddzielone białymi spacjami . Zauważ, że znaki specjalne są dozwolone w słowach, tak samo a+b jak słowo w przeciwieństwie do słowa a + b , które jest sekwencją trzech słów oddzielonych spacjami.

Komentarze mogą pojawiać się po średniku do końca linii. Komentarze wieloliniowe lub komentarze, które nie są ignorowane przez parser leksykalny, mogą być napisane przy użyciu „zwykłych” typów danych, takich jak łańcuchy wieloliniowe.

Semantyka

Bloki zawierające język specyficzny dla domeny można przesyłać jako argumenty do określonych funkcji oceniających .

zrobić

Najczęściej używanym oceniającym jest do funkcja. Jest używany domyślnie do interpretacji tekstu wprowadzanego do konsoli interpretera .

Dialekt Do interpretowane przez do funkcję, jest wyrazem zorientowanej podjęzykiem w dialekcie wymiany danych . Główną jednostką semantyczną języka jest wyrażenie . W przeciwieństwie do imperatywnych języków programowania wywodzących się z ALGOL , dialekt do nie ma ani słów kluczowych, ani instrukcji.

Słowa są używane jako zmienne bez rozróżniania wielkości liter . Podobnie jak we wszystkich językach dynamicznie typowanych , zmienne nie mają skojarzonego typu, typ jest powiązany z wartościami. Wynik, czyli ocena słowa, jest zwracany, gdy funkcja napotka słowo . Do przypisania można użyć formy ustalonego słowa . Nie mając instrukcji, przypisanie wraz z funkcjami ze skutkami ubocznymi może być użyte do programowania imperatywnego . do

Podbloki bloku głównego oceniają się same. Ta właściwość jest używana do bloków danych rączki, dla programowania strukturalnego poprzez złożenie bloki jako argumenty do kontroli funkcji, takich jak if , either , loop , itd., A dla dialecting, gdy blok jest przekazywana do funkcji specyficznych interpretera.

Szczególnym problemem, na który warto zwrócić uwagę, jest to, że wartości złożone, przypisane do zmiennych, nie są kopiowane. Aby wykonać kopię, wartość należy przekazać do copy funkcji.

do Funkcja zwykle następuje styl prefiksu oceny , gdzie funkcja przetwarza argumenty, które po nim następują. Jednak istnieje również ocena wrostków przy użyciu operatorów wrostków . Ocena infiksu ma pierwszeństwo przed oceną przedrostka. Na przykład,

abs -2 + 3

zwraca 1, ponieważ dodawanie wrostków ma pierwszeństwo przed obliczeniem wartości bezwzględnej. Podczas obliczania wyrażeń wrostkowych kolejność oceny jest od lewej do prawej, żaden operator nie ma pierwszeństwa przed innym. Na przykład,

2 + 3 * 4

zwraca 20, podczas gdy ocena dająca pierwszeństwo mnożeniu dałaby 14. Wszystkie operatory mają wersje prefiksowe. Do zwykle ocenia argumenty przed przekazaniem ich do funkcji. A więc poniższe wyrażenie:

najpierw czyta stronę Wikipedia Rebol, a następnie przekazuje wynik do print funkcji. Aby zmienić kolejność ocen, można użyć nawiasów. Używając notacji przedrostków , można uniknąć używania nawiasów w wyrażeniach.

Zaletą są proste zasady pierwszeństwa:

  • Nie ma potrzeby „sprawdzania” tabel pierwszeństwa podczas pisania wyrażeń
  • Nie ma potrzeby ponownego zapisywania tabel pierwszeństwa w przypadku zdefiniowania nowego operatora
  • Wyrażenia można łatwo transliterować od notacji wrostkowej do notacji przedrostkowej i odwrotnie

a także wada:

  • Użytkownicy przyzwyczajeni do bardziej konwencjonalnych reguł pierwszeństwa mogą łatwo popełnić błąd

analizować

parse Funkcja korzystnie jest używana do określenia, walidacji, transformacji i interpretacji języka. Czyni to poprzez dopasowanie wyrażeń analizy w czasie wykonywania.

Wyrażenia parsowania są zapisywane w dialekcie parsowania , który, podobnie jak dialekt do , jest zorientowanym na wyrażenia podjęzykiem dialektu wymiany danych . W przeciwieństwie do zrobienia dialektem , że analizy: dialekt użyciu słów kluczowych reprezentujące operatorów i najważniejsze nieterminale , analizowania Infix operatorzy nie mają odpowiedników prefiks i stosowanie zasady pierwszeństwa ( sekwencja ma wyższy priorytet niż wybór ).

Można również uwzględnić akcje, które mają zostać podjęte podczas procesu analizowania, a parse funkcja może być używana do przetwarzania bloków lub ciągów. Na poziomie analizy łańcucha parse musi obsługiwać analizę „niskiego poziomu”, biorąc pod uwagę znaki i ograniczniki. Analiza bloku jest na wyższym poziomie, obsługując skanowanie na poziomie wartości Rebol.

Dialekt parsowania należy do rodziny gramatyk reprezentowanych przez odgórny język analizujący lub gramatykę wyrażeń analizujących (PEG). Głównym podobieństwem jest obecność operatorów sekwencji i wyboru , które mają wszyscy członkowie rodziny. Składnia dialektu analizy i podobieństwa między dialektem analizy a PEG są zilustrowane przez następującą transliterację przykładu PEG, który analizuje wyrażenie arytmetyczne:

Digit: charset [#"0" - #"9"]
Value: [some Digit | "(" Expr ")"]
Product: [Value any [["*"| "/"] Value]]
Sum: [Product any [["+"| "-"] Product]]
Expr: Sum
parse/all "12+13" Expr

Wdrożenia

Oficjalna REBOL 2.7.8 realizacja jest dostępny w kilku wersjach ( / rdzeń , / Widok , / poleceń , / SDK i / IOS ). Obie / rdzeń i / Zobacz edycje są dowolnie rozpowszechniać oprogramowanie .

Środowisko wykonawcze jest przechowywane w jednym pliku wykonywalnym. Rebol / Core 2.7.8, wersja konsolowa, ma około 300 KB, a Rebol / View 2.7.8, wersja graficznego interfejsu użytkownika , ma około 650 KB.

Rebol / View zapewnia niezależny od platformy dostęp do grafiki i dźwięku oraz jest wyposażony we własny zestaw narzędzi do okienek i rozszerzalny zestaw stylów ( widżety GUI ). Wersje rozszerzone, takie jak Rebol / Command 2.7.8 lub Rebol / SDK 2.7.8, wymagają płatnej licencji; dodają funkcje, takie jak dostęp do danych ODBC i możliwość tworzenia samodzielnych plików wykonywalnych.

Dziedzictwo

  • Firma Rebol została nazwana przez Douglasa Crockforda jako jedna z inspiracji JavaScript Object Notation .
  • Rebol zainspirował otwarty projekt Orca, który jest interpretowanym językiem podobnym do Rebol.
  • Bor jest interpretowanym, homoikonicznym językiem inspirowanym i podobnym do Rebol, który jest przeznaczony do osadzania języków specyficznych dla domeny. Jest zaimplementowana jako biblioteka C licencjonowana na warunkach LGPLv3.
  • Język programowania Red był bezpośrednio inspirowany przez Rebol, ale wybory implementacyjne Red były ukierunkowane specjalnie na przezwyciężenie dostrzeganych ograniczeń.

Zobacz też

Bibliografia

Dalsza lektura

Zewnętrzne linki