Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  Lisp
  Common Lisp - Funktionen überladen

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Common Lisp - Funktionen überladen (1852 mal gelesen)
archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 22. Sep. 2009 22:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Kürzlich wurde hier (wieder mal) angeregt, gemeinsam eine einheitliche Funktionsbibliothek zu schaffen. Das halte ich für keine besonders gute Idee, weil in einer über die Jahre entwickelten eigenen Funktionsbibliothek das größte Kapital eines professionellen Programmierers steckt, und weil deshalb die Profis kaum zu so einer gemeinsamen Bibliothek beitragen werden.

Aber etwas anderes ist sinnvoll: eine Diskussion über Lisp, und wie Autodesk VisualLisp weiter entwickeln könnte und sollte. Ich zitiere mich aus einem anderen Beitrag mal selbst:
 

Zitat:
Original erstellt von archtools:
Das bringt mich auf ein interessantes Thema. Autodesk hatte vor gut 10 Jahren nach dem Ankauf von VitalLISP und der Umbenennung in VisualLISP mal öffentlich verlautbart, dass man VisualLISP in Richtung Common Lisp weiter entwickeln würde.

Das einzige, was daraus geworden ist, ist die Implementierung einiger in Common Lisp vorhandener Funktionen wie EVERY, SOME usw., die garantiert auch schon damals jeder halbwegs professionelle Programmierer in seiner Funktionsbibliothek hatte.

Hat Autodesk tatsächlich geglaubt, mit diesen paar Winzfunktionen VisualLISP an Common Lisp angepasst zu haben? Es vergeht fast kein Tag, an dem ich beispielswiese nicht schmerzlich vermisse, dass ich in VisualLISP Funktionen nicht überladen kann.


Funktionen zu "überladen" bedeutet, dass man verschiedene Funktionen mit verschiedener Anzahl von Argumenten unter demselben Namen führt. Nach
(defun test (A B) (* A B))
und
(defun test (A B C) (+ A B C))
hätte man dann also mit dem letzten DEFUN nicht alle anderen früheren zerstört, sondern hätte danach zwei Funktionen, die man einfach mit den verschieden vielen Argumenten aufruft.
(test 3 4) ergäbe demnach 12, und (test 2 3 4) ergäbe 9.

Für den Gelegenheitsprogrammierer und für den, der Lisp nur als Skriptsprache für AutoCAD benutzt, macht das Fehlen dieser wichtigen Struktureigenschaft einer Programmiersprache nichts aus. Der definiert sich bei Bedarf eben mehrere Funktionen mit verschiedenen Namen, die er je nach Anzahl der Argumente aufruft, oder er übergibt gleich eine Liste von Argumenten. Für den Profi aber macht das einen großen Unterschied. Am wichtigsten ist die Möglichkeit des Überladens bei der Programmpflege. Hat man eine Funktion mit zwei Argumenten geschrieben und braucht nun plötzlich drei Argumente, so kann man die ursprüngliche Definition zwar einfach umschreiben, hat aber an zig Funktionsaufrufen und u.U. in zig Applikationen, die dieselbe Funktionsbibliothek benutzen, enormen Aufwand, alle Aufrufe dieser Funktion anzupassen. Das ist also langwierig und fehlerträchtig.

Aus dem Grund bieten alle besseren Lisp-Dialekte und auch andere Sprachen wie C++ usw die Möglichkeit des Überladens von Funktionen. Damit spart der Programmierer viel Zeit und vermeidet viele Fehler.

Das Überladen zu ermöglichen wäre ganz extrem einfach in jedem Lisp Interpreter einzurichten, da wäre auch bei VisualLISP kaum eine halbe Stunde Arbeit eines Programierers nötig. Um zu zeigen, wie extrem einfach das ist, habe ich es in Lisp nachgebildet, Quellcode steht unten.

