2011-12-18 17 views
14

Arc का लाभ Racket के शीर्ष पर बनाया गया है। चूंकि वे दोनों लिस्प परिवार में हैं, इसलिए मैं रैकेट के ऊपर आर्क के लाभ के बारे में उत्सुक हूं, या रैकेट उपलब्ध है कि आर्क बनाने की प्रेरणा क्या है?आर्क ओवर रैकेट

+7

पायथन "सी के शीर्ष पर" बनाया गया है, तो सी पर पायथन का क्या फायदा है? अंतर्निहित भाषा, जब तक यह खुलासा न हो, "शीर्ष स्तर" की शक्ति के लिए कम प्रासंगिकता है। – drysdam

+11

मुझे संदेह है कि कोई भी योजना है - योजनाएं चीजों को करने के लिए पुस्तकालयों के साथ एक प्रसिद्ध, काफी लोकप्रिय भाषा है, जबकि आर्क एक ऐसे व्यक्ति से वैनिटी प्रोजेक्ट है जिसने प्रारंभिक वेब स्टोर बनाया है। – Marcin

+1

ऐसा लगता है कि एक पूरी तरह से अलग भाषा के साथ एक डीएसएल की तुलना करने के लिए मूर्खतापूर्ण लगता है। उदाहरण के लिए, मैं "लिफ्टवेब * या * स्कैला" या "समुद्रतट * या * स्मॉलटाक" या "सिनात्रा * या * रूबी" नहीं कहूंगा। (अनुमोदित लिस्प फॉर्म वास्तव में भेद को धुंधला कर सकते हैं।) –

उत्तर

21

लेखन अपनी खुद की भाषा है, एक अर्थ में, सशक्त बनाने: आप क्या पुरातन, क्या भाव के प्रकार, उस भाषा में लिखने के लिए सुविधाजनक हैं चुनने के लिए मिलता है। इस अर्थ में, आप On Lisp जैसी पुस्तक देख सकते हैं और देख सकते हैं कि आर्क के मूल लेखकों की एक मजबूत राय है कि वे किसी भाषा से किस तरह की चीजें चाहते हैं।

अगर मैं अपने प्रश्न लेने के लिए और अनिवार्य करने के लिए इसे नीचे उबाल, यह इस तरह लगता है: क्यों लोग डोमेन विशिष्ट भाषाओं लिखना चाहिए?

(यह विचार करने के लिए एक अलग सवाल है कि आर्क लोगों को अपने स्वयं के मैक्रो और मॉड्यूल सिस्टम जैसे कई प्राचीन सुविधाओं को दोबारा लागू करना चाहिए था, जब रैकेट में पहले से ही इस तरह के तंत्र बना चुके हैं। लेकिन आर्क लेखक पूरी तरह से भीतर हैं अपने अधिकारों को फिर से आविष्कार करने के लिए)

मैं आपत्तियों मैं आर्क करने के लिए है में से एक अनुमान यह है:। जिस तरह से वे आधिकारिक क्रम को क्रियान्वित किया है यह मुश्किल काम वे वापस सादे रैकेट को किया है पुन: उपयोग करने में आता है। इस अर्थ में, यह प्रयास है जो केवल एक समुदाय की सहायता करता है, जबकि आर्क लोगों के काम से आसानी से लाभ उठाने में सक्षम होना अच्छा होता।

16

रैकेट एक योजना बोली है जबकि आर्क नहीं है। हालांकि वे दोनों LISP बोलियां हैं। आर्क कोष्ठक की मात्रा कम कर देता है और कोड आकार में सामान्य सामान को कम करने के लिए वाक्यविन्यास में निर्मित कुछ फैंसी है। उदाहरण:

;; scheme 
(if p1 c1 
    (if p2 c2 
     (if p3 c3 a3))) 

;; arc simplifies if 
(if p1 c1 
    p2 c2 
    p3 c3 
     a3) 

;; scheme 
(f1(f2(f3 a b))) 

;; arc simplifies cascading calls 
(f1:f2:f3 a b) 

;; scheme 
(lambda (x) (+ x x)) 

;; arc simplified one argument anonymous functions 
[+ _ _ ] 

;; scheme array access 
(vector-ref v1 5) 

;; arc simplifies array access 
(v1 5) 

आप एक दूसरे को चुन सकते हैं। व्यक्तिगत रूप से मुझे आर्क सिंटैक्स पसंद है लेकिन यह तथ्य नहीं है कि इसे एक दुभाषिया के रूप में लागू किया गया है। काश है कि उन्होंने आर्क को रैकेट मॉड्यूल भाषा के रूप में लागू किया था, तब से आप वास्तव में ड्रैकेट, डीबग और निष्पादन योग्य बना सकते हैं। यह आर्क में या इसके विपरीत रैकेट पुस्तकालय बनाने की अनुमति भी दे सकता है।

यदि आप संगत कोड बनाना चाहते हैं तो आपको अधिक सख्त होना चाहिए और रैकेट डिफ़ॉल्ट भाषा या चाप का उपयोग करने से R6RS/R5RS का उपयोग करना चाहिए, तब से आपके पास कोड हो सकता है जिसे आप रैकेट से अधिक पर चला सकते हैं। रैकेट में आप R5RS चुन सकते हैं या मानक को मजबूर करने के लिए कोड में पहली पंक्ति के रूप में #! R6RS का उपयोग कर सकते हैं। दोनों मामलों में परिणाम अन्य कार्यान्वयन/कंपाइलरों के तहत चलाने में सक्षम हो जाएगा।

+1

मैं रैकेट के लिए उस पहले मामले के लिए कंड के बारे में कुछ कहूंगा। '(कंड (पी 1 सी 1) (पी 2 सी 2) (पी 3 सी 3) (# टी सी 4)) 'थोड़ा अधिक तुलनात्मक तुलना है। –

संबंधित मुद्दे