Skriptsprache gesucht


  • Administrator

    Hallo zusammen,

    Ich suche eine einbindbare Skriptsprache für C#. Folgendes muss sie mindestens können:
    1. Einfache Syntax, prozedural mit Objekten oder sowas. Es sollen auch Leute ohne viel Programmiererfahrung damit klarkommen, ohne wirklich viel lernen zu müssen.
    2. Völlige Kontrolle von C# aus. Es soll eine Sandbox werden. Ich möchte auch zu lang laufende Skripte sicher und ohne Datenverlust abbrechen können. (IronPython kann dies z.B. nicht, da man nur mit Thread.Abort abbrechen kann)
    3. System.Decimal soll der Grundtyp für Dezimalzahlen-Berechnungen sein: 3.0 ist vom Typ System.Decimal .

    Vor allem wegen Punkt 3 habe ich bisher nichts gefunden und spiele mit dem Gedanken, mir eine eigene kleine Sprache zu entwickeln. Aber den Aufwand würde ich mir gerne sparen. Kennt ihr vielleicht so eine Skriptsprache, welche meine Bedingungen erfüllt?

    Grüssli



  • c#?!



  • Wie wär's mit Lua ..?

    Hier die offizielle Website (incl. kompakter Zusammenfassung aller Sprachfeatures) ...



  • 2. Völlige Kontrolle von C# aus. Es soll eine Sandbox werden. Ich möchte auch zu lang laufende Skripte sicher und ohne Datenverlust abbrechen können.

    Also kill-safe threads. Welche Programmiersprache bietet das denn an? Kann das Java mitlerweile? Hier: http://www.uwtv.org/video/player.aspx?dwrid=3892 . Da bleibt dann nur noch PLT Scheme/Racket uebrig. Und Scheme hat eine sehr einfache Syntax.

    1. Einfache Syntax, prozedural mit Objekten oder sowas. Es sollen auch Leute ohne viel Programmiererfahrung damit klarkommen, ohne wirklich viel lernen zu müssen.

    Viel wichtiger ist, was soll sie koennen. Sowas wie Logo ist wohl recht einfach zu implementieren.



  • Verwend doch einfach C# als Skriptsprache?



  • knivil schrieb:

    2. Völlige Kontrolle von C# aus. Es soll eine Sandbox werden. Ich möchte auch zu lang laufende Skripte sicher und ohne Datenverlust abbrechen können.

    Also kill-safe threads. Welche Programmiersprache bietet das denn an?

    Das geht doch sowieso nicht, ohne dass der Skript-Code Punkte zum kontrollierten Abbruch setzt. Oder sehe ich da was falsch?


  • Administrator

    schmidt-webdesign.net schrieb:

    Wie wär's mit Lua ..?

    Hier die offizielle Website (incl. kompakter Zusammenfassung aller Sprachfeatures) ...

    Lua ist so la la.
    1. Basiert die Dezimalrechnung nicht auf System.Decimal. Man kann zwar System.Decimal einführen, aber dann muss der Nutzer immer daran erinnert werden, dass er eine spezielle Funktion verwendet, wenn er Dezimalzahlen erstellt. Und diese müssen dann womöglich auch noch von Strings geparst werden. Zu kompliziert, zu fehleranfällig.
    2. Das Einbinden von Lua in C# ist leider so eine Sache. Ich weiss, es gibt LuaInterface, aber schon mal den Code angeschaut? Da wird einiges recht unsauber gelöst. Zudem bietet LuaInterface die Möglichkeit an, andere Klassen direkt zu importieren, was meine Absicht einer Sandbox zunichte macht. Ich müsste LuaInterface recht stark überarbeiten. Dies und mit Punkt 1, macht die Sache recht fragwürdig, ob diese investierte Zeit nicht reinste Verschwendung ist.

    knivil schrieb:

    Also kill-safe threads. Welche Programmiersprache bietet das denn an?

    Grundsätzlich wäre dies mit jeder Sprache möglich, welche regelmässig ein Flag prüft. "normale" Programmiersprachen machen dies nicht, weil es überflüssig ist und daher eigentlich nur zu Lasten der Performance geht. Ich hätte aber gedacht, dass gerade Skriptsprachen, welche irgendwo eingebunden werden, sowas anbieten würden. Nur bisher habe ich nichts gefunden bis auf Lua, welche dies mit entsprechenden Hooks ermöglicht, aber siehe oben.

    knivil schrieb:

    Da bleibt dann nur noch PLT Scheme/Racket uebrig. Und Scheme hat eine sehr einfache Syntax.

    Nur ist es nicht einfach zu verstehen für Leute ohne grosse bis gar keiner Programmiererfahrung. Funktionale Programmiersprachen kann man vergessen, habe ich bisher sehr schlechte Erfahrungen mit gemacht, wenn da unerfahrene Leute dransitzen. Viele haben nicht das nötige mathematische Denken dafür.

    knivil schrieb:

    Viel wichtiger ist, was soll sie koennen. Sowas wie Logo ist wohl recht einfach zu implementieren.

    Daten über Funktionen holen. Eigenschaften auslesen. Rechnungen durchführen, Daten auswerten, Text bearbeiten (vor allem zusammenhängen oder weitergeben) und am Ende über definierte Schnittstellen ausgeben. Selbstdefinierte Funktionen für eine bessere Strukturierung wäre zudem noch nicht schlecht.

    Stell dir halt ein Datenpool vor und irgendwo eine Ausgabemöglichkeit. Jetzt möchte der Benutzer die durchschnittliche Ausgaben pro Monat seiner Kunden ausrechnen. Also setzt er sich hin, holt alle Kunden, holt über eine Funktion für jeden Kunden das Total, dividiert durch 12 und gibt es mit dem Namen über eine Schnittstelle aus: z.B. wird eine neue Tabelle erstellt, welche er dann auch als CSV abspeichern kann.

    Es sollen halt dynamisch und einfach Auswertungen eingefügt werden. Das ganze soll in eine Sandbox, um den Benutzer vor Dummheiten zu beschützen. Er soll nicht aus versehen etwas kaputt machen oder das Programm zum Absturz bringen, oder dass sich das Skript aufhängt und solches Zeug eben.

    dot schrieb:

    Verwend doch einfach C# als Skriptsprache?

    Schlechte Idee, weil man C# nicht einschränken kann. Zumindest sind mir keine Mittel bekannt. Auch wenn man es so baut, dass die eingegebenen Daten in eine Klasse integriert werden, wodurch kein using möglich ist, so kann er trotzdem über den vollständig qualifizierten Namen auf alle möglichen Klassen zugreifen. Ja sogar auf die Klassen des Programmes selbst. Wenn er lustig ist, kann er die Datenbank löschen. Ja, ich weiss, man kann die Rechte zumindest mit einer neuen AppDomain etwas einschränken, allerdings wird dann die Interkommunikation deutlich komplexer und eine wirklich vollständige Sandbox kann man trotzdem nicht erstellen. Zumindest wäre mir nicht bekannt wie. Auch das saubere Abbrechen nach einer gewissen Ausführungszeit könnte problematisch werden.
    Desweiteren ist in C# weiterhin 3.0 ein Double und kein Decimal. Verlangen, dass immer 3.0m geschrieben wird, ist wieder zu fehleranfällig. Und erst recht aus Dingen wie 1 / 3 soll halt 0.333... herauskommen und nicht 0, denn sonst verwirrt das den Benutzer nur wieder.

    Grüssli



  • Workflow Foundation



  • Einfache Programmiersprache:
    http://smallbasic.com/


  • Administrator

    wwf schrieb:

    Workflow Foundation

    Noch nie von gehört. Was ich aber bisher darüber nun gelesen habe ... wow
    Ich muss mir das noch weiter und genauer anschauen, aber sowas wäre perfekt. Gleich komplett auf eine Programmiersprache verzichten und nur Klickibunti anbieten. Damit sollten deutlich mehr Leute klarkommen. Auch scheint man es wirklich sehr einfach erweitern zu können und der Designer kann auch in eine andere Applikation verwendet werden. Ich bin aktuell recht begeistert, mal sehen wie lange es noch anhält. Jedenfalls schonmal vielen Dank!

    Rhombicosidodecahedron schrieb:

    Einfache Programmiersprache:
    http://smallbasic.com/

    Aber auch einbindbar? Konnte nichts dazu finden.

    Grüssli



  • Dravere schrieb:

    Rhombicosidodecahedron schrieb:

    Einfache Programmiersprache:http://smallbasic.com/

    Aber auch einbindbar? Konnte nichts dazu finden.Grüssli

    Beispielhaft:
    http://social.msdn.microsoft.com/Forums/en-US/smallbasic/thread/aff1391e-87ad-4b43-8be6-43306bc17975

    http://www.simple-talk.com/dotnet/.net-tools/microsoft-small-basic-for-.net/

    Scheint recht einfach zu sein, musst nur in SmallBasicCompiler.dll nachschauen.

    Die nicht öffendliche Methode Microsoft.SmallBasic.CodeGenerator.EmilIL zeigt scheinbar den ganzen Compilierungsprozess.


  • Administrator

    @Rhombicosidodecahedron,
    Danke. Habe es mir noch etwas weiter angeschaut. Was mir aktuell an Small Basic etwas missfällt sind 3 Dinge:
    1. Der Zweck scheint in erster Linie zu sein, dass man damit Leute in die Programmierung locken will. Ich brauche halt eher eine Sprache im Bereich einer Business Anwendung.
    2. Die Standardbibliothek hat Dinge drin, die völlig unnötig sind. Ich konnte bisher keine Möglichkeit finden, wie man diese abstellen kann. Vielleicht habe ich auch nicht genügend gesucht. Aber würde mich nicht erstaunen, wenn es dazu nichts gibt.
    3. 1 / 3 gibt zwar 0.333... aber von welchem Typ? Wahrscheinlich Single oder Double.

    Jedenfalls habe ich mich auch weiter mit der Workflow Foundation beschäftigt. Ich bin davon nachwievor begeistert. Ich denke, dass ich damit mal einen Prototypen bauen werde und der Kundschaft präsentiere.

    Grüssli



  • Dravere schrieb:

    @Rhombicosidodecahedron,
    Danke. Habe es mir noch etwas weiter angeschaut. Was mir aktuell an Small Basic etwas missfällt sind 3 Dinge:
    1. Der Zweck scheint in erster Linie zu sein, dass man damit Leute in die Programmierung locken will. Ich brauche halt eher eine Sprache im Bereich einer Business Anwendung.
    2. Die Standardbibliothek hat Dinge drin, die völlig unnötig sind. Ich konnte bisher keine Möglichkeit finden, wie man diese abstellen kann. Vielleicht habe ich auch nicht genügend gesucht. Aber würde mich nicht erstaunen, wenn es dazu nichts gibt.
    3. 1 / 3 gibt zwar 0.333... aber von welchem Typ? Wahrscheinlich Single oder Double.

    Auch wenn es dann vergebene Mühe ist:

    1. Stimmt, aber Office hat auch ein Basic Dialekt drin.
    2. ich denke mal Microsoft.SmallBasic.Compiler.TypeInfoBag.Types kann man nach Microsoft.SmallBasic.Compiler.Initialize() modifizieren und den Wünschen anpassen.
      Zuerst würde ich eine extra LibarayAssabley erstellen, die zu Microsoft.SmallBasic.Compiler.References hinzufügen und nach Microsoft.SmallBasic.Compiler.Initialize() alle Typen aus Microsoft.SmallBasic.Compiler.TypeInfoBag.Types löschen, die da nicht hingehören und mit den übrig gebliebenen Microsoft.SmallBasic.CodeGenerator aufrufen, bzw. die Funktionsweise kopieren sich als Vorbind zu nehmen und anzupassen.
    3. Siehe Microsoft.SmallBasic.Library.Primitive.primitiveAsDecimal also ja.

  • Administrator

    Rhombicosidodecahedron schrieb:

    Auch wenn es dann vergebene Mühe ist

    Das ist es aus zwei Gründen sicher nicht:
    1. Ich halte trotzdem die Augen offen. Zudem bin ich sowieso auf den Geschmack der Skriptsprachen gekommen. Sie bieten einfach verdammt viele Möglichkeiten an, um einfach die Erweiterung der Anwendung durch den Benutzer zu ermöglichen. Kann also sein, dass ich Small Basic auch anderswo mal probiere einzusetzen.
    2. Vergiss nie, dass nicht nur wir diesen Thread lesen! Vielleicht stolpert jemand über ein ähnliches Problem oder fragt sich gar, wie er Decimal als Basistyp verwenden kann in Small Basic. Nimmt seine geliebte Suchmaschine und findet diesen Thread.

    Es ist somit definitiv keine vergebene Mühe und ich bedanke mich erneut herzlichst dafür 🙂

    Grüssli


Anmelden zum Antworten