बीसीपीएल

BCPL (बेसिक कंबाइंड प्रोग्रामिंग लैंग्वेज) एक प्रक्रियात्मक प्रोग्रामिंग, अनिवार्य प्रोग्रामिंग और संरचित प्रोग्रामिंग प्रोग्रामिंग भाषा है। मूल रूप से अन्य भाषाओं के लिए संकलक लिखने का इरादा है, बीसीपीएल अब आम उपयोग में नहीं है। हालाँकि, इसका प्रभाव अभी भी महसूस किया जाता है क्योंकि BCPL का एक स्ट्रिप्ड डाउन और सिंटैक्टिक रूप से परिवर्तित संस्करण, जिसे B (प्रोग्रामिंग लैंग्वेज) कहा जाता है, वह भाषा थी जिस पर C (प्रोग्रामिंग लैंग्वेज) आधारित थी। बीसीपीएल ने कोड ब्लॉक को सीमित करने के लिए [[बी (प्रोग्रामिंग भाषा)]] का उपयोग करने सहित कई आधुनिक प्रोग्रामिंग भाषाओं की कई विशेषताएं पेश कीं। BCPL को पहली बार 1967 में कैम्ब्रिज विश्वविद्यालय के मार्टिन रिचर्ड्स (कंप्यूटर वैज्ञानिक) द्वारा लागू किया गया था।

डिजाइन
बीसीपीएल को डिजाइन किया गया था ताकि इसके लिए छोटे और सरल संकलक लिखे जा सकें; प्रतिष्ठित रूप से कुछ संकलक 16 किलोबाइट में चलाए जा सकते हैं। इसके अलावा, बीसीपीएल में लिखा गया मूल संकलक आसानी से पोर्टेबल था। इस प्रकार बीसीपीएल बूटस्ट्रैपिंग (संकलक) प्रणाली के लिए एक लोकप्रिय विकल्प था। कंपाइलर की सुवाह्यता का एक प्रमुख कारण इसकी संरचना में निहित है। इसे दो भागों में विभाजित किया गया था: फ्रंट एंड ने स्रोत को पार्स किया और एक मध्यवर्ती भाषा ओ-कोड उत्पन्न किया। बैक एंड ने ओ-कोड लिया और लक्ष्य मशीन के लिए मशीन कोड में इसका अनुवाद किया। केवल $1/undefined$ एक नई मशीन का समर्थन करने के लिए संकलक के कोड को फिर से लिखने की आवश्यकता होती है, एक कार्य जो आमतौर पर 2 और 5 व्यक्ति-महीने के बीच होता है। व्यक्ति-महीने। यह दृष्टिकोण बाद में आम चलन बन गया (जैसे पास्कल (प्रोग्रामिंग भाषा), जावा (प्रोग्रामिंग भाषा))।

केवल एक डेटा प्रकार होने में भाषा असामान्य है: एक शब्द (कंप्यूटर आर्किटेक्चर), बिट्स की एक निश्चित संख्या, जिसे आमतौर पर आर्किटेक्चर के मशीन शब्द के साथ संरेखित करने के लिए चुना जाता है और किसी वैध भंडारण पते का प्रतिनिधित्व करने के लिए पर्याप्त क्षमता होती है। उस समय की कई मशीनों के लिए, यह डेटा प्रकार 16-बिट शब्द था। यह विकल्प बाद में एक महत्वपूर्ण समस्या साबित हुआ जब बीसीपीएल का उपयोग मशीनों पर किया गया था जिसमें सबसे छोटी पता योग्य वस्तु एक शब्द नहीं बल्कि एक बाइट थी या 32-बिट या 64-बिट जैसे बड़े शब्द आकार वाली मशीनों पर। मूल्यों को संसाधित करने के लिए उपयोग किए जाने वाले ऑपरेटरों द्वारा किसी भी मूल्य की व्याख्या निर्धारित की गई थी। (उदाहरण के लिए,  दो मानों को एक साथ जोड़ा, उन्हें पूर्णांक मानते हुए;   एक मूल्य के माध्यम से अप्रत्यक्ष रूप से, प्रभावी रूप से इसे एक संकेतक के रूप में माना जाता है।) इसके काम करने के लिए, कार्यान्वयन ने कोई प्रकार की जाँच नहीं की।

