Rebol
Paradigma | Sprachorientierte Programmierung, Datenaustausch, funktional, Prototypbasiert, Imperativ |
---|---|
Entworfen von | Carl Sassenrath |
Entwickler | Reboltechnologien |
Erstmals erschienen | 1997 |
Stabile Version | 2.7.8 / Januar 2011 |
Vorschau -Version | 2.101.0 / Dezember 2012 |
Disziplin tippen | dynamisch, stark |
OS | plattformübergreifend |
Lizenz | 2.7.8 ist Freiumverteilbare Software frei,[1] 2.101.0 hat Apache 2.0 Lizenz[2] |
Dateiname -Erweiterungen | .r, .reb[3] |
Webseite | www |
Beeinflusst von | |
Selbst, Weiter, Lispeln, Logo[4] | |
Beeinflusst | |
JSON,[5] Rot | |
|
Rebol (/ˈrɛbəl/ Reb-əl; historisch Rebol) ist ein plattformübergreifend[6] Datenaustauschsprache und ein Multi-Paradigma Dynamische Programmiersprache entworfen von Carl Sassenrath für Netzwerkkommunikation und verteiltes Computer. Es führt das Konzept von vor Dialektieren: klein, optimiert, Domänenspezifische Sprachen für Code und Daten,[6][7] Dies ist auch die bemerkenswerteste Eigenschaft der Sprache gemäß ihrem Designer Carl Sassenrath:
Obwohl es zum Programmieren, zum Schreiben von Funktionen und zur Durchführung von Prozessen verwendet werden kann, ist die größte Stärke die Fähigkeit, einfach domänenspezifische Sprachen oder Dialekte leicht zu erstellen
-Carl Sassenrath[8]
Douglas Crockford, bekannt für seine Beteiligung an der Entwicklung von JavaScript, hat Rebol als "eine modernere Sprache beschrieben, aber mit einigen sehr ähnlichen Ideen wie LISP, da alles auf einer Darstellung von Daten basiert, die dann als Programme ausführbar ist" und als einer von JSON's Einflüsse.[5]
Ursprünglich waren die Sprache und ihre offizielle Umsetzung proprietär und geschlossene Quelle, entwickelt von Rebol -Technologien. Folgende Diskussion mit Lawrence Rosen,[9] Der Rebol Version 3 -Dolmetscher wurde unter dem veröffentlicht Apache 2.0 Lizenz am 12. Dezember 2012.[10] Ältere Versionen sind nur in binärer Form erhältlich, und es ist keine Quellveröffentlichung für sie geplant.
Rebol wurde verwendet, um zu programmieren Internet Anwendungen (beide Klient- und Server-Seite), Datenbank Anwendungen, Dienstprogramme, und Multimedia Anwendungen.[6]
Etymologie
Rebol war anfangs ein Akronym für RElativ EXpression BASED OBiege LAnguage in allen Kappen geschrieben.[6][8] Sich mit modernen Trends in der Repräsentation der Sprachnamen auszurichten, z. durch den Änderungswechsel zum Ersetzen des historischen Namens LISPELN durch Lispeln, Programmierer stellten die Praxis des Schreibens ein Rebol In allen Kappen. Sassenrath stellte schließlich die Namensfrage für die Community -Debatte in seinem Blog.[11] In späteren Schreiben übernahm Sassenrath die Konvention, den Sprachnamen als Sprachname zu schreiben Rebol.[12]
Geschichte
Rebol wurde 1997 erstmals veröffentlicht und wurde über einen Zeitraum von 20 Jahren von Carl Sassenrath, dem Architekten und Hauptentwickler von Amigaosbasierend auf seinem Studium von Denotationssemantik und Verwendung von Konzepten aus den Programmiersprachen Lispeln, Weiter, Logo, und Selbst.
- Rebol Technologies wurde 1998 gegründet.
- Rebol 2Der Dolmetscher, der zum Kern der erweiterten Interpreter -Ausgaben wurde, wurde erstmals 1999 veröffentlicht.
- Rebol/Befehl, die eine starke Verschlüsselung hinzufügte und ODBC Access, wurde im September 2000 veröffentlicht.
- Rebol/Aussicht wurde im April 2001 veröffentlicht und fügte der Kernsprache grafische Fähigkeiten hinzu.
- Rebol/iOSIm August 2001 wurde ein mit Rebol gebautes erweiterbares Umfeld mit Rebol veröffentlicht.
- Rebol/SDKIm Dezember 2002 wurde die Wahl der Kernel zur Bindung sowie Präprozessor veröffentlicht.
- Rebol 3 [R3], die neueste Version der Dolmetscher, hatten Alpha -Versionen seit Januar 2008 von Rebol Technologies veröffentlicht. Seit seiner Veröffentlichung als Apache 2 -Projekt im Dezember 2012 wird es von der Rebol -Community entwickelt.[13]
Entwurf
Benutzerfreundlichkeit
Eines der Prinzipien des Reboldesigns besteht darin, "einfache Dinge auf einfache Weise zu tun".[6] Im folgenden Beispiel die Visual Interface Dialekt wird verwendet, um eine einfache zu beschreiben Hallo Weltprogramm mit einer grafischen Benutzeroberfläche:
Aussicht Layout [Text "Hallo Welt!" Taste "Aufhören" [Verlassen]]
So sieht ein ähnliches Beispiel in R3-Gui aus:
Aussicht [Text "Hallo Welt!" Taste "Aufhören" an-Aktion [Verlassen]]
Dialekte
Rebol Domänenspezifische Sprachen, genannt Dialekte, sind Mikrosprachen für einen bestimmten Zweck optimiert. Dialekte können verwendet werden, um Geschäftsregeln, grafische Benutzeroberflächen oder Bildschirme während der Installation eines Programms zu definieren. Benutzer können ihre eigenen Dialekte definieren, jedes vorhandene Rebolwort wiederverwenden und in diesem Dialekt eine bestimmte Bedeutung geben.[6] Dialekte sind interpretiert Durch Funktionen verarbeiten Rebolblöcke (oder Parsen von Zeichenfolgen) auf eine bestimmte Weise.
Ein Beispiel für Rebols Dialektierungsfähigkeiten ist mit dem Wort zu sehen Rückkehr
. In dem Datenaustausch -Dialekt Rückkehr
ist nur ein Wort, das keine spezifische Bedeutung hat. In dem Dialekt machen, Rückkehr
ist ein Globale Variable bezieht sich auf einen Eingeborenen Funktion Einen Funktionsergebniswert zurückgeben.[4] In dem Visual Interface Dialekt (VID), Rückkehr
ist ein Stichwort verursacht, dass der Layoutmotor a simuliert Kutschenrückkehr, den "Rendering Pen" auf den Beginn der nächsten Zeile zu bewegen.[7]
Ein Rebol -Dolmetscher mit grafischen Fähigkeiten muss viele Dialekte verstehen und interpretieren. In der folgenden Tabelle werden die wichtigsten in der Reihenfolge von Bedeutung aufgeführt.
Dialektname | Interpretiert von | Zweck |
---|---|---|
Datenaustausch -Dialekt | Belastung Funktion | repräsentiert Daten und Metadaten; Gemeinsame Plattform für Rebol -Dialekte |
Dialekt machen | tun Funktion | Programmierung |
Dialekt analysieren | analysieren Funktion | Musteranpassung |
Funktionsspezifikationsdialekt | machen Funktion | Funktion Definition; Funktionelle Programmierung |
Objektspezifikationsdialekt | machen Funktion | Objekt Definition/Vererbung; Prototypbasierte Programmierung |
Visual Interface Dialekt (VID) oder Rebgui | Layout Funktionoder Anzeige Funktion | an grafische Benutzeroberfläche |
Dialekt zeichnen | Aussicht Funktion | definiert grafische Elemente (Linien, Polygone usw.) |
Skriptspezifikationsdialekt | tun Funktion | Skriptdefinition |
Sicherheitsrichtlinie | sicher Funktion | Gibt die Sicherheitsrichtlinie an |
Syntax
Rebol Syntax ist Freiformkeine spezifische Positionierung erfordert. Jedoch, Vertiefung wird oft verwendet, um die Struktur des Textes an menschliche Leser besser zu übermitteln.
Die syntaktischen Eigenschaften verschiedener Dialekte können unterschiedlich sein. Die gemeinsame Plattform für alle Rebol -Dialekte ist die Datenaustausch -Dialekt; Andere Dialekte werden normalerweise daraus abgeleitet. Zusätzlich zur gemeinsamen Plattform für alle Dialekte, die Datenaustausch -Dialekt wird direkt verwendet, um Daten und Metadaten darzustellen, Datenstrukturen zu füllen, Daten über das Internet zu senden und sie in der Datenspeicherung zu speichern.
Im Gegensatz zu Programmiersprachen wie C, das Datenaustausch -Dialekt besteht nicht aus aus Erklärungen, Aussagen, Ausdrücke oder Schlüsselwörter. Ein gültiger Datenaustausch -Dialekt Textstream ist a Baumdatenstruktur bestehend aus Blöcken (der Stammblock ist implizit, Unterblocks sind abgrenzt durch eckige Klammern), parens (abgegrenzt von Runde Klammern), Saiten (Abgrenzt von Anführungszeichen oder geschweifte Klammern geeignet für Multi-Line-Zeichenfolgen; Pflege Notation wird für unprintbare Zeichen verwendet), URLs, E-Mail-Adressen, Dateien, Pfade oder andere zusammengesetzte Werte. nicht wie Algol BlöckeRebolblöcke sind zusammengesetzte Werte, die dem angegeben sind S-Expressionen in Lispeln. Die Tatsache, dass Code in Form von Rebolblöcken geschrieben ist homoikonisch.[4]
Blöcke sowie Parens können andere zusammengesetzte Werte enthalten (ein Block kann Unterblocks, Pareens, Saiten, ...) oder enthalten) oder Skalarwerte Wie Wörter, Set-Wort (Wörter, die von der satt, von der Doppelpunkt), Get-Words (Wörter, die vom Dickdarm vorangestellt wurden), Lit-Wort (Wörter, die von der vorangestellt sind Apostroph), Zahlen, Geld, Figurenusw. getrennt von durch Whitespace. Beachten Sie, dass Sonderzeichen in Worten erlaubt sind, also a+b
ist ein Wort anders als a + b
, was eine Abfolge von drei Wörtern ist, die durch Räume getrennt sind.
Kommentare kann dem folgenden erscheinen Semikolon bis zum Ende der Linie. Mehrzeilige Kommentare oder Kommentare, die vom lexikalischen Parser nicht ignoriert werden, können mit "gewöhnlichen" Datenatypen wie Multi-Line-Zeichenfolgen geschrieben werden.[4]
Semantik
Blöcke, die domänenspezifische Sprache enthalten Argumente zu spezifisch Bewerter Funktionen.[6]
tun
Der am häufigsten verwendete Bewerter ist der tun
Funktion. Es wird standardmäßig verwendet, um die Texteingabe in den Interpreter zu interpretieren Konsole.
Das Dialekt machen interpretiert von der tun
Funktion ist ein expressionsorientiert Sublanguage der Datenaustausch -Dialekt. Die wichtigste semantische Einheit der Sprache ist die Ausdruck. Im Gegensatz zu imperativen Programmiersprachen, die von abfällt Algol, das Dialekt machen hat weder Schlüsselwörter noch Aussagen.
Wörter werden als verwendet als Fall-unempfindlich Variablen. Wie in allen Dynamisch getippte Sprachen, Variablen haben keinen zugeordneten Typ, Typ ist mit Werten verbunden. Das Ergebnis, d. H. Die Bewertung eines Wortes, wird zurückgegeben, wenn ein Wort von der angetroffen wird tun
Funktion. Die Set-Wort-Form eines Wortes kann verwendet werden Abtretung. Ohne Aussagen, Zuordnung zusammen mit Funktionen mit Nebenwirkungen kann verwendet werden für Imperative Programmierung.[4]
Unterblocks des Wurzelblocks bewerten sich. Diese Eigenschaft wird verwendet, um Datenblöcke zu verarbeiten Strukturierte Programmierung indem Blöcke als Argumente eingereicht werden Kontrolle Funktionen wie wenn
, entweder
, Schleife
usw. und zum Dialektieren, wenn ein Block an eine bestimmte Interpreterfunktion übergeben wird.[6]
Ein spezifisches Problem ist, dass zusammengesetzte Werte, die Variablen zugeordnet sind, nicht kopiert werden. Um eine Kopie zu machen, muss der Wert an die übergeben werden Kopieren
Funktion.[4]
Das tun
Die Funktion folgt normalerweise a Präfix -Bewertungsstil, wobei eine Funktion die Argumente verarbeitet. Jedoch, Infix -Bewertung mit Infix Betreiber existiert auch. Die Infix -Bewertung hat Vorrang vor der Präfixbewertung. Zum Beispiel,
Abs -2 + 3
Rückgabe 1, da die Infix -Addition Vorrang vor der Berechnung des Absolutwerts hat. Bei der Bewertung von Infix -Ausdrücken ist die Reihenfolge der Bewertung von links nach rechts, kein Bediener nimmt Vorrang über einen anderen. Zum Beispiel,
2 + 3 * 4
Rückgaben 20, während eine Bewertung, die der Multiplikation Vorrang vorliegt, 14 ergeben würde. Alle Betreiber haben Präfixversionen. Tun
Normalerweise bewertet Argumente, bevor sie an eine Funktion weitergegeben werden. Also der folgende Ausdruck:
DRUCT LESEN HTTP://en.wikipedia.org/wiki/Rebol
Lesen zuerst die Wikipedia Rebol -Seite und übergeben dann das Ergebnis an die drucken
Funktion. Klammern können verwendet werden, um die Reihenfolge der Bewertung zu ändern. Verwendung PräfixnotationDie Verwendung von Klammern in Ausdrücken kann vermieden werden.[4]
Die einfachen Vorrangregeln sind beide ein Vorteil:
- Keine "Konsultieren" von Vorrangtabellen beim Schreiben von Ausdrücken "
- Sie müssen keine Vorrangtabellen neu schreiben, wenn ein neuer Bediener definiert ist
- Ausdrücke können leicht sein Transliterated Vom Infix bis zur Präfixnotation und umgekehrt
sowie ein Nachteil:
- Benutzer, die an herkömmliche Vorrangregeln gewöhnt sind, können leicht einen Fehler machen[6]
analysieren
Das analysieren
Die Funktion wird vorzugsweise verwendet, um Dialekte anzugeben, zu validieren, zu transformieren und zu interpretieren. Es tut dies durch Matching Ausdrücke analysieren zur Laufzeit.[6]
Ausdrücke analysieren sind in der geschrieben Dialekt analysierenwas, wie das Dialekt machen, ist eine expressionsorientierte Sublanguage der Datenaustausch -Dialekt. im Gegensatz zu den Dialekt machen, das Dialekt analysieren Verwendet Schlüsselwörter, die Operatoren und die wichtigsten darstellen Nicht -Terminale, Infix -Parsing -Operatoren haben keine Präfixäquivalente und verwenden Vorrangregeln (Vorrangregeln (Reihenfolge hat höhere Vorrang als Auswahl).[6]
Maßnahmen können auch während des Parsingprozesses einbezogen werden und die analysieren
Funktion kann verwendet werden, um Blöcke oder Zeichenfolgen zu verarbeiten. Bei der String -Parsen eben analysieren
Muss die Analyse "niedriger Ebene" unter Berücksichtigung der Berücksichtigung der Analyse übernehmen Figuren und Grenzwerte. Blockanalyse ist höhere Ebene, um das Scannen auf der Ebene der Rebolwerte zu bearbeiten.[6]
Der Parse -Dialekt gehört zur Familie der Grammatikfamilien, die durch die dargestellt werden Top-Down-Parsingsprache oder der Ausdrucksgrammatik analysieren (ANBINDUNG). Die Hauptähnlichkeit ist das Vorhandensein der Reihenfolge und Auswahl Betreiber alle Familienmitglieder haben. Parse Dialektsyntax und die Ähnlichkeiten zwischen dem Parse -Dialekt und dem PEG werden durch diese Transliteration von a veranschaulicht PEG -Beispiel Das analysiert einen arithmetischen Ausdruck:
Ziffer: Charset [#"0" - #"9"] Wert: [etwas Ziffer | "(" Expr ")"] Produkt: [Wert irgendein [["*"| "/"] Wert]] Summe: [Produkt irgendein [["+"| "-"] Produkt]] Expr: Summe analysieren/alle "12+13" Expr
Implementierungen
Das offizielle Rebol 2.7.8 Implementierung ist in mehreren Ausgaben erhältlich (/Kern, /Aussicht, /Befehl, /Sdk und /IOS). Beide /Kern und /Aussicht Ausgaben sind freiumverteilbare Software frei.[1]
Die Laufzeitumgebung wird in einer einzelnen ausführbaren Datei gespeichert. Rebol/Kern 2.7.8, die Konsolenausgabe, ist ungefähr 300 kb und Rebol/Aussicht 2.7.8, die grafische Benutzeroberfläche Ausgabe, ist ungefähr 650 kb groß.
Rebol/Aussicht bietet Plattformunabhängig Grafik- und Tonzugriff und mit einem eigenen Fenster -Toolkit und einem erweiterbaren Stil ausgestattet (Styles (GUI -Widgets). Erweiterte Ausgaben, wie z. Rebol/Befehl 2.7.8 oder Rebol/SDK 2.7.8 Erfordern einer bezahlten Lizenz; Sie fügen Funktionen wie den ODBC -Datenzugriff und die Option zum Erstellen von eigenständigen ausführbaren Dateien hinzu.
Erbe
- Rebol wurde von benannt nach Douglas Crockford als eine der Inspirationen von JavaScript-Objekt-Notation.[5]
- Rebol inspirierte das Open-Source-Orca-Projekt, das eine interpretierte rebolartige Sprache ist.[14]
- Bor ist eine interpretierte, homoikonische Sprache, die von Rebol inspiriert ist und dem Rebol ähnelt, das zum Einbetten von domänenspezifischen Sprachen gedacht ist. Es wird als C -Bibliothek implementiert, die unter den Bestimmungen des LGPLV3 lizenziert ist.
- Das Rote Programmiersprache wurde direkt von Rebol inspiriert, doch die Implementierungsentscheidungen von Red waren speziell darauf ausgerichtet, seine wahrgenommenen Einschränkungen zu überwinden.[15]
Siehe auch
Verweise
- ^ a b Reboltechnologien. Das Rebol/View und Rebol/Core 2.7.8 Lizenz
- ^ R3 Quelle bei GitHub
- ^ "Carls Rebol -Blog - Lassen Sie uns zu .Reb -Suffix wechseln". Rebol.com. 18. August 2013. Abgerufen 23. Januar, 2014.
- ^ a b c d e f g Goldman, E., Blanton, J. (2000). Rebol: Der offizielle Leitfaden. McGraw-Hill Osborne Media. ISBN0-07-212279-x.
- ^ a b c Crockford, Douglas. Die JSON -Saga, JsonSaga.ppt Archiviert 4. Oktober 2012 bei der Wayback -Maschine
- ^ a b c d e f g h i j k l Roberts, Ralph (2000). Rebol für Dummies. Hungrige Gedanken. ISBN0-7645-0745-1.
- ^ a b Auverlot, Olivier (2001). Rebolprogrammierung. Eyrer. ISBN2-212-11017-0.
- ^ a b Sassenrath, Carl (1. Juli 2000). "In der Rebol -Skriptsprache". Dr. Dobbs Journal.
- ^ "Rebol, um Open Source zu werden". Rebol.com. 25. September 2012. Abgerufen 23. Januar, 2014.
- ^ Sassenrath, Carl (12. Dezember 2012). "Kommentare zu: R3 Source Code veröffentlicht!". Abgerufen 14. August, 2014.
Sie dachten wahrscheinlich, dass die Quellveröffentlichung niemals passieren würde? Habe ich recht? Nun, es ist jetzt in Github unter github.com/rebol/rebol.
- ^ "Rebol Rebol nennen?". 14. Dezember 2012. archiviert von das Original am 3. Dezember 2013. Abgerufen 2. Dezember, 2013.
- ^ Sassenrath, Carl. "Cross-Compiling-Rebol für Ihr Lieblings-eingebettetes Board". Abgerufen 16. September, 2016.
- ^ "Quellcode für den Rebol -Dolmetscher". Rebol/Rebol -Github. Abgerufen 14. März, 2017.
- ^ Das Rebol-Orca-Projekt bei Freecode
- ^ Das Rotes Projekt bei GitHub
Weitere Lektüre
- Mikes, Nora (20. November 1999). "Ein Rebol -Einfall: Es ist keine Skriptsprache, keine Programmiersprache - und auch keine neue Amiga. Oder ist es?". Linuxworld. Archiviert von das Original am 24. März 2005.
- Geschichte, Derrick (27. August 1999). "Rebol könnte die Sprache für den Rest von uns sein". Web Review. Archiviert von das Original am 12. Oktober 1999.