பாடம்-2                               
 
சி-மொழியின் சிறப்புகள்                 

         திருக்குறளைப் பற்றித் தெரியாதவர் ஒரு தமிழறிஞராய் இருக்க முடியாது. அதுபோல சி-மொழியை அறியாதவர் ஒரு கணிப்பொறி நிரலராய் இருக்க முடியாது. ஆயிரம் மொழிகள் வந்து போனாலும் அன்றுமுதல் இன்றுவரை சிறப்புக் குன்றாமல் செல்வாக்குப் பெற்று விளங்குவது சி-மொழி ஆகும். புரோகிராமராக வேலைவாய்ப்புத் தேடிச் செல்வோரின் தகுதிக்குச் சான்றாக அவரின் சி-மொழி அறிவை ஏற்றுக் கொள்கின்றனர். ‘கற்றவர்க்குச் சென்ற இடமெல்லாம் சிறப்பு’ என்பதை மறுப்பவர் எவருமில்லை. ஆம்! சி-மொழியைக் கற்றவர்க்குச் சென்ற இடமெல்லாம் சிறப்புக் கிட்டும் என்பதில் ஐயம் எதுவுமில்லை. சி-மொழியில் நன்கு புலமை பெற்ற ஒருவரால் வேறெந்த மொழியிலும் எளிதாகப் புலமை பெற்றுவிட முடியும் என்பது அனைவரும் ஒப்புக் கொள்ளும் உண்மையாகும். அறிவுடையார் எல்லாம் உடையார் என்பது ஆன்றோர் மொழி. சி-மொழி அறிவுடையார் எல்லாம் உடையார் என்பது அனுபவ மொழி. எனவேதான் மாணவர்கள் மட்டுமல்ல, கணிப்பொறித் துறையில் கால்பதிக்க நினைக்கும் அனைவரும் சி-மொழியை விரும்பிக் கற்கின்றனர்.
         சி-மொழி, சக காலத்தில் பயன்பாட்டிலிருந்த மொழிகளோடு ஒப்பிடுகையில், பல்வேறு வகையில் மேம்பட்டுத் திகழ்கிறது. சி-மொழியின் சிறப்புத் தன்மைகளை கீழ்க்காணுமாறு பட்டியலிடலாம்:
 
1.இடைநிலை மொழி (Middle Level Language) 
         
         உயர்நிலை மொழிகள் (High Level Languages) மனிதனுக்கு நெருக்கமானவை. எனவே, நிரல் (Program) எழுதுவது எளிது. ஆனால் அவை கணிப்பொறிக்கு அந்நியமானவை. எனவே, நிரல் செயல்படும் திறன், வேகம் குறைவு. ஆனால் அடிநிலை மொழிகள் (Low Level Languages - Machine Language & Assembly Language) எந்திரத்துக்கு மிகவும் நெருக்கமானவை. திறனுடன் வேகமாகச் செயல்படுபவை. ஆனால் அவை மனிதனுக்கு அந்நியமானவை. இவற்றில் நிரல் எழுதுவது கடினமான வேலை. ஆனால், சி-மொழியோ இந்த இருவகை மொழிகளின் சிறப்புக் கூறுகளையும் தன்னகத்தே கொண்டது. மனிதனுக்கும் நெருக்கமானது, கணிப்பொறிக்கும் நெருக்கமானது. சி-மொழியின் அமைப்பு இருவருக்குமே எளிதில் புரியக் கூடியது. நிரல் எழுதுவதும் எளிது. நிறைவேற்றப்படும் திறனும் விரைவானது. எனவேதான், சி-மொழியைப் பலரும் இடைநிலை மொழி (Middle Level Language) என்றே அழைக்கின்றனர். ‘இடைநிலை மொழி’ என்று சிறப்புப் பெற்ற ஒரே மொழி சி-மொழி என்பது குறிப்பிடத் தக்கது.
 