Ich habe natürlich keinen Zugriff auf den internen Evaluierer des VisualLISP Evaluieres, so dass man die mit der unten stehenden Funktion MYDEFUN definierten Funktionen nicht beispielsweise mit (test 2 3) aufrufen kann. Aber man kann sie mit dem unten stehenden Evaluierer MYEVAL genau so evaluieren wie mit EVAL, also mit (myeval '(test 2 3)). Wie man sieht, funktioniert damit (test 2 3) genau so gut wie (test 2 3 4), wenn die test-Funktionen mit 2 und 3 Argumenten erst mal definiert sind.

MYDEFUN speichert die Funktionen in einer Funktionstabelle (das macht jeder Lisp-Interpreter im Prinzip nicht anders), die hier als globale Variable MYDEFINEDFUNCTIONS vorliegt. Da VisualLISP nun mal seine Beschränkungen hat, muss man die test-Funktion beispielsweise so definieren:
(mydefun '(test (A B) (* A B)))
bzw
(mydefun '(test (A B C) (+ A B C)))

So wie's hier steht ist das Programm auch schon ziemlich hilfreich beim Erstellen von Programmen. Beispielsweise Hilfsfunktionen für DCL-Dialoge lassen sich so sehr übersichtlich speichern und zeilenlängesparend in den (action_tile ...) Funktionen aufrufen, und da diese Hilfsfunktionen ja immer wieder mehr oder weniger identisch gebraucht werden, lässt sich da auch leicht eine Funktionsbibliothek für das Handling von DCL-Dialogen aufbauen. Aber Vorsicht: lokale Variablen habe ich der Übersichtlichkeit nicht mit unterstützt (wäre aber ein Leichtes, das mit zu integrieren).

Welch überaus interessante Möglichkeit das Überladen von Funktionen und wie in diesem Fall auch die Kontrolle über den Evaluierer bei Applikationen mit sich bringt, die Metaprogrammierung betreiben (so wie z.B. mein objectiveCAD) oder vorhandenen Lisp-Code während der Ausführungszeit verändern (wie viele KI-Programme), brauche ich den erfahrenen Lisplern hier nicht erst zu erklären.

Also viel Spaß damit, und vielleicht hat ja mancher Ideen dafür, wie sich sowas noch einsetzen lässt.

Code:

(defun mydefun (lst / alldef def)
  (if (not
        (setq alldef (cdr (assoc (car lst) mydefinedfunctions)))
      )
    (setq mydefinedfunctions
           (cons (list (car lst) (cons (length (cadr lst)) (cdr lst)))
                 mydefinedfunctions
           )
    )
    (if (setq def (cdr (assoc (length (cadr lst)) alldef)))
      (setq alldef             (subst (cons (length (cadr lst)) (cdr lst))
                                      (assoc (length (cadr lst)) alldef)
                                      alldef
                               )
            mydefinedfunctions (subst (cons (car lst) alldef)
                                      (assoc (car lst) mydefinedfunctions)
                                      mydefinedfunctions
                               )
      )
      (setq alldef             (cons (cons (length (cadr lst)) (cdr lst)) alldef)
            mydefinedfunctions (subst (cons (car lst) alldef)
                                      (assoc (car lst) mydefinedfunctions)
                                      mydefinedfunctions
                               )
      )
    )
  )
  (car lst)
)


(defun myeval (lst / alldef def return)
  (if (not
        (setq alldef (cdr (assoc (car lst) mydefinedfunctions)))
      )
    (princ "\nerror - function not defined ")
    (if (setq def (cdr (assoc (length (cdr lst)) alldef)))
      (setq return (apply (cons 'lambda def) (cdr lst)))
      (princ "error - wrong number of arguments ")
    )
  )
  return
)


[Diese Nachricht wurde von archtools am 22. Sep. 2009 editiert.]

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

toxot
Mitglied



Sehen Sie sich das Profil von toxot an!   Senden Sie eine Private Message an toxot  Schreiben Sie einen Gästebucheintrag für toxot

Beiträge: 70
Registriert: 05.04.2009

erstellt am: 22. Sep. 2009 23:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

Servus archtools!
Deine Kritik und Dein Code ist super richtig gedacht.

Wenn ich es richtig verstanden hab, zielt das genau in die Richtung.
Ich hab (und Du wahrscheinlich auch) natürlich einen anderen Namen für diese fun!
(defun !(lst) ... nannte ich Sie. Ich hab sie aber nur für Testzwecke im Einsatz.
Aufrufe erfolgen also über (!'(something ... und alles läuft dann über (! ... In vielen Varianten möglich.
Die Funktion ! bedeutet also: Führe aus! Egal was du zu tun hast.
Und das bedeutet:
Parameterfreiheit!
Ladefreiheit! ... von wo auch immer ... auch aus dem Internet, wenn nötig.
Logfreiheit!
... was immer der Programmierer unter ! versteht.

Super!

Bestes Dir ... ToXoT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 22. Sep. 2009 23:26    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von toxot:
Servus archtools!
Deine Kritik und Dein Code ist super richtig gedacht.

Wenn ich es richtig verstanden hab, zielt das genau in die Richtung.
Ich hab (und Du wahrscheinlich auch) natürlich einen anderen Namen für diese fun!
(defun !(lst) ... nannte ich Sie. Ich hab sie aber nur für Testzwecke im Einsatz.
Aufrufe erfolgen also über (!'(something ... und alles läuft dann über (! ... In vielen Varianten möglich.
Die Funktion ! bedeutet also: Führe aus! Egal was du zu tun hast.
Und das bedeutet:
Parameterfreiheit!
Ladefreiheit! ... von wo auch immer ... auch aus dem Internet, wenn nötig.
Logfreiheit!
... was immer der Programmierer unter ! versteht.

Super!

Bestes Dir ... ToXoT


Naja, Namen vergibt jeder, wie es ihm am besten passt, und natürlich hast Du Recht: ich habe meine Namenskonvention nicht hier in dem Beispiel verwendet, sondern etwas, was für die Allgemeinheit leichter lesbar ist. Du hast das vermutlich an den Evaluierungsbefehl '!' der AutoCAD-Befehlszeile angepasst.

Die Kontrolle über den Evaluierer ermöglicht auch die elegante Beseitigung bösartiger Fallen, die VisualLISP so stellt. Kaum ein Programmierer weiss beispielsweise, dass '+ keineswegs beliebig viele Argumente zulässt, sondern maximal 255. Weil das noch nicht mal in der Dokumentation steht, muss man es wohl als Bug betrachten. Ich kenne zahlreiche Applikationen, die beispielsweise Raum- oder Geländeflächen einer Zeichnung einfach in eine Liste packen und ein (apply '+ davor setzen, um die Gesamtfläche zu bekommen. Und 255 Flächenstücke werden in einem Flurplan o.ä. leicht mal überschritten. Also definiert man sich sein eigenes '+, das wirklich beliebig viele Argumente aufnimmt, aber das geht in VisualLISP eben nicht. In meinem Evaluierer hab' dazu ich sogenannte "special functions" definiert, die beliebig viele Parameter übernehmen können. Das sind nur ein zwei oder drei Zeilen Änderung an dem Code, den ich gepostet habe.

Damit Du nicht zu früh ins Bett gehst, hab' ich hier eine nette Alternative zum TV-Programm für Dich: http://chaosradio.ccc.de/cre084.html

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

toxot
Mitglied



Sehen Sie sich das Profil von toxot an!   Senden Sie eine Private Message an toxot  Schreiben Sie einen Gästebucheintrag für toxot

Beiträge: 70
Registriert: 05.04.2009

erstellt am: 22. Sep. 2009 23:32    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

... noch was: Du solltest (und hast es hier auch ... mir fällt kein besseres Wort ein - gottseidank - öffentlich gemacht) schon wissen, das A in dieser Sache gar nichts machen wird. Es wäre wider Ihren Absichten.

Sie klauen Uns (den Programmierern) Alles.
Rüchsichtslos und Kostenlos!
Polieren Ihre Appi damit auf und verkaufen es als DIE Neue Release.
Doch alles im Internet verfügbar. Oder?
Zurücklehnen und nehmen(Ich sag mal so dazu)
Denk doch mal nach.

Bei jeder neuen kannst Du zuschauen, was Sie schon wieder Dir, mir ... einfach Uns abgeguckt???(ist nicht das richte Wort dafür) haben.
Oder lieg ich da wirklich falsch.
Ich hatte zb. den Punktfang(destination will be ...) schon lange bevor es A geschafft hatte.
Denk nur mal über all die Dramen nach, die da liefen und laufen.

Du hast ja eh schon die Lösung diese Problems in der Hand!

Also red nicht so (wie in deinem ersten Satz) über sehr - WIRKLICH SEHR - gute Ansätze!

Du bist auf froh gewesen - vergiss das nicht - dass es solche wie Reini und Mapcar gegeben hat, von denen Du Dein know-how hattest.
Sie haben Uns Türen aufgemacht!

Versteh diese Nachricht bitte nicht falsch.
Nochmal: Ich ... bin auf deiner Seite.

Aber: ärgre mich nicht mit Überheblichkeit in die falsche Richtung!
Das haben wir unter UNS nicht notwendig.
Die Götter sind wir nicht, aber Wir können durch Zusammenarbeit besser werden.

Bestes Dir ... hast noch mehr ... gib es! ... für UNS! ... ToXoT

... fast sentimetal ... 2Bier ... macht niX

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

toxot
Mitglied



Sehen Sie sich das Profil von toxot an!   Senden Sie eine Private Message an toxot  Schreiben Sie einen Gästebucheintrag für toxot

Beiträge: 70
Registriert: 05.04.2009

erstellt am: 22. Sep. 2009 23:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

... zu spät ... ich hatte gerad die Antwort verfasst.

Über Dein Thema müssen wir noch reden!

In Sachen "Chaos" musst die unbedingt die Sites von Peter Glaser anschaun ... großartig ... ist Freund von Freund in Graz.

... Bestes Dir ... muß mal schlafen ... ToXot

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 22. Sep. 2009 23:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von toxot:
... noch was: Du solltest (und hast es hier auch ... mir fällt kein besseres Wort ein - gottseidank - öffentlich gemacht) schon wissen, das A in dieser Sache gar nichts machen wird. Es wäre wider Ihren Absichten.

Oh, das ist mir schon klar. Aber man gibt andererseits ja nie die Hoffnung auf. Vielleicht kommt bei Autodesk in Zeiten einer echten Krise ja mal ein Manager an die Macht, der sich auf die alten Werte der Leute um John Walker besinnt.

Falls Du irgend wie im Netz Zugang dazu findest, dann sieh' Dir mal sein Lisp Programm ClassWar an, mit dem er AutoLISP um objektorientierte Programmierung erweiterte. Das war damals, vor fast 20 Jahren, der Kick, der mich zur Programmierung von  objectiveCAD brachte (und das war damals meine Doktorarbeit).

Zitat:

Sie klauen Uns (den Programmierern) Alles.
Rüchsichtslos und Kostenlos!

Oh ja. Deshalb kann ich jedem Applikationsentwickler nur unbedingt raten, auf keinen Fall Mitglied im ADN zu werden. Damit verpflichtest Du Dich nämlich zur Überlassung Deiner Seele an Autodesk.

Ich hatte schon mal einen äußerst bösartigen Rechtstreit mit AUtodesk, in dem Autodesk mich für einen Vorfall verantwortlich machen wollte, bei dem bei einem sehr großen Kunden zehntausende von DWG-Dateien im Wert von vielen hundert Millionen DM zerstört bzw gefährdet wurden. Ursache war ein Bug in AutoCAD, und Autodesk wusste das!

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 22. Sep. 2009 23:47    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von toxot:
Du bist auf froh gewesen - vergiss das nicht - dass es solche wie Reini und Mapcar gegeben hat, von denen Du Dein know-how hattest.
Sie haben Uns Türen aufgemacht!

Da unterschätzt Du mein Alter. Ohne jetzt überheblich werden zu wollen, aber es ist nun mal so: Mapcar hat Lisp bei mir gelernt, nicht umgekehrt. Aber er ist ein um Klassen besserer Lehrer gewesen als ich es jemals war oder sein werde (ich unterrichte auch). Er wohnte nur ein paar km von mir entfernt, und er kam öfter mal zu einem Lisp-Stammtsich, den ich damals veranstaltet hatte.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 22. Sep. 2009 23:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von toxot:
In Sachen "Chaos" musst die unbedingt die Sites von Peter Glaser anschaun ... großartig ... ist Freund von Freund in Graz.

Ich kenne Peter Glaser. Und ich weiss, das er mit Reini befreundet ist.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

toxot
Mitglied



Sehen Sie sich das Profil von toxot an!   Senden Sie eine Private Message an toxot  Schreiben Sie einen Gästebucheintrag für toxot

Beiträge: 70
Registriert: 05.04.2009

erstellt am: 22. Sep. 2009 23:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von archtools:
...  Mapcar hat Lisp bei mir gelernt, nicht umgekehrt ...

... Tschuldige ... ehrlich ... wußt ich (leider) nicht!
Dank dir für den Chaos-link ... 


Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

toxot
Mitglied



Sehen Sie sich das Profil von toxot an!   Senden Sie eine Private Message an toxot  Schreiben Sie einen Gästebucheintrag für toxot

Beiträge: 70
Registriert: 05.04.2009

erstellt am: 23. Sep. 2009 00:11    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

... noch was. Thema Namenskonvention.
Bitte ALLE links und know how die Du diesbezüglich hast.
Es könnte - für alles was kommt - DAS zentrale Bindeglied sein.
Sie ist das Zentrum der VERSTAND-VERSTEH-Verständigung!
Und - alle die das lesen - sind ebenso dazu aufgerufen!
Vielleicht eigenes Thema.

Bestes Dir archtools ... und Euch ... ToXoT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 23. Sep. 2009 00:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von toxot:
... noch was. Thema Namenskonvention.
Bitte ALLE links und know how die Du diesbezüglich hast.

Da hab' ich nix. Und noch schlimmer: da fällt mir bei jedem Projekt was anderes ein. Das geht nun schon seit über 20 Jahren so, weshalb ich glaube, dass es hier keine Lösung gibt, die länger als 3 Monate bestand hat. Das scheint ein Naturgesetz zu sein.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

toxot
Mitglied



Sehen Sie sich das Profil von toxot an!   Senden Sie eine Private Message an toxot  Schreiben Sie einen Gästebucheintrag für toxot

Beiträge: 70
Registriert: 05.04.2009

erstellt am: 23. Sep. 2009 09:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von archtools:
Da hab' ich nix. Und noch schlimmer: da fällt mir bei jedem Projekt was anderes ein. ...

Genau das ist DAS Problem.
Es ist schon eigenartig, dass Du diesen Code oben nach "autoload ohne autoload" ins Forum gestellt hast.
Es ist nämlich nicht nur in der von Dir besprochenen Funktionalität brauchbar, sondern geht - wenn man hier einen Loader einfügt - eben für die autoload + ondemand + unknown + overload - functions.
Überleg doch mal, was das bedeutet.
Ich hatte das bei der Diskussion über unknown Commands bereits angekündigt ... über functions später ... und ...Parameterfreiheit ... wollt aber nicht alles in einen Topf werfen.
... später mehr.

Bestes Dir/Euch ToXoT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

toxot
Mitglied



Sehen Sie sich das Profil von toxot an!   Senden Sie eine Private Message an toxot  Schreiben Sie einen Gästebucheintrag für toxot

Beiträge: 70
Registriert: 05.04.2009

erstellt am: 24. Sep. 2009 20:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von archtools:
... Kürzlich wurde hier (wieder mal) angeregt, gemeinsam eine einheitliche Funktionsbibliothek zu schaffen. ...

Ich möcht Dir wirkliche hier dein Thema "zerquatschen", aber vergiss nicht, dass sich durch die Lademöglichkeiten (coms-LoadOnDemand und overload) doch einiges diesbezüglich dramatisch verändert haben!

Ausserdem bin ich sehr empfindlich auf "wieder mal" und ähnliches.

Zwischen den Ambitionen einer einheitlichen und gemeinsamen Funktionbibiothek damals und heute steht der Umstand, dass die Verwaltung auf der lokalen Workstation der LOADER (für:funs, coms + dcl, datebase, was auch immer) übernehmen kann.
Woher auch immer der Stoff auf der lokalen Maschine kommen könnte.

Lehn Dich mal zurück und denk noch mal drüber nach.

Die Potenz dieser Sache kann - so Du das möchtest - ich dir genau beschreiben.
Ich vermute aber, dass Du sicherlich genug Phantasie hast.

Szenario:
.) Session in AU
.) Du liest im Forum, dass das Konsortium eine neuen Befehl online hat (mit Sicherheitszertifikat).
.) Du gibst den Befehl in der Session ein ... UND ... er läuft.
.) Bei der nächsten Session muss er nicht mehr aus dem Web geladen werden, sondern steht im Lokalen Netz zur Verfügung.

Träumerei? ... wie mans nimmt!

Bestes Dir/Euch ... ToXoT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 24. Sep. 2009 21:09    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von toxot:
Szenario:
.) Session in AU
.) Du liest im Forum, dass das Konsortium eine neuen Befehl online hat (mit Sicherheitszertifikat).
.) Du gibst den Befehl in der Session ein ... UND ... er läuft.
.) Bei der nächsten Session muss er nicht mehr aus dem Web geladen werden, sondern steht im Lokalen Netz zur Verfügung.

Träumerei? ... wie mans nimmt!


Für mich Albträumerei :-)

Ich glaub', Du hast eine falsche Vorstellung davon, wie Lisp-Programmierer gestrickt sind. Nichts schreckt die mehr ab als die Idee einer Zentralstelle zur Verwaltung von Code.

Microsoft hat den Fehler schon mal gemacht und das inzwischen auch eingesehen. Wer erinnert sich nicht an unzählige Versionen von System-DLLs, von denen jede Applikation ihre eigene Version mit sich brachte und ungefragt neuere DLL-Versionen überschrieb, und damit altgedienten Applikationen das Laufen schwer machte?

Ich glaub' zwar, dass man das ziemlich verallgemeinern kann, aber auf jeden Fall gilt es für mich: dass ich so gerne in LISP programmiere, hat viel damit zu tun, dass ich ein Einzelgänger bin. Sicher picke ich gerne mal ein besonders elegantes Beispiel aus meiner Funktionsbibliothek heraus und stelle es hier vor, aber das hat dann auch was mit Stolz und Sucht nach Anerkennung zu tun. Ganz bestimmt hat es nie was damit zu tun, dass ich damit den Anstoß zu einer gemeinsamen Funktiknsbibliothek geben will. Ich habe keinen Bedarf danach und ich will das auch nicht.

Lisp-Programmierer schaffen sich ihre eigene Welt.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

toxot
Mitglied



Sehen Sie sich das Profil von toxot an!   Senden Sie eine Private Message an toxot  Schreiben Sie einen Gästebucheintrag für toxot

Beiträge: 70
Registriert: 05.04.2009

erstellt am: 25. Sep. 2009 02:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von archtools:
Lisp-Programmierer schaffen sich ihre eigene Welt

... schau, ich habs ja auch so gemacht ... siehe Anmerkung CadWiesel.

Aber Linux - und viele andere Beispiele - sind einen besseren Weg gegangen.
Und Du selbt? Hast Du nicht auch ........ ?
Oder liegts vielleicht daran, dass die Idee und Kombination von mir kam?

Mit einem LOADER haben haben wir DEN Schlüssel, für die VERWALTUNGSFREIE Ausführung von Lisp-Programmen!

Auch Du könntest den Code anderer in deinen Programmen gut einsetzen.

Aber diesmal OHNE MÜHSAMER VERWALTUNGSARBEIT ... hier und da herausschnippseln - und da und dort eintragen MÜSSEN ... nicht vergessen!

Wenn der LOADER web-fähig ist, reicht es, wenn Du blos DAS NEUE BEFEHLSWORT in Deinen Code schreibst - UND ES LÄUFT!
Oder, hatte ich mich nicht verständich ausgedrückt?
Und noch dazu, beschränkt sich die Sache nicht einmal mehr nur auf Lisp.

Der Spass nimmt ZU, wenn die Sicherheit, Leistungsfähigkeit und Mächtigkeit steigt - oder?
Und Insider bleibst Du ja trotzdem.
Nur wer die Routinen versteht, wird sie auch wieder zu einem großen Ganzen zusammenbauen können!
Schau doch, was wir bis Dato zustande gebracht haben!
Raumbücher, Höhenkoten und ein bisserl zusammenzählen da und dort.

Ist Dir das genug?
WIRKLICH?

Bestes Dir/Euch ... ToXoT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

toxot
Mitglied



Sehen Sie sich das Profil von toxot an!   Senden Sie eine Private Message an toxot  Schreiben Sie einen Gästebucheintrag für toxot

Beiträge: 70
Registriert: 05.04.2009

erstellt am: 25. Sep. 2009 02:29    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

... und noch eins oben drauf ...
Zitat:
Original erstellt von archtools:
Kürzlich wurde hier (wieder mal) angeregt, gemeinsam eine einheitliche Funktionsbibliothek zu schaffen. Das halte ich für keine besonders gute Idee, weil in einer über die Jahre entwickelten eigenen Funktionsbibliothek das größte Kapital eines professionellen Programmierers steckt, und weil deshalb die Profis kaum zu so einer gemeinsamen Bibliothek beitragen werden.
[Diese Nachricht wurde von archtools am 22. Sep. 2009 editiert.]


... genau damit hast DU zur gemeinsamen und einheitlichen Funktionsbibliothek beigetragen!

... hab ich (wohlwollend) bemerkt!
... schlaf gut!

Bestes DIR ... ToXoT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Brischke
Moderator
CAD on demand GmbH




Sehen Sie sich das Profil von Brischke an!   Senden Sie eine Private Message an Brischke  Schreiben Sie einen Gästebucheintrag für Brischke

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools (d-tools.eu)

erstellt am: 25. Sep. 2009 08:52    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

Hallo,

nun kann ich nicht mehr einfach nur lesen, und muss meine Meinung dazu kundtun.

Ich werde, wie Tom auch, weder eine Funktions-Bibo nutzen, noch zum entstehen einer solchen beitragen.
Das hat aber ganz allein den Grund, dass ich mit den Ergebnissen meiner Programmierung meinen Lebensunterhalt verdiene und in diesem Zusammenhang halte ich den Kopf für jede Zeile Code hin.
Und das werde ich weiterhin für meinen selbst produzierten Schrott tun. ;-) - nicht aber für vermeintlich ausgereifte Bibo-Funktionen.

