Konzept: Sinnvoll oder nicht?

Übersicht Sonstiges Smalltalk

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen

 

E. Urbach

ehemals "Basicprogger"

Betreff: Konzept: Sinnvoll oder nicht?

BeitragMi, Sep 26, 2007 19:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Vor einigen Monaten habe ich einen Artikel in der PC-WELT gelesen, der mich zum Nachdenken angeregt hat. "Software-Lego gehört die Zukunft" heißt dieser Artikel und in ihm stehen interessante Informationen für diejenigen, die eine Zukunft in der EDV-Branche in Betracht ziehen. Als plötzlich von MDA die Rede war, kam mir eine Idee auf, und ich bin bestimmt nicht der erste, der sich sowas ausdenkt.
Ich dachte daran, dass man Code nicht mehr als Text, sondern als abstraktes Modell speichern könnte.
Das Modell wird dabei universell in XML beschrieben.

Beispiel:
Code: [AUSKLAPPEN]
<if>
   <condition>
      1
   </condition>
   <then>
      <call function="DoSomething">
         <parameter>5</parameter>
         <parameter>3</parameter>
      </call>
   </then>
</if>
<else>
   <call function="End" />
</else>


Ein aus diesem Modell abgeleiteter C++ Code könnte beispielsweise so aussehen:
Code: [AUSKLAPPEN]
if(1)
{
   DoSomething(5, 3);
}
else
{
   End();
}


In Blitz3D sähe das folgendermaßen aus:
Code: [AUSKLAPPEN]
If 1 Then
   DoSomething 5, 3
Else
   End
EndIf


Ein Code wird also nicht mehr als einfacher "Text" gespeichert, sondern als Modell in XML.

Vorteile:
Arrow Man kann Code für die wichtigsten Programmiersprachen erzeugen, ohne alles neu schreiben zu müssen.
Arrow Die Formatierung des Codes/Modells spielt keine Rolle (siehe XML), beim abgeleiteten Code können mehrere Ausgabe-Optionen eingestellt werden
Arrow Man kann in diesen Code-Dateien einen Header mit Meta-Daten unterbringen (Autor, Website, E-Mail, Version, Beschreibung, etc.)
Arrow Programme, die keine Hardwarebeschleunigung von der Grafikkarte benötigen, können als Internet-Anwendungen mit AJAX kompiliert werden
Arrow Die Codes sind portabel
Arrow Die Programme sind sehr effizient, da sie für die jeweilige Zielplattform optimiert werden können

Ein Beispiel für eine vollständige BPC-Datei, die Header-Informationen, aber keinen Code enthält:
Code: [AUSKLAPPEN]
<?xml version="1.0"?>
<module>
   <header>
      <title>
         <de>3D-Vektor-Klasse</de>
      </title>
      <version>
         <major>1</major>
         <minor>0</minor>
         <revision>0</revision>
         <build>0</build>
      </version>
      <license>&GPL;</license>
      <authors>
         <person role="developer">
            <name>Eduard Urbach</name>
            <website>http://www.blitzprog.de</website>
            <email>webmaster@blitzprog.de</email>
         </person>
      </authors>
      <website>http://www.blitzprog.de/Vector3D</website>
      <keywords>vector, 3d</keywords>
      <description>
         <de>Eine 3D-Vektor-Klasse, um Positionsdaten im dreidimensionalen Raum zu speichern und ggf. nötige Informationen mit den Funktionen der Vector3D-Klasse zu ermitteln.</de>
      </description>
   </header>
   <code>
   </code>
</module>


Auf diese Metainformationen soll man auch im Code zugreifen können.
Wenn z.B. im Header als Titel "Hello World" für das Programm eingetragen ist, kann man diesen Titel so im Code abrufen:
Code: [AUSKLAPPEN]
<var name="title" type="string">
   <bpc get="module.header.title"></bpc>
</var>


Das Projekt besteht aus 3 Komponenten:

bpc2code
Das Programm bpc2code sorgt dafür, dass ein XML-Modell in Code umgewandelt wird.
Es nutzt eine abstrakte Schnittstelle, um die Umwandlung eines Modells in Code vorzunehmen.
Die Implementation muss für jede Programmiersprache einzeln erfolgen.
Theoretisch wäre auch die Nutzung von "Regeln" denkbar, die aus regulären Ausdrücken bestehen, aber ich war noch nie ein Fan von RegEx Wink
Der Parser selbst ist ein Kommandozeilen-Tool, welches einen wichtigen Parameter besitzt: -language
Code: [AUSKLAPPEN]
bpc2code MeinModell.bpc -language C++

Der erste Parameter gibt an, welche Datei in Code umgewandelt werden soll.
-language bestimmt, in welche Programmiersprachen es umgewandelt wird.
Optional kann man auch -o MeineAusgabeDatei.cpp verwenden, um zu bestimmen, wie die Ausgabe-Datei heißen soll.

code2bpc
Das Gegenteil der ersten Komponente: Wandelt (sofern es möglich ist) Code in ein BPC-Modell um.