2.இயக்க முறைமையை உருவாக்கும் வல்லமை
        
         முதன்முதலில் யூனிக்ஸ் சூழலில் சி-மொழி உருவானபோதும், இன்றைக்கு நாம் பயன்படுத்திக் கொண்டிருக்கும் யூனிக்ஸ் என்ற மாபெரும் இயக்க முறைமையின் ஆணைத் திரள் முழுமையும் சி-மொழியில் எழுதப்பட்டதாகும். 13 ஆயிரம் வரிகள் கொண்ட யூனிக்ஸ் இயக்க முறைமையின் ஆணைத் திரளில்  12 ஆயிரத்து 200 வரிகள் சி-மொழியில் எழுதப்பட்டவை. இயக்க முறைமையின் அடிப்படையில்தான் மொழிகள் உருவாக்கப்படுகின்றன. ஆனால், இயக்க முறைமையையே உருவாக்கும் வல்லமை சி-மொழிக்கு உண்டு. விண்டோஸ் மற்றும் விண்டோஸ் என்டீ இயக்க முறைமைகளின் பெரும்பகுதி சி-மொழியில் எழுதப்பட்டவை. இன்றைக்குப் பெருமளவு பேசப்படுகின்ற லினக்ஸ் (Linux) இயக்க முறைமை முழுக்க முழுக்க (100%) சி-மொழியில் எழுதப்பட்டுள்ளது குறிப்பிடத் தக்கது.
 
3. பயன்பாட்டுத் தொகுப்புகளை உருவாக்கும் திறன்
        
         பெரும்பாலும், பயன்பாட்டுத் தொகுப்புகளை (Application Packages) அசெம்பிளி மொழியில் எழுதிக் கொண்டிருந்தனர். இன்று, சி-மொழியைப் பயன்படுத்தி தரவுத்தளம் (Database), சொல் செயலாக்கி (Word Processor), விரிதாள் (Spreadsheet) போன்ற தொகுப்புகள் எழுதப்படுகின்றன. டி’பேஸ், வேர்டுஸ்டார், லோட்டஸ் போன்ற பல்வேறு பயன்பாட்டுத் தொகுப்புகள் சி-மொழியில் உருவாக்கப்பட்டவை.
 
4. நிரல்பெயர்ப்பிகளை உருவாக்கும் திறன்
 
         ஓர் உயர்நிலைக் கணிப்பொறி மொழியில் எழுதப்பட்ட நிரலை கணிப்பொறிக்குப் புரிகின்ற மொழியில் மொழிபெயர்த்துச் சொல்லும் மொழிபெயர்ப்பு மென்பொருளைக் ’கம்ப்பைலர்’ என்கிறோம். தமிழில் ‘நிரல்பெயர்ப்பி’ எனப்படுகிறது. ஓர் உயர்நிலை மொழிக்கான கம்ப்பைலர் அந்த நிரலைச் செயல்படுத்தவிருக்கும் கணிப்பொறியில் பொருத்தப்பட்டுள்ள நுண்செயலியின் (microprocessor) சில்லுமொழியில்தான் அதாவது அசெம்பிளி மொழியில்தான் பெரும்பாலும் எழுதப்படும். சி-மொழியின் கம்ப்பைலர்கள், சி-மொழியிலேயே எழுதப்படுகின்றன என்பது சற்றே வியப்பான செய்திதான். சி-மொழியின் முந்தைய பதிப்புகளைப் (earlier versions of C) பயன்படுத்திப் புதிய சி-மொழிக் கம்ப்பைலர்கள் உருவாக்கப்படுகின்றன.
 
5. பிட்நிலைச் செயல்பாடுகள்          
         நாம் நிரலில் பயன்படுத்தும் மாறி அல்லது மாறிலிகளின் மதிப்புகள் (values of variables and constants) உள்பட அனைத்தையும், கணிப்பொறி 0,1 என்ற இரு இலக்கங்களின் தொகுப்பாகத்தான் நினைவகத்தில் இருத்திக் கொள்கிறது என்பதை நாம் அறிவோம். சி-மொழிக் கட்டளையால் நினைவகத்தில் இருத்தி வைக்கப்பட்டுள்ள மதிப்புகளில் உள்ள 0, 1 தொகுப்பில் உள்ள தனித்தனிப் பிட்டுகளை மாற்றியமைக்க முடியும். அதன் மூலம் மாறியின் மதிப்பை மாற்ற முடியும். நிரலில் கையாளும் தரவுகளை (data) பைட்டு நிலையில் மட்டுமின்றி பிட் நிலையிலும் கையாள முடிவது (bit level handling) சி-மொழியின் சிறப்புக் கூறாகும்.
 
