Verfasst: Mittwoch 12. November 2008, 17:12
Da alles etwas aus dem Ruder gelaufen ist, fasse ich kurz nochmal zentral alles gesagte zusammen:
1. Jede Sprache kann eine API haben, auf die man zugreifen kann. Inwieweit man auf sie zugreifen kann, hängt von der Sprache ab.
2. Mithilfe von Anweisungen: Das ist möglich und kann helfen, das Aussehen der Sprache zu "generalisieren". Andererseits sind sie irgendwo einschränkend und nicht unbedingt von Sinn.
3. Ohne Anweisungen, dafür mit dieser eigenen API. Etwa durch Exception Objekte usw.
4. Diese API für die Sprache ist in dieser Sprache selber implementiert. Die Sprache, auf der diese Sprache basiert, kommt nicht ins Spiel.
Sofern das soweit richtig ist:
1. Die Sprache legt eine Struktur fest, in die sich in ihr geschriebener Quellcode einzuordnen hat. Zum Beispiel durch Funktionen, Klassen, Objekte. Keines dieser Konstrukte muss aber existieren und es kommt auf die Sprache an. Irgendwo ist üblicherweise dann ein Übergang zu der Sprache, in der diese Sprache geschrieben wurde, auf den man nur über die Sprachapi zugreift (oder Anweisungen) zugreift.
2. Logik existiert erstmal nur in den Köpfen der Entwickler. Diese muss dann in die Struktur der Sprache gebracht werden (zb indem man Funktionen definiert). Diese wiederrum kann aus anderen Konstrukten der Sprache bestehen (zb Klassen), womit sich am Ende eine Grundessenz der API der Sprache oder deren Statements ergibt.
3. Statements sind also die kleinsten Teile einer Sprache. Sie sind *nicht* außerhalb der Logik, aber die *richtige* Logik wird durch die Struktur der Sprache *und* ihren Anweisungen / ihrer API bestimmt.
Die API kann also zb soetwas wie in Io sein. Wichtig ist nur, das die API von der eigenen Sprache voll zugänglich ist.
Soweit das stimmt:
1. Anweisungen / API sind ihrerseits in der Sprache oder in der Sprache, in der die eigentliche Sprache geschrieben wurde, implementiert. Somit muss sich diese Sprache in die Struktur ihrer "Muttersprache einfügen." Diese wiederrum benutzt selber Anweisungen und / oder eine API.
2. Das geht immer so weiter, bis man auf (fast) Hardware Ebene ankommt.
3. Dort nun wiederrum muss man sich in die Struktur der CPU einfügen, die so direkt wohl nur eine sehr einfache kennt. Das Benutzen dieser Struktur mittels Maschinencode geschieht mittels Anweisungen an die CPU, die dann auf Hardwareebene ausgeführt werden.
Wäre diese Anweisung nun eine Funktion, hätte die CPU selber eine Struktur und mindestens eine Art Funktion definiert. Wo soll die herkommen? Ansonsten könnte man soetwas sogar als Funktion ansehen, die den kompletten Status der CPU erhält und verändert zurückgibt. Aber das ist wohl nur theoretisch so.
Conclusion:
1. Statements sind auf CPU Ebene vorhanden, was auch immer sie nun genau sind.
2. In höheren Sprachen sind Statements allerhöchstens dazu gut, um Sprachfeatures auf diese Art und Weise zugänglich zu machen. Alternativ kann man eine API definieren und dort auf die Sprache zugreifen. Zugriff auf die Sprache, in der die Sprache implementiert ist, ist *nicht* möglich.
3. Jede Sprache definiert eine Logikstruktur, und Funktionen sind Teil dieser Logikstruktur. Die Logik selbst ist vielseitig, und die genaue Umsetzung kann mittels verschiedener, eventuell speziellen Sprachstrukturen variieren. Den kleinsten Teil der Logik bildet die API der Sprache oder aber die Statements, mit deren Hilfe aus sie zugegriffen wird.
4. Funktionen sind Teil einer Sprache als Logikstruktur. Anweisungen sind in höheren Sprachen eher sinnlos, da man alles in ihrer eigenen Logik Struktur abbilden könnte.
5. Funktionen sind nichts allumfassendes, sondern eine Sprachstruktur und vom Sprachdesign abhängig. Anweisungen sind allerdings zumindest in niedrigeren Sprachen, weil vorgegeben durch die Hardware, da. Insofern ist die Trennung zwischen Funktion / Statement *innerhalb* einer höheren Sprache sinnlos, bei Hardwarenahen Sprachen dagegen nicht. *Auf alle Sprachen* angewandt sind Funktionen Teil der einzelnen Sprachstruktur, während zumindest die CPU Anweisungen überall vorhanden sind. Irgendwo.
Insofern habe ich meine Sichtweise auch geändert. Das man Statements klar von Funktionen trennen kann, ist wahr, wenn man alle Statements anschaut. Sind ja in vielen Sprachen vorhanden. Insofern mag es in Python nicht zutreffend sein, das man da unterscheiden kann, da es aber zb das return Statement ja auch in C gibt, stellt sich hier die Frage, wie stark in C ein Statement mit einem "Hardware-Statement" verbunden ist. Insofern habe ich falsch pauschalisiert.
Funktionen sind allerdings Strukturen einer Sprache, und solche Strukturen ändern sich von Sprache zu Sprache. Irgendwo, und sei es nur im Ausgeführten Code, sind aber die "CPU Statements".
@all
Durch die Zusammenfassung ist hoffentlich klarer geworden, inwiefern ich meine Argumentation geändert habe, und was ich mit der Logikstruktur usw meinte. Durch die langen Texte habe ich mich da ein wenig verrannt.
@Leonidas:
Also kann man sagen, das grundlegende Befehle praktisch in die CPU "reingegossen" werden? Gut, das war ja vorher klar, aber das es doch so umfangreich zu sein scheint (bisher dachte ich, rechnen mittels Dual System und "Register" seien so ziemlich das einzige), habe ich nicht erwartet. Das Dokument ist ganz gut zum (großzügig) durchblättern, um den Gesamtzusammenhang zu verstehen. Insofern ist eine CPU ja wirklich nur das direkte (und da war ich mir vorher nicht sicher) Hardware Aquivalent zu Assembler, das mittels EVA Prinzip seine vielen kleinen Transistoren an oder aus schaltet, und dabei bei Konstellation xy z auslöst. Danke.
1. Jede Sprache kann eine API haben, auf die man zugreifen kann. Inwieweit man auf sie zugreifen kann, hängt von der Sprache ab.
2. Mithilfe von Anweisungen: Das ist möglich und kann helfen, das Aussehen der Sprache zu "generalisieren". Andererseits sind sie irgendwo einschränkend und nicht unbedingt von Sinn.
3. Ohne Anweisungen, dafür mit dieser eigenen API. Etwa durch Exception Objekte usw.
4. Diese API für die Sprache ist in dieser Sprache selber implementiert. Die Sprache, auf der diese Sprache basiert, kommt nicht ins Spiel.
Sofern das soweit richtig ist:
1. Die Sprache legt eine Struktur fest, in die sich in ihr geschriebener Quellcode einzuordnen hat. Zum Beispiel durch Funktionen, Klassen, Objekte. Keines dieser Konstrukte muss aber existieren und es kommt auf die Sprache an. Irgendwo ist üblicherweise dann ein Übergang zu der Sprache, in der diese Sprache geschrieben wurde, auf den man nur über die Sprachapi zugreift (oder Anweisungen) zugreift.
2. Logik existiert erstmal nur in den Köpfen der Entwickler. Diese muss dann in die Struktur der Sprache gebracht werden (zb indem man Funktionen definiert). Diese wiederrum kann aus anderen Konstrukten der Sprache bestehen (zb Klassen), womit sich am Ende eine Grundessenz der API der Sprache oder deren Statements ergibt.
3. Statements sind also die kleinsten Teile einer Sprache. Sie sind *nicht* außerhalb der Logik, aber die *richtige* Logik wird durch die Struktur der Sprache *und* ihren Anweisungen / ihrer API bestimmt.
Die API kann also zb soetwas wie in Io sein. Wichtig ist nur, das die API von der eigenen Sprache voll zugänglich ist.
Soweit das stimmt:
1. Anweisungen / API sind ihrerseits in der Sprache oder in der Sprache, in der die eigentliche Sprache geschrieben wurde, implementiert. Somit muss sich diese Sprache in die Struktur ihrer "Muttersprache einfügen." Diese wiederrum benutzt selber Anweisungen und / oder eine API.
2. Das geht immer so weiter, bis man auf (fast) Hardware Ebene ankommt.
3. Dort nun wiederrum muss man sich in die Struktur der CPU einfügen, die so direkt wohl nur eine sehr einfache kennt. Das Benutzen dieser Struktur mittels Maschinencode geschieht mittels Anweisungen an die CPU, die dann auf Hardwareebene ausgeführt werden.
Wäre diese Anweisung nun eine Funktion, hätte die CPU selber eine Struktur und mindestens eine Art Funktion definiert. Wo soll die herkommen? Ansonsten könnte man soetwas sogar als Funktion ansehen, die den kompletten Status der CPU erhält und verändert zurückgibt. Aber das ist wohl nur theoretisch so.
Conclusion:
1. Statements sind auf CPU Ebene vorhanden, was auch immer sie nun genau sind.
2. In höheren Sprachen sind Statements allerhöchstens dazu gut, um Sprachfeatures auf diese Art und Weise zugänglich zu machen. Alternativ kann man eine API definieren und dort auf die Sprache zugreifen. Zugriff auf die Sprache, in der die Sprache implementiert ist, ist *nicht* möglich.
3. Jede Sprache definiert eine Logikstruktur, und Funktionen sind Teil dieser Logikstruktur. Die Logik selbst ist vielseitig, und die genaue Umsetzung kann mittels verschiedener, eventuell speziellen Sprachstrukturen variieren. Den kleinsten Teil der Logik bildet die API der Sprache oder aber die Statements, mit deren Hilfe aus sie zugegriffen wird.
4. Funktionen sind Teil einer Sprache als Logikstruktur. Anweisungen sind in höheren Sprachen eher sinnlos, da man alles in ihrer eigenen Logik Struktur abbilden könnte.
5. Funktionen sind nichts allumfassendes, sondern eine Sprachstruktur und vom Sprachdesign abhängig. Anweisungen sind allerdings zumindest in niedrigeren Sprachen, weil vorgegeben durch die Hardware, da. Insofern ist die Trennung zwischen Funktion / Statement *innerhalb* einer höheren Sprache sinnlos, bei Hardwarenahen Sprachen dagegen nicht. *Auf alle Sprachen* angewandt sind Funktionen Teil der einzelnen Sprachstruktur, während zumindest die CPU Anweisungen überall vorhanden sind. Irgendwo.
Insofern habe ich meine Sichtweise auch geändert. Das man Statements klar von Funktionen trennen kann, ist wahr, wenn man alle Statements anschaut. Sind ja in vielen Sprachen vorhanden. Insofern mag es in Python nicht zutreffend sein, das man da unterscheiden kann, da es aber zb das return Statement ja auch in C gibt, stellt sich hier die Frage, wie stark in C ein Statement mit einem "Hardware-Statement" verbunden ist. Insofern habe ich falsch pauschalisiert.
Funktionen sind allerdings Strukturen einer Sprache, und solche Strukturen ändern sich von Sprache zu Sprache. Irgendwo, und sei es nur im Ausgeführten Code, sind aber die "CPU Statements".
@all
Durch die Zusammenfassung ist hoffentlich klarer geworden, inwiefern ich meine Argumentation geändert habe, und was ich mit der Logikstruktur usw meinte. Durch die langen Texte habe ich mich da ein wenig verrannt.
@Leonidas:
Also kann man sagen, das grundlegende Befehle praktisch in die CPU "reingegossen" werden? Gut, das war ja vorher klar, aber das es doch so umfangreich zu sein scheint (bisher dachte ich, rechnen mittels Dual System und "Register" seien so ziemlich das einzige), habe ich nicht erwartet. Das Dokument ist ganz gut zum (großzügig) durchblättern, um den Gesamtzusammenhang zu verstehen. Insofern ist eine CPU ja wirklich nur das direkte (und da war ich mir vorher nicht sicher) Hardware Aquivalent zu Assembler, das mittels EVA Prinzip seine vielen kleinen Transistoren an oder aus schaltet, und dabei bei Konstellation xy z auslöst. Danke.