Editor
Der Editor ist eine IDE, eine Entwicklungsumgebung als grafisches Front-End für bpc2code, aber nicht im klassischen Sinne.
Es gibt zwar ein Textfeld auf der rechten Seite, aber dort soll kein Code eingetippt werden, es dient lediglich zur Vorschau des abgeleiteten Codes.
Auf der linken Seite befindet sich ein Modell-Editor, ein Canvas-Objekt, auf dem das Modell grafisch visualisiert wird.
Dort kann z. B. der Name einer Klasse oder die If-Bedingung geändert werden.
Genau genommen, kann dort alles geändert werden, was mit dem Modell in Verbindung steht.
Die Header-Daten lassen sich über ein zusätzliches Fenster modifizieren, welches über den Menüpunkt "Projekt > Eigenschaften" aufgerufen werden kann.

Ein großes Problem bei der Implementierung von bpc2code wird die Standard-Bibliothek der einzelnen Sprachen sein.
Wenn man z.B. das Öffnen einer binären Datei, das Auslesen von 3 Integern und das nachfolgende Schließen des File-Streams als Modell beschreiben will, wie geht man dabei vor?
Es gibt sicherlich viele verschiedene Lösungsansätze, aber ich persönlich würde den folgenden bevorzugen:
Alle Sprachen, bei denen das benötigte Feature nicht in ihrer Standardbibliothek vorhanden ist, verwenden eine Bibliothek, die dieses Feature bereitstellt.
Beispiel:
Code: [AUSKLAPPEN]
Local file = ReadFile("test.dat")
Local a = ReadInt(file)
CloseFile(file)

In Blitz Basic und Blitz Max gibt es bereits Funktionen, die den Dateizugriff regeln.
Werden jedoch zusätzliche Features benötigt (wie beispielsweise das Einlesen eines ganzen "Types" mit einem Befehl), muss dieses Feature extern in einer Bibliothek oder intern in BB-Code implementiert werden.

Beispiel BMax mit interner Implementation:
Code: [AUSKLAPPEN]
Local vec:Vector3D = New Vector3D
vec.x = stream.ReadFloat()
vec.y = stream.ReadFloat()
vec.z = stream.ReadFloat()


Das Modell dazu:
Code: [AUSKLAPPEN]
<var name="vec" type="Vector3D"><new type="Vector3D"></new></var>
<assign var="x" from="vec"><call function="ReadFloat" from="stream" /></assign>
<assign var="y" from="vec"><call function="ReadFloat" from="stream" /></assign>
<assign var="z" from="vec"><call function="ReadFloat" from="stream" /></assign>


Beispiel BMax mit externer Lib:
Code: [AUSKLAPPEN]
Local vec:Vector3D = New Vector3D
stream.Read(vec)


Das Modell dazu:
Code: [AUSKLAPPEN]
<var name="vec" type="Vector3D"><new type="Vector3D"></new></var>
<call function="Read" from="stream">
   <parameter>vec</parameter>
</call>


Das allgemeine und universell nutzbare Modell müsste somit direkt in BPC integriert werden:
Code: [AUSKLAPPEN]

<var name="vec" type="Vector3D"><new type="Vector3D"></new></var>
<write to="stream" type="binary">vec</write>

Hier wurde die write-Funktion direkt im XML-Dokument integriert.
Das setzt natürlich voraus, dass das stream-Objekt ebenfalls mit den integrierten Funktionen erstellt wurde.
Anfangs wollte ich einfach eine open- und eine close-Funktion erstellen, allerdings wäre es meiner Ansicht nach besser, wenn beides als "Dateizugriff" gekapselt wird:

Code: [AUSKLAPPEN]
<open file="datei.dat">
   <var name="vec" type="Vector3D"><new type="Vector3D" /></var>
   <write to="stream" type="binary">vec</write>
   <seek stream="stream">0</seek>
   <read from="stream" type="binary">vec</read>
</open>

Wenn der Parser auf "</open>" stößt, fügt er automatisch die Close-Funktion ein.
Möchte man dieses Schließen vermeiden (aus welchen Gründen auch immer), kann man den open-Tag über das gesamte Dokument legen oder die Funktionen stream-open und stream-close nehmen.
Man muss auch gar nicht spezifizieren, ob es ein "Nur-Lesen" oder ein "Nur-Schreiben"-Zugriff ist.
Je nachdem, ob sich write- oder read-Funktion innerhalb des Dateizugriffs befinden, entscheidet der Parser, ob die jeweiligen Schreib-/Leserechte für den Stream nötig sind.

Selbst Templatefunktionen können damit für Programmiersprachen generiert werden, die normalerweise keine Templateprogrammierung unterstützen.

Beispiel:
Code: [AUSKLAPPEN]
<template>
   <template-vars>
      <var name="T" type="typename">float</var>
   </template-vars>
   <template-code>
      <class name="Vector3D">
         <public>
            <comment>Public vars</comment>
            <var name="x" type="T" default-get-function="true" default-set-function="true">0</var>
            <var name="y" type="T" default-get-function="true" default-set-function="true">0</var>
            <var name="z" type="T" default-get-function="true" default-set-function="true">0</var>
            <function name="SetPosition" is-set-function-for="x,y,z" />
            <function name="GetLength" type="T">
               <return>
                  <call function="Sqr">
                     [...]
                  </call>
               </return>
            </function>
         </public>
      </class>
   </template-code>
</template>


Die Dokumentation von Code innerhalb einer Datei soll ebenfalls möglich sein. Zurzeit gibt es bei Programmiersprachen nur die Möglichkeit, aus Kommentaren Informationen auszulesen. So machen es BMax, Java und C++ (Doxygen). Da aber dieser Informationstyp kein Standard ist, gibt es Probleme beim Wechsel der Programmiersprache. Beim XML-Modell ist die Dokumentation von Codeteilen recht einfach.