6. சிறப்பு மிக்க சி-மொழிச் சுட்டு    
 
         அனைத்துக் கணிப்பொறி மொழிகளிலும் நினைவகத்தில் குறிப்பிட்ட இடத்தில் இருத்தி வைக்கப்பட்டுள்ள ஒரு மாறியை, அதன் மதிப்பைக் கையாள வசதியுண்டு. ஆனால் அம்மாறியை, கணிப்பொறி நினைவகப் பரப்பில் இருத்தி வைத்துள்ள இடத்தின் முகவரியைக் கையாளவும் சி-மொழியில் வசதியுண்டு. அவ்வாறு நினைவகக் குறியிட முகவரியைக் (Address of the Memory Location) கையாண்டு, மாறிகளின் மதிப்புகளில் மாற்றங்களைச் செய்ய முடியும். இதற்குத்தான் சி-மொழியின் ’பாயின்டர்’ (pointer) பயன்படுகிறது. பாயின்டரைத் தமிழில் ’சுட்டு’ என்கிறோம். பாயின்டரைத் திறமையுடன் கையாளும் வல்லமை பெற்றவர்களின் காலடியில் சி-மொழி ஏவல் புரியக் காத்திருக்கும்.
 
7. சுழல் செயல்பாடு                        
 
         கணிப்பொறி நிரலில் சுழல் செயல்பாடு (Recursion) என்கிற ஒரு கருத்துரு உண்டு. பெரும்பாலான கணிப்பொறி மொழிகளில் இந்த வசதியில்லை. அதாவது ஒரு பிரதான நிரல் ஒரு குறிப்பிட்ட பணியைச் செய்து முடிக்க, செயல்கூறு அல்லது செயல்முறையின் (Function or Procedure) உதவியை நாடும். இத்தகைய ஒரு துணைக்கூறானது (செயல்கூறு அல்லது செயல்முறை) அந்தப் பணியை முடிக்க வேறொரு துணைக்கூறின் உதவியை நாடலாம். ஒரு துணைக்கூறு, அந்தப் பணியை முடிக்க, அதே துணைக்கூறின் உதவியை நாட முடியுமா? கோபால் மொழியில், ஒரு செயல்முறைப் பத்தியில் (Procedure Para) அதே செயல்முறையை நிறைவேற்றும்படியான ஆணையைக் கொடுக்க முடியாது. ஆனால் சி-மொழியில் ஒரு ஃபங்ஷன் உள்ளே அதே ஃபங்ஷனை நிறைவேற்றச் சொல்லி ஆணையிடலாம். இந்தச் சுழல் செயல்பாடு சி-மொழியின் தனிச்சிறப்பாகும்.
 
8. உயர்தனிச் செம்மொழி                   
        சி-மொழிக்கு முன்பும் பின்பும் கணிப்பொறி உலகில் செல்வாக்குப் பெற்று விளங்கிய பல்வேறு மொழிகள் இன்று, இருந்த சுவடு தெரியாமல் போய்விட்டன. ஏறத்தாழ நாற்பது ஆண்டுகளாக, சி-மொழி மட்டும் அதே செல்வாக்கோடு, கணிப்பொறி உலகில் இன்னும் வலம் வந்துகொண்டிருக்கிறது. "உன் சீரிளமைத் திறம்வியந்து செயல்மறந்து வாழ்த்துதுமே” என்று, உயர்தனிச் செம்மொழியான தமிழ்மொழிக்குச் சூட்டப்பட்ட புகழாரம் சி-மொழிக்கும் பொருந்தும். கால ஓட்டத்தில் காலாவதி (Obsolete) ஆகிப் போகாமல், அனைவரையும் ஈர்க்கும் திறனோடு இன்றைக்கும் பவனி வந்து கொண்டிருக்கிறது.
 
(9) கச்சிதமான மொழி                       
         சி-மொழி மிகமிகக் குறைந்த சிறப்புச் சொற்களைக் (reserved words) கொண்ட மொழியாகும். மொத்தம் 32 சிறப்புச் சொற்கள் மட்டுமே சி-மொழியில் உண்டு.
    auto          double     int              struct
    break        else         long            switch
    case          enum      register     typedef
    char          extern    return         union 
    const         float        short         unsigned 
    continue   for         signed        void
    default     goto       sizeof         volatile
    do              if            static          while