बीसीपीएल के वर्ड ओरिएंटेशन और बाइट एड्रेसिंग | बाइट-ओरिएंटेड हार्डवेयर के बीच बेमेल को कई तरीकों से संबोधित किया गया था। एक बाइट स्ट्रिंग्स में शब्दों को पैक करने और अनपैक करने के लिए मानक लाइब्रेरी रूटीन प्रदान करना था। बाद में, दो भाषा सुविधाओं को जोड़ा गया: बिट-फ़ील्ड चयन ऑपरेटर और इंफिक्स बाइट इंडिकेशन ऑपरेटर (द्वारा चिह्नित) ). बीसीपीएल अलग-अलग संकलन इकाइयों में फैले बाइंडिंग को एक अनोखे तरीके से संभालता है। कोई उपयोगकर्ता-घोषित वैश्विक चर नहीं हैं; इसके बजाय, फोरट्रान में रिक्त आम के समान एक वैश्विक वेक्टर है। विभिन्न संकलन इकाइयों के बीच साझा किए गए सभी डेटा में वैश्विक वेक्टर में पूर्व-व्यवस्थित स्थान पर संग्रहीत वेक्टर के लिए स्केलर और पॉइंटर्स शामिल हैं। इस प्रकार, हेडर फाइलें (जीईटी निर्देश का उपयोग करते हुए संकलन के दौरान शामिल फाइलें) संकलन इकाइयों के बीच वैश्विक डेटा को सिंक्रनाइज़ करने का प्राथमिक साधन बन जाती हैं, जिसमें वैश्विक निर्देश होते हैं जो प्रतीकात्मक नामों की सूची प्रस्तुत करते हैं, प्रत्येक को एक संख्या के साथ जोड़ा जाता है जो नाम को संबंधित संख्यात्मक रूप से जोड़ता है वैश्विक वेक्टर में संबोधित शब्द। साथ ही चर, वैश्विक वेक्टर में बाहरी प्रक्रियाओं के लिए बाइंडिंग शामिल हैं। यह संकलन इकाइयों की गतिशील लोडिंग को प्राप्त करना बहुत आसान बनाता है। अंतर्निहित कार्यान्वयन के लिंक लोडर पर भरोसा करने के बजाय प्रभावी रूप से, बीसीपीएल प्रोग्रामर को लिंकिंग प्रक्रिया का नियंत्रण देता है। वैश्विक वेक्टर ने मानक लाइब्रेरी रूटीन को बदलना या बढ़ाना भी बहुत आसान बना दिया है। एक प्रोग्राम पॉइंटर को वैश्विक वेक्टर से मूल दिनचर्या में सहेज सकता है और इसे पॉइंटर के साथ वैकल्पिक संस्करण में बदल सकता है। विकल्प मूल को इसके प्रसंस्करण के हिस्से के रूप में कह सकता है। यह एक त्वरित तदर्थ डिबगिंग सहायता के रूप में इस्तेमाल किया जा सकता है। बीसीपीएल पहली ब्रेस प्रोग्रामिंग भाषा थी और ब्रेसिज़ सिंटैक्टिकल परिवर्तनों से बच गए और प्रोग्राम सोर्स कोड स्टेटमेंट्स को निरूपित करने का एक सामान्य साधन बन गए। व्यवहार में, दिन के सीमित कीबोर्ड पर, स्रोत प्रोग्राम अक्सर अनुक्रमों का उपयोग करते थे  और   प्रतीकों के स्थान पर   और. सिंगल-लाइन  बीसीपीएल की टिप्पणी (कंप्यूटर प्रोग्रामिंग), जो सी (प्रोग्रामिंग भाषा) द्वारा नहीं अपनाई गई थी, सी ++ और बाद में सी99 में फिर से प्रकट हुई।

पुस्तक बीसीपीएल: द लैंग्वेज एंड इट्स कंपाइलर बीसीपीएल के दर्शन का वर्णन इस प्रकार करती है: "The philosophy of BCPL is not one of the tyrant who thinks he knows best and lays down the law on what is and what is not allowed; rather, BCPL acts more as a servant offering his services to the best of his ability without complaint, even when confronted with apparent nonsense. The programmer is always assumed to know what he is doing and is not hemmed in by petty restrictions."