Hat man beispielsweise eine kleine Funktion erstellt...
Code: [AUSKLAPPEN]
<function name="Summe" type="int">
   <parameters>
      <var name="a" type="int"></var>
      <var name="b" type="int"></var>
   </parameters>
   <code>
      <return>
         a <plus /> b
      </return>
   </code>
</function>

...kann man sie ganz einfach dokumentieren:
Code: [AUSKLAPPEN]
<documentation>
   <de>Liefert die Summe von zwei Zahlen.</de>
   <code>
      <function name="Summe" type="int">
         [...]
      </function>
   </code>
</documentation>


Bei dieser Situation bin ich mir übrigens noch nicht sicher, ob ich
Code: [AUSKLAPPEN]
a <plus /> b

oder
Code: [AUSKLAPPEN]
<add>
   <parameter>a</parameter>
   <parameter>b</parameter>
</add>

verwenden soll.

Selbstverständlich müsste man diese XML-Dateien nicht per Hand erstellen. Die Entwicklungsumgebung soll Codes importieren und exportieren können. Beispielsweise kann aus einer C++ Datei ein Modell generiert werden, welches anschließend in BMax- oder PHP-Code umgewandelt wird.

Programmiersprachen mit 100%iger Unterstützung: C++, Java, Blitz Max
Programmiersprachen mit beschränkter Unterstützung: Blitz Basic, PHP, JavaScript/AJAX, Visual Basic, C#

Ich schreibe dies, weil ich eure Meinung zu diesem Konzept bzw. zu diesem Projekt hören möchte.
Ich bin mir im Moment noch relativ unsicher, ob ich das Projekt umsetzen kann, deshalb wäre es für mich interessant zu wissen, ob es einfach nur Zeitverschwendung wäre oder ob dieses Projekt doch einigermaßen sinnvoll ist.
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
  • Zuletzt bearbeitet von E. Urbach am Mi, Sep 26, 2007 21:34, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragMi, Sep 26, 2007 19:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Hört sich interessant an, aber als Hürde würde ich sehen dass man nicht alles in jeder Sprache umsetzen kann.
Ein OO-Programm in B3D ? Schwer bis unmöglich, keine Vererbung, keine Klassen - all das ist nicht ohne weiteres zu implementieren.
Aber es geht noch weiter: verschiedene Sprachen haben einen verschiedenen Umgang mit den einzelnen Datentypen. Wo in bmax ein int ein int ist, trifft das unter python nicht zu. Und somit wäre auch ein Portieren wieder schwer bis unmöglich, da nicht alle Sprachfeatures per Emulation suffizient zu erreichen sind.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Pdd

BeitragMi, Sep 26, 2007 19:21
Antworten mit Zitat
Benutzer-Profile anzeigen
WOW! Shocked Shocked

Also erstmal: Gute Idee! Das Konzept finde ich gut, wobei soetwas auch schon (wenn auch nur beschränkt) existiert.
Ich glaube das schwierigste wird daran sein, die Möglichkeiten der einzelnen Sprachen zu portieren. Jeder wird verstehen, das man nicht einfach eine C++ Datei (ein Model) in JS umsetzten kann. Wird dieses aber genau definiert (Also was wohin portiert werden kann) dann glaube ich funktioniert das ganz gut.
Ein anderes Problem wird die Implementation der verschiedenen Sprachen sein. Ich denke dabei an eine Art Modul-System. Es gibt eine IDE, die Module (z.b. C++) laden kann. Dieses Modul enthält dann informationen, wie C++ in ein Modell und wieder zurück gewandelt werden kann. Solche Module erstellt man dann auch für andere Sprachen.

Abgesehen davon wird ein Programm so sehr schnell sehr komplex (mal auf XML bezogen. Denn das ist einfach mehr Text als selbiges in C++). Wird das ganze aber visuell dargestellt (Was ja auch deine Absicht ist), dann sollte das ganz gut funktionieren. Nur sollte das Programm dabei sehr übersichtlich bleiben. Auch hier würde ich eventuell verschiedene Ansichten des Programmes einbauen (Tree-View, etc). Es gibt bereits eine Programmiersprache, die visuell benutzt wird, mir fällt sie nur gerade nicht ein (irgendwas mit "lab").

Alles in allem eine sehr gute Idee!
Lieber Apfel als Birne.
 

E. Urbach

ehemals "Basicprogger"

BeitragMi, Sep 26, 2007 19:41
Antworten mit Zitat
Benutzer-Profile anzeigen
@Bladerunner: Erstmal danke für die konstruktive Kritik Wink
Zitat:
Hört sich interessant an, aber als Hürde würde ich sehen dass man nicht alles in jeder Sprache umsetzen kann.

Klar, niemand wird versuchen einen 3D-Ego-Shooter mit Shader Model 3.0 und allem Schnick Schnack nach JavaScript zu portieren Wink
Aber das wäre auch gar nicht meine Zielgruppe, es geht um wiederverwendbare Bibliotheken, die man für möglichst viele Programmiersprachen generieren kann.
Zitat:
Ein OO-Programm in B3D ? Schwer bis unmöglich, keine Vererbung, keine Klassen - all das ist nicht ohne weiteres zu implementieren.