Nebenbei bemerkt: Ich habe im Laufe der Zeit meine eigene Logik in der Stückelung der Bibos entwickelt. Ich glaube kaum, dass ich einen so großen Vorteil habe, wenn ich in einer extern verwalteten Funktions-Bibo nach den Funktions-Namen und deren Verwendung suchen muss. Zudem habe ich es sehr ungern, wenn ich nicht weiß was passiert. Um diesen Punkt zu umgehen, würde ich ohnehin jede zu verwendende Funktion analysieren und prüfen müssen, was ich mir gerne auch erspare.

Für den von dir propagierten OnDemandLoader, der sicher eine pfiffige Idee ist, sehe ich auch keine wirkliche Notwendigkeit. Die Beiträg CADmiums in dem entsprechenden Thread geben so ziemlich genau auch meine Meinung wieder, weshalb ich hier auf nähere Gründe verzichte.

Grüße Holger

------------------
Holger Brischke
CAD on demand GmbH
Individuelle Lösungen von Heute auf Morgen.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

toxot
Mitglied



Sehen Sie sich das Profil von toxot an!   Senden Sie eine Private Message an toxot  Schreiben Sie einen Gästebucheintrag für toxot

Beiträge: 70
Registriert: 05.04.2009

erstellt am: 25. Sep. 2009 09:57    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

