Script-Engine (Compiler+Interpreter) entwickelt

Alles, was nicht direkt mit Python-Problemen zu tun hat. Dies ist auch der perfekte Platz für Jobangebote.
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Dienstag 21. November 2006, 16:50

Was mich aber nun interessiert ist wie von deiner Seite aus zukünftig der Support sein wird?

Ist das nun ein Seröses Projekt oder auch nur einer der unzähligen Sprachen die nach nem Jahr nicht mehr Supportet werden? Schließlich muss man dafür auch Zeit investieren und es wäre schade wenn die investierte Zeit zum lernen deiner Sprache verschwendet wäre, wegen mangels Weiterentwicklung, Bugfixes, etc...

lg
Arakis
User
Beiträge: 6
Registriert: Dienstag 21. November 2006, 10:52

Dienstag 21. November 2006, 16:56

Das kann ich dir sagen. Erstmal möchte ich schauen wie das Feedback ist, ob sowas überhaupt gebraucht wird etc. Wenn das Feedback stimmt, werde ich mich dran setzten und eine vollständige Doku schreiben. Und wenn ich ein Projekt erst mal richtig angelaufen ist, dann kümmere ich mich auch noch Jahre später drum - ich supporte noch heute ein Projekt wo ich grad mal volljährig wurde. Und als freiberuflicher Fachinformatiker muss ich mich wohl auch drum kümmern. Von daher sollte das mit der Seriösität geklärt sein.

Dennoch möchte ich anmerken, dass wenn man einmal eine Sprache "perfekt" beherrscht, das erlernen von anderen Sprachen eher im handumdrehen stattfindet, es geht dann nur noch um Syntax und Befehlssatz. Denn wie wir alle wissen, Programmieren besteht nich nur daraus, ein Handbuch auswendig im Kopf zu haben....

Grüße,
Sebastian
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 21. November 2006, 22:37

Arakis hat geschrieben:Dennoch möchte ich anmerken, dass wenn man einmal eine Sprache "perfekt" beherrscht, das erlernen von anderen Sprachen eher im handumdrehen stattfindet, es geht dann nur noch um Syntax und Befehlssatz.
Dem widerspreche ich: obwohl Ruby und python ähnlich sind, programmiert man in beiden Sprachen meist anders, man nimmt andere Ansätze her. Genauso ist es auch mit Java/C-Programmen die auf Python übersetzt wurden: manchmal posten ehemalige Java/C-Programmierer ihren COde der unter Python sehr umständlich aussieht. Es ist also nicht nur Syntax, es sit auch Denkweise.

Eine andere Sache ist, warum nicht einfach die populärste embedding-Sprache nehmen, Lua.NET. Und auch wenn Lua.NET nicht ganz das gewünschte ist, kann man es ja entweder verbessern oder neu implementieren. Das fände ich sinnvoller, als irgendwelche neuen DSLs zu erstellen.

Edit (Leonidas): Thread nach Offtopic verschoben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
BlackJack

Mittwoch 22. November 2006, 01:37

Ich möchte mich Leonidas anschliessen. Insbesondere wenn die Sprachen einem ganz anderen Paradigma folgen wie zum Beispiel funktionale Sprachen. Wie man vielleicht an dem Nemerle-Beispiel sehen kann. Oder hier in Haskell, einer reinen funktionalen Programmiersprache:

Code: Alles auswählen

listTest = unlines (map (show.(* 2)) [1..10])

var = 42

compareWith42 value = f (compare value 42)
    where f LT = "kleiner"
          f EQ = "weder grösser noch kleiner"
          f GT = "grösser"

test42 = unwords ["Var ist", compareWith42 var, "als 42."]

main = putStrLn (listTest ++ test42)
Alles ist Funktion, alles hat einen Rückgabewert. Funktionen sind auch Werte. Nehmen wir mal den Teilausdruck ``show.(* 2)`` aus der ersten Zeile und schauen uns die Typen der Komponenten an:

Code: Alles auswählen

Prelude> :type (*)
(*) :: (Num a) => a -> a -> a
Prelude> :type 2
2 :: (Num t) => t
Prelude> :type (* 2)
(* 2) :: (Num a) => a -> a
Prelude> :type show
show :: (Show a) => a -> String
Prelude> :type show.(* 2)
show.(* 2) :: (Num a) => a -> String
``(*)`` ist also eine Funktion die zwei Argumente eines numerischen Typs entgegen nimmt und ein Ergebnis dieses Typs liefert. Auch `2` ist eine Funktion(!) die einen konstanten Wert liefert. Wenn man nun `(*)` auf `2` anwendet, dann ist das kein Syntaxfehler weil nur ein Argument übergeben wurde, sondern die Anwendung auf ein Argument ergibt automatische eine Funktion die nur noch das andere Argument benötigt. Sozusagen eine Funktion der man den Namen `verdoppeln` geben könnte:

Code: Alles auswählen

Prelude> let verdoppeln = (* 2)
Prelude> verdoppeln 42
84
Prelude> verdoppeln 23
46
`show` erwartet ein Argument das zur Typklasse `Show` gehört und liefert eine Zeichenkette. Es wandelt solche Argumente also um.

Code: Alles auswählen

