தமிழில் எப்படி கணினி நிரலாக்கல் கற்றுக்கொள்வது ? முதலில் எழுதி செயலியை உங்கள் Windows OS அல்லது Linux OS இல் download செய்து, “தமிழில் நிரல் எழுது” என்ற புத்தகம் படி ஒவ்வொரு நிரல் எழுதி, இயக்கி பயிலுங்கள்.
படம் : திருத்தியுடன் எழில் மொழி செயலி; நிரல் இடது பக்கம், இயக்கிய வெளியீடு வலது பக்கம். சாளரத்தின் கீழ் இயக்கிய விவரம். இந்த செயலி எழில் படிக்க உதவும். (c) 2017 எழில் மொழி அறக்கட்டளை.
“எழில் மொழியை எப்படி வெளியீடு செய்வது ?” என்று சப்பென்று தலைப்பை வைத்து மேலும் ஒரு பதிவை எழுதலாம் என்று தொடங்கினேன். அனால் இன்று எனக்கும் பொறுமைக்கும் நீண்ட தூரம் ஆயிற்று. நம்ம மண்ணில் ஜே.கே. போன்றவர் இருந்ததாக கேள்வி, என்னமோ அவர் ஆசியில் ஒரு தலைப்பு. சில வெளிப்பாடுகள் அதுவாக வரவேண்டும், ஸ்வயம்பு போல.
“ஆளே இல்லாத கடையில ஏண்டா டீ ஆத்தூர்?” நக்கலுக்கு தமிழ் எந்த மொழியிர்க்கும் சளச்சது இல்லை. சிலர் நேரில் என்னை, சற்று வெகுளி தனமாக – இங்கு அமெரிக்காவில் முதல் தலைமுறை தமிழர் (எழுதவோ, நல்லா பேசவோ சாகஜமாக வராதவர்) – “ஏன் நீங்கள் தமிழில் மென்பொருள் ரீதியில் செயல்படுகிறீர்கள்” என்று கேட்டார்; என்னமோ செவ்வாயில் குடிபுகுவது போல நான் செய்யும் வேலைகள் எனது நண்பர்களிடமும், முகம் அறியா இணைய நபர்களிடமும் தெரியும். தமிழில் செயல்படுவது எனது சுய உறிமை, சில நேரம் பெருமை, தன்னிரக்கம், அகராதி என்றும் பலர் கூறலாம்; ஆனால், அதில் சமூக பொறுப்பு, அறிவியலாளரின் சமூக பார்வை, அறிவியல் மொழி வளர்ச்சி, தேடல், தொழில்நுட்ப கண்டெடுப்பு, தியானம் போன்ற நுட்ப்பமான விஷயங்களை மறந்து விடுவார்கள். சில நேரங்களில் எழில் எங்கே போகிறது என்று எண்ணுவேன்; ஆனால் முதலில் அந்த எட்டு வயது குழந்தைகள் நிரலாக்கத்தை தமிழ் வழி கற்பிக்கும் பொது தமிழ் கணிமை உலகம் நாம் அனைவரும் கூடி கண்ட வெற்றி என்பதில் ஐயமில்லை.
எழில் மொழி என்பது பல ஆண்டுகளாக நான் செய்து வருவது; இதனை முழுமையாக 2013 ஆண்டில் பொது வெளியீடு செய்து இந்நாள் வரை பத்து பங்களிப்பாளர்கள் தங்கள் நேரத்திற்கும், அறிவிற்கும் லாபம் பொருட்படாமல் பங்காளித்துள்ளனர். தமிழ் நெஞ்சங்கள் எங்கும் ஆதரவு அளித்துள்ளனர். அனால் இவர்களின் வேலைகளும் எழில் மொழியில் இலக்கான சிறுவர் கணிமை கற்றலுக்கு கொண்டு சேர்க்க முடியவில்லையே என்று எனக்கு பல நாட்கள் தூக்கம் தொலைந்து போனது.
சமீபத்தில் சில மாறுதல்கள்; எழில் கிட்ஹப்-இல் இருந்தாலும் இதனை ஒரு முழுமை அடைந்த மென்பொருளாக கொள்ள முடியாது. மென்பொருள் என்றால் அதற்க்கு பயனாளர்களின் தேவைகளையும், அவசியமான பயன்பாட்டுகளையும் பூர்த்தி செய்ய வேண்டும். சும்மா மூல நிரலை மூஞ்சியில் விட்டு எறிஞ்சால் யாருக்கும் பயன்படாது. என்னமோ கோவத்தில் எழுதி விட்டதாக நீங்கள் தப்பாக எடுத்துக்கொள்ள வேண்டாம். சுய விமர்சனமாக எனக்கு கொள்ளுங்கள்.
எழில் மொழியை கடைசி end-user பயனாளர்கிடத்து சேர்த்தால் என்பது என்னுடைய பொறுப்பு என்று ஒரு மூன்று ஆண்டுகளாக உணர்ந்து வருகிறேன். இதனை சிறப்பாக செய்ய எனக்கு ஒரு போர் படை தேவை. பத்து பேர் இருக்கிறார்கள் மீதி வாருங்கள்.
எழில் மொழியில் உள்ள “installer” திரட்டியில் இவை இடம் பெறவேண்டும் என்று எனக்கு தற்சமய நிபந்தனை:
Platform Support: இயங்கு தளங்களில் வேலை செய்ய வேண்டும்:
Windows 64, 32 bit
Linux 64
திரட்டியில் வேண்டியவை : Installer package
எழில் மொழி திருத்தி ; இதனை ‘ezhuthi’ (எழுதி) என்று pygtk-இல் இங்கு இங்கு வடிவமைத்து வருகிறேன்.
எழில் மொழி ezhil module python library
தமிழில் நிரல் எழுது புத்தகம்
தமிழில் நிரல் எழுது புத்தகம் பயிற்சி நிரல்கள்
மேல் நிலை எழில் எ.கா. உதாரணங்கள்
பாடம், ஆசிரியர்களுக்கு உண்டான காணொளி, கேள்வி தாள், வினா-விடை பாட திட்டம்.
பரிசோதனைகள்
மொத்தமாக நிறுவுதல் பரிசோதனை (அணைத்து தளங்களிலும்)
நிரல் எழுதுவது
கோப்புகளை திறப்பது, இயக்குவது, சேமிப்பது
தனியன்க்கி பரிசோதனைகள் (automatic tests)
பயனர் நடப்பு பரிசோதனை (interactive tests)
வெளியீடு
md5 checksum, zip/exe/tgz package generation and upload to networks
release notes, credits, contribution notes, credits to open-source software
ஒரு தவம், வரம் மறக்கப்படாது – முயற்சி திருவினையாக்கும். கை கூடுவோம், வாருங்கள்.
கணிமையில் நமது மாறிலி (variables) மற்றும் தரவு மதிப்புகளை (data values) வரிசை படுத்தியோ அல்லது சீரற்ற வழியில் ஒரே மாதிரி அடுக்கி தரும் தரவு உருவம் வகையில் (data structure) ஒன்று ‘இரு கிளை மரம்’ (binary tree)- இதனை இரட்டித்த மரம் என்றும் சுருக்கி சொல்லலாம்.
மரம் – நிஜமாவா ?
எண் ‘2’-ஐ வேர் என்றும், ‘5’, ’11’, ‘4’, ‘2’ என்ற எண்கள் இலைகள் ஆகவும் இந்த இரட்டித்த மரம் அமைந்திருக்கு.
இது இயற்கையில் உள்ள இயற்கை மரம் போலவே காட்சி அளிக்குமோ என்று சந்தேக பட்டால், அது சரியானது! மரம் என்பதற்கு எப்படி,
வேர் (root)
கிளை (branch)
இலைகள் (leaves)
உள்ளதோ அதே போன்று இந்த இரட்டித்த மரம் தரவு வகையில் இதற்கு இணையான (isomorphic) அம்சங்கள் இருக்கு. இந்த பதிவில் இதை பார்க்கலாம்.
இரட்டித்த மரம் நடுவோம் – கட்டுமானம்
மேல் கண்ட படத்தில் உள்ள மரத்தை எப்படி உருவாக்குவது ? இது சுலபம்.
மரத்தின் எல்லா மதிப்புகளையும் நுனிகள் (nodes) என்று பெயரிடுவோம். இரட்டித்த மதத்தின் குணம் என்ன என்றால், நுனிகளில் இரண்டு கிளைகள் இருக்கும் – வலது (right) நுனி, இடது (left) நுனி, மற்றும் நுனியின் மதிப்பு (value).
முதலில் வேர் நுனி என எண் ‘2’ நியமிக்கவும். இந்த வேர் நுனியிர்க்கு இரண்டு வலது கிளை நுனி (right node) என எண் ‘5’-ம், இடது கிளை நுனி (left node) என எண் ‘7’-ம் அமைக்கவும்.
அடுத்து, நுனி 7 என்பதில் வலது நுனி 6, இடது நுனி 2 எனவும் இணைக்கவும். நுனி 5-இல் வலது நுனி 9, மற்றும் 9-இன் இடது நுனி 4 எனவும் அமைக்கவும்.
கடைசியாக நுனி 6-இன் வலது புரம் 11 எனவும் இடது புரம் 5-உம் அமைக்கவும்.
இதனை போல் தொடர்ச்சியாக செய்தால் நமக்கு கணினி நினைவில் ஒரு ‘இரட்டித்த மரம்’ என்ற தரவு உருவத்தை நீங்கள் செய்யலாம்.
# மரம் நுனிகளை அனைத்தயும் வரிசையில் எடுப்பது
ம_வரிசை = பட்டியல்()
வரிசையில்_எடு( வேர், ம_வரிசை )
பதிப்பி ம_வரிசை
மரம் நுனிகளை அனைத்தயும் வரிசையில் எடுப்பது :
கேள்வி : “வேர் நுனி மட்டும் கிடைத்தால் மரம் நுனிகளை அனைத்தயும் வரிசையில் எப்படி எடுப்பது ? ”
இது ஒரு சராசரியான செயல்பாடு; எப்போது இரட்டித்த மரம் என்றாலும் உடனடியாக அந்த இடத்தில் “அனைத்து நுனிகளை எடுக்க” என்ற செயல் புரியும் தேவை உங்கள் கணிமை programming-இல் வந்து விடும்.
சரி இதன் கேள்விக்கு விடை ஒரு induction வழியாக பார்க்கலாம்;
நிலை : மரத்தில் வேர் மற்றும் உள்ளது – (மொத்தம் 1 நுனி)
வேர்[“மதிப்பு”] மட்டும் அணுகினால் போதும்.
நமது மரம் படத்தில், 2
நிலை : மரத்தில் 2 அல்லது 3 நுனிகள் மட்டும் உள்ளன.
வேர்[“இடது_நுனி”][“மதிப்பு”], வேர்[“மதிப்பு”], வேர்[“வலது_நுனி”][“மதிப்பு”] என்ற வரிசையில் நுனிகளை சிந்திப்போம்
நமது மரத்தில், 7, 2, 5 என்றும் காண்போம்
நிலை : மரத்தில் 4,5,6,7 அல்லது 8 நுனிகள்
இரண்டாம் படியில் வேர் என்ற மாறிலிக்கு பதில் வேர்[“இடது_நுனி”], வேர்[“வலது_நுனி”] என்றும் கூடுதலாக தொடக்கத்தில் மாற்றத்தை செய்து செயல் பட்டால் இது முடிந்து விடும்
ஆகவே நமது செயல்முறை வழி (algorithm) என்பது இதன்போல் காட்சி அளிக்கும்:
வரிசையில் அணுகு ( உள்ளீடு : மரம் வேர்_நுனி )
படி 1: மரத்தின் இடதுபக்கத்தை வரிசையில் அணுகு, எடு
படி 2: தன்னிலை வேர்_நுனி மதிப்பை எடு
படி 3: மரத்தின் வலதுபக்கத்தை வரிசையில் அணுகு,எடு
இதுவே recursion சார்ந்த செயல்முறை வழி. இதனை ‘inorder traversal’ (நேர் வரிசையில் அணுகுதல் என்றும் சொல்லலாம். இது எப்படி செயல்படுகிறது என்பதை ஒரு காகிதத்தில் நீங்களே எழுதி பார்த்தால் இன்னமும் எளிமையாக இருக்கும். காணொளிகளை மற்ற மென்பொருள் பறிச்சியாளர்கள் youtube-இல்பார்க்கவும் பதிவித்தார்கள்.
எழில் மொழியில் இந்த நேர் வரிசை அணுகல் என்பதை நிரல்க்கி பார்த்தால்,
# walk in in-order; ப – பட்டியல் என்ற மாறிலி (ப- variable is a list)
நிரல்பாகம் வரிசையில்_எடு(வேர்,ப)
@( வேர்[“இடது_நுனி”] != [] ) ஆனால்
வரிசையில்_எடு( வேர்[“இடது_நுனி”] , ப)
முடி
@( வேர்[“வலது_நுனி”] != [] ) ஆனால்
வரிசையில்_எடு( வேர்[“வலது_நுனி”] , ப)
முடி
பின்கொடு ப
முடி
பைதான் மொழியில் இதனை, inorder traversal என்றும் எழுதலாம்
# walk in in-order
def walk_inorder(root,listval):
if root.left:
walk_inorder(root.left,listval)
#print(“%d, “%root.value)
listval.append(root.value)
if root.right:
walk_inorder(root.right,listval)
return
இதே அணுகுமுறையை, வலது, இடது மாற்றியும் செய்தால் அதற்கு மற்ற விளைவுகள் உண்டு; இதனால் மரத்தின் நுனிகளை அணுக மூன்று முறைகள் சொல்லுவார்கள்,
நேர் வரிசை அணுகல் – inorder traversal
அணுகும் வரிசை: இடது, வேர், வலது
தன் முன் வரிசை அணுகல் – pre-order traversal
அணுகும் வரிசை: வேர், இடது, வலது
தன் பின் வரிசை அணுகல் – post-order traversal
அணுகும் வரிசை: இடது, வலது, வேர்
அடுத்த அத்தியாயத்தில் இந்த மூன்று அணுகு முறை இவற்றிகும் என்ன சிறப்பு அம்சங்கள் உண்டு என்றும், வேறு இரட்டித்த மரம் செயல்பாடுகளை பார்க்கலாம்.
கணிதம் என்பதை அறுவை, போர் ஆக்குவது என்பது சிறுவர்களுக்கு உடனடியாக விளங்காத சூத்திரங்களையும், வாய்ப்பாடு பட்டியல்களையும் நினைவில் கொள்ள செய்வது. பத்தாத குறையாக கேள்வி எழுப்பும் குழந்தைகளையும் அடி கொடுப்பது – இதுவே நமது இன்றைய பள்ளி நிலை. இதன் விளைவு என்ன ? கணக்கு வாத்தி என்பவரை கண்டாலே ஓடும் பயம் மட்டுமே பெரும்பாலானோர் மனதில் கொள்கின்றனர்.
மாறாக, வாய்ப்பாடு என்பது என்ன ?
இரு எண்களை பெருக்க வேண்டுமானால் முதலில் அவற்றின் வாய்ப்பாடு நினைவில் இருந்தால் எளிதாக கணிதம் செய்யலாம்.
பெருக்கல் கணித செயல்பாட்டின் இயல்புகளை கொண்டு சில விடைகளை எளிதாக கணக்கிட முடியும்.
1) உதாரணமாக, அ பெருக்கல் ஆ என்பதின் விடை ஆ பெருக்கல் அ என்றும் அமையும். இதனை ஒரு சமன்பாடு என்றும் எழுதலாம்,
அ x ஆ = ஆ x அ
இதனால் நீங்கள் 1 முதல் 15 வாய்ப்பாடு 12 எண்கள் வரை மனப்பாடம் செய்யும் வகை எவரும் கேட்டல் 1 முதல் 12 வாய்ப்படை 15 எண்கள் வரை மட்டுமே நினைவில் கொள்ள வேண்டும்!
2) மேலும், இரண்டில் ஏதேனும் ஒரு எண் 10, 100, 1000 என 10-இன் மூலம் ஆகா இருந்தால் அதன் விடை சுலபமாக மற்ற எண் பின் பூஜியுங்களை சேர்த்தது போல் அமையும்.
123 x 100 = 12,300
3) பெருக்கல் என்ற கணக்கின் விடை என்பதை கூட்டினால் ( modulo 9 ) இந்த பெருக்கலில் உள்ள இரு எண்களையும் modulo 9 கூட்டி மீண்டும் பெருக்கி மீண்டும் modulo 9 செய்த எண் என்பதற்கு சமம். இது ஒரு (necessary but not sufficient) தேவையான ஆனால் தீர்மானிக்கபடாத தேவை.
123 x 45 = 5535
இதனை எண்ணிம இலக்கு மூலம் கூடினால் (digital sum)
6 x 9 = 18, (இடது பக்கத்தில் 123 எண் 1 + 2 + 3 = 6, எனவும், 4 + 5 = 9 எனவும் மாறும்.)
5 4 = 9 ( வலது புரம் 1 + 8 = 9, இடது புரம் 6 x 9 = 54 எனவும் உள்ளது)
9 = 9
மேலும் பெருக்கல் என்பதற்கு நிறைய தன்மைகள் உண்டு. இவற்றை கற்று கொண்டால் நீங்கள், அல்லது உங்கள் மாணவர்கள், குழந்தைகள், இந்த வாய்ப்பாடு என்பதை கண்டு பயந்து ஓட வேண்டாம். கணிதம் என்பதை நண்பர் ஆகா ஆக்கி கொள்ளுங்கள்.
மூளை குழம்பி மொழி இயக்கியை எழில் மொழியில் வடிவமைப்பது எப்படி? இந்த கேள்வி வெகு சுவாரசியமானது – அதாவது கணிமை முழுவதும் ஒரு யெந்திரதின் பணியில் கணிக்கப்படுவது. இதை நான் ஒரு எழில் மொழியில் வடிவமைத்ததை பற்றி இங்கு எழுதுகிறேன்.
இந்த மூளை குழம்பி மொழியில் உள்ள செயலுறுபுகள் என்ன ?
2016-இல் எழில் மொழி வழி ஒரு மூளை-குழம்பி என்ற மொழியை முழுமையாக நிறுவியுள்ளோம்
செயலுறுபு – (Operators) –
‘>’, ‘<‘ – செயலுறுபு நினைவகத்தை குறிக்கும் இடத்தை முன் அல்லது பின் அளவில் மாற்றும்
‘+’, ‘-‘ – செயலுறுபு நினைவகத்தின் மதிப்பை கூட்டும் அல்லது குரைக்கும்
‘[‘, ‘]’ – செயலுறுபு நிரலின்இயக்கம் பகுதியி அடுத்த அடைவுகுரிப்பிபிற்கு ‘]’, அல்லது ‘[‘ இற்கு தாவும் படி குறிக்கும்
‘,’,’.’ – என்ற செயலுறுபு உள்ளிடு, வெளியீடு, குறிக்கும்
முக்கியமான மைய்யகணினி இயக்கியின் பண்பு
நாம் வடிவமைக்கும் இயக்கியில் ப்ரோக்ராம் (நிரலின்) நினைவகம் மாற்றும் தரவுகளின் நினைவகமும் வெவ்வேறு இடங்களில் இருக்கு. இதனை கொண்டு, மடக்கு கட்டளைகளான ‘[‘, ‘]’ என்ற குறிப்புகளை ஒரு ஸ்டாக் (அடுக்கு) என்பதில் கொண்டு நாம் ஒரு சறியன இயக்கியை உருவாக்கலாம்.
இப்போது இந்த மைய்யகநினியில், மூளை குழம்பி மொழியில் எப்படி எண்களை கூட்டுவது ?
இரண்டு எண்களை கூட்டுவது
program_sum = “++>+++++.<[>+<-].” #sum of 2+5 in cell #2
கலிபோர்னியா மாகாணத்தில், யோசெமிட்டி தேசிய பராமரிப்பு காட்டில், உள்ள மாபெரும் 3000-ஆண்டுகள் வாழ்ந்த சிவப்பு மரங்களை கனுபோழுது, “Even the mightiest Oaks come from tiny seeds” என்ற பழமொழி நினைவிற்கு வரும்.
உங்களால் முடிந்தவரை Github தளத்தில் pull -request அனுப்பவும். இல்லாத பட்சத்தில் நேரடியாக ezhillang என்ற ஜிமெயில் அஞ்சலுக்கு உங்கள் படைப்புக்களை அனுப்புக.
Online evaluator – latest version – for Ezhil Language.
இன்று நள்ளிரவு எழுதிய பைத்தான் நிரலிநால் (இந்த கிட்ஹப் கமிட்டை காணவும்) எழில் மொழியை இணையம் வழி கற்க பள்ளிக்கூடம் ஆக அமைய வாய்பு உண்டு. இதனுடைய அமைப்பு பல விஷயங்கள் கொண்டது. கீழே காண்க.
Feature list
Code in this directory provides the following
* Writing Code, Editing, and Evaluating *
1. Syntax highlighting editor for Ezhil using ACE JavaScript editor
2. Code browser lets user to look at sample Ezhil programs from the ezhil-lang source/testsuite, in the single page app editor
3. Users can run the code on this page, and see the output in the same page.
4. Correctly executed code with should output in light yellow; clicking on the output will hide it, as you work on second problem.
5. Errors in code or server execution cause your program output to be highlighted in red.
6. Source code is persisted between sessions in terms of cookies
Clojure-Thamil Elango Cheran, a developer in Silicon Valley, CA, USA, has been quitely developing a powerful macro-based framework of Tamil programming capabilities on top of Clojure. He has also added various tools on this platform, even tools with teeth – i.e. converting encoding from various Tamil encoding standards, and implementing santhi rules etc.
I found his blog post on his efforts in programming in Tamil to be highly persuasive, and make a strong case of programming literacy in the vernacular. I concur with some of the views expressed on ability to reach a literate audience in their vernacular without having to be pigeonholed in English language.
A few observations on the capabilities of unicode identifier aware languages like JavaScript, CLISP, and then languages with rich Unicode support like Java and Python. My own steps in exploring such translation-based support for Tamil have included TamilScript; Ezhil effort is fullblown, in comparison, in effort and time invested there.
Lisp has affordance of also being grammatically similar to Tamil than English in structure – i..e. predicate expression based structures. CLISP, and JavaScript also offer non-ASCII identifiers and can achieve somewhat of same effect like macro’s you have pointed out.
The socio-cultural need to open up world of programming to vernacular speakers has continued to haunt technology penetration/access. The field of native language programs has few leading lights. We need more players, and time to build developer interest here.