... ich versteh Eure Haltung sehr gut, da ich selbst auch in ähnlicher Lage bin und auch meine Methoden hab, mit denen ich gut zurechtkomm.

Die Logistik für eine solche Sache, die ohne Zweifel noch weit mehr Gegenargumente entkräften müßte, als Ihr erwähnt habt, wäre sicher keine Kleinigkeit.

Mir scheint auch, dass Eingefleischte nicht unbedingt die richtigen Ansprechpartner sind, obwohl sie das entsprechende know-how haben.
Ihr habt sehr viel Zeug und Eure Methoden (wie ich auch).

Die Massenträgheit und der Weg des geringsten Widerstandes gilt also auch hier.

Bestes Euch ... ToXoT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

archtools
Mitglied



Sehen Sie sich das Profil von archtools an!   Senden Sie eine Private Message an archtools  Schreiben Sie einen Gästebucheintrag für archtools

Beiträge: 823
Registriert: 09.10.2004

Entwickler für AutoCAD, BricsCAD u.a., alle Systeme

erstellt am: 25. Sep. 2009 10:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Zitat:
Original erstellt von toxot:
[i] [QUOTE]Original erstellt von archtools:
Lisp-Programmierer schaffen sich ihre eigene Welt

... schau, ich habs ja auch so gemacht ... siehe Anmerkung CadWiesel.