Prelude> show 4711
"4711"
Mit dem Funktionskompositionsoperator, dem Punkt, kann man aus zwei Funktionen eine neue erschaffen die beide Funktionen nacheinander auf ein Argument anwenden. Es gilt also ``f.g x = f(g(x))``. So wird eine Funktion erzeugt die erst ein Element mit 2 multipliziert und dann in eine Zeichenkette umwandelt. Und diese Funktion wird auf jedes Element der Liste ``[1..10]`` angewandt.

Es gilt wie in der Mathematik, das man einer Variablen nur einmal etwas zuweisen kann und das steht dann im Laufe der Berechnung fest! Man könnte also nicht ein paar Zeilen später ``var = 23`` schreiben, das wäre ein Fehler der die Übersetzung abbricht. Es gibt in reinen funktionalen Sprachen keine Sprungbefehle oder Schleifen, nur Rekursion. Das ist alles andere als nur eine andere Syntax. Da muss man komplett umdenken.

Aber auch bei eher imperativen, objektorientierten Sprachen kann es gewaltige semantische Unterschiede zu Java oder Python geben. Zum Beispiel Sprachen bei denen es keine Klassen gibt, sondern nur Objekte die man klonen und verändern kann. Welche bei denen Argumente von Methodenaufrufen nicht grundsätzlich vor dem Aufruf ausgewertet werden, sondern wo der Empfänger entscheiden kann ob, wann und in welchem Kontext der jeweilige Ausdruck ausgewertet werden soll. So eine Sprache ist Io. ``if`` ist dort eine Methode die drei Argumente erhält die *nicht vor* dem Aufruf ausgewertet werden. Die Methode wertet erst das erste Argument aus und entscheidet dann, je nachdem ob dabei wahr oder falsch herausgekommen ist, ob das zweite ("then-Zweig") oder das dritte ("else-Zweig") Argument ausgewertet werden muss und liefert auch dessen Rückgabewert als Ergebnis.

Man sollte sich schon auf die jeweilige Programmiersprache einlassen und nicht nur fragen wie Kommentare gekennzeichnet werden und wo das Semikolon hinkommt, und ansonsten so weitermachen wie man es von der letzten Sprache gewohnt war. In comp.lang.python wurde mal jemandem, der versucht hat Python wie Java zu behandeln, gesagt: Wenn Du aufhörst die Sprache zu bekämpfen, dann hast Du mehr Zeit das Problem anzugehen das Du lösen willst. (Frei übersetzt)
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Donnerstag 23. November 2006, 13:59

BlackJack hat geschrieben:Ich möchte mich Leonidas anschliessen. Insbesondere wenn die Sprachen einem ganz anderen Paradigma folgen wie zum Beispiel funktionale Sprachen. Wie man vielleicht an dem Nemerle-Beispiel sehen kann. Oder hier in Haskell, einer reinen funktionalen Programmiersprache:
Dem muss ich mich ebenfalls anschließen.

Ich bin mit der Prozeduralen und OOP Programmierung vertraut und da ist die Funktionale oder Logische Programmierung ne ganz andere Nummer. Da kann ich mit mein wissen in den andren Paradigmen nichts anfangen.

Arakis, ich habe mich ganz, ganz, früher sehr lange mit C/C++ beschäftigt und habe die dort verwendeten Paradigmen mehr oder weniger verinnerlicht. Daher viel es mir z.B. nach etlichen Jahren nicht besonders Schwer in Perl und Python einzusteigen (Bis hier hin mag deine Aussage auch zutreffen) aber (nun kommts)...
BlackJack hat geschrieben: Man sollte sich schon auf die jeweilige Programmiersprache einlassen und nicht nur fragen wie Kommentare gekennzeichnet werden und wo das Semikolon hinkommt, und ansonsten so weitermachen wie man es von der letzten Sprache gewohnt war. In comp.lang.python wurde mal jemandem, der versucht hat Python wie Java zu behandeln, gesagt: Wenn Du aufhörst die Sprache zu bekämpfen, dann hast Du mehr Zeit das Problem anzugehen das Du lösen willst. (Frei übersetzt)
...Genau das ist der springende Punkt! Es bringt nichts wenn man in C/C++ Programmieren kann und dann in Python versucht wie in C zu programmieren.

Klassisches Beispiel ist es über range zu iterrieren und dann die Werte als Index für Listen (etc) zu Benutzen ^^ Das mag Gültigkeit für C habe (weil man da keine andere Möglichkeit hat) aber nicht für Python. In Python iterriert man dann gleich über die Liste ;) Und solche Unterschiede gibt es viele die man beachten muss um sauberen Code zu schreiben.

Daher finde ich diese Aussage auch...
Arakis hat geschrieben:[...]
Dennoch möchte ich anmerken, dass wenn man einmal eine Sprache "perfekt" beherrscht, das erlernen von anderen Sprachen eher im handumdrehen stattfindet, es geht dann nur noch um Syntax und Befehlssatz. Denn wie wir alle wissen, Programmieren besteht nich nur daraus, ein Handbuch auswendig im Kopf zu haben....
[...]
...nicht unbedingt zutreffend.

EDIT:
In dem Sinne, wenn man vor hat sich ernsthaft mit einer Sprache X einzulassen, dann reicht es nicht einfach die Syntax und die Befehle auswendig zu lernen um dann so zum Programmieren wie in Sprache Y.

lg
Antworten