Ich widerspreche dir wirklich ungern, aber in diesem Punkt irrst du dich: In Sprachen, die nur simple Strukturen (structs in C++) und Funktionen unterstützen, ist OOP sogar sehr einfach zu implementieren.
Zitat:
Aber es geht noch weiter: verschiedene Sprachen haben einen verschiedenen Umgang mit den einzelnen Datentypen. Wo in bmax ein int ein int ist, trifft das unter python nicht zu.

Ich kenne mich nicht so genau mit Python aus, aber auf jeden Fall wollte ich einen Standard mit einfließen lassen: Ints sind 32 Bit groß, Floats sind 32 Bits groß und Strings sind integrierte Datentypen, die in C++ per String-Klasse quasi "emuliert" werden. Ich habe das spaßeshalber schon mal getestet und es gab bei den Datentypen keine Probleme zwischen Java, BMax und C++. Ich werde mir Python mal genauer anschauen...
Zitat:
Und somit wäre auch ein Portieren wieder schwer bis unmöglich, da nicht alle Sprachfeatures per Emulation suffizient zu erreichen sind.

Das meinte ich auch mit der "Standardbibliothek" der jeweiligen Programmiersprachen. Aber fehlende Sprachfeatures werden emuliert. Und entgegen vieler Meinungen ist dies nicht ineffizient - im Gegenteil, der Compiler kann sogar mehr Optimierungen machen, als beispielsweise eine in C++ geschriebene String-Klasse.

Alles in allem würde ich sagen, dass man es noch stärker standardisieren müsste. Ints müssen immer 32 Bit haben, ein Fenster bleibt ein Fenster, egal ob mit GTK, Qt, WinAPI oder JS erstellt.
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
  • Zuletzt bearbeitet von E. Urbach am Mi, Sep 26, 2007 21:29, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragMi, Sep 26, 2007 19:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie gesagt, die Grundidee halte ich für sehr interessant, ich fürchte nur leider wird es sehr schwer sein die Grenze zu ziehen welche Implementierung / Portierung Sinn macht und ohne massiven Performanceverlust umzusetzen ist. Python zB sieht alle Daten als Objekte, es gibt den klassischen Integer also wie gesagt nicht. Innerhalb einer Gruppe verwandter Sprachen räume ich deiner Idee große Chancen ein - einer Portierung von C nach Java nach BMax zB steht ja meist nichts im Weg (Wenn ich auch in Bmax zB eine vernünftige Kapselung und Überladen vermisse, was ja aber präcompilerseitig gelöst werden kann).
Aber alle Sprachen unter einem Dach - daran glaube ich einfach nicht. Es gibt da Exoten die man einfach nicht miteingliedern kann, man denke mal an Lisp, oder Fortran.
Dennoch, die gängigsten Sprachen sind eine Möglichkeit.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Geeecko

BeitragMi, Sep 26, 2007 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber man könnte Config datein machen. Wie z.b. ein BMax Document in bla aussehen würden.
Z.b.
Code: [AUSKLAPPEN]

if = <if>
       <parameter1 type=parameter2 parameter3>
         <parameter 4>
      </if>

BMax:
Code: [AUSKLAPPEN]

If X=Y End

Bla:
Code: [AUSKLAPPEN]

<if>
 <X type:'=' Y>
  <end>
 </if>

Und zurück wird einfach alles umgedreht.
und dann z.b. noch welche machen (config datein), was zu was gemacht werden kann.
Also z.b. dann in der config datei:
Code: [AUSKLAPPEN]

if = <if>
       <parameter1 type=parameter2 parameter3>
         <parameter 4>
      </if>
[Compatible: JavaScript/C++/BMax]

oder so ^^ hoffentlich versteht ihr mich ^^
....

Silver_Knee

BeitragMi, Sep 26, 2007 21:59
Antworten mit Zitat
Benutzer-Profile anzeigen
man kann ja ganz simpel sprachfeatures die einfach garnicht zu emulieren gehen mit einem:
Code: [AUSKLAPPEN]
---------------------------
Compile-Error
---------------------------
User Input ist bei Brainfuck nicht möglich.
---------------------------
OK   
---------------------------

tillen.

Dazu: http://de.wikipedia.org/wiki/Brainfuck
Es gibt einfach keinen user-input und er lässt sich nichtmal einbauen...

Ähnlich sieht es bei b3d-shadern aus: man könnte natürlich eine automatische DLL generieren de dX9c initialisiert und und und.... aber die meldung tuts für den Anfang auch^^

EDIT:
@Meister-Dieb


Code: [AUSKLAPPEN]
<convert langs="php;C;C++;java">
<from>
 <if>
   <condition>
      <value name="val 1" />
   </condition>
   <then>
      <action name="act 1" />
   </then>
   <else>
      <action name="act 2" />
   </else>

 </if>
</from>
<to>
<write string="if (" /><value name="val 1" /><write string=") {"><write char="13">
<action name="act 1"><write char="13">
<if>
   <condition>
      <Object name="else" /><isnot /><Object name="<Null>" />
   </condition>   
   <then>
      <write string="} else {" /><write char="13">
      <action name="act 2"><write char="13">
   </then>
   <write string="}" /><write char="13">
</to>
</convert>

immerhin sind wir bei xml^^

PS ja ich bin ein freak xD

mahe