ரிட்சியின் சொற்களில் சொல்வதெனில், சி-மொழி சிறியது. ஆனால் மிகப்பெரும் பணிகளையும் செய்ய வல்லது. சி-மொழி சிக்கனமானது. ஆனால் வளம் மிக்கது. மிக நவீன கட்டுப்பாட்டுக் கட்டளை அமைப்புகளையும் (Control Structures), தரவுக் கட்டுருக்களையும் (Data Structures), வளமான செயற்குறிகளையும் (Operators) கொண்டது. எந்த ஒரு குறிப்பிட்ட பயன்பாட்டுக்காகவும் உருவாக்கப்பட்டதன்று. சி-மொழி ஒரு பொதுப்பயன் மொழியாகும். இதன் பொதுத்தன்மை, மிகச் சக்தி வாய்ந்த மொழிகளால் சாதிக்க முடியாததையும் சாதிக்க வல்லதாய் உள்ளது. (10) இயக்கமுறை, கணிப்பொறி சாரா மொழி
சி-மொழி மிகவும் இனிமையானது, தெளிவானது, வெளிப்படையானது, பல்திறன் மிக்கது, கற்க எளிமையானது, ஒருவரின் அனுபவத்துக்கு ஏற்ப இதன் திறனும் கூடிக்கொண்டே போகிறது என்று ரிட்சியும், கெர்னிகனும் தம் நூலின் முன்னுரையில் குறிப்பிடுகின்றனர். சி-மொழி எந்தவோர் இயக்க முறைமையுடனோ (Operating System), கணிப்பொறியுடனோ (Machine) கட்டுண்டது அன்று. என்றாலும் கம்ப்பைலர்களையும், இயக்க முறைமைகளையும் எழுதப் பயன்படுவதால், சி-மொழி ஒரு ‘முறைமை நிரலாக்க மொழி’ (System Programming Language) என்றழைக்கப்படுகிறது. அதுமட்டுமின்றி பல்வேறு பணித்தளங்களிலும் (Platforms) எதிர்கொள்ளும் மிகப்பெரும் சவால்களுக்குத் தீர்வு காணவும் சி-மொழி பயன்படுகிறது.
 
சி-மொழியில் இருப்பதும் இல்லாததும்       
         சி-மொழியில் ஸ்டிரிங், லிஸ்ட், அர்ரே போன்ற தருவிக்கப்பட்ட தரவினங்களை (derived data types) கையாள நேரடியான ஆப்பரேட்டர்கள் கிடையாது. அர்ரே, ஸ்டிரிங் ஆகியவற்றை முழுமையாக எடுத்தாளும் செயல்முறைகள் எதுவும் வரையறுக்கப்படவில்லை. ஆனால் ஸ்ட்ரக்சர்களை முழுமையாக நகலெடுக்க முடியும். நினைவக மேலாண்மைக்கு தானியங்கு நினைவக விடுவிப்பு (Garbage Collection) வசதி சி-மொழியில் கிடையாது. இன்னும் சொல்லப்போனால் சி-மொழியில் திரையகவழி உள்ளீட்டு, வெளியீட்டுக்கு (screen input, output) உள்ளிணைந்த கட்டளைகள் கிடையாது. அதாவது read, write போன்ற நேரடியான கட்டளைகள் கிடையாது. ஃபைல்களை அணுகுவதற்கு உள்ளிணைந்த வழிமுறைகள் எதுவுமில்லை. இவையனைத்தும் நூலகச் செயல்கூறுகள் (Library Functions) மூலமாகவே செயல்படுத்தப்படுகின்றன.
சி-மொழியில் பொருள்நோக்கு நிரலாக்க கருத்துருக்கள் (Object Oriented Programming Concepts) கிடையாது. பல்புரியாக்கம் (multi-threading) கிடையாது. ஒரே திரெட் மட்டுமே உண்டு. மற்றும் பல்நிரலாக்கமும் (multi-programming) கிடையாது. ஒன்றுக்கு மேற்பட்ட உடன்நிகழ் செயல்பாடுகளோ (concurrent activities), உடன்நிகழ் நிரல்கூறுகளோ (co-routines) கிடையாது. ஒத்தியக்கம் (Synchronization) என்னும் கருத்துருவும் இல்லை. இவையெல்லாம் சி-மொழியின் குறைபாடுகள் அல்ல. சி-மொழி மிகச் சிறியதாய், மிகக் கச்சிதமாய் அமைய இவையே காரணம். சி-மொழி சிறியதாய் இருப்பதால் அதனை மிக எளிதாய் விளக்க முடியும். மிக விரைவாய்க் கற்க முடியும். எனவே ஒரு சி-மொழி நிரலர் எப்போதும் சி-மொழியை அதன் முழுமையோடு தெரிந்து, புரிந்து பயன்படுத்த முடியும் அல்லவா?
 
[பாடம்-2 முற்றும்]