common-lisp
ASDF - एक और सिस्टम डेफिनेशन फैसिलिटी
खोज…
टिप्पणियों
ASDF - एक और सिस्टम डेफिनेशन फैसिलिटी
एएसडीएफ यह निर्दिष्ट करने के लिए एक उपकरण है कि कैसे कॉमन लिस्प सॉफ्टवेयर की प्रणाली घटकों (उप-प्रणालियों और फाइलों) से बनी होती है, और इन घटकों को सही क्रम में कैसे संचालित किया जाता है ताकि उन्हें संकलित, लोड, परीक्षण आदि किया जा सके।
एक फ्लैट निर्देशिका संरचना के साथ सरल एएसडीएफ प्रणाली
एक फ्लैट निर्देशिका संरचना के साथ इस सरल परियोजना पर विचार करें:
example
|-- example.asd
|-- functions.lisp
|-- main.lisp
|-- packages.lisp
`-- tools.lisp
example.asd
फ़ाइल वास्तव में सिर्फ एक और लिस्प फ़ाइल है जिसमें ASDF- विशिष्ट फ़ंक्शन कॉल की तुलना में थोड़ा अधिक है। अपने प्रोजेक्ट को मान drakma
और clsql
सिस्टम पर निर्भर करता है, इसकी सामग्री कुछ इस तरह हो सकती है:
(asdf:defsystem :example :description "a simple example project" :version "1.0" :author "TheAuthor" :depends-on (:clsql :drakma) :components ((:file "packages") (:file "tools" :depends-on ("packages")) (:file "functions" :depends-on ("packages")) (:file "main" :depends-on ("packages" "functions"))))
जब आप इस लिस्प फ़ाइल को लोड करते हैं, तो आप ASDF को अपने :example
प्रणाली के बारे में बताते हैं, लेकिन आप सिस्टम को अभी तक लोड नहीं कर रहे हैं। यह या तो (asdf:require-system :example)
(ql:quickload :example)
(asdf:require-system :example)
या (ql:quickload :example)
।
और जब आप सिस्टम को लोड करते हैं, तो ASDF होगा:
- निर्भरताएँ लोड करें - इस मामले में ASDF सिस्टम
clsql
औरdrakma
- अपने सिस्टम के घटकों को संकलित करें और लोड करें , अर्थात दी गई निर्भरता के आधार पर लिस्प फाइलें
- पहले
packages
(कोई निर्भरता नहीं) -
packages
बादfunctions
(क्योंकि यह केवलpackages
पर निर्भर करताpackages
), लेकिनmain
से पहले (जो इस पर निर्भर करता है) -
main
functions
बाद (क्योंकि यहpackages
औरfunctions
पर निर्भर करताfunctions
) -
tools
packages
बाद कभी भी
- पहले
याद रखो:
- निर्भरता दर्ज करें जैसे कि वे आवश्यक हैं (उदाहरण के लिए उपयोग करने से पहले स्थूल परिभाषाएं आवश्यक हैं)। यदि आप नहीं करते हैं, तो ASDF आपके सिस्टम को लोड करते समय त्रुटि करेगा।
- सूचीबद्ध सभी फाइलें
.lisp
पर समाप्त.lisp
लेकिन इस पोस्टफिक्स को asdf स्क्रिप्ट में छोड़ दिया जाना चाहिए - यदि आपके सिस्टम को इसकी
.asd
फ़ाइल के रूप में नाम दिया गया है, और आप अपने फ़ोल्डर को (या सिमिलिंक) उसके फ़ोल्डर कोquicklisp/local-projects/
फ़ोल्डर में ले जाते हैं, तो आप प्रोजेक्ट का उपयोग कर लोड कर सकते हैं(ql:quickload "example")
। - आपके सिस्टम पर निर्भर करता है पुस्तकालयों को या तो ASDF (ASDF के माध्यम से जाना जाता है
ASDF:*CENTRAL-REGISTRY
QUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*
चर) याQUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*
(या तोQUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*
माध्यम से)QUICKLISP-CLIENT:*LOCAL-PROJECT-DIRECTORIES*
चर या इसके किसी भी प्रकार में उपलब्ध है।
सिस्टम के लिए परीक्षण ऑपरेशन को कैसे परिभाषित किया जाए
(in-package #:asdf-user)
(defsystem #:foo
:components ((:file "foo"))
:in-order-to ((asdf:test-op (asdf:load-op :foo)))
:perform (asdf:test-op (o c)
(uiop:symbol-call :foo-tests 'run-tests)))
(defsystem #:foo-tests
:name "foo-test"
:components ((:file "tests")))
;; Afterwards to run the tests we type in the REPL
(asdf:test-system :foo)
टिप्पणियाँ:
- हम यह मान रहे हैं कि प्रणाली : foo- परीक्षण "FOO-TESTS" नामक एक पैकेज को परिभाषित करता है
-
run-tests
, टेस्ट रनर के लिए प्रवेश बिंदु है - uoip: प्रतीक-कॉल एक विधि को परिभाषित करने की अनुमति देता है जो एक फ़ंक्शन को कॉल करता है जो अभी तक पढ़ा नहीं गया है। जब हम सिस्टम को परिभाषित करते हैं तो फंक्शन को जिस पैकेज में परिभाषित किया जाता है वह मौजूद नहीं होता है
मुझे अपने ASDF सिस्टम को किस पैकेज में परिभाषित करना चाहिए?
ASDF अपने पैकेज को परिभाषित करने के लिए डेवलपर्स के लिए ASDF-USER
पैकेज प्रदान करता है।