BeitragMi, Sep 26, 2007 22:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe den Sinn des Ganzen wirklich noch nicht richtig verstanden.

Warum muss es XML sein? Menschen können komplexere Programme in XML bestimmt nicht mehr lesen (ich hab schon bei den einfachen Anweisungen Probleme) und für die geplante Entwicklungsumgebung wäre das Format egal. Ich sehe XML da eher als Hindernis.

Auch die grafische Quelltexterzeugung ist ein alter Hut. (z.B. http://www.myfriend.de/)
Anfreunden konnte ich mich mit so etwas nie. Grafische Projektplanung ist natürlich hilfreich und sinnvoll aber den Quelltext zusammenklicken stelle ich mir nicht sehr effizient vor.

Sinnvoller fände ich eine einfache Pseudo-Sprache die in die obgenannten Sprachen transferiert wird.
Damit wäre man genauso flexibel aber um einiges effizienter.
ʇɹǝıdɯnɹɹoʞ ɹnʇɐuƃıs - ǝpoɥʇǝɯ-ɹoɹɹıɯ ɹǝp uı ,ɹoɹɹǝ,

Geeecko

BeitragMi, Sep 26, 2007 23:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Was auch interessant wäre, wer einen text-generator.
also der Kommentare macht.
Z.b.
Code: [AUSKLAPPEN]

If X = Y 'Wenn der Wert der Variable X dem der Y entspricht,
 end     'wird das Programm beendet.
endif


Komplexere Programme würden sicherlich im google-wirrwar enden... aber so könne man sich auch beispiel quelldatein leichter reinziehen ^^ also für anfänger leichter verständlich.
naja... ich gebs zu... scheiß idee >.< xD Am besten noch mit Vorleser Laughing Laughing Laughing Laughing Laughing
Naja... Aber am besten fände ich es, der PC macht eine Datei, muss ja nicht im XML Format sein, hauptsache sehr klein, und in einem menu kann man dann auswählen: z.b. C++. Dann wird der code in c++ umgewandelt und angezeigt. Und es könnte sich ja auch selber weiterentwickeln. Also von Usern jetzt. So das man eigene Module für andere Sprachen schreiben könnte.

Aber es ist unmöglich sowas zu machen... Dann müsstes ein riesen Archiv geben, mit alles FUnktionen, weil sie ja alle anders heißen... Das ist das einzige (große) Problem
....

pixelshooter

BeitragDo, Sep 27, 2007 0:48
Antworten mit Zitat
Benutzer-Profile anzeigen
ist UML nicht was recht ähnliches, nur für Objekte und Klassen?
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc
 

Eternal_Pain

BeitragDo, Sep 27, 2007 3:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
"Software-Lego gehört die Zukunft"

ich persoenlich sehe es aehnlich... zugegeben, jedes programm brauch letztendlich noch seinen persoenlichen schliff... aber ich selbst bemuehe mich meist, funktionen zu schreiben die ich problemlos in ein naechstes Projekt einbinden kann ohne irgendwas umzuschreiben....
das ganze macht manchmal schon etwas mehr arbeit, funktionen zu schreiben die wirklich universell und vielleicht auch noch plattformuebergreifend einzusetzen sind...
aber in der praxis bewaehrt es sich sehr gut, im naechsten projekt mit aehnlicher struktur hat man so schonmal einiges an arbeit weniger... einbinden, linken, aufrufen, fertig ect....
 

E. Urbach

ehemals "Basicprogger"

BeitragDo, Sep 27, 2007 7:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Aber man könnte Config datein machen. Wie z.b. ein BMax Document in bla aussehen würden.

Nein. Auch wenn es so schön nach MDA klingt, Config-Dateien werden so nicht funktionieren, da kannst du gleich reguläre Ausdrücke nehmen.
Ich bin für eine abstrakte Schnittstelle, wo jeder ein Modul zu einer (fast) x-beliebigen Programmiersprache entwickeln kann.
Mein Projekt "Blitzprog IDE" hat Configdateien genutzt, und es ist gescheitert. Wieso? Weil die Config-Dateien zu komplex werden. Glaub mir, ich weiß wovon ich rede, ich habe nicht umsonst 8.437 Zeilen Code geschrieben.
Mein anderes Projekt "Blitzprog Code Stats" nutzt hingegen eine abstrakte Schnittstelle (allerdings ohne Runtime-Linking). Ich habe gemerkt, dass diese Vorgehensweise einfacher und effizienter ist, deshalb werde ich sie auch bei diesem Projekt benutzen.

Zitat:
ist UML nicht was recht ähnliches, nur für Objekte und Klassen?

Ja, ich habe schon von UML gehört, aber - es mag vielleicht an meiner Suchmaschinennutzungsfähigkeit liegen - ich habe noch nie einen UML-Code in XML aufspüren können. Ich weiß ehrlich gesagt nicht, wie ich eine einfache Klasse in UML erstelle. Außerdem finde ich meine Version mit <class name="Vector3D" extends="Basisklasse">[...]</class> einfach und ausreichend, was will man mehr? Vererbung mit mehreren Basisklassen? Geht in Java nicht und ist auch grundsätzlich nicht nötig.

Zitat:
ich persoenlich sehe es aehnlich... zugegeben, jedes programm brauch letztendlich noch seinen persoenlichen schliff... aber ich selbst bemuehe mich meist, funktionen zu schreiben die ich problemlos in ein naechstes Projekt einbinden kann ohne irgendwas umzuschreiben....
das ganze macht manchmal schon etwas mehr arbeit, funktionen zu schreiben die wirklich universell und vielleicht auch noch plattformuebergreifend einzusetzen sind...
aber in der praxis bewaehrt es sich sehr gut, im naechsten projekt mit aehnlicher struktur hat man so schonmal einiges an arbeit weniger... einbinden, linken, aufrufen, fertig ect....

Sehe ich genauso. Man nehme beispielsweise eine 3D-Vektorklasse, die Funktion RectsOverlap oder von mir aus auch Print. Solche kleinen Dinge sollten doch wenigstens Programmiersprachen- und plattformübergreifend funktionieren. Insbesondere bei der 3D-Vektorklasse hat man wenig Lust, diese immer wieder für eine bestimmte Programmiersprache neu zu schreiben. Dadurch sinkt auch die Wartbarkeit, denn wenn man sie in einer Sprache verändert, vergisst man häufig, diese Änderung auch in den anderen Projekten durchzuführen, die eine andere Sprache benutzen.

Programmiersprachen sind Werkzeuge. BMax ist eine Motorsäge, Java ist ein Hammer. Man kann mit beiden einen Baum fällen (Spiele programmieren), aber mit der Motorsäge wird es wesentlich einfacher sein Wink

Zitat:
Ich habe den Sinn des Ganzen wirklich noch nicht richtig verstanden.

In der Tat Smile

Zitat:
Warum muss es XML sein?

Weil XML ein standardisiertes und universelles Format ist.
Man kann es für jede Art von Daten verwenden (Ausnahme: Bilder, Videos und Musik).

Zitat:
Menschen können komplexere Programme in XML bestimmt nicht mehr lesen (ich hab schon bei den einfachen Anweisungen Probleme) und für die geplante Entwicklungsumgebung wäre das Format egal. Ich sehe XML da eher als Hindernis.

Es soll niemand - und das betone ich noch mal - niemand soll den XML-Code lesen, es wird weiterhin mit normalen Programmiersprachen programmiert werden können. Der visuelle Editor ist nur ein zusätzliches Mittel, direkt Code erzeugen zu können.
Ich bin in dieser Hinsicht auch eher konservativ, weil ich mich wahrscheinlich nicht daran gewöhnen könnte, mit einer grafischen IDE zu arbeiten. Ich bin einfach daran gewöhnt, Code einzutippen, weil es mit der Tastatur nunmal schneller als mit der Maus geht.
Genau deshalb wird es in der IDE neben dem visuellen Editor auch
Zitat:
eine einfache Pseudo-Sprache die in die obgenannten Sprachen transferiert wird

geben. Code wird weiterhin eingetippt werden können. Wer möchte, kann auch den grafischen Editor nutzen, aber ich und du sind uns immerhin einig, dass man mit dem Eintippen von Code schneller ist, als mit dem Zusammenklicken von irgendwelchen Codeelementen. Möglicherweise ist der grafische Editor für Anfänger gut geeignet, die noch nicht viel von der Materie verstehen. Die fortgeschrittenen Personen verwenden natürlich den Editor für Pseudo-Code, der übrigens "Syntax Switching" unterstützen soll. Oben rechts befindet sich eine ComboBox, die die aktuell geladenen Programmiersprachenmodule anzeigt. Dort kann man beispielsweise zwischen 6 Dingen wählen: "Pseudo-Code", "C++", "BMax", "Java", "XML", "Grafischer XML-Editor". Wenn nun der grafische XML-Editor benutzt wird, muss man sich alles zusammenklicken. Schaltet man auf eine andere Sprache, z.B. C++, wird der Code der aktuellen Datei in C++ Code umgewandelt. Dann kann man in C++ weiterprogrammieren, und wenn man keine Lust mehr auf C++ Syntax hat, kann man es in BMax umwandeln und dort weiterprogrammieren.
Ihr seht schon: Die Programmiersprachen werden nicht wirklich als solche angesehen. Es geht nur um die Syntax. Ihr werdet beim Programmieren mit C++ kein cout finden, auch keinen std-namespace, sondern nur die C++ Syntax. Das cout könnt ihr nur beim C++ Importer verwenden, wenn ihr einen vorhandenen Code importieren wollt. Leider ist das Importieren/Exportieren zwischen C++, Java und BMax nicht ganz reibungslos möglich, aber da hatte ich auch schon eine - zugegeben, nicht besonders gute - Idee: Import/Export-Daten werden einfach in Kommentaren gespeichert. Beispiel: Funktionsüberladung. Bei Sprachen, die dies nicht unterstützen, wird ein Kommentar in eine Headerdatei abgelegt, dass diese und jene Funktion in Wirklichkeit überladen wurde. Nur in BMax steht z.B. Summe_Int(a, b) und Summe_Float(a#,b#) - sehr vereinfacht gesehen. Beim Pseudocode wird man aber Funktionsüberladung nutzen können, z.B. Summe(a:Int, b:Int) und Summe(a:Float, b:Float). Wenn dieser Code anschließend in BMax Code umgewandelt wird (es kann auch auf jede andere Sprache übertragen werden, aber wir sind hier im BB Portal) , dann werden zusätzliche Import-Informationen hinzugefügt. Zum Beispiel, dass die Funktionen Summe_Int und Summe_Float in Wirklichkeit überladene Funktionen sind.
Wenn jemand eine bessere Idee hat, immer her damit Wink
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik
  • Zuletzt bearbeitet von E. Urbach am Do, Sep 27, 2007 14:11, insgesamt einmal bearbeitet

pixelshooter

BeitragDo, Sep 27, 2007 10:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Pro XML: Man kann für jede Sprache XSLTs schreiben, die dann jedes beliebige dieser Pseudoprogramme in Code umformt.
btw, gut formatierten XML code (auch langen) kann man auch gut lesen.

Vererbung mit mehreren Basisklassen, was ist dagegen einzuwenden, nur weil Java und D das nicht können?

eine Anbindung an UML wäre dann auch später sinnvoll, genau so wie das automatische generieren von XML dokumenten aus Programmtext (andersrum ist ja n klack, dank XSLT mehr oder weniger routine).

insgesamt gefällt mir die sache sehr gut, wenn du da leute brauchst, ich würde gerne mitmachen. Very Happy

edit:
ich hab noch mal genauer mich mit UML auseinander gesetzt und versucht, den ablauf des pizzabackens zu beschreiben.
Dabei ist folgendes Diagramm entstanden:
user posted image
Ich habe schon beim editieren gemerkt, dass das ganze nicht für das ausformulieren von programmen geeignet ist - entsprechende Prüfung fehlt.

das Diagramm lässt sich auch als XML Dokument (XLI) exportieren:
http://aintelligence.ai.funpic.de/uploads/bsp.txt
also als Programmiersprache völlig ungeeignet.

Als programm ließe es sich vllt so schreiben:
Code: [AUSKLAPPEN]

<class name="pizza-rohling">
    <private>
        <!-- denn eine Pizza kann sich nicht selber backen -->
        <friend name="ofen">
            <!-- lässt sich in C++ nicht korrekt abbilden -->
            <method name="backe">
                ...
            </method>
        </friend>
    </private>
</class>
<class name="ofen">
    <method name="backe" return="pizza">
        <param class=" name="rohling" callby="reference" />
        <body>
            <do with="rohling">
                <call name="backe" />
            </do>
        </body>
    </method>
</class>

<program>
    <instance class="pizza" name="pizza-instanz" />
    <instance class="ofen name="pizza-ofen" />
    <do with="pizza-ofen">
        <call name="backe">
            <param name="rohling">
                <instance name="pizza-instanz" />
            </param>
        </call>
    </do>
</program>


C++ wäre (per einfacher XSL transfo):
Code: [AUSKLAPPEN]

class pizza
{
    void backe()
    {
        ...
    }
};
class ofen
{
    void backe(pizza& rohling)
    {
        rohling.backe();
    }
};

int main()
{
    pizza pizza-instanz;
    ofen pizza-ofen;
    pizza-ofen.backe(pizza-instanz);
}


wohlgemerkt, ich definiere hier schon die klassen, was ich im diagramm nicht gemacht habe. das hätte wohl noch einiges mehr an arbeit nach sich gezogen.[/code]

Silver_Knee

BeitragDo, Sep 27, 2007 16:34
Antworten mit Zitat
Benutzer-Profile anzeigen
ich würde mich auch zur Verfügung stellen *kann mein eigenes Projekt nemmer sehen*
und da sowas auf meiner liste "wollte ich schon immer mal machen" steht...

pixelshooter

BeitragDo, Sep 27, 2007 17:49
Antworten mit Zitat
Benutzer-Profile anzeigen
wobei das in BB schon wieder kritisch wird, oder man muss das ganze XML/DOM etc. zeugs selber schreiben. Oder kennt jemand ne userlib dazu? Very Happy
egal, ich kann die XML spezifikationen und XSL-T's schreiben^^
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc

Geeecko

BeitragDo, Sep 27, 2007 18:15
Antworten mit Zitat
Benutzer-Profile anzeigen
Da müsste man sich sowieso selber etwas schreiben... Ein vorgefertigter Parser bringt nur Nachteile. Naja... einen Vorteil: man muss ihn nicht selber schreiben Laughing
Aber ich denke, es wird nicht funktionieren, da... So wie google: Du machst etwas von deutsch ins englishe, dann wieder nach deutsch zurück: was kommt raus? sch***e.
Und wenn das öfters passieren würde, wird auch der Code zu Grunde gehen.... Denk ich mal...
Auch wenn man es gut macht (naja... wenn man es richtig gut macht, dann sollte es schon klappen, aber...)
... Aber der unterschied zwischen den Sprachen ist im kleinen nicht groß, aber im großen ist er gewaltig. Z.b. von BB nach BMax -> Types. Dann müsstest du Listen erstellen... Heißen die dann Liste1,2,3...? Die For-Schleifen müssen alle umgeschrieben werden. ein austauschen von next mit einer } reicht da nicht...
naja... fang an, und wir werden sehen, ob es klappt Smile wenns klappt: Respekt
Surprised ^^ Naja... Ist jedenfals meine Meinung dazu.
....

pixelshooter

BeitragDo, Sep 27, 2007 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
du wirfst da aber was durcheinander Wink
parser <-> transformator

der parser generiert aus XML dateien DOM Dokumente und umgekehrt. der Transformator kann aus DOM Dokumenten oder XML dateien andere Dateistrukturen bauen.

Parser: kann ja jeder beliebige sein.
Transformator: XSL-T ist das schlüsselwort.
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc
 

E. Urbach

ehemals "Basicprogger"

BeitragDo, Sep 27, 2007 18:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Aber ich denke, es wird nicht funktionieren, da... So wie google: Du machst etwas von deutsch ins englishe, dann wieder nach deutsch zurück: was kommt raus? sch***e.

Zitat:
... Aber der unterschied zwischen den Sprachen ist im kleinen nicht groß, aber im großen ist er gewaltig. Z.b. von BB nach BMax -> Types. Dann müsstest du Listen erstellen... Heißen die dann Liste1,2,3...? Die For-Schleifen müssen alle umgeschrieben werden. ein austauschen von next mit einer } reicht da nicht...

