Frage

Ich versuche, auf einen besseren Griff zu bekommen, was es für eine Sprache wirklich bedeutet „dynamisch“ zu sein. Ich habe ziemlich viel Erfahrung mit Lingo , die die Skriptsprache für die Adobe (ehemals Macromedia) Director-Produktlinie ist, und ich frage mich nur, wenn es sich um eine „dynamische Sprache“ angesehen würden.

Die Art und Weise Variablen und Listen sind scheint sehr "dynamische Sprache" -ish mir behandelt.

Mit Variablen, würden Sie nur foo = 3 oder bar = "Hello World" schreiben. Sie haben nicht eine Variable als int oder string erklären -. Es Figuren, die, wie geht ist

Mit Listen können Sie nur so etwas wie miscCollection = [3, "Hello World", #helloWorld, ["Embedded List", "Goes Here", 3], [#phrase: "Property List goes here", #value: 3]] schreiben. Würde es eine tuple nicht ähnlich sein?

Sind diese Funktionen genug für „dynamische Sprache“ -Status zu qualifizieren?

Interessanterweise habe ich C # unter Verwendung von viel mehr und Director / Lingo viel weniger, aber mit all der Aufregung über dynamische Sprachen in diesen Tagen, ich frage mich, ob ich werde tatsächlich gegen den Strich.

Bearbeiten

In Bezug auf Mark Rushakoff Antwort, unten, hier ist ein Versuch, zu analysieren, ob Lingo qualifiziert sich als „dynamisch“ mit dieser Wikipedia-Artikel :

  1. Eval - Lingo hat do und value Schlüsselwörter. do wird einen gesamten Befehl, z.B. do "foo = 23" oder do "foo = sum(20, 3)" auszuführen. value versucht, eine Zeichenfolge in eine numerischen zu konvertieren, aber es ist mehr als nur ein Parsing Operator - es kann tatsächlich eine String-Darstellung einer Variablen in ihre Zahl umwandeln, zum Beispiel unter der Annahme, foo = 23, die Aussage value("foo") bis 23 bewerten wird.

  2. Funktionen höherer Ordnung - Wenn ich dieses Recht habe zu verstehen, das ist im Grunde, was ich wäre ein „delegieren“ in C # aufgerufen werden. Lingo ist dies nicht direkt unterstützen, soweit ich weiß, auch wenn Sie einen Typen, der eine Funktion hat, und übergeben Sie eine Instanz des Typs (eine „Parent-Skript“ genannt) erstellen können.

  3. Verschlüsse -. Keine Unterstützung für diese, soweit ich weiß,

  4. Fortsetzung -. Keine Unterstützung für diese, soweit ich weiß,

  5. Reflection - In gewisser Weise zumindest, ja. Sie erstellen tatsächlich neue Instanzen von Typen eine Zeichenfolge beispielsweise unter Verwendung fooInstance = script("Foo").new(bar). Es ist auch möglich, eine Instanz eines Typs in eine Zeichenfolge zu konvertieren, die die Namen des Typs enthält (so können Sie von Mimik c # 's GetType() Funktionalität sortieren). Sie können auch die Eigenschaften eines Typs abfragen, ohne die Namen der Eigenschaften zu kennen (zum Beispiel eine Eigenschaft von Index nachschlagen) und die Namen der Eigenschaften von Index erfahren.

  6. Makros - Die Art und Weise der Wikipedia-Artikel ein beschreibt Makro , das glaube ich nicht so. Es ist möglich, Skripte zur Laufzeit zu bearbeiten, aber, vielleicht, das zählt.

So scheint es, dass Lingo aktuelle 2 bis 3 von 6 auf dynamische Eigenschaften, aber ich bin mir nicht klar genug auf Schließungen und Fortsetzungen sicher zu wissen, dass Lingo sie nicht unterstützt. Ich glaube, ich bin nicht sicher, was zu schließen. Kommentare willkommen.

War es hilfreich?

Lösung

„dynamisch“ ist eines jener Worte, die in Mode sind, aber wirklich bedeutet etwas mehr als „Was I zu tun ist cool“ ... es keine genaue Definition hat.

Having said that, ich Ihre Frage über Arten beantworten kann, oder zumindest versuchen, den Unterschied zwischen typisiert und nicht typisiert zu erklären (was einige Leute nennen dynamisch oder dynamisch typisiert) Sprachen besser.

Eine typisierte Sprache prüft, die Sie wird nie am Ende versuchen, etwas mit einer Variablen zu tun, dass Sie nicht tun können, bevor Sie das Programm ausführen. Eine nicht typisierten Sprache diese Prüfung nicht tut -. Hofft einfach das Beste, und wenn es einen Sinn es einen Wert hat, für ungeeignet ist, was er braucht, gibt einen Fehler

Das sind zwei Extreme. Wie alles im Leben, in der Praxis Sprachen liegen irgendwo zwischen den beiden theoretischen Extremen. So ist es manchmal schwer zu sagen, dass eine Sprache eingegeben wird oder nicht typisiert - oft alles, was man sagen kann, ist so etwas wie „Sprache X hat bei der Kompilierung bessere Art Überprüfung als Sprache Y, weil diese Fehler in X gefangen sind, aber nicht in Y: ... ".

Diese Definition Angenommen, Sie kümmern könnten, dass (1) eine typisierte Sprache viel mehr Text in dem Programm erfordert (weil Sie müssen sagen, welche Art jeder Wert) und (2), dass eine typisierte Sprache einschränken könnte, was Sie tun können, unnötig (weil das Typ-System ist nicht intelligent genug, um etwas zu erlauben, dass Sie funktionieren wird, sehen).

sein, um Probleme Diese beiden können. Aber sie sind beide Probleme, die werden immer weniger wichtig als typisierte Sprachen besser. Zum Beispiel, warum hat Code wie:

String s = "hello"

, wenn es offensichtlich ist mit nur

s = "hello"

das "s" muss ein String sein? Sprachen, die „smart“ wie diese sind, und wo Sie brauchen nicht zu sagen, was alle Arten sind, aber sie sind immer noch geprüft werden oft als „Hindley Milner“ denn das sind die Leute, die zuerst ausgearbeitet, wie das zu tun, im Detail.

Also, wenn Sie in einem Programm suchen nach einer Sprache mit einem Hindley Milner Typ-System geschrieben es aussieht wie es keine Typen hat. Aber das ist ein Irrtum. Es wird noch, bevor das Programm ausgeführt wird, arbeiten sie aus, was alle Typen aller Variablen sein muss, und prüfen Sie, dass Sie keine Fehler zu versuchen, etwas mit dem falschen Typ (Ich denke, das ist erstaunlich zu tun bekommen - es ist in der Nähe eine Art künstlicher Intelligenz ...)

Das bedeutet, dass manchmal der einzige Weg, zu wissen, ob eine Sprache eingegeben wird oder nicht, es zu wissen, wie es umgesetzt wird. Es kann nicht von einem Blick auf die Quelle offensichtlich sein.

Edit: Ich habe gerade wieder lesen Sie die oben, und ich konnte ein wenig klarer gewesen. Die Unterscheidung, die ich versuche, war zwischen den Sprachen zu machen, die ein Typ System und Sprachen, die dies nicht tun. A Typ-System enthält zwei Dinge:. Typen selbst und Logik zu prüfen, ob die Typen sind korrekt

Die Sprachen I „untypisierten“ (oder dynamisch typisiert) zu tun haben Typen rufen. In Python, beispielsweise (die eine nicht typisiert, dynamische Sprache), gibt es immer noch einen Unterschied zwischen einem String und einer ganzen Zahl. Aber sie haben nicht die zusätzliche Logik haben, überprüft das Programm vor es läuft. So wäre es richtiger zu sagen, dass sie Typen haben, hat aber keinen Typen System .

Im Gegensatz „typisiert“ Sprachen, wie gesagt, prüfe vor das Programm läuft, und so muß nicht nur Arten, aber die zusätzliche Logik, dass die Arbeit zu tun.

Andere Tipps

Typ Inferenz (wie Ihre Beispiele für foo = 3 und bar = "Hello World") keine dynamische Sprache bedeuten. Das var Schlüsselwort in C # folgert den Variablentyp Zeitpunkt der Kompilierung und Haskell kann auch implizite Typisierung für alle Variablen verwenden, auch in kompilierten Programmen.

„Dynamic Programmiersprache“ ist ein ziemlich loser definierte Begriff, aber ich denke, wenn man mußte es zu einem Qualifikationsspiel beschränken, wäre es Runtime Reflexion sein. Wenn Sie Reflexion tun können, können Sie wahrscheinlich die andere Qualifikation in dem Wikipedia-Artikel (eval, Objekt Laufzeitänderung, Verschlüsse, Makros ...) aufgelistet tun.

Ich weiß nichts über die Sprache Lingo, aber ich würde sagen, es ist in der Regel einfacher zu disqualify eine Sprache als dynamisch zu sein, als es ist qualifizieren eine Sprache . jede / alle der Qualifikation in dem Wikipedia-Artikel kann Lingo tun? Wenn nicht, dann ist es wahrscheinlich einfach nicht dynamisch. Wenn es können zu tun überhaupt, dann ist es wahrscheinlich mindestens „dynamisch genug“.

Wenn Menschen über eine Programmiersprache zu sein „dynamisch“ sprechen, beziehen sie in der Regel auf ein dynamisches Typsystem. Die beste Definition das, was ein dynamisches Typsystem ist (und was es nicht ist), die ich je gelesen habe, ist Chris Smith ausgezeichneter Artikel Was Bevor wissen Debating Typsysteme .

Sobald Sie diesen Artikel gelesen haben, ich glaube, Sie Ihre Antwort auf die Frage haben sollte, ob eine bestimmte Sprache gilt als statisch zu werden oder dynamisch typisierte.

Ich möchte zeigen, dass Lingo eine dynamische Sprache ist.

Ich habe tat LingoF einem Functional Programming Framework for Lingo. Dieser Rahmen ist in Lingo, keinen xtra, keine geringen Komponenten vollständig geschrieben, so dass es nicht möglich wäre, solche Rahmenbedingungen zu entwickeln, wenn die Sprache nicht dynamisch ist.

diesen Rahmen betrachtet, hier ist meine Bewertung für Lingo als dynamische Sprache:

1 - Eval - Lingo hat do und value Schlüsselwörter. Darüber hinaus können Sie ein Skript in der Ausführungszeit kompilieren. Siehe LingoF die Eigenschaft "Lingo-Ausdrücke".

2 - Funktionen höherer Ordnung -. LingoF zeigt, wie möglich ist, der extensive Einsatz von Funktionen höherer Ordnung in Lingo zu tun

3 - Verschlüsse -. Wieder LingoF zeigt, wie möglich ist, mit Closures in Lingo zu arbeiten

4 - Fortsetzung - LingoF Syntax Helfer mit Fortsetzungstechniken definiert sind. Es ist möglich, Funktionen in Fortsetzung schreiben Passing Stil. Aktivieren Sie diese Option (aus LingoF Modul):

on public_factorialCPS_2
on fac me, n,k
  x = LingoF().var()
  if ( n = 0 ) then return k [1] 
  else return me.factorialCPS[$(#-,n,1) ] [ LingoF().fun(x) [ k [ $(#*,n,x) ]  ] ]
end

5 - Reflexion - Sie sind bereits mit Ja beantwortet und ich bin einverstanden. Zum Beispiel LingoF Modulmanager wird durch DanM Lingo Reflection erwähnten Merkmale realisiert.

6 - Makros - Ich werde mehr Forschung auf diesem Gebiet zu tun. Da Director Linked Scripts (Skripte in externen Textdateien gespeichert) unterstützt, ist es möglich, eine Art von Makros zu implementieren. Vielleicht kann der Makro-Manager einige Ereignisse wie startMovie abfangen (sie zu erweitern) und stopMovie (um sie wieder zu komprimieren). Eine andere Möglichkeit ist Felder wie Skripte zu verwenden und erweitern sie in Skript-Mitglieder, ich bin sicher, es wird gut funktionieren.

Also meine Punktzahl ist 5 bis 6 von 6 auf dynamische Funktionen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top