इतिहास
BCPL को पहली बार 1967 में कैम्ब्रिज विश्वविद्यालय के मार्टिन रिचर्ड्स (कंप्यूटर वैज्ञानिक) द्वारा लागू किया गया था। बीसीपीएल अपने पूर्ववर्ती, कैम्ब्रिज प्रोग्रामिंग लैंग्वेज, जिसे बाद में संयुक्त प्रोग्रामिंग भाषा (सीपीएल) का नाम दिया गया था, के साथ कठिनाइयों का जवाब था, जिसे 1960 के दशक की शुरुआत में डिजाइन किया गया था। रिचर्ड्स ने पूर्ण भाषा की उन विशेषताओं को हटाकर बीसीपीएल बनाया जो संकलन को कठिन बनाते हैं। संगत समय-साझाकरण प्रणाली के तहत आईबीएम 7094 के लिए पहला कंपाइलर कार्यान्वयन, तब लिखा गया था जब रिचर्ड्स 1967 के वसंत में मैसाचुसेट्स की तकनीकी संस्था में प्रोजेक्ट मैक का दौरा कर रहे थे। भाषा को पहली बार 1969 के स्प्रिंग जॉइंट को प्रस्तुत एक पेपर में वर्णित किया गया था। कंप्यूटर सम्मेलन। बीसीपीएल मूल रूप से बूटस्ट्रैप कैम्ब्रिज प्रोग्रामिंग लैंग्वेज के लिए खड़ा होने की अफवाह है, लेकिन बीसीपीएल में विकास बंद होने के बाद से सीपीएल कभी नहीं बनाया गया था, और बाद में बीसीपीएल पुस्तक के लिए संक्षिप्त नाम की पुनर्व्याख्या की गई थी। बीसीपीएल वह भाषा है जिसमें मूल हैलो वर्ल्ड प्रोग्राम| हैलो वर्ल्ड! कार्यक्रम लिखा गया था। पहला MUD ​​भी BCPL (MUD1) में लिखा गया था।

BCPL में टेनेक्स ([[ऑपरेटिंग सिस्टम)]] आंशिक या पूर्ण रूप से लिखे गए थे (उदाहरण के लिए, TRIPOS और AmigaDOS के शुरुआती संस्करण)। बीसीपीएल मौलिक ज़ेरॉक्स PARC ऑल्टो (कंप्यूटर) परियोजना में इस्तेमाल की जाने वाली प्रारंभिक भाषा भी थी, पहला आधुनिक निजी कंप्यूटर; अन्य परियोजनाओं के बीच, बीसीपीएल में ब्रावो (सॉफ्टवेयर) शब्द संसाधक लिखा गया था।

रिचर्ड्स के टाइटन (1963 कंप्यूटर) कंपाइलर के ओ-कोड के एक पेपर टेप के साथ शुरू करके, 1969 में बूटस्ट्रैप किए गए एक शुरुआती कंपाइलर ने ICT 1900 श्रृंखला को लक्षित किया। दो मशीनों में अलग-अलग शब्द-लंबाई (48 बनाम 24 बिट्स), अलग-अलग वर्ण एन्कोडिंग और अलग-अलग पैक्ड स्ट्रिंग प्रस्तुतियां थीं- और सफल बूटस्ट्रैपिंग ने विधि की व्यावहारिकता में विश्वास बढ़ाया।

1970 के अंत तक, GE-600 श्रृंखला, IBM 360, PDP-10, TX-2, CDC 6400, UNIVAC 1108, PDP-9, KDF 9 और एटलस 2 के लिए कार्यान्वयन मौजूद थे। 1974 में BBN में BCPL की एक बोली लागू की गई थी। इंटरमीडिएट ओ-कोड का उपयोग किए बीबीएन टेक्नोलॉजीज प्रारंभिक कार्यान्वयन BBN के TENEX (ऑपरेटिंग सिस्टम) PDP-10s पर होस्ट किया गया एक पार संकलक था, और ARPANET में प्रयुक्त दूसरी पीढ़ी के इंटरफ़ेस संदेश प्रोसेसर के BBN के कार्यान्वयन में उपयोग किए गए PDP-11s को सीधे लक्षित करता था।

1980 के दशक के मध्य में बीबीसी माइक्रो के लिए रिचर्ड्स कंप्यूटर प्रोडक्ट्स द्वारा निर्मित एक संस्करण भी था, जो मार्टिन रिचर्ड्स के भाई जॉन रिचर्ड्स द्वारा शुरू की गई कंपनी थी। बीबीसी डोमेसडे प्रोजेक्ट ने भाषा का इस्तेमाल किया। Amstrad CPC और Amstrad PCW कंप्यूटर के लिए BCPL के संस्करण भी 1986 में यूके सॉफ्टवेयर हाउस अर्नोर लिमिटेड द्वारा जारी किए गए थे। MacBCPL को 1985 में केंसिंग्टन, इंग्लैंड के Topexpress Ltd द्वारा Apple Macintosh के लिए जारी किया गया था।

