Neueste Version v5.00 (August 2015)
Ich habe eine große regex-Engine XRE in die bsh eingebaut.
Bekannte Maschinen sind:
JGsoft .NET Java Perl PCRE PCRE2Bei deren Entwicklung habe ich massivst gegen fast alle MISRA-Regeln verstoßen.
Die bsh-XRE dürfte zur weltweiten Spitzengruppe der regex-Engines gehören.
http://www.schellong.de/htm/bshmnk.htm#xregexpR http://www.schellong.de/htm/bshmnk.htm#exprK http://www.schellong.de/htm/bshmnk.htm#grepK http://www.schellong.de/htm/bshmnk.htm#bshKDownload bsh V5.00: http://www.schellong.de
Es handelt sich um kostenlose Software.
Autoren-Hinweise können per Environment-Variablen
abgeschaltet werden.
Neue Version v4.10 (readv, ...)
bsh gibt es per FreeLizenz zum kostenlosen Download, ohne eingebautes Zeitlimit.
Vollversionen ohne Rabatt sind relativ teuer - u.a. wegen der großen Anzahl interner Kommandos.
Die FreeLizenz hat sich geändert: Auch gewerbliche Verwendung ist jetzt unbeschränkt, und die Hinweistexte lassen sich mittels Environment-Variablen komplett abschalten, und das Nesting-Limit ist beseitigt. Aktuelle Version ist 3.40.
Die bsh unterscheidet sich von allen anderen Shells,
obwohl sie recht weitgehend kompatibel mit ksh/sh ist.
Es gibt viele zusätzliche Ausstattungsmerkmale und Konzepte, die es in anderen Shells nicht
oder in anderer Form und Ausgestaltung gibt.
Interne Kommandos |
bsh hat etwa 100 interne Kommandos:
grep [ -FSchilnm[#]qsvyxL ] [ -e ] RA [ datei ... ] fstat [-|+FitfplugJNsamcnhTv?] [name...|wert...] file...|handle...Das sind nur zwei davon.
Hier alle, ohne Programmier-Kommandos (if, while, for, case, ...):
. : alias array autor base basename break cat catv cd chdir cmpv continue conv copy crc ctime cut dirname echo env eval exec exit export expr extern false fmode fork fprint fsize fstat fullname global goend goto grep ifdef ifset ifenv inv kill let line link list local localset mkdirs mktemp move mtime print prints prompt pwd read readc readl readonly rel remove return sane seek set shift sleep sortl static stime sum system systime tee test times tr trap true type typeset tz umask unalias unexport unset unsetenv ver wait wc whence nop readvDies hat folgenden großen Vorteil:
Als Kommandozeilen-Editor (-E) ist eine erweiterte doskey-Variante eingebaut.
Das gefällt mir besser als diese komischen vi-Einbauten bei ksh usw.
bsh hat echte lokale und lokal-statische Variablen.
Globale Shell-Variablen und Environment-Variablen kommen hinzu.
bsh gestattet (bedingte) Funktionsdefinitionen innerhalb von Shell-Funktionen.
bsh benutzt voreingestellt seek-bare Dateiendabschnitte als Pipe-|-Puffer:
Beispielsweise: xyz | ftp
cat datei | { > datei #Loeschen von datei while readl zeile; do #Lesen aus pipe-Datei print -r xxx #Neuschreiben von datei... done >< }
Das General-Maskierzeichen ist per Default: % .
Mit Option -B oder set -B kann der Backslash \ gewählt werden.
bsh verarbeitet Reguläre Ausdrücke - als Grundstock gemäß 'ed / sed'.
Dazu gibt es viele Erweiterungen, wie von vi, vim, perl bekannt.
Auch Suchen und Ersetzen ist mit expr möglich.
bsh hat einen eingebauten Arithmetik/Logik-Modul, der mehr Operationen
unterstützt als die Sprache C.
Es werden die Zahlenbasen von 2..36 + 256 verarbeitet.
Bei bsh64 wird mit 64Bit-Integer gerechnet.
Drei Syntaxformen sind vorhanden:
((...)) $((...)) let "..." ...bsh ist im Vergleich überdurchschnittlich sicher.
Die ausführbaren Dateien (Exe) der bsh sind -ob des Inhalts- überraschend klein.
Die 'natürliche' Größe beträgt nur etwa 120..140 KB (static).
Wenn beispw. die Linux-static-Exe 340 KB hat, so wird das durch sehr pauschal
konzeptionierte Library-Verbunde verursacht.
(Sehr viel unnötig dazugelinkt.)
[Leider funktionieren Dynamic-Exe fast nie auf Systemen, wo diese Exe nicht hergestellt wurde.]
Zeitvergleich |
bsh ist sehr schnell:
|
|
bsh und SCO-ksh verweisen alle anderen auf die Plätze! (Quelle: bsh.mnv, 1996-98)(Die Geschwindigkeit der bsh hat sich übrigens kürzlich etwa verdoppelt.)
CGI unter Embedded-DOS |
bsh ist meines Wissens der einzige Interpreter, den man hier einsetzen kann, anstelle von Compiler-Sprachen.
Ich habe bsh portiert auf den IPC@CHIP (i80186,Streichholzschachtel): 65KB Flash-ROM (pklite), 160KB RAM.
Hinzugefügt wurden die ext-, com- und sem-Kommandos (Serial, Semaphore).
Abgespeckt wurden nur Kommandozeileneditor, sortl-Kommando, u. ähnl.
Solche Systeme sind zwar sehr klein, preiswert und haben eine geringe Leistungsaufnahme, jedoch die CGI-Programmierung gestaltet sich gänzlich anders als üblich: Der WebServer kann keine Skripte ausführen und keine Ausgabe auf Handle 1 entgegennehmen! Es muß ein 16Bit-Programm (Large model, z. B. cgi.exe) in C mit CallBack?-Funktionen geschrieben werden, wobei jeder CallBack? ein Name zugeordnet und angemeldet werden muß, der dann wie ein Dateiname hinter dem URL verwendet werden kann.
Mit Hilfe von bsh sieht die Angelegenheit wesentlich besser aus: Bei Kontaktaufnahme mit einem Browser erhält man fast den Eindruck als ob da ein ausgewachsenes Unix-System mit Apache-Webserver werkelt. Man erhält mehr als 10 html-Dateien bis zu je 80 KB und kann mehrere 100 Hardware-Einheiten (über Modem) verwalten, konfigurieren und deren Alarme kontrollieren. bsh bohrt quasi die normalerweise machbare Funktionalität um einen Faktor 10-20 auf - ohne zusätzliche Flash-Disk. Das alles auf einem System, das nur etwa 150 KB Festspeicher und etwa 250 KB RAM (einschl.RamDisk?) bietet.
CGI unter Linux/Unix |
Es wird gesagt, daß CGI-Programmierung mit Shells "Schwachsinn" sei.
Dieser Aussage kann man allgemein durchaus zustimmen - aber nicht bsh betreffend!
Meine WebSeite wird seit Jahren von bsh als CGI-Interpreter kontrolliert. Und seit über einem Jahr gibt es einen besonderen WebCounter?, der seit einiger Zeit nicht nur mir und Kollegen/Bekannten offensteht, sondern auch fremden Personen. bsh funktioniert hier seit mehr als 100000 Aufrufen einwandfrei und stabil, vom WebSpaceProvider? kamen niemals Klagen, und die Entwicklung der Skripte dauerte nur etwa 10 Tage - na also.
Fragen / Antworten / Diskussion |
Frage: Wo finden sich die in der Tabelle genutzten Benchmarks loop und s70? Ein Vergleich mit anderen modernen SkriptSprachen wäre da ja eigentlich ganz interessant. -- PeterFunk