மூளை குளம்பி – மைய கணினியை செயல்படுத்தும் எந்திர மொழி (Brain F**k interpreter in Ezhil language)

(replica of) "Thinker" statue by Auguste Rodin, at the Baltimore Art Museum at the Johns Hopkin's University.

மூளை குளம்பி மைய கணினியை செயல்படுத்தும் எந்திர மொழி

(பாகம் 1)

(replica of) "Thinker" statue by Auguste Rodin, at the Baltimore Art Museum at the Johns Hopkin's University.
(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)

  1. >’, ‘<‘ – செயலுறுபு நினைவகத்தை குறிக்கும் இடத்தை முன் அல்லது பின் திசையில் ஒரு இடம் அளவு மாற்றும்

  2. +’, ‘-‘ – செயலுறுபு நினைவகத்தின் மதிப்பை கூட்டும் அல்லது கழிக்கும்

  3. [‘, ‘]’ – செயலுறுபு நிரலின் இயக்கம் பகுதியின் அடுத்த அடைவுகுரிப்பிபிற்கு ‘]’, அல்லது தொடங்கும் குறி ‘[‘ –இற்கு தாவும் படி குறிக்கும்

  4. ,’ ’.’ – என்ற செயலுறுபு உள்ளிடு, வெளியீடு, குறிக்கும்

இன்று நாம் “மூளை குழம்பி” என்ற ஒரு மொழியை பற்றியும் புரிந்து கொண்டு இதனை செயல்படுத்தும் ஒரு எந்திரத்தை எழில் மொழியில் உருவாக்கலாம்.

மூளை குழம்பி மொழியின் அம்சங்கள்; இந்த மொழியில் எண்களை எப்படி எழுதுவது, எண்களை கூட்டுதல், “Hello World” என்று அழைப்பது எப்படி? என்றெல்லாம் உள்ள கேள்விகளுக்கு விடை காணலாம்.

அடுத்த படியாக, மேலும், எழில் மொழியில் எப்படி ஒரு மூளை குளம்பி உள்ளீடை புரிந்து இயங்கும் படி செயல்படும் செயலியை உருவாக்குவது என்றெல்லாம் பற்க்கலாம்.

இந்த மொழியில் நிரல்களை எழுதுவது ஒரு ஆதிகணினி மொழி அல்லது Turing Machine என்பதை போல் ஒரு தோற்றம் அளிக்கும். இதில் ஒரு எண்ணலி நீளமான பேப்பர் ஒன்றை நினைவகமாக கொண்டு ஒரு பேனா ஒன்றையும் கொண்டது. இந்த பேனாவை கொண்டு பேப்பரில் உள்ள கட்டங்களில் ‘1’ அல்லது ‘0’ என்று எழுதலாம்; அதாவது ‘1’ என்று எழுதினால் எழுதுவதாகவும், ‘0’ என்று எழுதினால் அழிப்பதாகவும் பொருள். நாம் நிரல் இயக்கத்தை தொடங்கும் பொழுது பேப்பர் நினைவகம் முழுவதும் ‘0’ (பூஜ்யம்) என்ற நிலையில் உள்ளதாக கொள்ளலாம் [2].

image1

படம்: டுரிங் எந்திரத்தின் பேப்பர் நினைவகமும், இயக்கம் முனையும்; [3]

  1. கணினி மொழிகள் அனைத்தும் ஒன்றுடன் ஒன்று டுரிங்எந்திரத்தின் வரையரைக்குள் சமன்பாடு கொண்டது (Turing-Completeness).

  2. ஒரு கல்குலேடர் (கணிப்பான்) செயல்படுத்தும் திறன் கொண்ட மொழி ஒன்றை உருவாக்கினால் இந்த மொழி டுரிங் மொழி என்பதற்கு சமன்பாடனது; இது போன்ற மொழியை இயக்கும் சக்தியுடைய எந்திரம், (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].

(அடுத்த அத்தியாயத்தில் எழில் வழி இந்த மொழியை இயக்குவது பற்றி பற்கலாம்)

மேற்கோள்கள்

  1. மூளை குளம்பி மொழி https://en.wikipedia.org/wiki/P′′

  2. கணினியின் கோட்பாடுகளை கண்டறிந்த மேதை அலன் டுரிங்

  3. டுரிங் எந்திரம் விக்கிபீடியா

  4. எழில் வழி மாதிரி இயக்கி