ஒத்த மொழிகள் என்ற வகையில் ஜாவாவையும் சி# மொழியையும் நேரடியாக ஒப்பிடலாம்.
அந்த வகையில் சி, சி++ மொழிகளை சி# மொழியோடு நேரடியாக ஒப்பிட முடியாது
என்றாலும் சி# மொழியின் முன்னோடிகள் என்ற வகையில் சி, சி++ மொழிகளின்
கருத்துருக்கள் சி# மொழியில் எந்த அளவுக்கு எடுத்தாளப்பட்டுள்ளன எந்த
அளவுக்கு மாற்றியமைக்கப்பட்டுள்ளன எவ்வாறு மேம்படுத்தப்பட்டுள்ளன என்று
அறிந்து கொள்வது சி# மொழி பற்றிய சரியான புரிதலுக்கு உதவும். எனவே, சி,
சி++ மொழிகளுக்கும், சி# மொழிக்கும் இடையேயுள்ள சில ஒற்றுமை வேற்றுமைகளைக்
காண்போம்:
(1) சி, சி++ மொழிகளிலுள்ள int, float, char போன்ற மூலத் தரவினங்கள்
சி# மொழியிலும் உள்ளன. எனினும் அவையும் ஆப்ஜெக்டுகளாகவே கையாளப்படுகின்றன.
(2) சி, சி++ மொழிகளில் இல்லாத decimal என்னும் புதிய தரவினம்
நிதிக் கணக்கீடுகளுக்கென சி# மொழியில் சேர்க்கப்பட்டுள்ளது. இதன் நினைவகக்
கொள்ளளவு 16 பைட்டுகள் என்பதால் அதிகத் துல்லியமான, அதிக மதிப்பிலான தொகையை
இவ்வின மாறியில் இருத்திவைக்க முடியும்.
(3) சி, சி++ மொழிகளில் இருப்பது போன்று, சி# மொழியில் இன்டிஜர்
இனம் சரி/தவறு என்கிற பூலியன் இனத்துடன் குழப்பிக் கொள்ளப்படாது. பூலியன்
மதிப்புகளைக் கையாள்வதற்கென்றே bool என்னும் தனியான தரவினம் சி# மொழியில்
உள்ளது.
(4) சி, சி++ மொழிகளைப் பொறுத்தவரை இன்டிஜர் தரவினம் ஒவ்வொரு
பிராசசரிலும் ஒருவிதமாகக் கையாளப்பட்ட நிலைமை இருந்தது. ஆனால் சி# மொழியைப்
பொறுத்தமட்டில் அனைத்துப் பிராசசர் / கம்ப்யூட்டர்களிலும் இன்டிஜர்
இனமதிப்பின் நினைவகக் கொள்ளளவு ஒன்றுபோலவே இருக்கும்.
(5) சி, சி++ மொழிகளில் char இன மதிப்பு ஒரு பைட்டால் ஆனது. ஆனால்
சி# மொழியில் 2 பைட்டுகள் ஆகும். சி# மொழியில் கையாளப்படும் கேரக்டர்கள்
அனைத்தும் யுனிக்கோடு கேரக்டர்களே.
(6) சி# மொழியில் தரவினப் பத்திரத் தன்மை (Type Safety)
மேம்படுத்தப்பட்டுள்ளது. சி-மொழியில் உள்ளதுபோன்று ஓர் இனம் இன்னோர்
இனமாகத் தாமாகவே கருதிக் கொள்ளப்படாது. சி-மொழியில் ஒரு ஃபங்ஷனுக்கு
அனுப்பும் பராமீட்டரின் இனத்தை ஃபங்ஷனில் வேறோர் இனமாகப் பெற்றுக் கொள்ள
முடியும். சி# மொழியில் அவ்வாறு இயலாது. குறிப்பாக ஒரு மெத்தடுக்கு அனுப்பி
வைக்கப்படும் ரெஃபரன்ஸ் பராமீட்டர்களின் தரவினம் கண்டிப்பாகப்
பாதுகாக்கப்படும்.
(7) சி, சி++ மொழிகளில் மதிப்பிருத்தப்படாத மாறிகளை (uninitialized
variables) எக்ஸ்பிரஷன்களின் பயன்படுத்தலாம். கம்ப்பைலர் பிழை சொல்லாது.
ஆனால் சி# மொழியில் அவ்வாறு பயன்படுத்தினால் கம்ப்பைலர் பிழைசுட்டும். ஓர்
ஆப்ஜெக்டின் உறுப்பு மாறிகளில் தாமாகவே தொடக்க மதிப்பு
இருத்தப்பட்டுவிடும்.
(8) சி, சி++ மொழிகளைப் போன்று பாதுகாப்பற்ற இன மாற்றங்கள் (type casting) சி# மொழியில் அனுமதிக்கப்படுவதில்லை.
(9) சி# மொழியில் அர்ரேக்களின் உறுப்பெண்ணிக்கை வரம்பெல்லையைச்
சரிபார்த்துப் பயன்படுத்த முடியும். n உறுப்புகள் உள்ள அர்ரேயில் தவறுதலாக
(n+1)-வது உறுப்பை அழைக்க முடியாது. ஆனால் சி, சி++ மொழிகளில் இப்பிழை நிகழ
வாய்ப்புண்டு.
(10) கணிதச் செயல்பாடுகளின்போது ஒரு தரவினத்தின் மதிப்பு எல்லைமீற
(overflow) வாய்ப்புண்டு. சி# மொழியில் இதுபோன்ற பிழைகளை முன்கூட்டியே
கண்டறிய வசதி உள்ளது. ஒரு கட்டளை மூலம் இதனைப் பரிசோதிக்கலாம். அல்லது
அப்ளிகேஷன் மட்டத்திலும் overflow நிலையைக் கண்காணிக்கலாம். நமது
புரோகிராமில் overflow கண்காணிப்பை உயிரூட்டி இருந்தால், புரோகிராமின்
இயக்கத்தின்போது overflow ஏற்படுமாயின் ஓர் என்ஸெப்ஷன் எறியப்படும். catch
கூற்றில் அதனைக் கைப்பற்றி, பிழைதவிர் நடவடிக்கையை மேற்கொள்ளலாம். சி, சி++
மொழிகளில் இவ்வசதி கிடையாது.
(11) சி# மொழி, சி++ மொழியின் பெரும்பாலான செயல்திறன்மிக்க
கருத்துருக்களைத் தக்கவைத்துக் கொண்டுள்ள அதே வேளையில் கிளாஸ், நேம்ஸ்பேஸ்,
மெத்தடு ஓவர்லோடிங், எக்ஸெப்ஷன் ஹேண்டிலிங் ஆகியவற்றை எளிமைப்படுத்தியும்
மேம்படுத்தியும் உள்ளது.
(12) சி++ மொழியிலிருந்த சிக்கல் மிகுந்த கருத்துகளான மேக்ரோ, டெம்ப்லேட், மல்ட்டிபிள் இன்ஹெரிட்டன்ஸ் ஆகியவை நீக்கப்பட்டுள்ளன.
(13) சி# மொழியில் உள்ளிணைந்த பாயின்டர்கள் கிடையாது. புரோகிராமர்
நேரடியாக நினைவகத்தைக் கையாள்வது தடுக்கப்பட்டுள்ளது. கம்ப்பைலருக்கு
unsafe என அறிவித்து ஒரு மெத்தடுக்குள் பாயின்டரைக் கையாள
கட்டுப்படுத்தப்பட்ட உரிமை வழங்கப்பட்டுள்ளது.
(14) சி, சி++ மொழிகளில் ஃபங்ஷன் பாயின்டர் என்னும் திறன்மிகுந்த
கருத்துரு உண்டு. சி# மொழியில் டெலிகேட், ஃபங்ஷன் பாயின்டரின் பணியைச்
செய்கிறது.
(15) சி, சி++ மொழிகளில் ஆப்ஜெக்டுகளைச் சுட்ட ::, ., -> போன்ற
பல்வேறு ஆப்பரேட்டர்கள் உள்ளன. ஆனால் சி# மொழியில் புள்ளி ஆப்பரேட்டர்
மட்டுமே உள்ளது.
(16) சி, சி++ மொழிகளில் இல்லாத டைப் ஷேப்டி, வெர்ஷனிங், கார்பேஜ்
கலெக்ஷன் போன்ற புதிய உத்திகள் சேர்க்கப்பட்டுள்ளன. இத்தகு மாற்றங்கள்
அனைத்தும் காம்பொனன் டு அடிப்படையிலான சாஃப்ட்வேர் உருவாக்கத்தை மனதில்
கொண்டே செய்யப்பட்டுள்ளன.
(17) சி, சி++ மொழிகளில் நினைவக மேலாண்மை என்பது புரோகிராமரின்
வேலையாகும். மிகவும் கவனமாகக் கையாள வேண்டும். சிறு பிழையெனினும் பெரும்
விளவுகள் ஏற்படும். ஆனால் சி# மொழியில் நினைவகத்தை நிர்வகிப்பது
புரோகிராமரின் வேலையாக இருக்காது. சிஎல்ஆர் (CLR - Common Language
Runtime) வழங்கும் கார்பேஜ் கலெக்டர் அப்பணியைக் கவனித்துக் கொள்ளும்.
(18) சி++ மொழியிலுள்ள எக்ஸெப்ஷன் ஹேண்டிலிங் சி# மொழியிலும் உண்டு.
ஆனால் சி# மொழியில் பிற மொழிகளில் எழுதப்பட்ட புரோகிராம்களிலும் செயல்பட
வல்லது.
(19) சி# மொழியில் மெட்டா டேட்டா என்னும் புதிய பாதுகாப்பு நுட்பம் புகுத்தப்பட்டுள்ளது. சி, சி++ மொழிகளில் இது கிடையாது.
(20) சி, சி++ மொழிகளில் உள்ள குளோபல் ஃபங்ஷன்கள், குளோபல் மாறிகள், குளோபல் மாறிலிகள் சி# மொழியில் கிடையாது.
(21) சி# மொழியில் ஒரு கிளாஸில் உள்ள மெத்தடுகள் இயல்பாக
non-virtual ஆகும். டெரிவ்டு கிளாஸுகளில் அவற்றை ஓவர்ரைடு செய்ய முடியாது.
ஓவர்ரைடு செய்ய விரும்பும் ஃபங்ஷன்களை பேஸ் கிளாஸில் வெளிப்படையாக virtual
என அறிவிக்க வேண்டும். ஆனால் சி++ மொழியில் பேஸ் கிளாஸில் வெறுமனே
அறிவிக்கப்பட்ட ஒரு ஃபங்ஷனை டெரிவ்டு கிளாஸில் ஓவர்ரைடு செய்யலாம். அதாவது
பேஸ் கிளாஸ் ஃபங்ஷன்கள் முன்னியல்பாகவே virtual ஆகும்.
(22) கிளாஸ் மெம்பர்களை அணுக சி++ மொழியில் private, public,
protected ஆகிய அணுகுமுறைகள் உள்ளன. சி# மொழியில் internal என்னும் புதிய
அணுகுமுறை சேர்க்கப்பட்டுள்ளது.
(23) ஒன்றுக்கு மேற்பட்ட பேஸ் கிளாஸுகளின் அடிப்படையில்
உருவாக்கப்படும் மல்ட்டிபிள் இன்ஹெரிட்டன்ஸ் சி++ மொழியில் உண்டு. ஆனால்
சி# மொழியில் கிடையாது. ஆனால் ஒன்றுக்கு மேற்பட்ட இன்டர்ஃபேஸுகளை
அடிப்படையாகக் கொண்டு டெரிவ்டு கிளாஸுகளை உருவாக்கலாம்.
(24) இன்டர்நெட் அப்ளிகேஷன்களை உருவாக்குவதற்கான பிரத்தியேகமான ஏற்பாடுகள் சி# மொழியில் உள்ளன. சி, சி++ மொழிகளில் கிடையாது.
(25) சி, சி++ மொழிகள் பொதுக் களத்தில் (Public Domain)
வைக்கப்பட்டுள்ளன. சி# மொழியும் அவ்வாறு வைக்கப்படும் என மைக்ரோசாஃப்ட்
அறிவித்திருந்த போதிலும் இன்னும் அவ்வாறு வைக்கப்படவில்லை. அதாவது, சி#
மொழிக்கு உங்கள் விருப்பத்துக்கு நீங்கள் ஒரு கம்ப்பைலர் எழுதிப்
பயன்படுத்திக் கொள்ள முடியாது.
படித்ததில் பிடித்தது
No comments:
Post a Comment