நிரல் மொழி

**நிரல்தொடுப்பு மொழி** *(Programming language) * அல்லது **நிரலாக்க மொழி** என்பது ஒரு குறியீட்டு மொழியாகும். இது பலவகை வெளியீடுகளை உருவாக்கப் பயன்படும் கட்டளைகளின் கணத்தைத் தரும். நிரலாக்க மொழிகள் பொதுவாக, கணினிக்கு எந்திரக் கட்டளைகளைத் தரும். இவை குறிப்பிட்ட அல்கோரிதங்களைச் செயற்படுத்தும் நிரல்களை உருவாக்கப்  பயன்படும்.

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

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

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

நிரல் மொழியை கொண்டு ஒரு நெறிமுறையை (அல்கோரிதம்: Algorithm) தொகுத்து எழுதி அதனை எந்திரத்துக்கு உள்ளீடாக கொடுத்த பின்னர் , அதனை அந்த எந்திரம் செயல்படுத்தும். அந்த செயல்பாட்டை பொருத்து ஒரு வெளியீடு கிடைக்கும்.

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

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

## வரலாறு
### தொடக்கநிலை வளர்ச்சிகள்
தொடக்கநிலைக் கணினிகள் நிரலாக்க மொழியின்றியே எப்போது நிரலிடப்பட்டன. இது மிகவும் அரிய பணியாக விளங்கியது. இந்நிலையில் நிரல்கள், பதின்ம வடிவிலோ இரும வடிவிலோ அமைந்தன. இவை துளியிட்ட அட்டைகளில் இருந்து படிக்கப்பட்டன அல்லது காந்த நாடாக்களில் இருந்து படிக்கப்பட்டன அல்லது கணினியின் முகப்புப் பலகத்தில் இருந்த நிலைமாற்றிகளில் தொடுக்கப்பட்டிருந்த தகவல்களில் இருந்து பெறப்பட்டன. முழுமையான எந்திர மொழிகள் பிறகு,  *[[முதல் தலைமுறை நிரலாக்க மொழி]]கள்*  எனப்பட்டன.

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

முதல் உயர்மட்ட நிரலாக்க மொழிகள் அல்லது மூன்றாம் தலைமுறை நிரலாக்க மொழிகள் 1950 களில் உருவாகின. மிகப்பழைய முதல் உயர்மட்ட நிரலாக்க மொழியான பிளாங்கல்கூல் மொழி 1943 முதல் 1945 வரையில் கொன்றாடு சூசே என்பார் உருவாக்கிய செருமானியவகை Z3 கணினிக்காக எழுதப்பட்டது. என்றாலும் இது 1998, 2000 ஆம் ஆண்டு வரை நடைமுறைக்கு வரவில்லை.

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

மான்செசுட்டர் பல்கலைக்கழகத்தில், அலிக் கிளென்னி 1950 களின் தொடக்கத்தில்  தன்குறிமுறை எனுமோர் உயர்மட்ட நிர்ந்லாக்க மொழியை உருவாக்கினார். இது வாயில் குறிமுறையை எந்திரக் குறிமுறையாகத் தன்னியக்கமாகப் பெயர்க்க ஒரு தொகுப்பி பயன்பட்டது. முதல் குறிமுறையும் தொகுப்பியும் மான்செசுட்டர் மார்க் 1 கணினிக்காக மான்செசுட்டர் பல்கலைக்கழகத்தில் 1952 இல் உருவாக்கப்பட்டன. இது தான் முத தொகுப்பித்த உயர்மட்ட நிரலாக்க மொழியாகக் கருதப்படுகிறது.