@Meister_Dieb:
An deinen Posts erkennt man sofort, dass du meine Beiträge nicht liest, wie soll da eine vernünftige Diskussion zustande kommen? Rolling Eyes
Lies dir den ganzen Thread noch einmal durch, vielleicht wirst du es dann verstanden haben. Ich habe jedenfalls wenig Lust, alles 5mal zu wiederholen...

Zitat:
wobei das in BB schon wieder kritisch wird, oder man muss das ganze XML/DOM etc. zeugs selber schreiben.

Einen XML-Parser habe ich bereits. XSLT werde ich nicht verwenden, weil das die Kompilierzeiten drastisch in die Höhe treiben würde. Im Moment liegt die Zeit, die für das Laden, Parsen und Speichern einer XML-Datei benötigt wird bei 0-1 Millisekunden.

Zitat:
Vererbung mit mehreren Basisklassen, was ist dagegen einzuwenden, nur weil Java und D das nicht können?

Weil es in den meisten (fast allen) Fällen einfach nicht nötig ist und sogar mehr Bugs hervorruft, als einem lieb ist.

Zitat:
insgesamt gefällt mir die sache sehr gut, wenn du da leute brauchst, ich würde gerne mitmachen.

Zitat:
ich würde mich auch zur Verfügung stellen *kann mein eigenes Projekt nemmer sehen*
und da sowas auf meiner liste "wollte ich schon immer mal machen" steht...