बीसीपीएल के डिजाइन और दर्शन दोनों ने बी (प्रोग्रामिंग भाषा) को दृढ़ता से प्रभावित किया, जिसने बदले में सी (प्रोग्रामिंग भाषा) को प्रभावित किया। उस समय प्रोग्रामरों ने इस बात पर बहस की कि क्या C के अंतिम उत्तराधिकारी को D कहा जाएगा, वर्णमाला में अगला अक्षर, या P, मूल भाषा के नाम का अगला अक्षर। सी के उत्तराधिकारी के रूप में स्वीकृत भाषा सी ++ (के साथ  सी के वेतन वृद्धि ऑपरेटर होने के नाते), हालाँकि इस बीच, एक D (प्रोग्रामिंग भाषा) प्रोग्रामिंग भाषा भी मौजूद है।

1979 में, कम से कम 25 आर्किटेक्चर के लिए बीसीपीएल का कार्यान्वयन मौजूद था; गैर-यूनिक्स प्रणालियों पर सी के लोकप्रिय होते ही भाषा धीरे-धीरे लोकप्रिय हो गई।

मार्टिन रिचर्ड्स अपनी वेबसाइट पर बीसीपीएल का एक आधुनिक संस्करण बनाए रखते हैं, जिसे आखिरी बार 2018 में अपडेट किया गया था। इसे लिनक्स, फ्रीबीएसडी और मैक ओएस एक्स सहित विभिन्न प्रणालियों पर चलाने के लिए सेट किया जा सकता है। नवीनतम वितरण में ग्राफिक्स और साउंड लाइब्रेरी शामिल हैं, और एक है व्यापक मैनुअल। वह इसमें प्रोग्राम करना जारी रखता है, जिसमें म्यूजिकल ऑटोमेटेड स्कोर निम्नलिखित पर अपने शोध के लिए भी शामिल है।

बीसीपीएल के लिए एक सामान्य अनौपचारिक मीडिया प्रकार है text/x-bcpl.

उदाहरण
यदि ये प्रोग्राम रिचर्ड्स के Cintsys के वर्तमान संस्करण (दिसंबर 2018) का उपयोग करके चलाए जा रहे हैं, तो त्रुटियों से बचने के लिए LIBHDR, START और WRITEF को लोअर केस में बदला जाना चाहिए।

प्रिंट भाज्य:  LIBHDR प्राप्त करें

एलईटी स्टार्ट = वैलोफ $ ( I के लिए = 1 से 5 DO WRITEF(%N! =%I4*N, I, FACT(I)) परिणाम 0 $)

AND FACT(N) = N = 0 -> 1, N * FACT(N - 1) 

आठ रानियों की पहेली के हल गिनें:  LIBHDR प्राप्त करें

वैश्विक $( गिनती: 200 सब: 201 $)

आइए कोशिश करें (एलडी, पंक्ति, आरडी) बीई टेस्ट पंक्ति = सभी काउंट := काउंट + 1 अन्य $( एलईटी पॉस = सभी और ~ (एलडी | पंक्ति | आरडी) पोस तक = 0 DO $( एलईटी पी = पोस और -पॉस पोस := पोस - प कोशिश (एलडी + पी << 1, पंक्ति + पी, आरडी + पी >> 1) $) $)

एलईटी स्टार्ट = वैलोफ $ ( सब := 1 I के लिए = 1 से 12 DO $( काउंट := 0 कोशिश (0, 0, 0) WRITEF(%I2-क्वींस समस्या में%I5 समाधान*N, I, काउंट है) सब := 2 * सब + 1 $) परिणाम 0 $) 

अग्रिम पठन

 * Martin Richards, The BCPL Reference Manual (Memorandum M-352, Project MAC, Cambridge, MA, USA, July, 1967)
 * Martin Richards, BCPL - a tool for compiler writing and systems programming (Proceedings of the Spring Joint Computer Conference, Vol 34, pp 557–566, 1969)
 * Martin Richards, Arthur Evans, Robert F. Mabee, The BCPL Reference Manual (MAC TR-141, Project MAC, Cambridge, MA, USA, 1974)
 * Martin Richards, Colin Whitby-Strevens, BCPL, the language and its compiler (Cambridge University Press, 1980) ISBN 0-521-28681-6

बाहरी संबंध

 * Martin Richards' BCPL distribution
 * Martin Richards' BCPL Reference Manual, 1967 by Dennis M. Ritchie
 * BCPL entry in the Jargon File
 * Nordier & Associates' x86 port
 * ArnorBCPL manual
 * How BCPL evolved from CPL, Martin Richards
 * Ritchie's The Development of the C Language has commentary about BCPL's influence on C
 * The BCPL Cintsys and Cintpos User Guide