
சமிபத்தில் எழில் முக்கிய அம்சங்கள் பற்றி பேச நேர்ந்தது. அதன் காட்சிவில்லை.
தமிழில் நிரல் எழுது – Write code in தமிழ்
எழில் : தமிழ் நிரலாக்க மொழி (Ezhil Language Blog) [opinions are my own]
சமிபத்தில் எழில் முக்கிய அம்சங்கள் பற்றி பேச நேர்ந்தது. அதன் காட்சிவில்லை.
ரூபி நண்பன் தமிழாக்கம் முழுமை அடைந்தது. இந்த புத்தகத்தை கொண்டு நீங்கள் ரூபி மொழியை பயிலலாம்.
நன்றி.
மொழிபெயர்ப்பு குழு.
One of major achievements of last year has been collecting inputs from our team and writing up two important papers – one for historical review and other for collective call to action on great opportunity that is Tamil open-source software.
We also take time to thank all co-authors who have pulled together their efforts at short notice to make these research works happen! Together these two papers represent a value of tens of thousands of Indian rupees, or more in the making (going by estimates of other Tamil software foundations).
We also thank conference organizers for partial travel grant toward making this presentation happen. Thank you!
Ezhil, Open-Tamil conference articles – 2017 presented at Tamil Internet Conference, August, 2017, in Toronto, Canada. Both the papers were well received and good academic and development points were debated at the forum.
For questions and queries on these articles, please write to us at ezhillang@gmail.com or leave your comments below.
Ezhil Language Foundation
சென்ற வாரம் எழில் மொழியை டுவிட்டர் வழி செயல்படுத்த ஒரு உத்தி ஒன்றை உருவாக்கலாம் என்று தீர்மானித்தேன். பல செயல்பாடுகள் facebook, skype, போன்றவை messenger bot என்ற தானியங்கிகள் வழி செயல்படுவது ஓர் இரண்டு ஆண்டுகளாக சமணியமாகின. இதே போல கடந்த மாதம் கனடாவில் குறள் பாட் என்ற தானியங்கி facebook செயலி பற்றி கேள்விப்பட்டேன்; நிரைய நாட்களாக இப்படி ஒரு எழில் இடைமுகம் கொடுக்க வேண்டும் என்று எண்ணினேன், இதற்க்கு இப்போது ஒரு காலம் வந்துவிட்டது!
ஏற்கனேவே குறள்களை புதுவள்ளூர் @puthuvalluvar என்ற முகவரியில் தானியங்கி வழி செய்திருந்தேன். இது தற்போது செயலுற்று கிடக்கிறது ஆனால் இதனை செயல்படுத்த python-twitter என்ற நிரல் தொகுப்பை பயன்படுத்தினேன்; இதனை கொண்டு @ezhillangbot என்ற புது கணக்கில் ஒரு தனியாகியை உருவாக்கினேன். இதன் மூல நிரல் இங்கு. twitter பக்கம் நீங்கள் ஒரு
இதனை ஒரு cron-வேலையாக நிறுவிய பின்னர் அனைவரும் பயன்பாடு செய்ய இப்படி உங்கள் கணக்கில் இருந்து ஒரு எழில் நிரலை டுவீட் செய்யுங்கள்;
@ezhillangbot அச்சிடு(“வணக்கம் உலகம்!”)
இதனை படித்துவிட்டு தானியங்கி உங்கள் பெயரை சூட்டி நிரலின் விடையை அளிக்கும்; உதாரணம்,
இதனை நீங்களும் பரிசோதனை செய்து எனக்கு தகவல்கள் சொல்கிறீர்களா ? டுவிட்டரில் நேர்வழி சொல்லுங்கள், இல்லகாட்டி இங்கும் சொல்லுங்கள்!
நன்றி.
முத்து
எழில் மொழியை சிறிது நகைச்சுவையுடன் எப்படி அணுகுவது ? நம்ம சூப்பர்ஸ்டார் சொன்ன பொன்மொழிகளை கொண்டும் இதனை மீம்ஸ் வழி செய்யலாமா ?
இந்த நாள் உங்களுக்கு இனிய நாள் ஆகட்டும்!
-முத்து
At Team Ezhil we proposed to declare code-freeze for Ezhil for reaching v1.0 stable builds on major platforms. In this regard today the release candidate 1 for v0.99 is ready. During this process we addressed some long standing interpreter (core) bugs and updated examples for aesthetic comments.
At this time I welcome:
For questions and comments: ezhillang@gmail.com.
San José, California.
For your viewing pleasure – Ezhuthi software tests to some rock music (freely provided by Googleandavar, you can mute at your discretion)
இந்த வாரம் அமெரிக்காவில் “long weekend” அதாவது மூன்று-நாள் வார விடுமுறை – காரணம் மே மதம் நான்காம் திங்கள் “Memorial day” என்கிற “அமெரிக்க போர்வீரர் நினைவு தினம்”. இதனை ஒட்டி சராசரி குடும்பங்கள் நாடெங்கும் உல்லாச பயணம், சுற்றுலா என்று செல்வது அமெரிக்க பண்பாடு. இந்த ஆண்டு எங்கள் வீட்டில் விருந்தினரை வரவேற்கிறோம் – பயணம் என்பது இந்த ஆண்டு எங்கள் விருந்திரனுக்கு மட்டுமே! சரி அப்போது ஒரு புதிய தரவமைப்பு பற்றி ஒரு blog post போடுவோம் என்று எழுத ஆரம்பித்தது இங்கே.
அடுக்கு (Stack) என்பது ஒரு மிக அடிப்படை கணினி நிரலாக்க கோட்பாடு. ஒரு அடுக்கு தரவமைப்பில் செய்யக்கூடிய நடவடிக்கைகள் ஆனது : மேல் நுழை (push), மேல் நீக்கு (pop) என்பது.
ஒரு அடுக்கை இப்படி (கீழ் கண்டபடி) உருவாக்கலாம்:
எ = அடுக்கு() மேல்_நுழை( எ, "அ" ) மேல்_நுழை( எ, "ஆ" )
இது கணினியில் ஒரு அடுக்கு போலவே உருவெடுக்கும்,
--> [ ஆ ] [ அ ] -------- அடுக்கு "எ" என்பதில் இரண்டு உருப்படிகள் உள்ளது; இதில் "மேல்" உருப்படி "ஆ" என்ற மதிப்பாகும்.
மேலும் இந்த அடுக்கில் மற்ற உயிரெழுத்துக்களை முழுதாக சேர்க்கலாம்:
மேல்_நுழை( எ, "இ" ) மேல்_நுழை( எ, "ஈ" ) மேல்_நுழை( எ, "உ") மேல்_நுழை( எ, "ஊ") மேல்_நுழை( எ, "எ") மேல்_நுழை( எ, "ஏ") மேல்_நுழை( எ, "ஐ") மேல்_நுழை( எ, "ஒ") மேல்_நுழை( எ, "ஓ") மேல்_நுழை( எ, "ஔ")
கணினியில் இதன் தோற்றம் இப்படி இருக்கும்,
--> [ ஔ ] [ ஓ ] [ ஒ ] [ ஐ ] [ ஏ ] [ எ ] [ ஊ ] [ உ ] [ ஈ ] [ இ ] [ ஆ ] [ அ ] அடுக்கு "எ" என்பதில் பன்னிரண்டு உருப்படிகள் உள்ளது; இதில் "மேல்" உருப்படி "ஔ" என்ற மதிப்பாகும்.
நம்ம இங்கே ஆயுத எழுத்து “ஃ” என்பதை சேர்க்கவில்லை; உங்களுக்கு வேண்டுமானால் நீங்கள் சேர்த்து கொள்ளலாம்.
இப்போது அடுக்கு “எ” இதன் வரிசை மாற்றுவது எப்படி ? ஒரு குவிப்பில் இருந்து “மேல் எடு” என்று செய்தால் என்ன விளைவு என்று முதல் படியாக பார்க்கலாம் – இதன் விளைவு மேல் உள்ள உருப்படியை அழிக்கும்.
மேல்_எடு( எ ) # தற்போது குவிப்பு 'எ' வில் 11 உருப்படிகள் மட்டும் இருக்கும். # ஏற்கெனவே உள்ள மேல் உருப்படி 'ஓ' அழிக்கப்பட்டது. # புதிய மேல் உருப்படி 'ஓ' என்று ஆனது.
இப்போது இந்த அடுக்கின் நிலை,
--> [ ஓ ] [ ஒ ] [ ஐ ] [ ஏ ] [ எ ] [ ஊ ] [ உ ] [ ஈ ] [ இ ] [ ஆ ] [ அ ] அடுக்கு : எ
இப்போது அழித்த மேல் உருப்படியை புதிய அடுக்கு ‘ஏ’ வில் மேல் நுழைத்தால் – அதையே ‘எ’ என்ற அடுக்கில் உருப்படிகள் உள்ளவரை அதில் மேல் எடுத்து, ‘ஏ’ வில் மேல் நுழைத்துக்கொண்டே இருந்தால் என்ன ஆகும் ?
இதனை நிரல் படுத்தி பார்க்கலாம்.
ஏ = அடுக்கு() மேல்_நுழை( ஏ, "ஔ") @( நீளம்( எ ) > 0 ) வரை மதிப்பு = மேல்_எடு( எ ) மேல்_நுழை( ஏ, மதிப்பு ) முடி
தற்போது அடுக்கு ‘எ’-வின் நிலை காலியானது:
-->[ ] அடுக்கு : எ
ஆனால் அடுக்கு ‘ஏ’-வின் நிலையோ – வரிசை மாற்றப்பட்டது!
-->[ அ ] [ ஆ ] [ இ ] [ ஈ ] [ உ ] [ ஊ ] [ எ ] [ ஏ ] [ ஐ ] [ ஒ ] [ ஓ ] [ ஔ ] அடுக்கு : ஏ
இந்த நிரல் துண்டு Python மொழியில் இப்படி எழுதலாம்,
# (C) 2017 Ezhil Language Foundation # This code is shared under public domain # Ref: https://ezhillang.wordpress.com import tamil import pprint class Stack: def __init__(self): self.store = list() def top(self): return self.store(-1) def __len__(self): return self.store.__len__() def push(self,val): self.store.insert(-1,val) def pop(self): val = self.store.pop() return val def display(self): pprint.pprint(list(zip(range(self.__len__()-1,0,-1),self.store))) a = Stack() for letter in tamil.utf8.uyir_letters: a.push(letter) a.display() rev_a = Stack() while len(a) > 0: val = a.pop() rev_a.push(val) print("Original stack => ") a.display() print("Reversed stack => ") rev_a.display()
இதன் வெளியீடோ கீழே உள்ளபடி:
[(11, 'ஆ'), (10, 'இ'), (9, 'ஈ'), (8, 'உ'), (7, 'ஊ'), (6, 'எ'), (5, 'ஏ'), (4, 'ஐ'), (3, 'ஒ'), (2, 'ஓ'), (1, 'ஔ')] Original stack => [] Reversed stack => [(11, 'ஔ'), (10, 'ஓ'), (9, 'ஒ'), (8, 'ஐ'), (7, 'ஏ'), (6, 'எ'), (5, 'ஊ'), (4, 'உ'), (3, 'ஈ'), (2, 'இ'), (1, 'ஆ')]
“எழில் மொழியை எப்படி வெளியீடு செய்வது ?” என்று சப்பென்று தலைப்பை வைத்து மேலும் ஒரு பதிவை எழுதலாம் என்று தொடங்கினேன். அனால் இன்று எனக்கும் பொறுமைக்கும் நீண்ட தூரம் ஆயிற்று. நம்ம மண்ணில் ஜே.கே. போன்றவர் இருந்ததாக கேள்வி, என்னமோ அவர் ஆசியில் ஒரு தலைப்பு. சில வெளிப்பாடுகள் அதுவாக வரவேண்டும், ஸ்வயம்பு போல.
“ஆளே இல்லாத கடையில ஏண்டா டீ ஆத்தூர்?” நக்கலுக்கு தமிழ் எந்த மொழியிர்க்கும் சளச்சது இல்லை. சிலர் நேரில் என்னை, சற்று வெகுளி தனமாக – இங்கு அமெரிக்காவில் முதல் தலைமுறை தமிழர் (எழுதவோ, நல்லா பேசவோ சாகஜமாக வராதவர்) – “ஏன் நீங்கள் தமிழில் மென்பொருள் ரீதியில் செயல்படுகிறீர்கள்” என்று கேட்டார்; என்னமோ செவ்வாயில் குடிபுகுவது போல நான் செய்யும் வேலைகள் எனது நண்பர்களிடமும், முகம் அறியா இணைய நபர்களிடமும் தெரியும். தமிழில் செயல்படுவது எனது சுய உறிமை, சில நேரம் பெருமை, தன்னிரக்கம், அகராதி என்றும் பலர் கூறலாம்; ஆனால், அதில் சமூக பொறுப்பு, அறிவியலாளரின் சமூக பார்வை, அறிவியல் மொழி வளர்ச்சி, தேடல், தொழில்நுட்ப கண்டெடுப்பு, தியானம் போன்ற நுட்ப்பமான விஷயங்களை மறந்து விடுவார்கள். சில நேரங்களில் எழில் எங்கே போகிறது என்று எண்ணுவேன்; ஆனால் முதலில் அந்த எட்டு வயது குழந்தைகள் நிரலாக்கத்தை தமிழ் வழி கற்பிக்கும் பொது தமிழ் கணிமை உலகம் நாம் அனைவரும் கூடி கண்ட வெற்றி என்பதில் ஐயமில்லை.
எழில் மொழி என்பது பல ஆண்டுகளாக நான் செய்து வருவது; இதனை முழுமையாக 2013 ஆண்டில் பொது வெளியீடு செய்து இந்நாள் வரை பத்து பங்களிப்பாளர்கள் தங்கள் நேரத்திற்கும், அறிவிற்கும் லாபம் பொருட்படாமல் பங்காளித்துள்ளனர். தமிழ் நெஞ்சங்கள் எங்கும் ஆதரவு அளித்துள்ளனர். அனால் இவர்களின் வேலைகளும் எழில் மொழியில் இலக்கான சிறுவர் கணிமை கற்றலுக்கு கொண்டு சேர்க்க முடியவில்லையே என்று எனக்கு பல நாட்கள் தூக்கம் தொலைந்து போனது.
சமீபத்தில் சில மாறுதல்கள்; எழில் கிட்ஹப்-இல் இருந்தாலும் இதனை ஒரு முழுமை அடைந்த மென்பொருளாக கொள்ள முடியாது. மென்பொருள் என்றால் அதற்க்கு பயனாளர்களின் தேவைகளையும், அவசியமான பயன்பாட்டுகளையும் பூர்த்தி செய்ய வேண்டும். சும்மா மூல நிரலை மூஞ்சியில் விட்டு எறிஞ்சால் யாருக்கும் பயன்படாது. என்னமோ கோவத்தில் எழுதி விட்டதாக நீங்கள் தப்பாக எடுத்துக்கொள்ள வேண்டாம். சுய விமர்சனமாக எனக்கு கொள்ளுங்கள்.
எழில் மொழியை கடைசி end-user பயனாளர்கிடத்து சேர்த்தால் என்பது என்னுடைய பொறுப்பு என்று ஒரு மூன்று ஆண்டுகளாக உணர்ந்து வருகிறேன். இதனை சிறப்பாக செய்ய எனக்கு ஒரு போர் படை தேவை. பத்து பேர் இருக்கிறார்கள் மீதி வாருங்கள்.
எழில் மொழியில் உள்ள “installer” திரட்டியில் இவை இடம் பெறவேண்டும் என்று எனக்கு தற்சமய நிபந்தனை:
ஒரு தவம், வரம் மறக்கப்படாது – முயற்சி திருவினையாக்கும். கை கூடுவோம், வாருங்கள்.
தொடர் பட்டியல் என்பது ஒரு எளிதான தரவு வடிவம். சுலபமாக பல ஆயிரக்கணக்கான மதிப்புகளை சேமிக்க இந்த தொடர் பட்டியல் பயன்படுத்தலாம்.
இந்த தொடர் பட்டியல் இரண்டு வகையாக அமையும்: ஒருபடை தொடர் பட்டியல் (singly linked list) மற்றும் இருபடை(doubly linked list) இவை கீழே படங்களில் காணலாம். இதனையும் தாண்டி வட்டம் தொடர் பட்டியல் (circular linked list) என்றும் செய்யலாம் இதனை கடைசியில் காண்போம்.
படம் 1: ஒருபடை தொடர் பட்டியல் (singly linked list). இதன் முதல் தலை நுனி ‘12’ என்ற மதிப்பை கொண்டது. இதன் ‘அடுத்த’ மதிப்பு ‘99’ மதிப்பு கொண்ட நுனியின் விலாசத்தை கொண்டது. மேலும் ‘99’ நுனி ‘37’ என்ற மதிப்பு கொண்ட நுனியின் விலாசம் கொண்டது. ‘37’ நுனி என்பது கடைசி நுனி என்பதால் இதற்க்கு அடுத்து மதிப்பு காலி என கொண்டது. இந்த ‘அடுத்து’ என்ற இணைப்பே ‘12’ நுனியில் தொடங்கி ‘37’ வரை செல்லும் அம்சத்தை தொடர் பட்டியல் என்று ஆகும் படி இந்த தரவு வடிவத்திற்கு அளிக்கிறது.
படம் 2: படம் 1-ஐ போலவே தொடர் பட்டியல் ஆனால் ‘அடுத்து’ மதிப்பை போலவே கூடுதலாக ‘முந்தைய’ என்ற மதிப்பையும் ஒவ்வொரு நுனியும் கொண்டது. இதன் காரணமாக இதனை ‘இருபடை தொடர் பட்டியல்’.
தொடர் பட்டியல் என்பது நுனிகள் என்பதால் உருவாக்கப்பட்டது; இவை ஒருன்றுடன் ஒன்று ‘அடுத்து’ என்ற மதிப்பில் இணைக்க பெற்று முழுமையாக தொடர் என்று உருவம் எடுக்கிறது. இது உதிரி பூக்களை மாலையாக கோர்ப்பது போல என்று நினைத்து கொள்ளலாம்.
# நுனி உருவாக்குதல்
நிரல்பாகம் ஒருபடை_நுனி( மதிப்பு )
நு = {“அடுத்து” : [], “மதிப்பு” : மதிப்பு }
பின்கொடு நு
முடி
# நுனியின் அடுத்து விலாசத்தை மற்றோரு நுனியில் அமைத்தல் /
நிரல்பாகம் ஒருபடை_இணை( நுனி_முதல், நுனி_அடுத்து )
நுனி_முதல் [“அடுத்து”] = நுனி_அடுத்து
பின்கொடு நுனி_அடுத்து
முடி
தொடர் பட்டியலின் முதல் நுனியை “தலை நுனி” என்று பெயரிடுவோம். இந்த தலை நுனியை மட்டும் நாம் கொண்டு முழு பட்டியலை ஒவ்வொன்றாக அணுகலாம். எப்படி ? நுனியில் “அடுத்து” என்ற நுனி விலாசம் உள்ளதை வைத்து நுனிக்கு செல்லலாம். இதனையே பலமுறை – அதாவது அடுத்து என்பதன் மதிப்பு காலி ஆகும் வரை – செய்தால் முழு பட்டியலையும் தலை நுனியில் இருந்து கடைசி நுனிவரை ஒவ்வொன்றாக அணுகலாம். இதனை “ஒருபடை_அணுகு()” என்ற நிரல்பாகம் நிரல்படுத்தும்.
சரி – இப்ப இந்த பட்டியலில் ஒரு குறிப்பிட்ட மதிப்பு உள்ளதா என்று எப்படி தேடுவது ? இந்த செயல்முறையை நம்ம “ஒருபடை தொடர் பட்டியல் தேடல்” என்று பெயரிடுவோம். தேடல் என்பது பட்டியலில் உள்ள ஒவ்வொரு நுனியையும் அணுகி (அணுகுதல் என்ற நிரல்பாகம் கீழே எழுதப்பட்டதைப்போல்) குறிப்பிட்ட மதிப்பிற்கு சமமாக உள்ளதா என்று பார்க்கவேண்டும்.
# ஒருபடை தொடர் பட்டியலை வரிசையில் அணுகுதல்
நிரல்பாகம் ஒருபடை_அணுகு( நுனி )
நுனி_அடுத்து = []
காலி = []
@( நுனி != காலி ) வரை
#பதிப்பி “முதிப்பு => “,
பதிப்பி நுனி [“மதிப்பு”]
நுனி_அடுத்து = நுனி [“அடுத்து”]
நுனி = நுனி_அடுத்து
முடி
பின்கொடு நுனி_அடுத்து
முடி
தேடிய ‘குறிப்பிட்ட மதிப்பு’ கிடைக்காவிட்டால் -1 என்ற மதிப்பு பின்கொடுக்கப்படும்; கிடைத்தால், தலை நுனியில் இருந்து தூரத்தை வரிசை எண் என்று பின்கொடுக்கப்படும்
நிரல்பாகம் ஒருபடை_தேடு ( நுனி, குறிப்பிட்ட_மதிப்பு )
நுனி_அடுத்து = []
காலி = []
வரிசை_எண் = 1
@( நுனி != காலி ) வரை
@( நுனி [“மதிப்பு”] == குறிப்பிட்ட_மதிப்பு ) ஆனால்
பின்கொடு வரிசை_எண்
முடி
நுனி_அடுத்து = நுனி [“அடுத்து”]
நுனி = நுனி_அடுத்து
வரிசை_எண் = வரிசை_எண் + 1
முடி
பின்கொடு -1
முடி
# நுனி உருவாக்குதல்
நு12 = ஒருபடை_நுனி( 12 )
நு99 = ஒருபடை_நுனி( 99 )
நு37 = ஒருபடை_நுனி( 37 )
# நுனியின் அடுத்து விலாசத்தை மற்றோரு நுனியில் அமைத்தல் /
ஒருபடை_இணை( நு12, நு99 )
ஒருபடை_இணை( நு99, நு37 )
# ஒருபடை தொடர் பட்டியலை வரிசையில் அணுகுதல்
ஒருபடை_அணுகு( நு12 )
#சாவே இல்லாத வீட்டிலே கைப்பிடி கடுகு கிடைக்குமா ?
பதிப்பி ஒருபடை_தேடு(நு12, 10)
பதிப்பி ஒருபடை_தேடு(நு12, 37)
இதன் வெளியீடு : 12, 99, 37. முழு நிரல் இங்கு.
இந்த மாதிரி தொடர் பட்டியலில் பல கேள்விகளை எழுப்பலாம், உதாரணத்திற்கு:
இதனை போல கேள்விகளை பயிற்சிக்கு கேட்டு கொண்டே போகலாம். அனால் நீங்கள் இந்த இரண்டு புத்தகங்களை நேரம் கிடைக்கும் சமயம் கட்டாயம் படித்தால் எல்லாம் விளங்கும்.
இதை இரண்டையுமே நீங்கள் கரைத்து குடித்துவிட்டால் உங்களுக்கு நிரலாக்க திரையில் கிராக்கி அமோகமாக விளங்கும். அப்படி கார்பொரேட் கைதியாக இருக்கவேண்டாம் என்று வீரப்பாக இருந்தால் இந்த புத்தகத்தில் உள்ள லட்டு, ஜிலேபி இனிப்புகளை இன்பமாக அனுபவியுங்கள்.
மேலும் அடுத்த வாரம்.
-முத்து
கவனத்திற்கு: தொடர் பட்டியல் படங்கள் விக்கிபீடியா, புத்தக அட்டைகள் பதிப்பகத்திற்கு சொந்தம்; எழுத்து பிழைகள் எல்லாமே என்னோடது.