Aber Linux - und viele andere Beispiele - sind einen besseren Weg gegangen.
Und Du selbt? Hast Du nicht auch ........ ?
Oder liegts vielleicht daran, dass die Idee und Kombination von mir kam?
[/QUOTE]

Huch, was soll das denn jetzt? Gute Ideen übernehme ich dann, wenn ich sie gut finde und gebrauchen kann. Ich habe nun mal in 25 Jahre Lisp-Programmiererei noch nicht ein einziges Mal einen demand-loader vermisst und verwende noch nicht mal die Strukturen, die Autodesk da im Lauf der Zeit bereit gestellt hat. Ich hab' Null Probleme mit nicht-geladenen Funktionen.

Dein Code ist gut, und sicherlich auch gut geeignet als Lehrstück für Neulinge, die hier mal reinschauen. Ich selbst konnte von Deinem Code was lernen, denn ich kam noch nie auf die Idee, send-command von Reaktoren aus zu verwenden. Ich muss das noch testen, aber ich kann mir schon gut vorstellen, dass das eine Lösung für ein sehr altes Problem in meinen Programmen ist, dass nämlich der Aufruf von AutoCAD-Befehlen aus nicht-modalen Dialogen keinen Editorreaktor auslöst. Danke dafür.

Und dazu, wie LISP-Programmierer gestrickt sind, hatte ich mich ja schon ausführlich geäußert. C und C++ Programmierer der Linux-Gemeinde sind anders gestrickt. Deshalb ist Linux erfolgreich, Lisp aber nicht. Deshalb verwendet Windows BASIC als einfachste Programmiersprache für Endanwender und nicht LISP.

