அத்தியாயம் 2 – நிறுவுதல் (Installation)
அசல் புத்தக இணைப்பு: buildyourownlisp.com/
மொழிபெயர்த்தது தங்க அய்யனார்
அமைப்பு
சி இல் நிரலாக்கத்தை தொடங்குவதற்கு முன், நாம் ஒரு சில விஷயங்களை நிறுவ வேண்டும்,மற்றும் நமது பணிச்சூழல்(environment) அமைக்க வேண்டும் அதனால் நமக்கு தேவையான அனைத்தும் பூர்த்தியாகிவிடும். முக்கியமாக நாம் இரண்டு விஷயங்களை நிறுவ வேண்டும். ஒன்று உரைத்தொகுப்பி (Text editor) மற்றொன்று நிரல்மொழிமாற்றி(Compiler)
உரைத்தொகுப்பி (Text Editor)
உரை திருத்தி என்பது நிரலாக்கத்திற்கு ஏற்ற வகையில் உரைக்கோப்புகளைத்(Text files) திருத்த உங்களை அனுமதிக்கும் ஒரு நிரலாகும்.
லினக்ஸில், நான் பரிந்துரைக்கும் உரை திருத்தி ஜிஎடிட்(gedit). உங்கள் விநியோகத்துடன் வேறு எந்த அடிப்படை உரை திருத்தி நிறுவப்பட்டாலும் அது நன்றாக வேலை செய்யும். நீங்கள் விம்(Vim) அல்லது இமேக்சு(Emacs) பயனராக இருந்தால், இவற்றைப் பயன்படுத்துவது நல்லது. தயவுசெய்து IDE ஐப் பயன்படுத்த வேண்டாம்.இது போன்ற சிறிய திட்டத்திற்கு இது தேவையில்லை மற்றும் என்ன நடக்கிறது என்பதைப் புரிந்து கொள்ள உதவாது.
மாக்(Mac) இல் டெக்ஸ்ட் வராங்களேர் (TextWrangler) பயன்படுத்தவும். உங்களுக்கு வேறு விருப்பம் இருந்தால் பரவாயில்லை, ஆனால் உரை திருத்துவதற்கு எக்ஸ்கோடு (XCode) ஐப் பயன்படுத்த வேண்டாம். இது ஒரு சிறிய திட்டம் மற்றும் IDE ஐப் பயன்படுத்துவதால் என்ன நடக்கிறது என்பதைப் புரிந்துகொள்ள உங்களுக்கு உதவாது.
விண்டோஸில், நான் விரும்பும் உரை திருத்தி நோட்பேட்++ (Notepad++) அல்லது விஷுவல் ஸ்டுடியோ கோட் (Visual studio code) ஆகும். உங்களுக்கு வேறு விருப்பம் இருந்தால் பரவாயில்லை. தயவு செய்து விஷுவல் ஸ்டுடியோவைப்(Visual studio) பயன்படுத்த வேண்டாம் அது சி நிரலாக்கத்திற்கு சரியான தேர்வு இல்லை. நீங்கள் அதைப் பயன்படுத்த முயற்சித்தால், நீங்கள் பல சிக்கல்களைச் சந்திக்க நேரிடும்.
நிரல்மொழிமாற்றி (Compiler)
நிரல்மொழிமாற்றி என்பது சி மூலக் குறியீட்டை(source code) உங்கள் கணினி இயக்கக்கூடிய நிரலாக மாற்றும் ஒரு நிரலாகும். நீங்கள் பயன்படுத்தும் இயக்குதளம் (Operating System) பொறுத்து இவற்றுக்கான நிறுவல் செயல்முறை வேறுபடும்.
சி நிரல்மொழிமாற்றி இயக்குவதற்கு கட்டளை வரியின்(Command line) அடிப்படை பயன்பாடு தேவைப்படும்.கட்டளை வரியை பற்றி இந்த புத்தகத்தில் தகவல் இருக்காது எனவே கட்டளை வரியைப் பயன்படுத்துவதில் உங்களுக்கு குறைந்தபட்சம் ஓரளவு பரிச்சயம் இருப்பதாக நான் கருதுகிறேன்.இதைப் பற்றி உங்களுக்கு அனுபவம் இல்லை என்றால் உங்கள் இயங்குதளம் பொறுத்து கட்டளை வரியை பற்றி இணையத்தில் பயிலுரை(Online tutorial) பார்த்துக்கொள்ளவும்.
லினக்ஸில் சில தொகுப்புகளைப்(packages) பதிவிறக்குவதன் மூலம் நிரல்மொழிமாற்றியை நிறுவலாம்.நீங்கள் உபுண்டு(Ubuntu) அல்லது டெபியனை(Debian) இயக்குகிறீர்கள் என்றால், பின்வரும் கட்டளையுடன் உங்களுக்கு தேவையான அனைத்தையும் நிறுவலாம்
sudo apt install build-essential
நீங்கள் பெடோரா(Fedora) அல்லது ரெட் ஹட்(Redhat) இயக்கினால், இந்த கட்டளையைப் பயன்படுத்தலாம்
su -c "yum groupinstall development-tools".
அல்லது உங்கள் லினக்ஸ் விநியோகம்(Linux distribution) ஏற்றவாறு இணையத்தில் பார்த்து நிறுவிக்கொள்ளலாம்.
மாக்(Mac) இல், ஆப்பிள் இருந்து க்ஸ்கோடு(XCode) இன் சமீபத்திய பதிப்பைப் பதிவிறக்கி நிறுவுவதன் மூலம் நிரல்மொழிமாற்றியை நிறுவலாம். இதை எப்படி செய்வது என்று உங்களுக்குத் தெரியாவிட்டால், “க்ஸ்கோடு ஐ நிறுவுதல்” என்பதை ஆன்லைனில் தேடலாம் மற்றும் காட்டப்படும் எந்த ஆலோசனையையும் பின்பற்றலாம். நீங்கள் கட்டளை வரி கருவிகளை நிறுவ வேண்டும். இதற்கு மாக் OS X 10.9 இல், கட்டளை வரியிலிருந்து xcode-select
கட்டளையை இயக்குவதன் மூலம் இதைச் செய்யலாம். 10.9க்கு முந்தைய மாக் OS X பதிப்புகளில், XCode விருப்பத்தேர்வுகள்(Perferences), பதிவிறக்கங்கள்(Downloads), மற்றும் நிறுவலுக்கான கட்டளை வரி கருவிகளைத்(Command line tools) தேர்ந்தெடுப்பதன் மூலம் இதைச் செய்யலாம்.
--install
விண்டோஸில் நீங்கள் MinGW ஐ பதிவிறக்கம் செய்து நிறுவுவதன் மூலம் கம்பைலரை நிறுவலாம். நிறுவப்பட்டதும், கம்பைலர் மற்றும் பிற நிரல்களை உங்கள் கணினி PATH மாறியில்(Variable) சேர்க்க வேண்டும். இதைச் செய்ய, PATH எனப்படும் மாறிக்கு ;C: மதிப்பைச் சேர்க்கும் இந்த வழிமுறைகளைப் பின்பற்றவும். இந்த மாறி(Variable) இல்லை என்றால் நீங்கள் உருவாக்கலாம். மாற்றங்கள் நடைமுறைக்கு வர, நீங்கள் cmd.exe ஐ மறுதொடக்கம் செய்ய வேண்டியிருக்கலாம். கட்டளை வரி cmd.exe இலிருந்து ஒரு கம்பைலரை இயக்க இது உங்களை அனுமதிக்கும். இது cmd.exe ஐ யூனிக்ஸ் கட்டளை வரி போல் செயல்பட வைக்கும் பிற நிரல்களையும் நிறுவும்.
நிரல்மொழிமாற்றி சோதித்தல் (Testing the compiler)
உங்கள் சி நிரல்மொழிமாற்றி சரியாக நிறுவப்பட்டுள்ளதா என்பதை சோதிக்க, கட்டளை வரியில்(Command line) பின்வருவனவற்றை உள்ளிடவும்.
cc --version
நிரல்மொழிமாற்றி பதிப்பைப்(Compiler Version) பற்றிய சில தகவல்கள் மீண்டும் எதிரொலித்தால், அது சரியாக நிறுவப்பட்டிருக்கிறது உங்களுக்கு அங்கீகரிக்கப்படாத அல்லது கண்டுபிடிக்கப்படாத கட்டளையைப்(unrecognised or not found command) பற்றி ஏதேனும் பிழைச் செய்தியைப் பெற்றால், நிரல்மொழிமாற்றி சரியாக நிறுவ படவில்லை. மாற்றங்கள் நடைமுறைக்கு வர நீங்கள் கட்டளை வரி அல்லது உங்கள் கணினியை மீள்தொடக்கம்(Restart) செய்ய வேண்டியிருக்கும்.
- வெவ்வேறு நிரல்மொழிமாற்றி கட்டளைகள்.சில கணினிகளில் (விண்டோஸ் போன்றவை) நிரல்மொழிமாற்றி கட்டளைக்கு
gcc
போன்ற வேறு பெயர் இருக்கலாம். கணினியால்cc
கட்டளையை கண்டுபிடிக்க முடியவில்லை என்றால் இதை முயற்சிக்கவும்.
உலகத்திற்கு வணக்கம் (Hello world)
இப்போது உங்கள் பணிச்சூழல் அமைத்து விட்டாச்சு, உங்கள் உரை திருத்தியைத் திறந்து பின்வரும் நிரலை உள்ளிடவும். இந்தப் புத்தகத்தை பின்பற்ற ஒரு கோப்புறை (Folder) உருவாக்கி அதை பயன்படுத்தவும், அதில் நிரலை helloworld.c என்று கோப்பில்(File) சேமிக்கவும். இது உங்களின் முதல் சி நிரல்!
#include<stdio.h>
int main(int argc, char** argv)
{
puts("Hello world!");
return 0;
}
இது ஆரம்பத்தில் புரியாமல் இருக்கலாம். நான் அதை படிப்படியாக விளக்க முயற்சிப்பேன்.
முதல் வரியில் நாம் தலைப்பு(Header) என்று அழைக்கப்படுவதை உள்ளடக்குகிறோம். இந்த அறிக்கையானது(Statement) stdio.h இருந்து செயல்பாடுகளைப் பயன்படுத்த அனுமதிக்கிறது, இது சி உடன் சேர்க்கப்படும் தரநிலை உள்ளீடு மற்றும் வெளியீட்டு(Standard input and output) நூலகம் ஆகும்.இந்த நூலகத்தின் செயல்பாடுகளில் ஒன்று, நிரலில் நீங்கள் பின்னர் பார்க்கும் புட்ஸ்(Puts) செயல்பாடு ஆகும்.
அடுத்து நாம் முதன்மை(main) எனப்படும் ஒரு செயல்பாட்டை(function) அறிவிக்கிறோம். இந்த செயல்பாடு ஒரு int ஐ வெளியிடுவதாக அறிவிக்கப்படுகிறது, மேலும் argc எனப்படும் ஒரு int மற்றும் argv எனப்படும் char** ஐ உள்ளீடாக எடுத்துக் கொள்ளும். அனைத்து சி நிரல்களும் இந்த செயல்பாட்டைக் கொண்டிருக்க வேண்டும். அனைத்து நிரல்களும் இந்த செயல்பாட்டிலிருந்து இயங்கத் தொடங்குகின்றன.
முதன்மை
உள்ளே “ஹலோ, வேர்ல்ட்!”(Hello World) என்ற வாதத்துடன்(Arguments) புட்ஸ்(puts)
செயல்பாடு அழைக்கப்படுகிறது. இது Hello, world!
என்ற செய்தியை கட்டளை வரிக்கு வெளியிடுகிறது. புட்ஸ் செயல்பாடு என்பது சரத்தை(String) வெளியீடு என்று குறிக்கிறது. செயல்பாட்டின் உள்ளே இருக்கும் இரண்டாவது அறிக்கை return 0;. இது முதன்மை செயல்பாட்டிற்கு 0 வழங்கி நிரலை முடிக்கச்சொல்கிறது. ஒரு சி நிரல் 0 ஐ வழங்கும் போது, நிரலை இயக்குவதில் பிழைகள் எதுவும் இல்லை என்பதை இது குறிக்கிறது.
நிரல்மொழிமாற்றுதல்(Compilation)
இந்த நிரலை இயக்குவதற்கு முன், இதை நிரல்மொழிமாற்றுதல் செய்ய வேண்டும். இது நமது கணினியில் செயல்படுத்தக்கூடிய குறியீடாய்(Executable code) உருவாக்கும். கட்டளை வரியைத் திறந்து, helloworld.c என்று சேமிக்கப்பட்டுள்ள கோப்பகத்துக்கு(Folder) செல்லவும் . பின்வரும் கட்டளையைப் பயன்படுத்தி உங்கள் நிரலைத் நிரல்மொழிமாற்றலாம்.
cc -std=c99 -Wall hello_world.c -o hello_world
இது helloworld.c இல் உள்ள குறியீட்டைத் நிரல்மொழிமாற்றி, ஏதேனும் எச்சரிக்கை(Warnings) இருந்தால் புகாரளிக்கும் மற்றும் helloworld எனப்படும் புதிய கோப்பில் நிரலை வெளியிடுகிறது. நாம் சி(C) யை எந்த தரநிலை(Standard) அல்லது பதிப்புடன் (version) நிரலாக்குகிறோம் என்பதை நிரல்மொழிமாற்றியிடம் சொல்ல -std=c99 என்ற கொடியைப் பயன்படுத்துகிறோம். இது எங்கள் குறியீடு தரநிலையாக்கப்பட்டுள்ளதை நிரல்மொழிமாற்றி உறுதிப்படுத்துகிறது, இதனால் வெவ்வேறு இயங்குதளங்கள் அல்லது நிரல்மொழிமாற்றிகள் உள்ளவர்கள் இந்த குறியீட்டைப் பயன்படுத்த முடியும்.
வெற்றிகரமாக இருந்தால், தற்போதைய கோப்பகத்தில் வெளியீட்டு கோப்பைப்(Output file) பார்க்க வேண்டும். இதை ./helloworld (அல்லது விண்டோஸ் இல் helloworld) என தட்டச்சு செய்து இயக்கலாம். எல்லாம் சரியாக இருந்தால், நீங்கள் Hello, world! என்ற செய்தி தோன்றும்.
வாழ்த்துகள்! நீங்கள் உங்கள் முதல் C நிரலை நிரல்மொழிமாற்றி இயக்கியுள்ளீர்கள்.
பிழைகள் (Errors)
உங்கள் சி நிரலில் சில சிக்கல்கள் இருந்தால், நிரல்மொழிமாற்றி செயல்முறை(Process) தோல்வியடையலாம். இந்தச் சிக்கல்கள் எளிமையான தொடரியல் பிழைகள்(Syntax errors) முதல் புரிந்து கொள்ள கடினமாக இருக்கும் சிக்கல்கள் வரை இருக்கலாம்.
சில சமயங்களில் நிரல்மொழிமாற்றில் இருந்து வரும் பிழைச் செய்தி அர்த்தமுள்ளதாக இருக்கும், ஆனால் அதைப் புரிந்துகொள்ள முடியவில்லை என்றால், அதை இணையத்தில் தேடி பார்க்கவும். பிழைச் செய்தி என்ன என்பதற்கான சுருக்கமான விளக்கத்தை உங்களால் கண்டுபிடிக்க முடியுமா என்பதைப் பார்க்கவும், அதை எவ்வாறு சரிசெய்வது என்பதைத் தெரிந்துகொள்ளவும். இதை நினைவில் வையுங்கள்: உங்களுக்கு முன்னால் இதே போன்ற பிரச்சனைகளுடன் போராடிய பலர் உள்ளனர்.
சில நேரங்களில் ஒரு மூலத்திலிருந்து(Source file) பல நிரல்மொழிமாற்றி பிழைகள் ஏற்படும். எப்பொழுதும் நிரல்மொழிமாற்றி பிழைகளை முதலில் இருந்து கடைசி வரை பார்க்கவும்.
சில நேரங்களில் நிரல்மொழிமாற்றி ஒரு நிரலைத் நிரல்மொழிமாற்றலாம், ஆனால் நீங்கள் அதை இயக்கும்போது அது செயலிழக்கும்(Crash). இந்த சூழ்நிலையில் சி நிரல்களை பிழைத்திருத்தம் செய்வது கடினம். இது இந்தப் புத்தகத்தின் எல்லைக்கு அப்பாற்பட்ட ஒரு தாவல் அதனால் குறிப்பிடப்படவில்லை.
நீங்கள் ஒரு தொடக்கநிலையாளராக (Beginner) இருந்தால், செயலிழக்கும் சி நிரலை பிழைத்திருத்துவதற்கான முதல் முயற்சி நிரல் இயங்கும் போது நிறைய தகவல்களை அச்சிட(Print) வேண்டும். இந்த முறையைப் பயன்படுத்தி, குறியீட்டின் எந்தப் பகுதி தவறானது மற்றும் ஏதேனும் தவறு நடந்தால், சரியாகத் தனிமைப்படுத்தி முயற்சிக்க வேண்டும். இது செயலார்ந்த(Active) பிழைத்திருத்த நுட்பமாகும்(Debugging). இதுதான் முக்கியமான விஷயம். ஒரு செயலை செயலற்ற(Passive) முறையில் கவனிப்பதை விட செயலில் ஈடுபட்டால் அந்த செயல் வேகமாக முடியும்.
ஆர்வம் உள்ளவர்களுக்கு, உங்கள் சி நிரல்களை பிழைத்திருத்த gdb எனப்படும் நிரல் பயன்படுத்தப்படலாம். இது பயன்படுத்த கடினமாகவும் சிக்கலாகவும் இருக்கலாம், ஆனால் இது மிகவும் சக்தி வாய்ந்தது மற்றும் உங்களுக்கு மிகவும் மதிப்புமிக்க தகவலையும், என்ன தவறு, எங்கு நடந்தது என்பதையும் வழங்க முடியும். gdb ஐ எவ்வாறு பயன்படுத்துவது என்பது பற்றிய தகவல்களை இணையத்தில் காணலாம்.
மாக் இல் OS X இன் சமீபத்திய பதிப்புகள் gdb உடன் வரவில்லை. அதற்கு பதிலாக நீங்கள் lldb ஐப் பயன்படுத்தலாம், இது பெரும்பாலும் அதே வேலையைச் செய்கிறது.
லினக்ஸ் அல்லது மாக் இல் வால்கிரின்ட் (Valgrind) நினைவக கசிவுகள்(Memory Leaks) மற்றும் பிற மோசமான பிழைகள் பிழைத்திருத்தத்திற்கு உதவ பயன்படுகிறது. வால்கிரின்ட் (Valgrind) என்பது பிழைத்திருத்தத்தில் பல மணிநேரம் அல்லது நாட்களைக் கூட சேமிக்கக்கூடிய ஒரு கருவியாகும். அதில் நிபுணத்துவம் பெறுவதற்கு அதிக நேரம் எடுக்காது, எனவே அதை மிகவும் பரிந்துரைக்கப்படுகிறது. அதை எவ்வாறு பயன்படுத்துவது என்பது பற்றிய தகவல்களை இணையத்தில் காணலாம்.
ஆவணமாக்கம் (Documentation)
இந்தப் புத்தகத்தின் மூலம் நீங்கள் அடையாளம் காணாத சில உதாரணக் குறியீட்டில் ஒரு செயல்பாட்டைக் காணலாம். அது என்ன செய்கிறது என்று நீங்கள் ஆச்சரியப்படலாம். இந்த விஷயத்தில், தரநிலை நூலகத்தின்(Standard library) இணையத்தில் ஆவணங்களை நீங்கள் பார்க்க வேண்டும். இது தரநிலை நூலகத்தில் உள்ள அனைத்து செயல்பாடுகளையும், அவை என்ன செய்கின்றன, அவற்றை எவ்வாறு பயன்படுத்துவது என்பதை விளக்கும்.
குறிப்பு (Reference)
இந்த பிரிவு எதற்காக?
இந்தப் பகுதியில் நான் புத்தகத்தின் குறிப்பிட்ட அத்தியாயத்திற்கு எழுதிய குறியீட்டை இணைக்கிறேன். ஒரு அத்தியாயத்துடன் முடிக்கும் போது உங்கள் குறியீடு என்னுடையது போலவே இருக்க வேண்டும். விளக்கம் தெளிவில்லாமல் இருந்தால் இந்தக் குறியீட்டை குறிப்புக்காகப் பயன்படுத்தலாம். நீங்கள் பிழையை எதிர்கொண்டால், எனது குறியீட்டை நகலெடுத்து(Copy) உங்கள் திட்டத்தில் ஒட்ட(Paste) வேண்டாம். பிழையை நீங்களே கண்டறிந்து, என்ன தவறு இருக்கலாம் அல்லது எங்கே பிழை இருக்கலாம் என்பதை முன்னிலைப்படுத்த எனது குறியீட்டை ஒரு குறிப்பாகப் பயன்படுத்தவும்.
அத்தியாயத்திற்கு எழுதிய குறியீடு
#include<stdio.h>
int main(int argc, char** argv)
{
puts("Hello world!");
return 0;
}
வெகுமதி மதிப்பெண் (Bonus Marks)
இந்த பிரிவு எதற்காக?
இந்த பகுதியில் நான் வேடிக்கை மற்றும் கற்றல் முயற்சி செய்ய சில விஷயங்களை பட்டியலிடுகிறேன்.
இந்த சவால்களில் சிலவற்றை நீங்கள் செய்ய முயற்சித்தால் நல்லது. சில கடினமாக இருக்கும், சில மிகவும் எளிதாக இருக்கும். இந்த காரணத்திற்காக, நீங்கள் அனைத்தையும் கண்டுபிடிக்க முடியாவிட்டால் கவலைப்பட வேண்டாம். சில சாத்தியமில்லாமல் இருக்கலாம்!
பலருக்கு இணையத்தில் சில ஆராய்ச்சிகள் தேவைப்படும். இது ஒரு புதிய மொழியைக் கற்றுக்கொள்வதில் ஒரு ஒருங்கிணைந்த பகுதியாகும், எனவே தவிர்க்கப்படக்கூடாது. விஷயங்களை நீங்களே கற்பிக்கும் திறன் நிரலாக்கத்தில் மிகவும் மதிப்புமிக்க திறன்களில் ஒன்றாகும்.
சவால்கள்
- Hello world டை மாற்றவும்! வேறு ஏதாவது எழுதவும்.
- முதன்மை செயல்பாடு(Main function) எதுவும் கொடுக்கப்படாதபோது என்ன நடக்கும்?
- புட்ஸ்(Puts) செயல்பாட்டைத் தேட இணையத்தில் ஆவணங்களைப் பயன்படுத்தவும்.
- gdb ஐ எவ்வாறு பயன்படுத்துவது மற்றும் உங்கள் நிரலுடன் அதை எப்படி இயக்குவது என்று பார்க்கவும்.
நீங்கள் ஏதேனும் சிக்கல்களைக் கண்டால், github.com/ThangaAyyanar/BuildYourOwnLispTamil இந்த github இணைப்பில் சிக்கலை(Issues) எழுப்புங்கள்.
மின்னஞ்சல்: thangaayyanar@gmail.com