Tut mir leid, aber ihr könnt nicht mitmachen. Ihr müsstet dafür die folgenden Bedingungen erfüllen:
1. Betriebssystem ist Linux. Kein wenn und aber, Linux ist für's Programmieren bestens geeignet.
2. Kenntnisse in C++. Das Programm soll effizient, aber objektorientiert sein, deshalb C++.
3. Erfahrung mit SVN.
4. Grundlegende XML-Kenntnisse.
5. Entwicklungsumgebung ist Eclipse.
Außerdem müsste ich dann alles nochmal auf ein Teamprojekt auslegen und die Aufgaben verteilen, das bringt bei so wenigen Personen und einem solch komplexen Projekt eher Nachteile als Vorteile.
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik

pixelshooter

BeitragDo, Sep 27, 2007 18:52
Antworten mit Zitat
Benutzer-Profile anzeigen
ich muss dich leider enttäuschen, wenn du mich nicht dabei haben willst Razz

1. Ich arbeite eig nur mit C++/Qt, BB schon lange nicht mehr
2. Benutze Eclipse
3. mit Subclipse (SVN)
4. Und benutze XML/eigene XML formate

Wenn du also nichts dagegen hast, würde ich wenigstens gerne mehr über das projekt erfahren.

btw, was hat die verwendung von XSL-T mit der kompilierzeit zu tun? wovon die kompilierzeit? wozu schreibst du eigene XML parser?
>> Musikerstellung, Grafik und Design: http://www.pixelshooter.net.tc
 

