Ja, wenn Du es einmal kapiert hast, willste nix anderes mehr!
Saludos Wolfgang
Ja, wenn Du es einmal kapiert hast, willste nix anderes mehr!
Saludos Wolfgang
Forth ist weder langsam noch primitiv, obwohl es primitives enthält :-p
Interaktiv austesten, dann brauchste keine printf Krücke.
Saludos Wolfgang
Am Wed, 08 Apr 2009 20:32:32 +0200 schrieb Falk Willberg:
Eben. Bei 100 Stück dann nur noch einen Tag.
Lutz
Und genau das macht Forth mit seiner virtuellen Maschine, es koppelt den HLL Teil von den Eigenheiten der jeweiligen CPU ab.
Von der spezifischen Peripherie mal abgesehen, ist die Forth engine immer gleich und ein in ANSI Forth geschriebenes Programm läuft auf jedem ANSI Forth System. Die Geschwindigkeit richtet sich jeweils nach der CPU und der Art der Implementation des Kernes.
Ein 8051 wird mit Floating Point Zahlen langsamer sein, als ein Power PC, aber das Ergebnis ist das gleiche, sonst haste ein Problem im Compiler. Aber selbst das kannst Du dann im Compiler nachsehen, da Forth typischerweise keine BIN-Libraries benutzt sondern der Quellcode des kompletten Systems vorliegt. Du kannst suchen, Du musst nicht. Aber wenn der Hersteller des Compilers gerade nicht greifbar ist, kannste Dich retten!
Saludos Wolfgang
Das geht in Forth auch mit #IF #THEN #ELSE ...
beliebig verschachtelt sowie NEEDS ...
Saludos Wolfgang
Am Wed, 08 Apr 2009 20:16:18 +0200 schrieb Nikolaus Riehm:
Nein, hier läuft so ein ISDN-Monitor, der die Rufnummern der eingehenden Anrufe erfasst, übers Netz gleich die Adressen nachschlägt und alles in ein HTML-File packt.
Aber mit den entstehenden Fehlermeldungen (unterstelle ich mal) müßten ja sowohl AVM als auch Bintec (oder jetzt Funkwerk) was anfangen können, und sei es nur soviel um auf den anderen zu zeigen.
Lutz
Ist aber nicht im Standard definiert, sodaß man gute Chancen hat, es selber implementieren zu müssen, wenn man das Forth-System wechselt, was allerdings in wenigen Zeilen in jedem ANS Forth-System machbar ist.
Das ist auch ein großer Vorteil von Forth. Versuch mal in C so ein grundlegendes Sprachkonstrukt wie bedingte Compilierung, wenn es das noch nicht gäbe, nachträglich zu implementieren.
Ein anderes Beispiel wären Querschnittsfunktionalitäten, wie es in der aspektorientierten Programmierung Verwendung findet. Man könnte z.B. recht leicht in Forth mal eben einen Profiler mit den Mitteln der Sprache schreiben, indem man die Wörter zum definieren von Wörtern (hauptsächlich Doppelpunkt und Semikolon) umdefiniert und jeweils die entsprechenden Profiling-Aufrufe einbaut. In C geht sowas gar nicht ohne externe Tools oder entsprechenden Compiler Support.
Hier bin ich mir nicht sicher. Viele moderne Forth-Systeme haben es wohl und ich habe es auch schon verwendet, da man damit recht gut größere Projekte strukturieren kann (bin nicht so der BLOCK-Anhänger :-) , aber ist das ANS Forth? Falls nicht, hätte man schon ein paar größere Problem, das selber portabel zu definieren.
Beim GCC ginge das auch, wobei sich da aber die Suche schonmal etwas aufwendiger gestaltet.
Das ist etwas verkürzt dargestellt. Es stimmt, daß viele Forth-Systeme einen Interpreter integriert haben, mit dem man direkt Befehle auf der Konsole eintippen kann, die dann in der Target-CPU ausgeführt werden. Die werden dann von den meisten Systemen wohl nicht compiliert, da man Schleifen usw. in Forth sowieso nicht im Interpretermodus direkt ausführen kann, sodaß die Geschwindigkeit keine Rolle spielt.
Daneben gibt es aber auch den compilier-Modus, wenn man neue "Wörter" (so heissen die Funktionen in Forth) definiert. Das kann beliebig aufwendig compiliert werden, wie es z.B. moderne Crosscompiler wie SwiftForth oder MPW machen: Die Compilierung geschieht auf dem PC und wird dann zur CPU übertragen. Das ganze geschieht transparent für den Benutzer, also für ihn sieht es so aus, also könnte er auf der Ziel-CPU im interaktiven Modus ein neues Wort definieren, was dann scheinbar dort ausgeführt wird, und dann dort interaktiv aufrufen.
Hier ein konkretes Beispiel, was ich erst dachte, es wäre langsamer als typische C Implementierungen, aber mit dem Crosscompiler wurde es fast genauso optimiert und eine minimale Änderung des Quelltextes, die den auch noch besser lesbar machte, generierte dann schnelleren Code als der C Compiler:
MPE Forth und SwiftForth sind kommerzielle Compiler, die auf Embedded Systemen verbreitet sind. Zumindest können die Firmen davon leben (und von dem Projektgeschäft mit Forth), die die verkaufen.
Forth ist natürlich nicht so verbreitet wie C, daher sind auch die vielen freien Alternativen meist nicht so ausgereift.
Mit der leichteren Nutzbarkeit ist das aber so eine Sache. Der Standard, ANS Forth, sieht z.B. keine selbstdefinierten Typen vor, was manche Fehler zur Laufzeit zulässt, die ein C, Pascal, Haskell usw., Compiler abfangen würde. Ich denke in der Typtheorie hat sich in den letzten Jahrzehnten einiges getan und Sprachen wie Haskell machen es leichter, Programme zu schreiben, die fehlerfreier sind und man kann damit auch interaktiv arbeiten, wobei Haskell durch Typinferenz den Vorteil hat, daß man vielfach gar nicht mehr selber die Typen von Variablen oder Funktionsrückgabewerte selber definieren muß. Sowas aber für kleine Microcontroller umzusetzen dürfte nicht trivial sein.
In diese Richtung geht auch viel von Edsger W. Dijkstra: Programme sollten eher wie mathematische Sätze sein, von denen man beweisen kann, daß sie die gestellte Aufgabe erfüllen. Interaktiv einen Microcontroller testen ist nützlich, aber Forth ist zu unstrukturiert, um wirklich beweisbar sichere Programme zu schreiben. Eine Möglichkeit dazu bieten Invarianten. Moderne Systeme wie SPARKAda können die teilweise sogar bereits automatisiert zur Compilierzeit beweisen und somit für fehlerfreieren Code sorgen.
Irrtum; was alleine schon auf meinem webserver alles an Zeugs läuft, weil websites immer interaktiver werden. Bei uns in der Firma dagegen ist es irgendein CAD-Daten-VErwaltungs-Dingens, was den server nervt. Und das sind nun nur zwei kleine Beispiele aus meinem Umfeld...
-ras
OK, davon habe ich mal entfernt gehört; das ist Mist.
-ras
Du vergleichst Äpfel mit Birnen, und nicht ISDN mit POTS; wie immer :)
Wenn ich die Wahl zwischen ISDN und 56k-Modem (oder noch langsamer) habe, dann muß ich nicht lang überlegen. Und genau darum ging es damals.
-ras
Hmmm...ich habe einen Bintec tr200bw, und einen w2k-Server - da müßte man fast mal darüber nachdenken, ob ich sowas nicht auch aufziehen sollte...
-ras
Dazu muß man aber auch sagen, daß es recht schnell geht, das Ding plattzumachen, dann stößt man die Windows-Installation an, trinkt derweil ein Bierchen, nimmt sich noch einmal eine halbe Stunde Zeit für die Treiber, und gut is' das. Meine testweise Migration zu Vista mitsamt der notwendingen Software-Installationen lief an einem Wochehende mal so nebenbei...
Linux ist dagegen jedes Mal eine Baustelle, selbst ein und die selbe Distribution vom gleichen Stand bringt auf der gleichen Maschine unterschiedliche Ergebnisse - abhängig davon, was sie noch an dysfunktionalem Krempel aus dem Netz nachlädt :/
-ras
Am Thu, 09 Apr 2009 06:29:24 +0200 schrieb Ralph A. Schmid, dk5ras:
Wenn der auch die Remote-Capi hat (denke ich bei Bintec) sollte das mit der Software
Ich finde das recht praktisch, über die HTML-Seiten kann ich neben der Protokollfunktion auch von unterwegs mit dem Handy mal nachschauen wer anrief und ggf. gleich zurückrufen.
Lutz
Muß ich mir mal ansehen; danke für den Tip!
Bisher logge ich mich halt remote am router ein, wenn es mal sein muiß
- ist aber nicht sooo komfortabel, notebook, VPN...mit dem PDA wäre das schon schöner.
-ras
Die Konstanten für die üblichen Ports a la 02 CONSTANT PC \ Port C 06 CONSTANT DPC \ Direction Register Port C sind bereits in der Firmware vorhanden da nanoFORTH auf einen bestimmten Controller angepaßt ( meist GP32 ) geliefert wird.
Gibts auch PC 3 DCONSTANT LED D.h. 32 Bit Version DCONSTANT auf 2x 16 Bit angewendet.
: +LED PC 3 B0! ; \ ( --- ) LED einschalten : -LED PC 3 B1! ; \ ( --- ) LED ausschalten
MfG JRD
Unsere Arbeitsplatzrechner werden grundsätzlich ohne jegliches Betriebssystem gekauft. Die Linuxeinheitsdistri (Ubuntu 8.04 LTS, d.h. garantiert 3 Jahre lang Sicherheitsupdates für die ansonsten unveränderte Version) wird vom Netz gebootet.
Für genau solche Probleme wie Deines sind Long Term Support-Distributionen erfunden worden. Ubuntu ist kostenlos, es gibt aber auch genügend kommerzielle wie SLED oder RHEL.
Gruß Henning
Ich habe in Word geschriebene Dokumentationen gesehen, wo ich richtig traurig wurde und mir sagte, das hätten sie besser mit dem ziemlich teuren MathType gemacht. Dann hätte es (vielleicht) akzeptabel ausgesehen.
SCNR Henning
Was gar nicht mal so einfach ist, wie jeder bestätigen kann, der schon mal versucht hat einen avr-gcc 3.x mit einem gcc 4.2 zu übersetzen. :-)
An die MIPS-Toolchain für meinen Billigst-AP mag ich gar nicht mehr zurückdenken...
Gruß Henning
Have something to add? Share your thoughts — no account required.
Ask the community — no account required