டோனி புரூக்கரும் ஆர்.ஏ புருக்கரும் 1954 இல் மார்க் 1 கணினிக்கான இரண்டாம் தற்குறிமுறை நிரலாக்க மொழியை உருவாக்கினர். இது மார்க் 1 தன்குறிமுறை என வழங்கப்பட்ட்து. புரூக்கர் பெராண்டி மெர்க்குரி கணினிக்காகவும் ஒரு தன்குறிமுறை மொழியை மான்செசுட்டர் பலகலைக்கழகத்தொடு இணைந்து 1950 களில் உருவாக்கியுள்ளார். கேம்பிரிட்ஜ் பல்கலைக்கழக கணிதவியல் ஆய்வகத்தைச் சேர்ந்த கணினி அறிவியலாளராகிய டேவிடு ஆர்ட்லி என்பார் 1961 இல் எடுசாக் 2 (EDSAC 2) நிரலாக்க மொழியை வடிவமைத்தார். இது எடுசாக் 2 தன்குறிமுறை எனப்பட்ட்து. இது மெர்க்குரி தன்குறிமுறையில் இருந்து நேரடியாக களப் பயனுக்குத் தகவமைத்து உருவாக்கப்பட்டது. இது அதன் புறநிலைக் குறிமுறை அன்றைய வளர்ச்சிகளாகிய  உகப்புநிலைப்படுத்தலுக்காகவும் வாயில் மொழி ஆய்வுக்காகவும் பெயர்பெற்றது. மான்செசுட்டர் பல்கலைக்கழகத்தில் இதன் நிகழ்நிலைவகை, தனியாக அட்லாசு தன்குறிமுறை அட்லாசு 1 கணினிக்காக உருவாக்கப்பட்டது.

ஜான் பேக்கசு என்பார் 1954 இல் ஐ.பி.எம் நிறுவனத்தில்  போர்ட்ரான் (FORTRAN) எனும் நிரலாக்க மொழி ப்திதாகப் புனையப்பட்டது.  இது தான் தாளில் மட்டுமே வரையப்படாமல் நடைமுறைச் செயலாக்கத்தில் பரவலாகப் பயன்படுத்தப்பட்ட பொது நோக்க உயர்மட்ட நிரலாக்க மொழியாகும். It is still popular language for high-performance computing and is used for programs that benchmark and rank the world's fastest supercomputers.

ஐக்கிய அமெரிக்காவில் கிரேசு ஆப்பர் என்பார் இதற்கும் முந்தைய நிரலாக்க மொழியாகிய புளோமேட்டிக் (FLOW-MATIC) எனும் எனும் மொழியை வகுத்தளித்தார். இது இரெமிங்டன் இரேண்டு நிறுவனத்தில் இருந்த யூனிவாக் 1  கணினிக்காக 1955 முதை 1959 வரையிலான காலகட்டத்தில்  உருவாக்கப்பட்டது. ஆப்பர் வணிகத் தரவு கையாளும் வாடிக்கையாளர்கள் கணிதக் குறிமான வடிவத்தை ஏந்தானதாக்க் கருதாநிலையை உணர்ந்து, 1955 தொடக்கத்திலேயே, அவரும் அவரது குழுவினரும் ஆங்கில மொழியில் ஒரு தரக் குறிப்பீட்டை நிரலாக்கத்துக்கு முன்மொழிந்து அதன் முன்வடிவத்தை நடைமுறைப்படுத்தியும் வென்றனர். புளோமேட்டிக் தொகுப்பி 1958 இல் பொதுப்பயனுக்கு வந்தது. இது 1959 அளவில் கணிசமாக முழுமையாக்கப்பட்டது. கோபால் (COBOL) மொழி உருவாக புளோமேட்டிக் தான் மிகுந்த ஊக்கம் தந்தது. ஏனெனில், புளோமேட்டிக்கும் அதன் நேரட வழித்தொன்றலான ஐமாக்கோவும் (AIMACO)  மட்டுமே பயன்பாட்டில் அப்போது இருந்தன.

### சீராக்கம்

## அதிக பயன்பாட்டில் உள்ள நிரல் மொழிகள்
* சி 
* சி++
* ஒப்செக்டிவ் சி
* சி சாப் (நிரலாக்க மொழி)
* ஜாவா 
* பி.எச்.பி
* பெர்ள்
* பைத்தோன்
* ரூபி
* லிசுப்(Lisp)
* விசுவல் பேசிக்
* ஆட்டோ-ஹாட்-கீ
* எ.எசு.பி(Asp)
* ஜாவாசிகிரிப்டு
* லிஸ்ப்
* போர்ட்ரான்
* பாஸ்கல் நிரலாக்க மொழி

### தரவு தளம்
* சீக்வல்
* மைசீக்வல்
* ஓரக்கிள்

### இடைமுகம்/வரைகலை
### தமிழ் மொழியில் நிரல் மொழி
* எழில் (நிரலாக்க மொழி)

### சில்லு மொழிகள்

## நிரல் மொழிகள் பட்டியல்
* ஆக் (நிரல் மொழி) - Awk
* பேசிக் - Basic
* ஏபிசி - ABC
* அடா - Ada

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

## அளவீடுகள்
* பிறப்பிட ஆதரவு (இயல்பான சொற்றொடர்களில் ஒருங்குறி பயன்பாடு)
* மாறிலிகள்
* குறியேற்றம்/குறிவிலக்கு
* சீர்கோவை (Regular Expression)
* அடுக்குதல் (Collation)
* தேடுதல் (Searching)
* தேடு (search)
* பாடப்பிரிப்பு
* அக உருவகம்
* சிறப்பு பயன்பாடுகல் (நாட்காட்டி, நேரம்)
* முழு ஆதரவு (தன்மொழி நிரல்மொழி)

## மேற்கோள்கள்

## மேலும் படிக்க

* 
* Raphael Finkel: *[http://www.nondot.org/sabre/Mirrored/AdvProgLangDesign/ Advanced Programming Language Design] *, Addison Wesley 1995.
* Daniel P. Friedman, Mitchell Wand, Christopher T. Haynes: *[[Essentials of Programming Languages]]*, The MIT Press 2001.
* Maurizio Gabbrielli and Simone Martini: "Programming Languages: Principles and Paradigms", Springer, 2010.
* David Gelernter, Suresh Jagannathan: *Programming Linguistics*, The MIT Press 1990.
* Ellis Horowitz (ed.): *Programming Languages, a Grand Tour* (3rd ed.), 1987.
* Ellis Horowitz: *Fundamentals of Programming Languages*, 1989.
* Shriram Krishnamurthi: *[[Programming Languages: Application and Interpretation]]*, online publication.
* Bruce J. MacLennan: *Principles of Programming Languages: Design, Evaluation, and Implementation*, ஒக்ஸ்போர்ட் பல்கலைக்கழகப் பதிப்பகம் 1999.
* John C. Mitchell: *Concepts in Programming Languages*, கேம்பிறிட்ஜ் பல்கலைக்கழகப் பதிப்பகம் 2002.
* Benjamin C. Pierce: *[[Types and Programming Languages]]*, The MIT Press 2002.
* Terrence W. Pratt and Marvin V. Zelkowitz: *Programming Languages: Design and Implementation* (4th ed.), Prentice Hall 2000.
* Peter H. Salus. *Handbook of Programming Languages* (4 vols.). Macmillan 1998.
* Ravi Sethi: *Programming Languages: Concepts and Constructs*, 2nd ed., Addison-Wesley 1996.
* Michael L. Scott: *Programming Language Pragmatics*, Morgan Kaufmann Publishers 2005.
* Robert W. Sebesta: *Concepts of Programming Languages*, 9th ed., Addison Wesley 2009.
* Franklyn Turbak and David Gifford with Mark Sheldon: *Design Concepts in Programming Languages*, The MIT Press 2009.
* Peter Van Roy and Seif Haridi. *[[Concepts, Techniques, and Models of Computer Programming]]*, The MIT Press 2004.
* David A. Watt. *Programming Language Concepts and Paradigms*. Prentice Hall 1990.
* David A. Watt and Muffy Thomas. *Programming Language Syntax and Semantics*. Prentice Hall 1991.
* David A. Watt. *Programming Language Processors*. Prentice Hall 1993.
* David A. Watt. *Programming Language Design Concepts*. John Wiley & Sons 2004.

நிரல் மொழிகள்
பகுப்பு:நிரலாக்கம்
பகுப்பு:கணினி நிரல்