Zitat:

Wenn der LOADER web-fähig ist, reicht es, wenn Du blos DAS NEUE BEFEHLSWORT in Deinen Code schreibst - UND ES LÄUFT!
Oder, hatte ich mich nicht verständich ausgedrückt?

Wir sind doch alle keine kleinen Kinder, und wir verstehen sehr gut, was Dein demand-loader machen kann. Nur: ich hab' sowas noch nie vermisst. In der Lisp-Welt, die ich für mich schaffe, besteht kein Bedarf danach. Es tut mir leid um Deine schöne Idee.

Zitat:

Der Spass nimmt ZU, wenn die Sicherheit, Leistungsfähigkeit und Mächtigkeit steigt - oder?

Tja, wie gesagt: Lisp-Programmierer ticken anders. Und die Sache mit der Funktionsbibliothek scheitert nicht nur daran, sondern auch daran, dass ja LISP selbst fast nix anderes ist als eine große Lisp-Bibliotek. In einem guten Lisp-Interpreter sind mindestens 95% aller Funktionen in Lisp selbst geschrieben.

Ich will Dir was über meinen Werdegang als Programmierer erzählen: anders als die Allermeisten Lispler hier kam ich nicht über AutoCAD zu Lisp, sondern über Lisp zu AutoCAD. Mitte der 80er Jahre war meine erste Diplomarbeit ein Prolog-Programm für den automatischen Entwurf aus einem Expertensystem (konkret ging's um Operationssäle in Krankenhäusern). Der Prolog-Interpreter war in Lisp programmiert und lief unter Allegro. Ich musste also erst mal Lisp lernen, um überhaupt zu verstehen, was Prolog macht. Mein zweites Diplom anderthalb Jahre später war ebenfalls ein Prolog-Programm, das anhand einer Gestaltgrammatik (shape grammar) automatisch Grundrisse im Stil von bestimmten Architekten entworfen hat. Es muss so ungefähr 1988 gewesen sein, dass jemand bei uns eine Kopie von AutoCAD R9 vorbei brachte. Das fanden wir geil: ein Lisp-Interpreter, der nur halb so viel kostete wie Allegro, und der ein kleines CAD-System kostenfrei mitbrachte (bis dahin hatten wir die Grafik über HOOPS selber programmiert).

Was Dich daran interessieren sollte: obwohl die Lisp-Gemeinde der gesamten Welt damals noch sehr überschaubar war und man sich über das Usenet oder Compuserve gut kannte (das WWW gab's damals noch lange nicht), und obwohl sich damals absolut niemand Gedanken über Urheberrechte machte und es völlig selbstverständlich war, fremden Code in die eigenen Programme einzubauen, hat es in der weit über AutoCAD hinausreichenden Gechichte von Lisp noch nie den Versuch gegeben, so eine gemeinsame Funktionsbibliothek zu schaffen. Lispler haben an sowas kein Interesse, denn wäre das anders, dann gäbe es das schon längst.

Und noch was: mit meinem Code-Beispiel zum Funktionenüberladen habe ich keinen Beitrag zu einer gemeinsamen Bibliothek geleistet. Das ist nichts als ein schnell eingehacktes Programmbeispiel, um zu zeigen, wie sowas geht. Lisp-Neulinge können daraus lernen, wie ein Lisp-Intrepreter intern arbeitet, und z.B. auch, wie simpel getrennte Namespaces geschaffen werden können. Mein  Code ist ein Diskussionsbeitrag, aber kein Ding für eine Funktionsbibliothek. Jeder darf damit machen, was er will.

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

toxot
Mitglied



Sehen Sie sich das Profil von toxot an!   Senden Sie eine Private Message an toxot  Schreiben Sie einen Gästebucheintrag für toxot

Beiträge: 70
Registriert: 05.04.2009

erstellt am: 25. Sep. 2009 14:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für archtools 10 Unities + Antwort hilfreich

Für Archtools!

Zuerst möchte ich mich bei Dir bedanken!!!

Deine Meinung und Haltung ...

Zitat:
... wie LISP-Programmierer gestrickt ... C und C++ Programmierer der Linux-Gemeinde sind anders gestrickt. Deshalb ist Linux erfolgreich, Lisp aber nicht.

... Ok!
Vielleicht gibt es auch andere ... auch klar.

Ich werd einfach diese Sache weitertreiben oder/und in anderen Foren (wenn spruchreif) darüber berichten.

Dank Dir nochmals für die wertvollen Nachrichten und die Mühe diesbezüglich!!!

Bestes Dir ... ToXoT

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz