Build your own lisp using C – part 1

அசல் புத்தக இணைப்பு: buildyourownlisp.com/

மொழிபெயர்த்தது தங்க அய்யனார்

அத்தியாயம் 1 – அறிமுகம்

புத்தகத்தை பற்றி
இந்தப் புத்தகத்தில் நீங்கள் சி(C) நிரலாக்க மொழியைக்(Programming language) கற்றுக்கொள்வீர்கள், அதே நேரத்தில் ~உங்கள் சொந்த நிரலாக்க மொழி~, சிறிய லிஸ்ப்(LISP), 1000 வரிகளுக்குக் கீழ் எவ்வாறு உருவாக்குவது என்பதை அறிந்து கொள்வீர்கள்!ஆரம்பத்தில் சிலவற்றைச் செய்ய நாம் ஒரு நூலகத்தைப்(library) பயன்படுத்துவோம், எனவே வரி எண்ணிக்கையில் நான் கொஞ்சம் ஏமாற்றுகிறேன், ஆனால் மீதமுள்ள நிரல் முற்றிலும் அசலாக இருக்கும், மேலும் நீங்கள் உண்மையிலேயே சக்திவாய்ந்த சிறிய லிஸ்ப்பை உருவாக்குவீர்கள்.

இந்த புத்தகம் நிரலாக்க மொழியை எப்படி அடிப்படையில் இருந்து உருவாக்குவது என்று எழுதப்பட்டப் பிற கட்டுரையால் ஊக்கம் பெற்றுவுள்ளது, இந்த வகையான வேடிக்கையான மற்றும் ஆக்கபூர்வமான செயல்திட்டம்(project) ஒரு மொழியைக் கற்றுக்கொள்வதற்கான சிறந்த வழியாகும் என்பதைக் காட்ட இந்த புத்தகத்தை எழுதினேன் மற்றும் சுருக்கமான உயர்நிலை மொழிகள்(Abstract high-level language) அல்லது அனுபவம் வாய்ந்த நிரலாளர்(Programmer) மட்டும் அல்ல.

பலர் சி(C) கற்றுக்கொள்ள ஆர்வமாக உள்ளனர், ஆனால் எப்படி ஆரம்பிப்பது என்று தெரியவில்லை. இனிமேல் அந்த சாக்கு இல்லை. நீங்கள் இந்த புத்தகத்தை பின்பற்றினால் நான் உறுதியளிக்க முடியும் நீங்கள் ஒரு அனுபவமிக்க சி நிரலாளராக மாறுவீர்கள் என்று நம்புகிறேன்! அல்லது நீங்கள் விளையாடுவதற்கு ஒரு புதிய நிரலாக்க மொழியைப் பெறுவீர்கள்.

இது யாருக்காக

இந்தப் புத்தகம் சி கற்க விரும்பும் எல்லோருக்கும் அல்லது தங்கள் சொந்த நிரலாக்க மொழியை எவ்வாறு உருவாக்குவது என்று ஒருமுறையாவது யோசித்தவர்க்கும். இந்த புத்தகம் முதல் நிரலாக்க மொழி புத்தகமாக பொருந்தாது, ஆனால் குறைந்தபட்ச நிரலாக்க அனுபவம் உள்ள எவரும், எந்த நிரலாக்க மொழி பயன்படுத்திருத்தலும் அவர்கள் புதிய மற்றும் சுவாரஸ்யமான ஒன்றை உள்ளே காண்பிர்கள்.

இந்த புத்தகம் முடிந்த வரை புதியவர்களுக்கு எளிமையாக எழுதப்பட்டுயுள்ளது. புதியவர்களை நான் மிகவும் வரவேற்கிறேன், ஏனென்றால் அவர்கள் அறிவதற்கு பல இருக்கிறது! ஆனால் புதியவர்களுக்கு இந்த புத்தகம் சவாலாக இருக்கலாம். நாங்கள் பல புதிய கருத்துகளை உள்ளடக்கி, அடிப்படையில் இரண்டு புதிய நிரலாக்க மொழிகளை ஒரே நேரத்தில் கற்கலாம்.

நீங்கள் உதவியைத் தேடினால், நிரலாளர்கள் உங்களிடம் பொறுமையாக இல்லை என்பதைக் காணலாம். உதவிசெய்வதற்கு பதிலாக, அவர்களுக்கு அந்த தலைப்பைப் பற்றி எவ்வளவு அறிந்திருக்கிறார்கள் என்பதை வெளிப்படுத்துவார்கள்.அனுபவம் வாய்ந்த நிரலாளர்கள் நீங்கள் செய்வது தவறு என்று சொல்லலாம்.அவர்கள் பேசும் விதம், உங்கள் மோசமான நிரலை உலகில் உண்டாக்கு வதை விட, நீங்கள் இப்போதே நிறுத்த வேண்டும் என்று தோணலாம்.

இதுபோன்ற சில அனுபவத்திற்கு பிறகு நீங்கள் ஒரு நிரலாளர் அல்ல அல்லது நிரலாக்கத்தை உண்மையில் விரும்பவில்லை அல்லது உங்களுக்கு இது புரியவில்லை என்று முடிவு செய்யலாம். நீங்கள் ஒரு நேரத்தில் ரசித்த, சொந்த நிரலாக்கத்தை உருவாக்குவதற்கான யோசனை இப்போது அது எளிதில் புரிந்து கொள்ள முடியாது அல்லது எனக்கு இனி அதை பற்றி கவலை இல்லை என்ற எண்ணம் வந்திருக்கலாம். இப்போது மற்ற ஆசைகளை பற்றி அக்கறைப்படுவீர்கள், மேலும் முன்பு இருந்த விளையாட்டுத்தனமான, மகிழ்ச்சியான அல்லது சுவாரஸ்யமான நுட்பம் இப்போது தடைகளாக மாறியிருக்கலாம்.

இதற்காக நான் மன்னிப்பு கேட்கிறேன். நிரலாளர்கள் பகைமைவாய்ந்தவர்களாவும், ஆணவமாகவும், திமிர்பிடித்தவர்களாகவும், பாதுகாப்பற்றவர்களாகவும், ஆக்ரோஷமானவர்களாகவும் இருக்கலாம். இந்த நடத்தைக்கு அவர்களுக்கு மன்னிப்பு இல்லை. நான் உங்கள் பக்கத்தில் இருக்கிறேன். யாரும் உடனடியாக எதையும் புரிந்துகொள்வதில்லை. ஒவ்வொருவரும் போராடுகிறார்கள் மற்றும் அவர்களின் திறன்களை சந்தேகிக்கிறார்கள். தயவு செய்து விட்டுவிடாதீர்கள் அல்லது பொதுவாக ஆக்கப்பூர்வமான செயல்பாட்டின் போது ஏற்படும் இன்பம், உற்சாகம் அல்லது மகிழ்ச்சியை இழக்காதீர்கள். நீங்கள் எதை உருவாக்கினாலும் அதைப் பற்றி பெருமைப்படுங்கள். நீங்கள் நிரலாக்கத்தை நிறுத்துவதை என்னைப் போன்றவர்கள் விரும்பமாட்டார்கள். உங்கள் எண்ணங்கள், கருத்துகள் மற்றும் யோசனைகளை வெளிப்படையாகவும் நம்பகத்தன்மையுடனும் வெளிப்படுத்த வேண்டும்.

ஏன் C கற்க வேண்டும்

சி என்பது உலகின் மிகவும் பிரபலமான மற்றும் செல்வாக்குமிக்க நிரலாக்க மொழிகளில் ஒன்றாகும். இது லினக்ஸில் மேம்பாட்டிற்கான(Linux Development) விருப்பமான மொழியாகும், மேலும் மேக் OS X மற்றும் மைக்ரோசாப்ட் விண்டோஸ் உருவாக்கத்தில் பரவலாகப் பயன்படுத்தப்படுகிறது. இது மைக்ரோ கம்ப்யூட்டர்களிலும் பயன்படுத்தப்படுகிறது. உங்கள் குளிர்சாதனப்பெட்டி மற்றும் கார் ஒருவேளை அதில் இயங்கலாம். நவீன மென்பொருள் உருவாக்கத்தில், சி இன் பயன்பாடு தவிர்க்கப்படலாம், ஆனால் அதன் தாக்கம் இன்றும் அப்படியே இருக்கிறது. மென்பொருள் மேம்பாட்டிலிருந்து(Software Development) தொழில் செய்ய விருப்பம் உள்ள எவரும் புத்திசாலியாக திகழ சி கற்க வேண்டும்.

ஆனால் சி என்பது மென்பொருள் மேம்பாடு மற்றும் தொழில் பற்றியது அல்ல. சி சுதந்திரம் பற்றியது. ஒத்துழைப்பு மற்றும் சுதந்திரத்தின் தொழில்நுட்பங்களின் பின்னணியில் இது புகழ் பெற்றது – யுனிக்ஸ், லினக்ஸ் மற்றும் தி லிப்ரே மென்பொருள் இயக்கம் (The Libre Software Movement). இது கணிப்பீட்டிற்குள்(Computing) தனிப்பட்ட சுதந்திரம் பற்றிய கருத்தை வெளிப்படுத்துகிறது. உங்கள் வாழ்க்கையை பாதிக்கும் தொழில்நுட்பத்தின் கட்டுப்பாட்டை நீங்கள் கையில் எடுக்க வாய்ப்பளிக்கிறது.

இன்று, தொழில்நுட்பம் முன்பை விட வலுவாக இருக்கும்போது, ​​இது மிகவும் முக்கியமானது.

சுதந்திரத்தின் கொள்கைகள்(ideology) சி இன் தன்மையில் பிரதிபலிக்கிறது. உங்களிடமிருந்து சிறிதளவு சி மறைக்கிறது, அதன் குறைபாடுகளை. சிறிதளவு சி ​​நீங்கள் செய்வதிலிருந்து தடுக்கிறது, திட்டங்களை சில நேரங்களில் கொடூரமான வழிகளில் உடைக்கிறது. நீங்கள் சி இல் குறியீடு(Code) செய்யும் போது, ​​நீங்கள் ஒரு குறிப்பிட்ட பாதையை மட்டும் பின்பற்றவில்லை, ஆனால் நீங்கள் பல தேர்வுகளை எதிர்கொள்கிறீர்கள், மேலும் சி அந்த முடிவுகளை எடுக்க உங்களுக்கு சவால் விடும்.

சி மொழி கற்பதற்கு வேடிக்கையாக மற்றும் மகிழ்ச்சி இருக்கும். முக்கிய ஊடகங்கள் இதைப் பிடிப்பதற்கு முன்பு நாங்கள் இதற்கு ஒரு வார்த்தை வைத்திருந்தோம். கொந்துதல் (Hacking). வேடிக்கையாகவும் புத்திசாலித்தனமாகவும் இருப்பதை மகிமைப்படுத்தும் தத்துவம். மற்ற மக்களின் கணினிகளை சட்டவிரோதமான அங்கீகாரமற்ற அணுகலுக்கும் இதுக்கும் எந்த சம்பந்தமும் இல்லை. கொந்துதல் என்பது ஆய்வு, தனிப்பட்ட வெளிப்பாடு, எல்லைகளைத் தாண்டுதல் மற்றும் விதிகளை மீறுதல் ஆகியவற்றின் தத்துவமாகும். இது படிநிலை(hierarchy) மற்றும் அதிகாரத்துவத்திற்கு(bureaucracy) எதிரானது. அது தனிமனிதனைக் கொண்டாடுகிறது. கொந்துதல் உங்களை வேடிக்கை, கற்றல் மற்றும் பெருமையுடன் இருக்க தூண்டுகிறது. கொந்துதல் என்பது கணினி மற்றும் இணைய(Internet) அணுகல் மூலம், உலகை மாற்றும் வல்லமை கொண்டது.

நீங்கள் சி இல் குருவாக திகழ எது சக்தி வாய்ந்தது, புத்திசாலித்தனமானது மற்றும் அடிமைப்படாது(Free) என்பதை பற்றி கவனித்துக்கொள்ள வேண்டும். ஒரு நிரலாளர் ஆக விரல் நுனியில் தொழில்நுட்பத்தின் அனைத்து பரந்த சக்திகளும் மற்றும் உலகிற்கு ஏதாவது நன்மை செய்ய வேண்டிய பொறுப்பும் உள்ளது.

சி எப்படி கற்றுக்கொள்வது
சி ஒரு கடினமான மொழி. இது அறிமுகமில்லாத பல கருத்துகளைக் கொண்டுள்ளது, மேலும் இது புதிய பயனருக்கு உதவ எந்த முயற்சியும் செய்யாது. இந்த புத்தகத்தில் நான் மொழியின் தொடரியல்(Syntax), அல்லது சுழற்சி(Loop) மற்றும் நிபந்தனை அறிக்கைகளை(Decision statement) எவ்வாறு எழுதுவது போன்ற விஷயங்களை விரிவாக விவரிக்கப் போவதில்லை.

மறுபுறம், சி இல் நிஜ உலக நிரலை எவ்வாறு உருவாக்குவது என்பதை நான் உங்களுக்குக் காண்பிப்பேன். இந்த அணுகுமுறை வாசகருக்கு எப்பொழுதும் மிகவும் கடினமாக இருக்கும், ஆனால் பாரம்பரிய அணுகுமுறையால் முடியாத பல மறைமுகமான விஷயங்களை உங்களுக்குக் கற்பிக்கும் என்று நம்புகிறேன். இந்த புத்தகம் உங்களை சி இல் தைரியமான பயனராக மாற்றும் என்று என்னால் உத்தரவாதம் அளிக்க முடியாது. நான் உறுதியளிக்கக்கூடியது என்னவென்றால், அந்த 1000 குறியீடுகள் உள்ளடக்கத்துடன்(Content) நிரம்பியிருக்கும் – மேலும் நீங்கள் பயனுள்ள ஒன்றைக் கற்றுக்கொள்வீர்கள்.

இந்நூல் 16 சிறு அத்தியாயங்களைக் கொண்டது. இவற்றை எப்படி முடிக்கிறீர்கள் என்பது உங்களுடையது. ஒரு வார இறுதியில் இந்தப் புத்தகத்தை ஒரே வேளையில் படிப்பது அல்லது இதை மெதுவாக எடுத்து ஒரு வாரத்தில் ஒவ்வொரு மாலையும் ஒரு அத்தியாயம் அல்லது இரண்டைச் செய்வதும் நன்றாக இருக்கலாம். இது முடிவடைய அதிக நேரம் எடுக்காது, மேலும் உங்கள் நிரல் மொழியை மேலும் வளர்ப்பதற்கான ஒரு ரசனையை உங்களுக்கு வழங்கும்

ஏன் லிஸ்ப்(Lisp) உருவாக்க வேண்டும்

இந்தப் புத்தகத்தில் நாம் உருவாக்கப் போகும் மொழி ஒரு லிஸ்ப். இது ஒரு நிரலாக்க மொழிகளின் குடும்பமாகும், அவற்றின் அனைத்து கணக்கீடுகளும்(Computation) பட்டியல்களால்(List) குறிப்பிடப்படுகின்றன. இது கேட்பதற்கு பயப்படக்கூடிய தாக தோன்றலாம். ஆனால் லிஸ்ப்கள் உண்மையில் மிகவும் எளிதான, தனித்துவமான மற்றும் சக்திவாய்ந்த மொழிகள்.

பல காரணங்களுக்காக ஒரு லிஸ்ப்பை உருவாக்குவது ஒரு சிறந்த திட்டமாகும். இது உங்களை மொழி வடிவமைப்பாளர்களின் காலணியில் வைக்கிறது, மேலும் மொழியிலிருந்து இயந்திரம் வரையிலான நிரலாக்கத்தின் முழு செயல்முறைக்கும் உங்களுக்கு அதன் மீது தனி மரியாதையை வரும். இது செயல்பாட்டு நிரலாக்கம்(Functional programming) மற்றும் கணக்கீட்டைப்(Computation) பார்ப்பதற்கான புதிய வழிகளைப் பற்றி உங்களுக்குக் கற்பிக்கிறது. உங்களுக்கு வெகுமதி அளிக்கப்படும் இறுதித் தயாரிப்பு(Final product), எதிர்கால எண்ணங்கள் மற்றும் வளர்ச்சிக்கான மாதிரி வடிவத்தை வழங்குகிறது, புதிய விஷயங்களை முயற்சிப்பதற்கான தொடக்கத்தை உங்களுக்கு வழங்குகிறது. நிரலாக்கம்(Programming) மற்றும் கணினி அறிவியலில் உள்ள படைப்பாற்றல்(Creativity) மற்றும் புத்திசாலித்தனத்தை நீங்கள் மொழிகளை ஆராயும் வரை புரிந்து கொள்ள முடியாது.

நாம் உருவாக்கும் லிஸ்ப் வகை இந்தப் புத்தகத்தின் நோக்கங்களுக்காக நான் கண்டுபிடித்தது. நான் அதை அடிப்படைத் தேவை, எளிமை மற்றும் தெளிவுக்காக வடிவமைத்துள்ளேன், மேலும் நான் அதை மிகவும் விரும்பினேன். உங்களுக்கும் பிடிக்கும் என்று நம்புகிறேன். கருத்தியல் ரீதியாகவும், தொடரியல்(Syntax) ரீதியாகவும் மற்றும் செயல்படுத்தலில்(Implementation), இந்த லிஸ்ப் லிஸ்ப்பின் மற்ற முக்கிய அடையாளங்களுடன் பல வேறுபாடுகளைக் கொண்டுள்ளது. லிஸ்ப் நிரலாளரிடமிருந்து எனக்கு மின்னஞ்சல்கள் வரும் என்று நான் உறுதியாக நம்புகிறேன், ஏனெனில் இது லிஸ்ப் அல்ல, ஏனெனில் அது இப்படியோ அப்படியோ செய்யவில்லை என்று.

ஆரம்பநிலையாளர்களை(Beginners) குழப்பும் வகையில் இந்த லிஸ்ப்பை நான் உருவாகவில்லை. வித்தியாசமானது நல்லது என்பதால் வித்தியாசமாக செய்துள்ளேன்.

வழக்கமான லிஸ்ப்களின் சொற்பொருள்(Semantics) மற்றும் நடத்தைகள் மற்றும் அவற்றை எவ்வாறு நிரல் செய்வது என்பதைப் பற்றி நீங்கள் அறிய விரும்பினால், இந்தப் புத்தகம் உங்களுக்காக இருக்காது. புதிய மற்றும் தனித்துவமான கருத்துக்கள், சுய வெளிப்பாடு, படைப்பாற்றல் மற்றும் வேடிக்கை ஆகியவற்றை இந்தப் புத்தகம் வழங்குகிறது. உங்கள் உந்துதல் எதுவாக இருந்தாலும், இப்பொறுப்புத் துறப்பு (disclaimer) பற்றி கவனியுங்கள். நான் சொல்வதெல்லாம் புறநிலை உண்மையானதா(Objectively correct) அல்லது தவறானதா என்பதை நீங்களே முடிவு செய்து சொல்லுங்கள்.

உங்கள் சொந்த லிஸ்ப்

இந்தப் புத்தகத்தைப் பின்பற்றுவதற்கான சிறந்த வழி, தலைப்பில் சொல்வது போல், உங்கள் சொந்த லிஸ்ப்பை எழுதுவதுதான். நீங்கள் போதுமான நம்பிக்கையுடன் இருந்தால், உங்கள் சொந்த அம்சங்கள் மற்றும் மாற்றங்கள் லிஸ்ப்பில் சேர்க்க வேண்டும் என்று நான் விரும்புகிறேன். உங்கள் லிஸ்ப் உங்களுக்கும் உங்கள் சொந்த தத்துவத்திற்கும் பொருந்த வேண்டும். புத்தகம் முழுவதும் நான் விளக்கம் மற்றும் நுண்ணறிவு(Insights) தருகிறேன், ஆனால் அதனுடன் நான் நிறைய குறியீட்டையும் வழங்குவேன். ஒவ்வொரு பகுதியையும் உண்மையில் புரிந்து கொள்ளாமல் நிரலை நகலெடுத்து(Copy) ஒட்டுவதன்(Paste) மூலம் பின்பற்றுவதை தயவுசெய்து செய்யாதீர்கள்!

மாதிரி குறியீட்டின் ஒவ்வொரு பகுதியையும் நீங்களே தட்டச்சு செய்யவும். இது கடினமான வழி என்று அழைக்கப்படுகிறது. இது தொழில்நுட்ப ரீதியாக கடினமாக இருப்பதால் அல்ல, அதற்கு ஒழுக்கம் தேவை என்பதால். கடினமான வழியில் விஷயங்களைச் செய்வதன் மூலம், நீங்கள் தட்டச்சு செய்யும் காரணத்தைப் புரிந்துகொள்வீர்கள். எழுத்து எழுத்துக்களால் (Character by character) நீங்கள் அதை பின்பற்றினால், விஷயங்கள் அர்த்தமுள்ளதாக இருக்கும். படிக்கும் போது, ​​அது ஏன் சரியாகத் தெரிகிறது, அல்லது என்ன நடக்கிறது என்று உங்களுக்கு ஒரு உள்ளுணர்வு இருக்கலாம், ஆனால் நீங்கள் எழுதுவதை செய்யாதவரை அது எப்போதும் உண்மையான புரிதலுக்கு வழி வகுக்காது!

சரியான உலகில் நீங்கள் எனது குறியீட்டை ஒரு குறிப்புப் பொருளாக(Point of reference), ஒரு அறிவுறுத்தல் கையேடு(instruction manual) மற்றும் வழிகாட்டியாக நீங்கள் எப்போதும் கனவு காணும் நிரலாக்க மொழியை உருவாக்க பயன்படுத்துவீர்கள். உண்மையில் இது நடைமுறையில் சாத்தியமானது அல்ல. ஆனால் அடிப்படை தத்துவம் உள்ளது. நீங்கள் ஏதாவது மாற்ற விரும்பினால், அதைச் செய்யுங்கள்.

நீங்கள் ஏதேனும் சிக்கல்களைக் கண்டால், github.com/ThangaAyyanar/BuildYourOwnLispTamil இந்த github இணைப்பில் சிக்கலை(Issues) எழுப்புங்கள்.

மின்னஞ்சல்: thangaayyanar@gmail.com

%d bloggers like this: