ஆவணம்

இ-தமிழ் பயனர் கையேடு

இ-தமிழ் நிரல்களை எழுத, இயக்க, வெளியிட முழுமையான வழிகாட்டி — முதல் வரியிலிருந்து தரவுத்தளம் சார்ந்த HTTP சேவை வரை.

இ-தமிழ் நிரல்களை எழுதவும் இயக்கவும் தேவையான அனைத்தையும் இந்தக் கையேடு உள்ளடக்குகிறது. முனையத்தைப் (terminal) பயன்படுத்தத் தெரிந்தால் போதும்; வேறு எதுவும் தேவையில்லை.

சுருக்கமான அறிமுகம் மட்டும் போதுமெனில் மொழி அறிமுகம் பாருங்கள். முழுத் திறவுச்சொல் பட்டியல் திறவுச்சொல் பட்டியலில் உள்ளது.

மரபுகள். குறியீடு தமிழ் எழுத்தில் காட்டப்படுகிறது. ஒவ்வொரு திறவுச்சொல்லுக்கும் எழுத்துப்பெயர்ப்பு வடிவமும், பெரும்பாலும் ஆங்கில வடிவமும் உண்டு; அனைத்தும் பரிமாறத்தக்கவை — மூன்று எழுத்து வடிவங்கள் பார்க்கவும். ஒரு வசதிக்கு உருவாக்கக் கொடி (build flag) அல்லது சூழல் மாறி தேவைப்பட்டால், அது குறிப்பிடப்படும்.

பொருளடக்கம்

தொடங்குதல்நிறுவல் · நிரலை இயக்குதல் · மூன்று எழுத்து வடிவங்கள்

மொழிமாறிகளும் வகைகளும் · எண்களும் பணமும் · சரங்கள் · உள்ளீடும் வெளியீடும் · செயற்குறிகள் · நிபந்தனைகளும் சுழற்சிகளும் · செயல்கள் · அணிகளும் பதிவேடுகளும் · சுழற்சி · முடிவுகள் · தொகுதிகள் · வகைச் சரிபார்ப்பு · பெயரிடல் விதிகள் · பிழைகள் · கோப்புகள்

நூலகங்கள்நிலையான நூலகம் · கணக்கியலும் GST-யும்

சேவைகள் கட்டுதல்தரவுத்தளங்கள் · HTTP சேவையகம் · JSON · அங்கீகாரம் · கையொப்பமிடல் · பைட்டுகளும் குறியாக்கமும் · வெளிச்செல்லும் HTTP · திட்டமிட்ட பணிகள்

நடைமுறைதிருத்தி · சரிபார்ப்பும் சோதனையும் · சூழல் மாறிகள் · அடுத்த படிகள்


1. நிறுவல்

விரைவான வழிக்கு Rust-ம் தேவையில்லை, C கருவித்தொகுப்பும் தேவையில்லை.

Windows

Expand-Archive etamil-windows-x64.zip -DestinationPath .
.\etamil-windows-x64\install.ps1

Linux

tar -xzf etamil-linux-x64.tar.gz
./etamil-linux-x64/install.sh

macOS — Apple Silicon-க்கு arm64, Intel-க்கு x64; uname -m எது என்பதைச் சொல்லும்.

tar -xzf etamil-macos-arm64.tar.gz
./etamil-macos-arm64/install.sh
xattr -dr com.apple.quarantine ~/.local/lib/etamil

கடைசி வரி விருப்பத்தேர்வு அல்ல, தேவையானது: இக்கோப்புகள் notarize செய்யப்படவில்லை, எனவே உலாவி வழியாகப் பதிவிறக்கியதை macOS தனிமைப்படுத்துகிறது; Gatekeeper அதை இயக்க மறுக்கும். ஒருமுறை இக்குறியை நீக்கினால் போதும்.

பிறகு புதிய முனையம் ஒன்றைத் திறக்கவும் — நிறுவி PATH-ஐ மாற்றுகிறது, ஏற்கெனவே இயங்கும் ஷெல் அதைக் காணாது — பின்னர் சரிபார்க்கவும்:

etamil --version

நீக்குவதும் எளிது: Windows நிறுவி அனைத்தையும் %LOCALAPPDATA%\Programs\eTamil-இல், Linux நிறுவி ~/.local-இல் வைக்கிறது. இரண்டுக்கும் நிர்வாகி உரிமை தேவையில்லை.

மூலக்குறியீட்டிலிருந்து உருவாக்க — PostgreSQL, MySQL இயக்கிகள், LLVM பின்தளம், அல்லது தொகுப்பியிலேயே பணியாற்ற வேண்டுமெனில் — நிறுவல் பக்கம் பார்க்கவும்.

2. நிரலை இயக்குதல்

echo 'அச்சு "வணக்கம் உலகம்!";' > hello.etamil
etamil --vm hello.etamil

Windows-இல் கோப்பை UTF-8 ஆக எழுதுங்கள்:

'அச்சு "வணக்கம் உலகம்!";' | Out-File hello.etamil -Encoding UTF8
etamil --vm hello.etamil
கொடி செயல்
--vm பைட்கோட் VM-இல் இயக்கு. இதுவே இயல்பு, இதுவே வேண்டியது
--check லெக்ஸ், பாகுபடுத்தல், வகைச் சரிபார்ப்பு மட்டும். எல்லாப் பிழைகளையும் தெரிவிக்கும், நிரலை ஒருபோதும் இயக்காது
--server பணியாளர் குழுவுடன் HTTP சேவையகத்தைத் தொடங்கு
--async ஒருங்கிணைந்த சேவையகம்: async ஏற்பு, blocking pool-இல் கையாளிகள். Ctrl-C நிறுத்தும்
--llvm LLVM பின்தளம். --features llvm தேவை; Linux, macOS மட்டும்
--port <PORT> சேவையகத் துறை, இயல்பு 8080
--host <HOST> சேவையக ஹோஸ்ட், இயல்பு 127.0.0.1

கோப்பு நீட்சிகள் மரபு சார்ந்தவை, கட்டாயம் அல்ல: களஞ்சியத்தில் .etamil மற்றும் .qmz இரண்டும் பயன்படுகின்றன.

மூன்று எழுத்து வடிவங்கள்

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

எண் வருவாய் = 100000;     // தமிழ் எழுத்து
eN varuvAy = 100000;       // எழுத்துப்பெயர்ப்பு (ezuqqu)
int income = 100000;       // ஆங்கிலப் பெயர்

எழுத்துப்பெயர்ப்பு ezuqqu என்ற தனி முறை; வேண்டுமென்றே ISO 15919 அல்ல. ஒரு தமிழ் எழுத்துக்கு ஒரு ASCII எழுத்து; துணைக்குறிகள் இல்லை, இரட்டை எழுத்துகள் இல்லை. ஆங்கிலம் ஒரே n ஆகச் சுருக்கும் மூன்று தமிழ் மூக்கொலிகளையும் இது தனித்தனியே வைக்கிறது — என்பது N, என்பது n, என்பது Z. முழு எழுத்து அட்டவணை மொழிப் பக்கத்தில் உள்ளது.

ஒரு நிரலுக்கு ஒரு வடிவத்தைத் தேர்ந்தெடுங்கள். கலப்பது சட்டப்படி சரியே, ஆனால் ஒரே மாதிரித் தெரியும், உண்மையில் வேறுபட்ட மாறிகளை உருவாக்கும் — பெயரிடல் விதிகள் பார்க்கவும்.


3. மாறிகளும் வகைகளும்

எண் age = 25;          // எண்
எண் price = 99.99;     // நிலைப்புள்ளி தசமம்
எண் rate = 15%;        // சதவீத மதிப்பு — சரியாக 0.15
சொல் name = "ரவி";     // சரம்

வகையை அறிவிப்பது விருப்பத்தேர்வு; அறிவிக்காமல் ஒதுக்குவதும் இயங்கும். அறிவித்தால், தொகுப்பி அதைக் கடைப்பிடிக்கச் செய்யும் — பிற்பாடு வரும் ஒதுக்கீடுகளிலும்.

வகைத் திறவுச்சொற்கள்: எண் மற்றும் பின்னம் (எண்), சொல் மற்றும் உரை (சரம்), ஈர்ம (ஈர்மம்), அணி (அணி), பொருள் மற்றும் தரவு (பதிவேடு), தேதி (நாள் — ISO-8601 உரையாக, அது காலவரிசைப்படி வரிசைப்படுத்தப்படுவதால்). மெய், பொய் இரண்டும் ஈர்ம மதிப்புகள், வகைகள் அல்ல.

4. எண்களும் பணமும்

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

அச்சு 0.1 + 0.2;      // 0.3        — 0.30000000000000004 அல்ல
அச்சு 99.99 * 3;      // 299.97     — 299.96999999999997 அல்ல
அச்சு 18%;            // 0.18       சரியாக

சமநிலைச் சோதனையும் துல்லியமானது. ஒரு பைசாவின் பகுதியளவு வேறுபட்ட இரு தொகைகள் ஒருபோதும் சமமாகக் கருதப்படுவதில்லை — எதையேனும் சரிகட்டும் தருணத்தில் இது முக்கியம்.

வகுத்தல் ஒவ்வொரு படியிலும் முழுமைப்படுத்தாமல் முழுத் துல்லியத்தைத் தக்கவைக்கிறது; இந்திய வரிக் கணக்கீடு இறுதியில் ஒருமுறை மட்டுமே முழுமைப்படுத்துகிறது. தேவைப்படும்போது வெளிப்படையாக முழுமைப்படுத்துங்கள்:

அச்சு வட்டமிடு(மொத்தம் / 3, 2);   // 2 இடங்களுக்கு
அச்சு தரை(12.7);                  // 12
அச்சு மேல்(12.1);                 // 13

தற்போது எண் மட்டுமே எண் வகை — தனி முழு எண் இல்லை, நாணயத்தைச் சுமக்கும் பண வகையும் இல்லை; எனவே ரூபாயை எண்ணிக்கையுடன் கூட்டுவதை வகைச் சரிபார்ப்பு இன்னும் மறுக்க முடியாது.

5. சரங்கள்

& இணைக்கிறது. சரங்கள் எழுதப்பட்ட எழுத்துகளால் அளக்கப்படுகின்றன, குறியீட்டுப் புள்ளிகளால் அல்ல:

அச்சு நீளம்("வணக்கம்");     // 5, 7 அல்ல

ஒரு தமிழ் எழுத்து பெரும்பாலும் மெய்யெழுத்து + உயிர்க்குறி அல்லது புள்ளி. குறியீட்டுப் புள்ளிகளை எண்ணினால் தவறான விடை வரும்; ஒவ்வொரு சர உதவியும் அத்தவற்றைப் பெறும்.

விடுபடுக் குறியீடுகள்: \n \t \r \" \\. தெரியாத ஒன்று வந்தால், ஊகிக்காமல் இரு எழுத்துகளையும் அப்படியே வைத்துக்கொள்கிறது.

6. உள்ளீடும் வெளியீடும்

எண் வருவாய்;
அச்சு "வருமானத்தை உள்ளிடுக: ";
உள்ளிடு வருவாய்;
அச்சு "வருமானம்: " & வருவாய்;

உள்ளிடு எப்போதும் உரையையே திருப்புகிறது. எண்ணுடன் ஒப்பிடும்போதோ கணிதத்தில் பயன்படுத்தும்போதோ அது மாற்றப்படுகிறது; எனவே ஒரு தொகையைப் படித்து வரி அடுக்குடன் ஒப்பிடுவது வெளிப்படையான மாற்றம் இல்லாமலே இயங்கும்.

7. செயற்குறிகள்

வகை செயற்குறிகள்
கணிதம் + - * /, மேலும் ஒற்றை -
ஒப்பீடு == != < <= > >=
தருக்கம் மற்றும் / maRRum / _and, அல்லது / allaqu / _or, இல்லை / illY / _not
சரம் &

முன்னுரிமை, தளர்வானது முதலில்: orandnot → ஒப்பீடு → + -* /.

(வருவாய் > 800000 மற்றும் வயது < 60) எனில் {
    அச்சு "வரி விதிக்கத்தக்கது";
}

மற்றும், அல்லது குறுஞ்சுற்று செய்கின்றன. விடை தெரிந்தபின் வலது பக்கம் மதிப்பிடப்படுவதில்லை; எனவே இடது பக்கம் வலது பக்கத்தைக் காக்க முடியும். முன்பு அது முடியாது என நம்ப வேண்டாம்.

8. நிபந்தனைகளும் சுழற்சிகளும்

(வருவாய் > 800000) எனில் {
    அச்சு "உயர்வு";
}
இன்றேல் {
    அச்சு "தாழ்வு";
}

எண் i = 0;
(i < 3) சுற்று {
    அச்சு i;
    i = i + 1;
}

நிபந்தனை முதலில் வந்து அடைப்புக்குள் இருக்கும்; எனில் அதைத் தொடர்கிறது.

9. செயல்கள்

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

செயல் வரிசை_மதிப்பு(உருப்படி) {
    திரும்பு உருப்படி.அளவு * உருப்படி.விலை;
}

முதல்-நிலைச் செயல்கள் இல்லை — ஒரு செயலை மதிப்பாகக் கடத்த முடியாது; அதனால்தான் நிலையான நூலகத்தில் map, filter இல்லை.

10. அணிகளும் பதிவேடுகளும்

அணிகள் […], சுழி முதல் குறியிடப்படுபவை. பதிவேடுகள் {…}, சாவி: மதிப்பு வடிவில்.

விலைகள் = [100, 250, 375];
அச்சு விலைகள்[0];                 // 100

உருப்படி = {விவரம்: "மடிக்கணினி", விலை: 54999};
அச்சு உருப்படி.விலை;
அச்சு உருப்படி["விலை"];           // அதே; சாவி இயக்க நேரத்தில் கணிக்கப்படுகிறது

இரண்டாவது வடிவம் முக்கியம்: சாவியைக் கணிக்க முடிவதால்தான், JSON பாகுபடுத்தி ஹோஸ்டில் அல்லாமல் இ-தமிழிலேயே எழுதப்பட்டுள்ளது.

11. சுழற்சி

ஒவ்வொரு … இல் அணிகள், பதிவேடுகள், சரங்கள் மீது நடக்கிறது.

ஒவ்வொரு உருப்படி இல் உருப்படிகள் {
    அச்சு உருப்படி.விவரம்;
}

12. முடிவுகள் — தோல்வியைக் கையாளுதல்

தோல்வி ஒரு மதிப்பு; விதிவிலக்கு (exception) அல்ல. தோல்வியடையக்கூடிய அழைப்பு சரி அல்லது தவறு ஐத் திருப்புகிறது; Rust-இன் பொருள்முறையைப் பின்பற்றுகிறது.

உள்ளமைச் செயல் பயன்
சரியா(r) முடிவு வெற்றியெனில் மெய்
தவறா(r) தோல்வியெனில் மெய்
மதிப்பு(r) மதிப்பை வெளியே எடு
இயல்பு(r, d) வெளியே எடு, தோல்வியெனில் d
? தோல்வியை அழைத்தவருக்குக் கடத்து
ப = ஜேசான்_படி(request_body);
(தவறா(ப)) எனில் {
    பதில் 400, "தவறான JSON";
}
தரவு = மதிப்பு(ப);

13. தொகுதிகள்

இறக்கு மற்றொரு கோப்பை இறக்குமதி செய்கிறது. பாதைகள் இறக்குமதி செய்யும் கோப்பின் அருகில் முதலில், பிறகு ETAMIL_PATH வழியாக, பிறகு தொகுப்பி இருமத்தின் அருகில் தீர்க்கப்படுகின்றன.

இறக்கு "nUlakam/paNam.qmz";
இறக்கு "../../nUlakam/kaNiqam.qmz";

எங்கிருந்தும் நிலையான நூலகத்தைப் பயன்படுத்த:

export ETAMIL_PATH=/path/to/etamil_compiler

14. வகைச் சரிபார்ப்பு

--check இயக்காமலேயே பாகுபடுத்தி வகை சரிபார்க்கிறது:

etamil --check my_program.qmz

அறிவிக்கப்பட்ட வகை இடத்துடன் கடைப்பிடிக்கப்படுகிறது:

✗ வரி 2, நெடுவரிசை 6: 'கொடியா' ஈர்ம (Irma, a boolean) என அறிவிக்கப்பட்டது,
  ஆனால் ஒரு அணி (an array) வழங்கப்பட்டது

சரிபார்ப்பு வேண்டுமென்றே குறுகியது. ஒரு எண் சொல் ஐ நிறைவு செய்கிறது; ஏனெனில் ஒவ்வொரு மதிப்பும் உரையாகவே காட்டப்படுகிறது, உள்ளிடு திருப்பும் உரை வழக்கமாக எண்களுடன் ஒப்பிடப்படுகிறது. அழைப்பு, குறியீடு, புலம் அணுகல் ஆகியவை எந்த உரிமைகோரலும் செய்வதில்லை; செயல்களுக்கு இன்னும் கையொப்பங்கள் இல்லை — அங்குள்ள மௌனம் ஒப்புதல் அல்ல, உரிமைகோரல் இல்லாமை.

15. பெயரிடல் விதிகள்

நீங்கள் தட்டச்சு செய்தபடியே ஒரு பெயர் சேமிக்கப்படுகிறது — அச்சொல் ஒரு திறவுச்சொல்லாக இருந்தாலும். வங்கி = 5 என்பது வங்கி எனும் மாறியை உருவாக்குகிறது; {வரி: 100} என்பது வரி எனும் புலத்தைத் தருகிறது.

விளைவு: {வரி: 1} மற்றும் {vari: 1} வெவ்வேறு புலங்கள்; வருவாய் மற்றும் varuvAy வெவ்வேறு மாறிகள். ஒரு நிரலுக்கு ஒரு வடிவம். புலப் பெயர் என்பது தரவு — நீங்கள் தட்டச்சு செய்தது — மொழி அமைப்பு அல்ல.

இரு இடங்களில் மட்டும் நியமன ஆங்கிலப் பெயர் தக்கவைக்கப்படுகிறது; ஏனெனில் அவை பெயரிடுவது உங்களுக்கல்ல, ஹோஸ்டுக்குச் சொந்தமானது: தளம்_இணை-இல் தரவுத்தள வகை, வழி-இல் HTTP முறை.

இரு வகைத் திறவுச்சொற்கள். 202 திறவுச்சொற்களில் 109 ஒதுக்கப்பட்டவை, 93 ஒதுக்கப்படாதவை. பிரிவினை ஒரே விதியைப் பின்பற்றுகிறது: இலக்கணத்திற்குத் தேவையான சொற்கள் ஒதுக்கப்பட்டவை; நிரல்கள் எதைப் பற்றி எழுதப்படுகின்றனவோ அச்சொற்கள் ஒதுக்கப்படாதவை.

ஒதுக்கப்பட்டவை — மொழியின் சொந்த அமைப்பு. வகைகள் (எண், சொல், பொருள், தேதி), மாறிலிகள் (மெய், பொய், இன்மை), கட்டுப்பாட்டு ஓட்டம் (எனில், இன்றேல், சுற்று, ஒவ்வொரு), கூற்றுகள் (அச்சு, உள்ளிடு, செயல், திரும்பு), மேலும் தரவுத்தள, சேவையக, SQL சொற்கள். இவற்றில் ஒன்றைப் பெயராகப் பயன்படுத்தினால் அது பாகுபடுத்தல் பிழை — எதிர்பாராத நடத்தை அல்ல.

ஒதுக்கப்படாதவை — கணக்கியல் சொல்வளம். வரவு, பற்று, இருப்பு, சொத்து, பொறுப்பு, வருவாய், செலவு, வரி, வட்டி, பேரேடு, கடன், தொகை — மொத்தம் 89, ஒவ்வொன்றும் மாறி, அளபுரு அல்லது புலப் பெயராகச் சிறப்பாகப் பயன்படும்.

இரண்டாம் குழு இருப்பதற்குக் காரணம், இது கணக்கியலுக்கான மொழி. வரி ஒதுக்கப்பட்டால், வரி எனும் சொல்லைப் பயன்படுத்தி வரிக் கணக்கை எழுத முடியாது; பிரிவு 3-இன் முதல் வரியான எண் வருவாய்; தொகுக்கப்படாது.

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

மொத்தம் = 0;

அந்த நிரலில் எதுவும் மாறவில்லை, மொழி மாறியது — அந்த வரி இப்போது பாகுபடுத்தப்படாமல் போகலாம், அல்லது வேறு பொருள் தரலாம்.

இந்த ஏற்பாட்டின் நன்மையைத் தக்கவைக்கும் திருத்தம் எதுவும் இல்லை. 202-ஐயும் ஒதுக்கினால் துறைச் சொல்வளம் பறிபோகும். திறவுச்சொல் இடத்தில் மட்டும் திறவுச்சொல்லாகக் கருதுவது சாத்தியம், ஆனால் இலக்கணம் புரிந்துகொள்வது கடினமாகும், பிழைச் செய்திகளும் மோசமாகும். எனவே விதி எழுதி வைக்கப்படுகிறது: ஒரு திறவுச்சொல்லைச் சேர்ப்பதற்கு முன், அச்சொல் ஏற்கெனவே பயன்பாட்டில் உள்ளதா எனச் சரிபாருங்கள் — மேம்படுத்தலுக்குப் பிறகு ஒரு நிரல் பாகுபடுத்தப்படாமல் நின்றால், முதலில் சந்தேகிக்க வேண்டியது இதுவே.

16. பிழைச் செய்திகளைப் படித்தல்

ஒவ்வொரு பாகுபடுத்தல் பிழையும் வரியையும் நெடுவரிசையையும் தமிழிலும் ஆங்கிலத்திலும் சுமக்கிறது:

✗ வரி 3, நெடுவரிசை 1: ';' எதிர்பார்க்கப்பட்டது, 'அச்சு' கிடைத்தது
  (line 3, column 1: expected ';', found 'அச்சு')

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

செயல்படுத்தப்படாத எதுவும் அமைதியாக ஏதோ ஒன்றைச் செய்யாமல், தெளிவான பிழைச் செய்தியுடன் நிற்கிறது — வரிக் கணக்கீட்டில் அமைதியான செயலின்மை, பிழையை விட மோசமானது.

17. கோப்புகளும் CSV-யும்

கோப்பு_திற "output.txt", "write";     // எழுதத் திறப்பது உள்ளடக்கத்தை நீக்கும்
கோப்பு_எழுது "output.txt", "வணக்கம்";  // அடுத்த எழுத்துகள் இணைக்கப்படும்
கோப்பு_மூடு "output.txt";

கோப்பு_படி "output.txt", data;
அச்சு data;

தலைப்பு வரியைத் தவிர்த்து CSV வரிசைகளை எண்ணுதல்:

தரவுரை_படி "students.csv", total;
அச்சு total;

18. நிலையான நூலகம்

nUlakam/ Rust-இல் அல்ல, இ-தமிழில் எழுதப்பட்டுள்ளது. நிலையான நூலகத்துக்கே ஓர் அமைப்பு மொழி தேவைப்பட்டால், அது இருப்பதற்கான காரணத்துக்கே இந்த DSL போதுமானதாக இருக்காது.

தொகுதி உள்ளடக்கம்
col.qmz சரங்கள் — துண்டு தேடு பிரி ஒன்றிணை ஒழுங்கு தொடங்குகிறதா முடிகிறதா
kaNiqam.qmz கணிதம் — முழுமதிப்பு சிறியது பெரியது கூட்டு சராசரி சதவீதம்
aNi.qmz அணிகள் — உள்ளதா இடம்_காண் தலைகீழ் வெட்டு புலம்_எடு காலியா
paNam.qmz பணம் — ரூபாய் காசு_வடிவம் காசாக லட்சம் கோடி
jEcAZ.qmz JSON — ஜேசான்_ஆக்கு ஜேசான்_படி
kuRiyAkkam.qmz குறியாக்கம் — அறுபத்துநான்கு_ஆக்கு அறுபத்துநான்கு_படி பதினாறு_ஆக்கு பதினாறு_படி
இறக்கு "nUlakam/paNam.qmz";

அச்சு ரூபாய்(12345678.5);      // ₹1,23,45,678.50 — லட்சம், கோடி

ஹோஸ்ட் வழங்குபவை, மொழியால் வெளிப்படுத்த முடியாதவை மட்டும்: நீளம் இணை வகை · சரி தவறு சரியா தவறா மதிப்பு இயல்பு · வட்டமிடு தரை மேல் · சொல்லாக்கு எண்ணாக்கு · மேல்_எழுத்து கீழ்_எழுத்து · இன்று நாள்_வேறுபாடு நாள்_கூட்டு · கடவுச்சொல்_மறை கடவுச்சொல்_சரியா சீட்டு_ஆக்கு சீட்டு_சரிபார் · கையொப்பம் கையொப்பம்_சரியா · வலை_பெறு வலை_பதி வலை_அனுப்பு · பைட்டுகள் பைட்டுச்_சரம்.

19. கணக்கியலும் GST-யும்

நிதிச் சொல்லகராதி மொழிக்குள்ளேயே உள்ளது — வரவு, பற்று, வரி, இருப்புநிலை, பேரேடு, மூலதனம் ஆகியவை திறவுச்சொற்கள். அவற்றுக்கு மேலுள்ள கட்டமைப்பு nUlakam/kaNakkiyal/-இல், அதுவும் இ-தமிழில்.

இறக்கு "nUlakam/kaNakkiyal/pErEtu.qmz";

பேரேடு = மதிப்பு(பதிவிடு(பேரேடு, பரிவர்த்தனை_ஆக்கு(
    "JV001", "2026-04-01", "தொடக்க மூலதனம்", [
        பற்று_வரிசை("1000", 500000),
        வரவு_வரிசை("3000", 500000)
    ])));

பதிவிடு சமநிலையற்ற பரிவர்த்தனையை மறுத்து தவறு ஐத் திருப்புகிறது; எனவே சமநிலையற்ற எதுவும் பேரேட்டை அடைவதில்லை. பேரேடு ஒரு மதிப்பு: பதிவிடுதல் பழையதைத் திருத்தாமல் புதிய பேரேட்டைத் திருப்புகிறது; எனவே ஒரு பதிவை பின்னர் மாற்ற முடியாது.

முழு எடுத்துக்காட்டுகள் நிதிப் பக்கத்தில்.


20. தரவுத்தளங்கள்

வினாக்கள் எப்போதும் அளபுருக்களுடன். SQL உரைக்குள் ஒரு மதிப்பை இணைக்கும் வழி வேண்டுமென்றே இல்லை; எனவே ஊடுருவல் (injection) வகைப் பிழையை எழுதவே முடியாது.

தளம்_இணை எசுகியூஎல்லைட், "kaNakku.db";
தளம்_வினா "SELECT peyar, qokY FROM pativukaL WHERE vakY = ?", ["வரவு"], வரவுகள்;

வரிசைகள் பதிவேடுகளின் அணியாகத் திரும்புகின்றன.

இயந்திரம் நிலை குறிப்பு
SQLite இயங்குகிறது உள்ளமைக்கப்பட்டது. தசமங்கள் உரையாகச் சேமிக்கப்படுகின்றன, துல்லியம் இழக்கப்படுவதில்லை
PostgreSQL இயங்குகிறது --features postgres. பணம் நேட்டிவ் NUMERIC-இல்; இடங்காட்டிகள் $1, $2
MySQL / MariaDB நேரடியாகச் சரிபார்க்கப்பட்டது --features mysql. இடங்காட்டிகள் ?
MongoDB இயங்குகிறது --features mongodb; ஒரு ஆவணம் ஒரு பொருள்ஏ, எண்கள் Decimal128
Redis இயங்குகிறது ஒரே பொதுவான ரெடிஸ்_கட்டளை, எனவே எல்லாக் கட்டளைகளும் இயங்குகின்றன; nUlakam/qaLam/retis.qmz பரவலானவற்றைப் பெயரிடுகிறது

ஒவ்வொரு கோரிக்கைக்கும் மீண்டும் திறக்காமல், இணைப்புகள் செயல்முறை அளவிலான ஓய்வுத் தேக்ககத்திலிருந்து மீண்டும் பயன்படுத்தப்படுகின்றன; குத்தகைகள் தனிப்பட்டவை, எனவே ஒரு பரிவர்த்தனை தன் இணைப்பைத் தனக்கே வைத்திருக்கும். ETAMIL_DB_IDLE எத்தனை சூடாக இருக்கும் என வரம்பிடுகிறது.

21. HTTP சேவையகம்

etamil --server --port 8080 my_service.qmz
etamil --async  --port 8080 my_service.qmz

வழி ஒரு வழியை அறிவிக்கிறது, பதில் பதிலளிக்கிறது:

வழி பெறு, "/kaNakku/:id" {
    பதில் 200, "id=" & param_id;
}

வழி பதி, "/pativu" {
    பதில் 201, "உடல்: " & request_body;
}
மாறி உள்ளடக்கம்
request_method HTTP முறை
request_path கோரப்பட்ட பாதை
request_body மூல உடல்
query_params வினாச் சரம், பதிவேடாக
headers கோரிக்கைத் தலைப்புகள், பதிவேடாக
path_params பொருந்திய :name பகுதிகள்
param_<name> ஒவ்வொரு பாதை அளபுருவும் நேரடியாக

பதில் தலைப்புகள் சாதாரண பதிவேடு; விடுத்தால் சேவையகம் application/json எனப் பதிலளிக்கும்.

--async இணைப்புகள் ஏற்கப்படும் விதத்தை மட்டுமே மாற்றுகிறது. VM ஒத்திசைவாகவே இருக்கிறது; கையாளிகள் tokio-வின் blocking pool-இல் இயங்குகின்றன — அதுவே blocking தரவுத்தள இயக்கிகள் தொடர்ந்து வேலை செய்ய வைக்கிறது.

22. JSON

இறக்கு "nUlakam/jEcAZ.qmz";

ப = மதிப்பு(ஜேசான்_படி(request_body));
அச்சு ப["qokY"] + 1;                       // எண், உரை அல்ல
பதில் 200, ஜேசான்_ஆக்கு({நிலுவை: 1500});

புலங்கள் வரிசைப்படுத்தப்பட்ட நிலையில் தொடராக்கப்படுகின்றன; எனவே பதில் உடல் சோதனைகளில் உறுதிப்படுத்தத்தக்க அளவு நிலையானது. \uXXXX விடுபடுக் குறியீடுகள் மாற்றப்படுவதில்லை.

23. அங்கீகாரம்

bcrypt-ம் JWT-ம் ஹோஸ்டில் உள்ளன; மறையாக்கத்துக்கும் HMAC-க்கும் மொழியால் அணுக முடியாத பைட்டுகளும் சமவாய்ப்பும் தேவை.

மறை = கடவுச்சொல்_மறை(கடவுச்சொல்);
(கடவுச்சொல்_சரியா(கடவுச்சொல், மறை)) எனில் {
    சீட்டு = சீட்டு_ஆக்கு({பயனர்: "ravi", பங்கு: "admin"});
    பதில் 200, சீட்டு;
}

சேவையகத்தைத் தொடங்கும் முன் ETAMIL_JWT_SECRET ஐ அமைக்கவும்.

24. கையொப்பமிடலும் வெப்ஹூக்குகளும்

கையொப்பம் HMAC-SHA256 கையொப்பத்தை உருவாக்குகிறது; கையொப்பம்_சரியா சரிபார்க்கிறது. ஒப்பீடு நிலையான நேரத்தில் நடக்கிறது.

வழி பதி, "/webhook" {
    (கையொப்பம்_சரியா(request_body, headers["X-Signature"], ரகசியம்)) எனில் {
        பதில் 200, "ok";
    }
    பதில் 401, "தவறான கையொப்பம்";
}

25. பைட்டுகள், base64, hex

பைட்டுகள் உரையைப் பைட்டுகளாக்குகிறது; பைட்டுச்_சரம் மீண்டும் உரையாக்குகிறது. பைட் அணி என்பது எண்களின் சாதாரண அணி — வேண்டுமென்றே புதிய மதிப்பு வகை அல்ல.

இறக்கு "nUlakam/kuRiyAkkam.qmz";

க = அறுபத்துநான்கு_ஆக்கு(பைட்டுகள்("வணக்கம்"));
அச்சு பைட்டுச்_சரம்(அறுபத்துநான்கு_படி(க));

26. பிற சேவைகளை அழைத்தல்

வலை_பெறு, வலை_பதி, வலை_அனுப்பு வெளிச்செல்லும் கோரிக்கைகளை அனுப்புகின்றன; --features http-client பின்னால், இயல்பாகவே இயக்கத்தில். 2xx அல்லாத பதில் தோல்வி அல்ல, ஒரு முடிவு.

ப = வலை_பெறு("https://api.example.in/rates");
(சரியா(ப)) எனில் {
    அச்சு மதிப்பு(ப).உடல்;
}

27. திட்டமிட்ட பணிகள்

இடைவெளி 3600 {
    அச்சு "மணிநேர சரிகட்டல்";
}

அந்த எண் இயக்கங்களுக்கு இடையிலான இடைவெளி. ஒரு இயக்கம் இடைவெளியை மீறினால், அடுத்தது ஏற்கெனவே ஓடுவதன் மேல் தொடங்காமல் தாமதமாகத் தொடங்கும் — பேரேட்டுப் பதிவுகளை இடும் பணிக்கு, அது தாமதத்துக்கும் தவறுக்கும் இடையிலான வேறுபாடு.


28. திருத்தி ஆதரவு

VS Code நீட்சி தொகுப்பிக் களஞ்சியத்தில் eTamil_Code/-இல்: 202 திறவுச்சொற்களுக்கும் எல்லா வடிவங்களிலும் நிறமூட்டல், 62 உள்ளமைச் செயல்கள் மற்றும் 254 nUlakam செயல்களுக்கு நிரப்புதல், தட்டச்சு செய்யும்போதே --check பிழைகள்.

இலக்கணமும் நிரப்புதல் தரவும் lexer.rs-இலிருந்து உருவாக்கப்படுகின்றன; அவை விலகினால் CI தோல்வியடையும்.

29. சரிபார்ப்பும் சோதனையும்

etamil --check my_program.qmz

தொகுப்பிக் களஞ்சியத்தில்:

cargo test                        # 288 மொழி + 113 அலகு + 10 host-capture + 8 --check
./scripts/run_examples.sh

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

30. சூழல் மாறிகள்

மாறி செயல்
ETAMIL_PATH இறக்குமதி செய்யும் கோப்பின் அடைவுக்குப் பிறகு இறக்கு தேடும் இடம்
ETAMIL_JWT_SECRET சீட்டு_ஆக்கு / சீட்டு_சரிபார் க்கான கையொப்ப ரகசியம்
ETAMIL_DB_IDLE ஓய்வுத் தேக்ககத்தில் எத்தனை தரவுத்தள இணைப்புகள் சூடாக இருக்கும்
ETAMIL_TEST_MYSQL நேரடி MySQL எடுத்துக்காட்டைச் சேர்க்க 1 என அமைக்கவும்

31. அடுத்த படிகள்