| |  | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | |  | NVIDIA GTC Paris und ISC High Performance-Konferenz 2025, eine Pressemitteilung
|
Autor
|
Thema: autoload versus (defun prog () load prog)) (1740 mal gelesen)
|
Peter2 Ehrenmitglied V.I.P. h.c.

 Beiträge: 3882 Registriert: 15.10.2003 Win 10 bzw. 11 / 64 Pro AutoCAD MAP 3D 2023 BricsCAD 24
|
erstellt am: 22. Nov. 2004 18:04 <-- editieren / zitieren --> Unities abgeben:         
Mir sind zwei Methoden bekannt, Lisp-Programme bei Bedarf zu laden: 1) die Verwendung von "Autoload" Beispiel: (autoload "ddvpoint" '("ddvpoint")) 2) ein immer mitgeladenes "mini-defun", welches das gleichnamige Programm lädt und startet: (defun c:myprog () (load "myprog") (c:myprog) ) ; ende defun Technisch sind mir beide Versionen klar, aber ich frage mich, was die jeweiligen Vor- und Nachteile dieser Lösungen sind. Schönen Abend Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Proxy Ehrenmitglied Stateless-DHCP v6-Paketfragmentierer
    
 Beiträge: 1629 Registriert: 13.11.2003 Tastaturen, Mäuse, Pladden, ..., AutoCADs 200X, SWX 2kX
|
erstellt am: 22. Nov. 2004 20:12 <-- editieren / zitieren --> Unities abgeben:          Nur für Peter2
AutoLoad geht in Verbindung mit der Windows Registry und nur einmal pro session innerhalb der Zeichnung, mit (manuellnachloaden mit (defun ... ) ist etwas solala da du keine Prüfung machst ob es bereits geladen ist, daher ist es bei unsauberer gemachten Lisps etwas heikel wenn z.B. inenrhalb der Lisp ein DCL eingebaut worden ist. The AutoLISP autoload function makes a command available without loading the entire routine into memory. steht in der Hilfe, dürfte nun der grösste Unterschied festgestellt sein. In Verbindung mit VBA ist da grösste orsicht geboten da der Speicher schnell einem flötten geht. ------------------ "Lisp?!?! Why the Hell did you pick the most arcane, obscure, and hopelessly-rooted-in-the-computer-science-department language in the world for an AutoCAD programming language?" Read the whole story: The Autodesk File ca. 890 Seiten | 7500 KB PDF Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.

 Beiträge: 3882 Registriert: 15.10.2003 Win 10 bzw. 11 / 64 Pro AutoCAD MAP 3D 2023 BricsCAD 24
|
erstellt am: 22. Nov. 2004 20:26 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von Proxy: AutoLoad geht in Verbindung mit der Windows Registry und nur einmal pro session innerhalb der Zeichnung, The AutoLISP autoload function makes a command available without loading the entire routine into memory. steht in der Hilfe, dürfte nun der grösste Unterschied festgestellt sein. In Verbindung mit VBA ist da grösste orsicht geboten da der Speicher schnell einem flötten geht.
Ich verstehe es nicht ganz - kannst du das bitte nochmals erklären? Danke Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) [Diese Nachricht wurde von Peter2 am 22. Nov. 2004 editiert.] [Diese Nachricht wurde von Peter2 am 22. Nov. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
CADchup Ehrenmitglied V.I.P. h.c.

 Beiträge: 3338 Registriert: 14.03.2001 Sicher ist, dass nichts sicher ist. Selbst das nicht. Joachim Ringelnatz
|
erstellt am: 22. Nov. 2004 20:45 <-- editieren / zitieren --> Unities abgeben:          Nur für Peter2
Hi, sieh' es einfach so: Mit (autoload) wird die Funktion erst geladen, wenn Du sie zum ersten Mal innerhalb der Acad-Session brauchst. Alle anderen Varianten laden die Funktion immer am Anfang einer Session, obwohl Du sie mitunter gar nicht benutzen wirst. Gruß CADchup
------------------ www.cadditions.de Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 22. Nov. 2004 23:43 <-- editieren / zitieren --> Unities abgeben:          Nur für Peter2
ich möchte mal aufräumen mit dem weitverbreiteten Irrtum, dass (load ...) irgendwelche Programme lädt. Das kann so sein, muss aber nicht. Die Funktion (load...) macht lediglich eines: Sie evaluiert einen bzw. mehrere Ausdrücke, die in einer Datei stehen! Macht mal einen kleinen Test - schreibt mal diese Zeichenkette in eine Datei: "qig wdkls jhfö özfufzh fw zfwz" Mit den Anführungszeichen! - dann als "test.lsp" abspeichern. Dann gebt ihr (setq var(load"test")) auf der Kommandozeile ein und seht, dass jetzt var den Inhalt "qig wdkls jhfö özfufzh fw zfwz" hat. Das hat doch absolut nichts mit Funktionen zu tun, oder? Aussagen wie "Alle anderen Varianten laden die Funktion immer am Anfang einer Session, obwohl Du sie mitunter gar nicht benutzen wirst" sind per se erstmal falsch - wer will denn schon wissen, was in den mit (load) geladenenen Ausdrücken drinsteht? Schon wenn man diesen Code hier abändert: (defun c:myprog () (load "myprog") (c:myprog) ) etwas abändert: (defun c:myprog () (if null *myProgLoaded*(load "myprog")) (c:myprog) ) sieht die Sache völlig anders aus. Die globale Variable *myProgLoaded* zeigt dabei an, ob nur der Stub oder oder das Programm geladen wurde. Im alten AutoLisp war das alles noch einfacher, da hätte man z.B. über (length c:myprog) feststellen können, ob's der Stub oder das Programm ist. Die Alternative ist nicht "Autoload" vs. "Was anderes". Der gesamte Autoload-Mechanismus ist nur eine Möglichkeit von vielen, wie man so einen Mechanismus implementieren kann. Aber jeder kann sich was besseres schreiben. Gruß, Axel Strube-Zettler ------------------ (defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Peter2 Ehrenmitglied V.I.P. h.c.

 Beiträge: 3882 Registriert: 15.10.2003 Win 10 bzw. 11 / 64 Pro AutoCAD MAP 3D 2023 BricsCAD 24
|
erstellt am: 22. Nov. 2004 23:50 <-- editieren / zitieren --> Unities abgeben:         
Zitat: Original erstellt von mapcar: Die Alternative ist nicht "Autoload" vs. "Was anderes". Der gesamte Autoload-Mechanismus ist nur eine Möglichkeit von vielen, wie man so einen Mechanismus implementieren kann. Aber jeder kann sich was besseres schreiben.
Und was ist nun "was besseres"? Peter ------------------ Für jedes Problem gibt es eine einfache Lösung. Die ist aber meistens falsch. ;-) Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |

| |
mapcar Mitglied CADmin

 Beiträge: 1250 Registriert: 20.05.2002 Time flies like an arrow, fruit flies like a banana (Groucho Marx)
|
erstellt am: 23. Nov. 2004 21:10 <-- editieren / zitieren --> Unities abgeben:          Nur für Peter2
Peter, letztendlich bleibt das jedem selber überlassen. Ich handhabe das meist so, dass meine komplexeren Programme aus einer User-Interface-Funktion bestehen, die immer geladen ist, etwa so: (defun c:hauptprogramm( / aufgabe param) (setq aufgabe <user-input auswerten> param <user-input auswerten> ) (cond ( (= aufgabe 'dieses) (if(null dieses(load"dieses.lsp"))) (dieses param) ; (setq dieses nil) ) ( (= aufgabe 'jenes) (if(null jenes(load"jenes.lsp"))) (jenes param) ; (setq jenes nil) ) ) ) Das setzt sich dann oft fort, d.h. in "dieses" oder "jenes" werden dann wieder Teile nachgeladen, falls sie benötigt werden. Die Darstellung ist natürlich stark vereinfacht, ind der Praxis gibt es natürlich mehr als einen Parameter usw. <user-input> kann eine Dialog oder die Summe der Kommandozeileneingaben sein. Wie gesagt, Geschmackssache. Ich nehme diesen Weg, weil er direkt im Programm implementiert wird, ich muss mich also nicht mit zusätzlichen Dateien usw. befassen, und meine Registry von 200MB (?) macht mir sowieso Sorgen;-) Das Programm selbst muss ich natürlich entweder mit load laden oder in die acad.lsp eintrage, aber ganz ohne einen Eintrag geht ja autoload auch nicht. Gruß, Axel Strube-Zettler ------------------ (defun - Lisp over night - AutoLisp-Programmierung für AutoCad - Da weiß man, wann man's hat Meine AutoLisp-Seiten Mein Angriff auf dein Zwerchfell Mein Lexikon der Fotografie Mein gereimtes Gesülze [Diese Nachricht wurde von mapcar am 23. Nov. 2004 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
 |