பாஸ்டன் நகரில் கடைசியாக கோடை காலம். இல்லை, இது இன்னும் பனி குறைந்த இளவேனில் காலம். NETS என்ற “நியூ இங்கிலாந்து தமிழ் சங்கம்” நிறுவனத்தின் குழு, இங்கு (போஸ்டனில்) திருமதி. வைதேஹி ஹெர்பெர்ட் அவர்களை சங்க தமிழ்பயிலரங்கு ஒன்றினை, இலவசமாக எங்களுக்கு அளித்தனர்.
18 நூல்களையும் ஒரே மனிதராக பத்து ஆண்டுகளாக தானே மொழி பெயர்தமையால் அவருக்கு ஒரு மலை உச்சியில் இருந்து கிடைக்கும் “சங்க தமிழ் is a database” என்று சொல்லும் அளவிற்கு ஒரு பறந்த பார்வை கொண்டவர் திருமதி. வைதேஹி.
சங்க தமிழில் உள்ள விலங்கு, தாவரங்கள், ஜீவா ராசிகள், உணவு வகைகள், பூ, செடி, பறவைகளை பற்றி மட்டும் நாம் பல வகையான ஆய்வுகளை செய்யலாம், என்று திருமதி. வைதேஹி கூறினார். இதனை அவர் மொழியில், “சங்க தமிழ் is a database” என்ற சற்று பிரமிப்பூட்டும் வகையில் அறிக்கையிட்டார்.
மேலும் அவர் சில தொடர்ச்சியான சங்க தமிழ் சொற்கள் இன்று தமிழ், தொத்தி ஆங்கிலம், சீன, தாய்லாந்து மொழியில் பறவியதை எடுத்துகாட்டாக கூறினார்; கறி என்பது காரம் என்பதை மிளகின் காரம் இன்று “curry” என்று மாறியதையும், காசு என்பது “cash” என்று மாறியதையும் சுட்டி காட்டினார். அடுத்த முறை பனாங்கு காறி தின்னும் போது தாய்லாந்து உணவகத்தில் இது பற்றி ஒரு lecture நடத்தலாமோ!
பாஸ்டன் பாலா, மருத்துவர் திரு. சம்பந்தம் அய்யா, மற்றும் NETS குழுவினர், Connecticut தமிழ் சங்கம் உறுப்பினர்கள் என பலர் வந்து பயிலரங்கை சிறப்பித்தனர்.
பாஸ்டன் NETS நடத்திய, http://harvardtamilchair.com/ வழங்கிய தமிழ் அறிஞர் திருமதி. வைதேஹி ஹெர்பெர்ட் -இன் “சங்க தமிழ் பயிலரங்கு “
நான்கு மணி நேரம் சென்றதே தெரியவில்லை. எனக்கும் குடும்பத்தின் வழியாக எனது சிறுவயதில் இவரை சந்திதேன்; அப்போது எனது தாயுடன் மேசீஸ் சென்றதை நினைவு கூறினார். போட்டோ ஒன்றை நினைவிற்கு எடுத்தோம்.
நானும் மனைவியும் எங்கள் சார்பில் ஹார்வர்டு தமிழ் இருக்கை அமைபிற்கு நன்கொடை கொடுத்தோம். சம்பந்தம் அய்யா ஒரு பெறிய ஆசை அணைபளித்தார். நாள் அளவில் அன்று மாலை யாரோ “தேமதுர தமிழ் ஓசை உலகமெங்கும் பரவட்டும்” என்று சொல்லியது நினைவில் வந்தது. வாழ்கையில் கற்றது கையளவு என்றும் தோன்றியது.
மாலை முடிந்து இரவு குளிர் காற்று அடிக்க தொடங்க, club-house இருக்கைகளை ஒரே போல் இருந்த மாதிரி வைத்து விட (இங்கு பழக்க படி) உதவினோம்; விளக்கை நிறுத்தினர். சங்க தமிழ் மனதில் ஒரு “cognitive dissonance” ஆக இந்த இரவின் நிழலில் மறுபடியும் “கறி” தின்ன ஹிக்வேஇல் வீடு திரும்பிநேன்.
We can consider good workbooks like ‘Let Us C’, ‘Programming in C’, and books by Dietel and Dietel as trade books, lacking somewhat in style and conceptions. Books you are unlikely to gain more from while you read the second or third times.
Over many years I have come to rely on some good CS and algorithms textbooks; this list maybe reflective of a electrical engineer’s take on a computer science profession that is increasingly no-holds barred – if you can add then you can code – world
Move 1,2,3 disks from peg #1 to peg #2, with peg #3 as intermediate. Move disk 4 from peg #1 to peg #4. Then move all disks from peg #2 to peg #3 using peg #1 as intermediate.
.
CLRS book “Introduction to Algorithms” by founders of RSA and MIT CS faculty; link to Amazon
AOSP book “Numerical Recipes in Fortran 77; Art of scientific programming”, by Flannery, Press and Teukolsky; link
Dragon book “Compilers: principles, techniques and tools”, by Aho, Sethi, Ullman link
Tiger book “Modern Compiler Implementation in C/Java/ML” by Andrew Appel link
மூளை குளம்பி – மைய கணினியை செயல்படுத்தும் எந்திர மொழி
(பாகம் 1)
(replica of) “Thinker” statue by Auguste Rodin, at the Baltimore Art Museum at the Johns Hopkin’s University. (C) 2016, M. A.
கணினியை செயல்படுத்துவது அதன் மூலமான மைய கணினி; கணினியில் செயல்படும் அனைத்திற்கும் மூலமாக அமைவது அதன் மைய கணினி, மற்றும் அந்த மைய கணினியின் assembly மொழி (instruction set). சும்மா சொல்ல வேண்டுமானால் iPhone-இல் இருந்து, மடி கணினி, கைபேசி என்ற எல்லா செயலி சவுரியங்களுமே இதை போன்ற அடிப்படையில் தான் அடுக்கடுக்காக மென்பொருள்களை கொண்டு வடிவமைக்க பட்டுள்ளன.
அது சரி, அனால் இந்த எந்திர் மைய கணினியிர்க்கும் கணிமைக்கும் என்ன தொடர்பு ? இதனை சிறிதளவில் இந்த தொடரில் ஆறாயலாம். எந்திர மொழி ஒன்றை எழில் வழி செயல்பட செய்வது பற்றியும் இந்த கட்டுரை தொடரில் (இரு பாகங்களாக) நாம் பாற்கலாம். இந்த கட்டுரை சற்று கணினி நிரலாக்கத்தில் அறிமுகம் பெற்றவர்களுக்கு மேலும் விளங்குவதாக தோன்றும். இந்த கட்டுரைக்கு இணைந்த எழில் நிரல் மற்றும் மென்பொருள் உங்கள் பயன்பாட்டிற்கு அளிக்கப்படுகிறது.
மூளை குளம்பி மொழி [1] என்பது P” என்ற 1964-இல் உருவாக்கிய மொழியில் இருந்து உருவாக்கப்பட்டது. இந்த மொழியில் ‘+’, ‘-’, ‘[‘, ‘]’ , ‘>’, ‘<’ போன்ற செயலுறுபுகள் என்பதில் இருந்து ,மைய கணினி ஒன்றை உருவாக்கும் திறன் பெற்றது. மூளை குளம்பி என்ற மொழியில் வெளியிடு என்பதற்கு ‘.’ என்றும், உள்ளீடு என்பதற்கு ‘,’ என்றும் கூடுதலாக கொண்டாது.
செயலுறுபு விளக்கம் – (Operators)
‘>’, ‘<‘ – செயலுறுபு நினைவகத்தை குறிக்கும் இடத்தை முன் அல்லது பின் திசையில் ஒரு இடம் அளவு மாற்றும்
‘+’, ‘-‘ – செயலுறுபு நினைவகத்தின் மதிப்பை கூட்டும் அல்லது கழிக்கும்
‘[‘, ‘]’ – செயலுறுபு நிரலின் இயக்கம் பகுதியின் அடுத்த அடைவுகுரிப்பிபிற்கு ‘]’, அல்லது தொடங்கும் குறி ‘[‘ –இற்கு தாவும் படி குறிக்கும்
‘,’ ’.’ – என்ற செயலுறுபு உள்ளிடு, வெளியீடு, குறிக்கும்
இன்று நாம் “மூளை குழம்பி” என்ற ஒரு மொழியை பற்றியும் புரிந்து கொண்டு இதனை செயல்படுத்தும் ஒரு எந்திரத்தை எழில் மொழியில் உருவாக்கலாம்.
மூளை குழம்பி மொழியின் அம்சங்கள்; இந்த மொழியில் எண்களை எப்படி எழுதுவது, எண்களை கூட்டுதல், “Hello World” என்று அழைப்பது எப்படி? என்றெல்லாம் உள்ள கேள்விகளுக்கு விடை காணலாம்.
அடுத்த படியாக, மேலும், எழில் மொழியில் எப்படி ஒரு மூளை குளம்பி உள்ளீடை புரிந்து இயங்கும் படி செயல்படும் செயலியை உருவாக்குவது என்றெல்லாம் பற்க்கலாம்.
இந்த மொழியில் நிரல்களை எழுதுவது ஒரு ஆதி–கணினி மொழி அல்லது Turing Machine என்பதை போல் ஒரு தோற்றம் அளிக்கும். இதில் ஒரு எண்ணலி நீளமான பேப்பர் ஒன்றை நினைவகமாக கொண்டு ஒரு பேனா ஒன்றையும் கொண்டது. இந்த பேனாவை கொண்டு பேப்பரில் உள்ள கட்டங்களில் ‘1’ அல்லது ‘0’ என்று எழுதலாம்; அதாவது ‘1’ என்று எழுதினால் எழுதுவதாகவும், ‘0’ என்று எழுதினால் அழிப்பதாகவும் பொருள். நாம் நிரல் இயக்கத்தை தொடங்கும் பொழுது பேப்பர் நினைவகம் முழுவதும் ‘0’ (பூஜ்யம்) என்ற நிலையில் உள்ளதாக கொள்ளலாம் [2].
படம்: டுரிங் எந்திரத்தின் பேப்பர் நினைவகமும், இயக்கம் முனையும்; [3]
கணினி மொழிகள் அனைத்தும் ஒன்றுடன் ஒன்று டுரிங்–எந்திரத்தின் வரையரைக்குள் சமன்பாடு கொண்டது (Turing-Completeness).
ஒரு கல்குலேடர் (கணிப்பான்) செயல்படுத்தும் திறன் கொண்ட மொழி ஒன்றை உருவாக்கினால் இந்த மொழி டுரிங் மொழி என்பதற்கு சமன்பாடனது; இது போன்ற மொழியை இயக்கும் சக்தியுடைய எந்திரம், (Turing Machine) டுரிங் எந்திரம் என்பதற்கு சமமாகும்.
எண்களை எப்படி குரியீடுவது ?
இந்த மாதிரி ஒரு எந்திரத்தில் முதலில் நாம் எண்களை எப்படி குரியீடுவது ? இவ்வாறு கணினியில் ஏற்றிய எண்களை கொண்டு எப்படி கணிப்பது ? இந்த மொழியில் நிபந்தனை கூறுகளை எப்படி எழுதுவது ? இதனை நாம் இந்த கட்டுரை பிரிவில் காணலாம்:
எண்களை நாம் பேப்பர் நினைவகத்தில் ‘1’ என்று எண்ணின் மதிப்பின் அளவிற்கு அத்தனை முறை குறியீடவும்; எ.க. 5 என்ற எண்ணை ‘11111’என்று அடுத்தடுத்த பேப்பர் நினைவகத்தின் கட்டத்தில் குறியிடலாம். இதற்க்கு எப்படி நிரல் எழுதுவது ? பேனாவை கொண்டு முதலில் ‘1’ என்று எழுத ‘+’ என்ற செயலுருபை பயன்படுத்தலாம். அடுத்த பேப்பர் கட்டத்திருக்கு செல்ல ‘>’ என்ற செயலுறுபை பயன்படுத்தலாம். மொத்தமாக, நினைவகத்தில் ‘11111’ என்று எழுத, ‘+>’ என்று ஐந்து முறை எழுதினால் ‘+>+>+>+>+>’ என்பது 5 என்ற எண்ணை குறியிடும் மூளை குளம்பி நிரல் ஆகும்.
இப்பொழுது P” மொழியில், மூளை குழம்பி மொழியில் உள்ள நினைவகத்தில் எந்த 8-பிட் எங்களையும் சேமிக்கலாம் என்றால், இதே எங்களை குறியீடும் நிரலை, 5 என்ற எண்ணை ‘+++++’ என்றும் எழுதலாம்.
தாவும் தன்மை உடைய மடக்கு கட்டளைகள்
இப்பொழுது இந்த மொழியில் மடக்கு வாக்கியத்தை எப்படி செயல்படுத்துவது என்று பார்க்கலாம். மடக்கு வாக்கியம் தொடக்கத்தை குறி ‘[‘ என்றும், இதன் முடிவை குறி ‘]’ என்று குறியிடலாம். இதன் பொருள், குறி ‘[‘ என்ற கட்டளையை கண்டபின் , தற்போது உள்ள பேப்பர் நினைவகத்தின் மதிப்பு பூஜியத்தின் அளவை விட கூடுதலாக இருந்தால் தொடரும் கட்டளைகளை இயக்கும்; இல்லையெனில் இதனை ஒடுத்த (பின்னால் வரும்) குறி ‘]’ முடிவு கட்டளையின் பின் வரும் கட்டளைகளுக்கு செல்லும் (தாவும் – Jump என்றே கொள்ளலாம்).
இதே போல் ‘]’ முடிவு கட்டளை, மடக்கு வக்கியதினை பழயபடி தொடங்கும் (இதனை ஓடுத்த, முன்னால் வரும்) குறி ‘[‘ கட்டளையிற்கு செல்லும். இதில் ஒப்பீடு என்றும் ஏதும் இல்லை.
எண்களை கூட்டுதல் எப்படி ?
மடக்கு கட்டளைகை கொண்டு எப்படி இரண்டு எண்களை கூட்டுவது ? நமது கணினியில் ஏற்கனவே 9, 10 என்ற எண்கள் நினைவகத்தில் உள்ளன என்று கொள்வோம்; இப்போது இரண்டாவது எண் 10-உடன் 9-முறை 1-ஐ கூட்டினால் நமக்கு விடை கிடைத்துவிடும் அல்லவா! இதை எப்படி மூளை குளம்பியில் எழுதுவது ? இது சிறிது சாதாரணமான மடக்கு வாக்கியத்தால் முடியும்,
[->+<]
இந்த நிரல் இயங்கியபின் நினைவகத்தில், 0, 19, என்று தோன்றி 19 உங்கள் விடை ஆகும். இதனை திரையில் இட, ‘.’ என்பதை சேர்த்துகொள்ளுங்கள்
[->+<].
மேலும் இந்த நிரல் ஏதேனும் இரண்டு எண்களை கூட்டவும் உதவும், 9, 10 மட்டுமல்ல!
முடிவிலா விடுகதை
இந்த மொழியில் தவறாக
+[]
என்று எழுதிவிட்டால் உங்கள் நிரல் இயங்குவதற்கும், முடிவதற்கும் எவ்வளவு நேரம் ஆகும் தெரியுமா ? யோசித்து பருகளேன்! விடை அடுத்த அத்தியாயத்தில்.
“Hello World” என்று அழைப்பது
மேல்கண்ட அம்சங்களை ஒருங்கினைத்து ஒரு வணக்கம் உலகம் (“Hello World”) என்று வெளியிடுவதற்கு ஒரு மூளை குளம்பி நிரலை இப்படி எழுதலாம்,
மேல்கண்ட அம்சங்களை ஒருங்கினைத்து ஒரு (மென்பொருளில்) எந்திரம் ஒன்றை நிரல்படுத்துவது பற்றி அடுத்த அத்தியாயத்தில் விளக்கத்துடன் பார்க்கலாம். அதுவரை இந்த நிரலை எழில் மொழி வழி இயக்குவதற்கு மூல நிரலுக்கு இங்கு github-இல் பார்க்கவும் [4].
(அடுத்த அத்தியாயத்தில் எழில் வழி இந்த மொழியை இயக்குவது பற்றி பற்கலாம்)