Gibt es Programme die von alleine Programieren?



  • Hab mir einfach mal die Frage gestellt ob es möglich ist ein Programm zu programieren was selbst auch programiert.
    Programmcode schreibt, diesen compilert usw.
    Und wenns nur "Hallo Welt" Programme sind.

    Hat mich einfach mal interessiert ob es da schon Versuche gab?
    Ob es solche Programme gibt?
    Ob es überhaupt möglich ist?

    Und wenn ich welcher Programiersprache?

    mfg
    Last-Boyscout



  • Last-Boyscout schrieb:

    Hab mir einfach mal die Frage gestellt ob es möglich ist ein Programm zu programieren was selbst auch programiert.
    Programmcode schreibt, diesen compilert usw.
    Und wenns nur "Hallo Welt" Programme sind.

    Hat mich einfach mal interessiert ob es da schon Versuche gab?
    Ob es solche Programme gibt?
    Ob es überhaupt möglich ist?

    Und wenn ich welcher Programiersprache?

    Was du suchst sind moderne Viren.

    mfg
    Last-Boyscout



  • das wird's erst geben, wenn maschinen richtig denken koennen. und das wird hoffentlich nie passieren, oder zumindest erst, wenn ich tot bin..

    mfg aman..



  • Schau dir mal das prozeduale Makrosystem von Lisp an. Ein Makro macht genau das: Es arbeitet ein Programm ab und das Resultat ist ein anderes Programm.
    Hier findest du eine oberflaechliche Einfuehrung in Makros:
    http://www.gigamonkeys.com/book/macros-defining-your-own.html

    Und hier findest du ein kostenloses Buch ueber sehr abgefahrene Sachen, die man mit Makros machen kann:
    http://www.paulgraham.com/onlisp.html



  • da programmiert aber doch ein mensch oder?

    das andere prog uebersetzt ja nur, das gleiche macht auch der compiler in sprachen wie c oder c++..

    mfg aman..



  • aMan schrieb:

    das andere prog uebersetzt ja nur, das gleiche macht auch der compiler in sprachen wie c oder c++..

    Aber ein C++ Compiler uebersetzt den C++ Quelltext in ein ausfuehrbares Programm, nicht in C++ Quelltext.

    Hier habe ich mal ein kleines Beispiel in Lisp:

    (defmacro fun (n)
    	   (let (code)
    	     (dotimes (i n)
    	       (push `(defun ,(intern (format nil "F~a" i)) (x)
    		       (+ ,i x))
    		     code))
    	     (push 'progn code)))
    

    Das Programm nimmt ein Argument n. In der Variablen 'code' steht der Quelltext, der durch das Programm generiert wird.

    Dieses Programm, aufgerufen als (fun 5) generiert folgenden Quelltext:

    (PROGN
     (DEFUN F4 (X) (+ 4 X))
     (DEFUN F3 (X) (+ 3 X))
     (DEFUN F2 (X) (+ 2 X))
     (DEFUN F1 (X) (+ 1 X))
     (DEFUN F0 (X) (+ 0 X)))
    

    Es definiert 5 Funktionen mit den Namen f1, f2, f3, usw..
    Jede dieser Funktionen nimmt ein Argument (x) und addiert eine Zahl, die den Namen der Funktion reflektiert zu x. Fuehrt man also (fun 😎 aus, schreibt 'man' automatisch 8 Funktionen. Danach kann man dann (f6 12) ausfuehren und erhaelt 18 🙂



  • ob das jetzt maschinensprache oder eine programmiersprache ist, ist doch fast das gleiche..

    mfg aman..



  • Aber ein C++ Compiler uebersetzt den C++ Quelltext in ein ausfuehrbares Programm, nicht in C++ Quelltext.

    Stichwort: Template Metaprogrammierung in C++. Da baut der Compiler selber Quelltext zusammen.

    MfG

    GPC



  • aMan schrieb:

    ob das jetzt maschinensprache oder eine programmiersprache ist, ist doch fast das gleiche..

    mfg aman..

    Damit hast du deine Ausgangsfrage selbst beantwortet.

    Es soll trotzdem nicht unerwaehnt bleiben, dass Makros in Lisp zur Laufzeit eingebunden werden koennen und hierzu nichts separat kompiliert werden muss.



  • man kann ohne weiteres ein programm schreiben, welches ein "hello world" programm in eine textdatei schreibt, die compilierung veranlasst und auch das kompilat startet wenn gewuenscht. dazu muss keiner denken koennen.
    es wird sich natuerlich schwerlich ein programm selbstaendig eine idee fuer ein neues programm einfallen lassen koennen und dieses dann implementieren.



  • Find ich alles verdammt interessant.

    Thx für die vielen Beiträge!

    mfg
    Last-Boyscout



  • Dabei existieren zwei Ansätze:

    a) Code Generierung, zum Bleistift:
    http://www.d-s-t-g.com/neu/pages/pagesger/et/ettop.htm

    b) Komponentenkonfiguration und Integration, zum Bleistift:
    http://de.wikipedia.org/wiki/Enterprise_Application_Integration

    Beide Systeme treffen Entscheidungen auf bereits bestehende Konzepte. D.h., ein Softwarepogramm wird niemals vollständig autonome Entscheidungen treffen. Auch der eigentliche Thrill in der Agententechnologie (/me Agent := 'ein Softwareprogramm, das zu autonomen, mobilen, zielorientieren und behaarlichen Handlungen mit der Real World fähig ist, intelligente Dialoge führt und die Übertragung von Informationen verhandelt und koordiniert. Konzepte, Umwelt, Wahrnehmung und Handlung eingrenzt und bei der Auswahl der Handlungen logisch denkt.') kommt nur auf, wenn man durch konnektive und evolutionäre Zusammenhänge die Konzeptentwicklung und Entscheidungsfindung der menschlichen Nachvollziehbarkeit entzieht und sich dann entweder angenehm überraschen oder bitter enttäuschen läßt. 🕶

    <ot subject="philo">
    Deshalb bin ich auch so fasziniert von dem philosopischen Ansatz von Matrix I und II (III war Scheiße): - Der Mensch trifft ebenfalls keine autonomen Entscheidungen. Alles begründet durch logische, physische, chemische und physikalische Zusammenhänge. Ein paar meiner Lieblingssprüche:
    - "Entscheidung ist eine Illusion, es existiert nur Kausalität!" (Matrix II)
    - "Ein Menschenschicksal ist ein Menschenschicksal und das Leben ist nur eine Illusion!" (Japanisches Sprichwort zum Kamma - aus Shogun)
    - Innovation is an illusion of human! In fact, it's just an unknown combination of things those already exist! /me
    - "Der Auserwählte ist eine Anomalie zur Entscheidungsfindung!" (Matrix II)

    Tja! Habe bereits einen Level erreicht, bei dem man Softwareentwicklung nur noch philosophisch betrachten kann und nicht nummerisch ... 😃 🤡
    </ot>

    Man bin ich heute wieder fuzzy! 🙂

    cu
    P84



  • Wenn du dir vorstellst, das der Computer selbständig ein Programme schreiben soll, und du nur die Eigenschaft der zu entwerfenden Programme angibst, so ist dies VOLKOMMEN UNMÖGLICH.

    Es ist nicht einmal möglich zu gegebenen Programmen f berechnen zu lassen, ob diese eine nicht triviale Eigenschaft überhaupt besitzen. (Satz von Rice)
    Wie soll der Computer dann ein Programm mit einer Eigenschaft erzeugen, wenn er nichtmal überprüfen kann, ob der erzeugte Code die Eigenschaft überhaupt hat?



  • @Mister:
    Sorry, vielleicht möchtest Du eine andere Intention ausdrücken, aber einige Aussagen halte ich für schlicht weg falsch!

    MisterX schrieb:

    Wenn du dir vorstellst, das der Computer selbständig ein Programme schreiben soll, und du nur die Eigenschaft der zu entwerfenden Programme angibst, so ist dies VOLKOMMEN UNMÖGLICH.

    Den Gegenbeweis könntest Du Dir in meiner Firma ankucken. 😉

    Einige Quellen die public sind:
    http://de.wikipedia.org/wiki/Intentionale_Programmierung
    http://www.edge.org/digerati/simonyi/simonyi_p2.html
    http://c2.com/cgi/wiki?IntentionalProgramming
    http://intentsoft.com/

    MisterX schrieb:

    Es ist nicht einmal möglich zu gegebenen Programmen f berechnen zu lassen, ob diese eine nicht triviale Eigenschaft überhaupt besitzen. (Satz von Rice)

    Wieder falsch oder ggf. unvollständig: Die entscheidenen Fragen stammen aus dem Anforderungsmanagement. Entstehen aus der Problem-Domain nicht-funktionale Anforderungen (NFR) gebe ich dir Recht. Entwickeln sich aus den Eigenschaften (dem Verhalten) nur funktionalen Anforderungen (FR) ist eine Messung der Zielbefriedigung sehr wohl möglich. Alles was man braucht ist eine vollständig abdeckende Repositry und ein Konzept das die Rückverfolgung zur Solution-Domain herstellt. Ist klassisches Domain Engineering.

    http://www.modulo3.de/vortraege/lt2002_vortrag_anforderungsmanagement_in_it_projekten.pdf
    http://www.software-kompetenz.de/?4478

    MisterX schrieb:

    Wie soll der Computer dann ein Programm mit einer Eigenschaft erzeugen, wenn er nichtmal überprüfen kann, ob der erzeugte Code die Eigenschaft überhaupt hat?

    s.o.
    Eine wichtige Grundvoraussetzung ist allerdings, das sich alle Eigenschaftselemente untereinander nicht beeinflussen.



  • Prof84 schrieb:

    @Mister:
    Sorry, vielleicht möchtest Du eine andere Intention ausdrücken, aber einige Aussagen halte ich für schlicht weg falsch!

    MisterX schrieb:

    Wenn du dir vorstellst, das der Computer selbständig ein Programme schreiben soll, und du nur die Eigenschaft der zu entwerfenden Programme angibst, so ist dies VOLKOMMEN UNMÖGLICH.

    Den Gegenbeweis könntest Du Dir in meiner Firma ankucken. 😉

    Einige Quellen die public sind:
    http://de.wikipedia.org/wiki/Intentionale_Programmierung
    http://www.edge.org/digerati/simonyi/simonyi_p2.html
    http://c2.com/cgi/wiki?IntentionalProgramming
    http://intentsoft.com/

    MisterX schrieb:

    Es ist nicht einmal möglich zu gegebenen Programmen f berechnen zu lassen, ob diese eine nicht triviale Eigenschaft überhaupt besitzen. (Satz von Rice)

    Wieder falsch oder ggf. unvollständig: Die entscheidenen Fragen stammen aus dem Anforderungsmanagement. Entstehen aus der Problem-Domain nicht-funktionale Anforderungen (NFR) gebe ich dir Recht. Entwickeln sich aus den Eigenschaften (dem Verhalten) nur funktionalen Anforderungen (FR) ist eine Messung der Zielbefriedigung sehr wohl möglich. Alles was man braucht ist eine vollständig abdeckende Repositry und ein Konzept das die Rückverfolgung zur Solution-Domain herstellt. Ist klassisches Domain Engineering.

    http://www.modulo3.de/vortraege/lt2002_vortrag_anforderungsmanagement_in_it_projekten.pdf
    http://www.software-kompetenz.de/?4478

    MisterX schrieb:

    Wie soll der Computer dann ein Programm mit einer Eigenschaft erzeugen, wenn er nichtmal überprüfen kann, ob der erzeugte Code die Eigenschaft überhaupt hat?

    s.o.
    Eine wichtige Grundvoraussetzung ist allerdings, das sich alle Eigenschaftselemente untereinander nicht beeinflussen.

    Folie 13
    http://ls2-www.cs.uni-dortmund.de/~droste/GTI06/Inhalt/060518.pdf



  • Mister X hat recht.

    In der Form, dass man einfach eine Eigenschaft angibt und der Computer ein entsprechendes Programm berechnet ist UNMÖGLICH.

    Natürlich kann man Programme schreiben, die für BESTIMMTE Eigenschaften ein entsprechendes Programm erzeugen.

    Aber allgemein IST ES UNMÖGLICH.
    Gib einfach eine nicht berechenbare Eigenschaft ein, wie z.B die Berchnung der Diagonalsprache. Der Computer kann aber nicht erkennen, das es sich bei der Eingabe um eine nicht berechenbare Funktion handelt. Er wird bei einem theoretisch perfekten Code Erzeugungsprogramm unendlich lange versuchen den Code für die Eingabe zu erzeugen. Allerdings kann er auch nicht erkennen, das er unendlich lange daran scheitern wird. Denn selbst wenn er es 100000000 Jahre Versucht hätte kann er nicht daraus schließen, dass es nicht geht. Denn es könnte ja sein, das nur die Rechenzeit nicht gereicht hat und er das Ergebnis eine Sekunde später gefunden hätte.

    MisterX schrieb:
    Es ist nicht einmal möglich zu gegebenen Programmen f berechnen zu lassen, ob diese eine nicht triviale Eigenschaft überhaupt besitzen. (Satz von Rice)

    Wieder falsch oder ggf. unvollständig: Die entscheidenen Fragen stammen aus dem Anforderungsmanagement. Entstehen aus der Problem-Domain nicht-funktionale Anforderungen (NFR) gebe ich dir Recht. Entwickeln sich aus den Eigenschaften (dem Verhalten) nur funktionalen Anforderungen (FR) ist eine Messung der Zielbefriedigung sehr wohl möglich. Alles was man braucht ist eine vollständig abdeckende Repositry und ein Konzept das die Rückverfolgung zur Solution-Domain herstellt. Ist klassisches Domain Engineering.

    @Prof84
    Diese Aussage von dir ist (leider) absolut falsch.
    Selbst das Problem, ob ein Programm auch nur anhält ist nicht berechenbar.
    Da nützten dir auch funktionale Anforderungen absolut nichts.

    Selbt wenn du ein Programm gegeben hast, welches als Anforderung nur f(2) = 7
    bei Eingabe n Element N hat, kann kein Computer berechnen ob das stimmt.

    Natürlich kann er das programm starten und auf die Ausgabe von der Eingabe 2 warten. was passiert aber wenn das programm nicht anhält. Wie oben beschrieben kann der Computer aber nicht feststellen, das das gegebene programm nicht anhält. Also bleibt nicht anderes überig als nach einer gewissen zeit abzubrechen und zu sagen das das Programm nict das gewünschte berechnet. Aber es könnte ja sein das das Programm aus der 2 die 7 gaaaaanz aufwendig berechnet und das Programm eine Sekunde nachdem man es abgebrochen hat das richtige ergebnis berechnet hätte.



  • MisterX schrieb:

    Prof84 schrieb:

    MisterX schrieb:

    Es ist nicht einmal möglich zu gegebenen Programmen f berechnen zu lassen, ob diese eine nicht triviale Eigenschaft überhaupt besitzen. (Satz von Rice)

    Wieder falsch oder ggf. unvollständig: Die entscheidenen Fragen stammen aus dem Anforderungsmanagement. Entstehen aus der Problem-Domain nicht-funktionale Anforderungen (NFR) gebe ich dir Recht. Entwickeln sich aus den Eigenschaften (dem Verhalten) nur funktionalen Anforderungen (FR) ist eine Messung der Zielbefriedigung sehr wohl möglich. ...

    Folie 13
    http://ls2-www.cs.uni-dortmund.de/~droste/GTI06/Inhalt/060518.pdf

    Na also! Da sind wir doch d' accord! Ich zittiere deine Folie:
    "Sei S eine Eigenschaft, die von mindestens einer, aber nicht von allen berechnbaren Funktionen erfüllt wird."

    Prof84 schrieb:

    Eine wichtige Grundvoraussetzung ist allerdings, das sich alle Eigenschaftselemente untereinander nicht beeinflussen.

    Beispiel zur Illustration:
    "Das System soll schadstoffarm sein!"
    Beziehung: Environment <-> System (NFR)
    Ist nicht berechenbar nach Rice.

    Nun definieren wir schadstoffarm:
    "Schadstoffarm bedeutet unter 10 ppm!"
    Beziehung: System (Messung) <-> System (Programmierung) (FR)
    Wenn die Systemberechnung nur FR's befriedigt, ist das System berechenbar und vor allem testbar.

    Wie oben angedeutet, war deine Aussage nur unvollständig!
    Never mind! 🙂



  • Andreas XXL schrieb:

    @Prof84
    Diese Aussage von dir ist (leider) absolut falsch.
    Selbst das Problem, ob ein Programm auch nur anhält ist nicht berechenbar.
    Da nützten dir auch funktionale Anforderungen absolut nichts.

    Selbt wenn du ein Programm gegeben hast, welches als Anforderung nur f(2) = 7
    bei Eingabe n Element N hat, kann kein Computer berechnen ob das stimmt.

    Natürlich kann er das programm starten und auf die Ausgabe von der Eingabe 2 warten. was passiert aber wenn das programm nicht anhält. Wie oben beschrieben kann der Computer aber nicht feststellen, das das gegebene programm nicht anhält. Also bleibt nicht anderes überig als nach einer gewissen zeit abzubrechen und zu sagen das das Programm nict das gewünschte berechnet. Aber es könnte ja sein das das Programm aus der 2 die 7 gaaaaanz aufwendig berechnet und das Programm eine Sekunde nachdem man es abgebrochen hat das richtige ergebnis berechnet hätte.

    Sorry, Du hast nur nicht verstanden wovon ich rede:

    Du hast bereits eine feste Verbindung von Problem-Domain (Eigenschaft) <-> Konzept <-> Solution-Domain im Induktionsansatz. Dieses Mapping wird aus der Repositry zu generischen Programmierung unter Zuhilfenahme von bestimmten Konzepten wiederverwendet (FR's). Ist simple AOM(P).

    http://de.wikipedia.org/wiki/AOP

    Vielleicht hilft Dir dieser Link worauf ich hinaus will:
    http://www.swen.uwaterloo.ca/~kczarnec/ECE750T9F04/Lecture3_FeatureModeling1up.pdf
    http://selab.postech.ac.kr/publication/2002_Concepts and Guidelines of Feature Modeling for Product Line Software Engineering.pdf

    Btw:
    Bei Boing befindet sich ein Riesenposter einer Hummel.
    Untertitel übersetzt: " Unsere Ingenieure haben errechnet, dass diese Hummel nicht fliegen kann!"



  • Hallo!

    Ich meine, daß es schon MÖGLICH ist, sich Programme nach gegebenen
    Spezifikationen selbst entwickeln zu lassen.

    Schließlich sind C++ Programme nur Zeichenketten. Man läßt also einen
    Computer alle Zeichenketten in aufsteigender Länge hintereinander aufzählen, schickt die Zeichenkette
    durch einen C++ Compilter und startet das Compilat. In den meisten Fällen wird
    gar kein Compilat entstehet, da die meisten Zeichenketten keine syntaktisch
    einwandfreien C++ Programme sind. In den Fällen, wo ein Compilat entsteht,
    startet man dies und läßt (ebenfalls von einem Computer) prüfen, ob die
    endlich vielen Spezifikationen in Form von input/output-Paaren erfüllt sind.

    Falls nein: nächste Zeichenkette prüfen.
    Falls ja: Fertig. C++ Programm releasen.

    Theoretisch ist das also möglich,
    praktikabel ist es nicht. Denn:
    1. Falls es zur Spezifikation gat kein Programm gibt, zählt man unendlich
    lange weitere Zeichenketten auf, ohne zu wissen, wann Schluß ist
    2. Selbst wenn man sich auf Zeichenketten der Länge 30 beschränkt
    (das reicht gerade für #include<iostream> int main(){. ....}),
    zählt man länger als das Universum existiert.

    Theoretisch ist es also möglich. Der praktische Nutzen ist aber etwa so
    hoch wie der des Versuchs, Fermats letzten Satz zu wiserlegen, indem man
    alle möglichen Zahlentripel aufzählt und hofft, ein Gegenbeispiel zu finden.

    Grüße



  • Das ist ein ziemlich interessanter Ansatz!
    Denn im Moment ist das Einzige, was diese Methode zum scheitern verurteilt, die Rechenkraft der CPU. Allerdings schreitet auch die Quantentechnologie langsahm voran und wer weiß, was die Zukunft bringt.

    Ich denke daher, dass diese Methode in Zukunft sogar sehr effektiv sein könnte.

    P.s.

    Prof84 schrieb:

    - Innovation is an illusion of human! In fact, it's just an unknown combination of things those already exist! /me

    -In Wirklichkeit ist es eine unbekannte Kombination von Dingen welche bereits existieren.

    Unbekannt? Ich würde sagen: Teils, Teils.
    Viele Kombinationen, oder Vorgänge sind zwar ungewollt in Gang gesetzt aber nicht alle.

    Aber lassen wir das unbekannt einfach mal ausser Acht. 😉

    "-In Wirklichkeit ist es eine Kombination von Dingen welche bereits existieren."

    Gut erkannt, aber deswegen ist es noch lange keine Illusion? 😕

    P.p.s. Entschuldigung, dass ich deine Weisheit so zerfetzt hab. 😉


Anmelden zum Antworten