E. Urbach

ehemals "Basicprogger"

BeitragDo, Sep 27, 2007 19:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber du hast kein Linux (wenn ich dich richtig verstanden habe) und Windows-Versionen zum Testen wird es nicht geben. Nur die Releaseversionen werden für Windows verfügbar sein.

Zitat:
btw, was hat die verwendung von XSL-T mit der kompilierzeit zu tun? wovon die kompilierzeit?

Die Kompilierzeit des Programms, wenn man in der IDE auf "Run" drückt. Dann wird der XML-Code in xxx-Code kompiliert und es wird gestartet. Bei XSLT muss ein Interpreter eingesetzt werden (ob intern oder extern ist egal), und dieser ist bekanntlich langsamer als ein direktes Umwandeln des DOM-Modells im Speicher.

Zitat:
wozu schreibst du eigene XML parser?

Da ich bereits in früheren Projekten einen XML-Parser hatte, verwende ich ihn wieder. Ich beschränke mich außerdem auf Boost und meine Blitzprog API. Letztere besitzt du nicht und ich werde sie auch unter keinen Umständen veröffentlichen, solange sie noch nicht fertig ist.

Lass mich erstmal das Grundgerüst für bpc2code fertig schreiben. Danach kann ich immer noch sehen, ob ich ein wenig Verstärkung gebrauchen kann Wink
The box said, "Requires Windows XP or better", so I installed Ubuntu | Linux is NOT Windows
Flua :: Profiler für BB und BMax :: Partikel-Engine für BMax :: Lyphia-Projekt Quellcode (BMax) :: Automatische Parallelisierung :: Meine Musik

Gehe zu Seite 1, 2, 3  Weiter

Neue Antwort erstellen


Übersicht Sonstiges Smalltalk

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group