ప్రోగ్రామింగు భాష

**ప్రోగ్రామింగ్ భాష** కంప్యూటరు లాంటి యంత్రాలను నియంత్రించేందుకు అవసరమైన సందేశాలను ఇవ్వటానికి ఉపయోగపడే ఒక కృత్రిమమైన భాష. మనుషులు మాట్లాడుకునే భాషలలో ఉన్నట్లే ఈ భాషలలో కూడా వ్యాకరణ నియమాలు, సందర్భోచితంగా ఉపయోగించాల్సిన వాక్యనిర్మాణ నియమాలు ఉంటాయి.

ప్రోగ్రామింగు భాషలను, సమాచారాన్ని వివిధ రూపాలలో ఏ విధంగా అమర్చుకోవాలో, అలా అమర్చుకోవటానికి చేయవలసిన పనులను, సరైన పద్ధతిలో తెలుపటానికి ఉపయోగిస్తారు. కొంతమంది ఎటువంటి పనులనయినా విస్పష్టంగా తెలియజేయగలిగే భాషలను మాత్రమే ప్రోగ్రామింగు భాషలని పిలవటానికి ఇష్టపడతారు అందుకని కొన్ని కొన్ని హద్దులున్న ఇతర కృత్రిమ భాషలను "కంప్యూటరు భాష"లని పిలుస్తుంటారు.

ఇప్పటికే కొన్ని వేల ప్రోగ్రామింగు భాషలు సృష్టించారు, అంతేకాదు ప్రతీ సంవత్సరం చాలా కొత్తకొత్త భాషలు పుడుతూనే ఉన్నాయి.

## నిర్వచనాలు
సాధారణంగా ఈ క్రింద పేర్కొన్న గుర్తులను ఉపయోగించి ఫలానా కృత్రిమ భాషను ప్రోగ్రామింగు భాషా, కాదా అని నిరూపిస్తారు:

* *ప్రమేయం:* ప్రోగ్రామింగు భాషయైన కృత్రిమ భాషను ఉపయోగించి కంప్యూటరు ప్రోగ్రామును రాయవచ్చు. అటువంటి ప్రోగ్రాము కంప్యూటరు సహాయముతో కొన్ని విధములైన లెక్కింపులను చేయగలిగి ఉండాలి లేదా కంప్యూటరుకు అనుసంధానించిన బాహ్య యంత్రాలయిన ప్రింటరు, రోబోట్లు, మొదలయిన వాటిని నియంత్రించగలిగేలా ఉండాలి.
* *లక్ష్యం:* మనుషులు మాట్లాడుకునే భాషలకూ, ప్రోగ్రామింగు భాషలకూ ఉన్న ముఖ్యమైన తేడా ఏమంటే, మొదటివాటితో కేవలం మనుషుల మధ్య మాత్రమే సమాచార మార్పిడి చేసుకోగలుగుతాము కానీ ప్రోగ్రామింగు భాషలను ఉపయోగించి మనుషులు యంత్రాలకు ఆదేశాలు జారీచేయగలుగుతారు. కొన్ని ప్రోగ్రామింగు భాషలను ఉపయోగించి యంత్రాలే ఇతర యంత్రాలను నియంత్రిస్తూ ఉంటాయి. ఇందుకు ఉదాహరణగా ప్రింటరుని నియంత్రించటానికి ఆదేశాల రూపంలో ప్రోగ్రామును రాయటానికి మనం ఉపయోగించే పోస్టుస్క్రిప్టులాంటి సాఫ్టువేర్ల గురించి చెప్పుకోవచ్చు.
* *నిర్మాణాలు:* ప్రోగ్రామింగు భాషలు, సమాచారాన్ని నిర్వచించటానికి, ఆ సమాచారాన్ని రకరకాలుగా వ్యక్తపరచటానికి లేదా పనితీరు నిర్వహణను నియంత్రించటానికి, కావలిసిన మౌలికమైన నిర్మాణాలు కలిగి ఉండలి.
* *అభివ్యక్తీకరించగలిగే శక్తి:* గణాంక తత్వం (theory of computation) ప్రకారం భాషలను, వాటి ద్వారా వ్యక్తీకరించగలిగే గణాంకాల ఆధారంగా వర్గీకరించవచ్చు (Chomsky hierarchy చూడండి). అన్ని ట్యూరింగ్ కంప్లీట్ భాషలను ఒకే వర్గం భాషలుగా పరిగణించవచ్చు, ఈ వర్గంలోకి వచ్చే ఏ భాషనయినా ఉపయోగించి, అదే వర్గంలో ఉన్న ఇంకే ఇతర భాషలతో నిర్వచించగలిగే పనినయినా, నిర్వచించవచ్చు.

HTMLలాంటి గణాంకాలు చేయని భాషలను ప్రోగ్రామింగు భాషలుగా పరిగణించరు. సాధారణంగా ప్రోగ్రామింగు భాషను, గణాంకాలు చేయని భాష మధ్యలో పొదుగుతారు. ఉదాహరణకు HTML మధ్యలో జావాస్క్రిప్టును ఉంచటం.

## ఉద్దేశ్యము
కంప్యూటరుకు అదేశాలను జారీచేయగలగటం, ప్రోగ్రామింగు భాషల ముఖ్యోద్దేశము. కాకపోతే ఈ భాషలలో ఆదేశాలను వ్యక్తపరిచే విధానం, మనుషులతో వ్యక్తపరచే విధానం కంటే తేడాగా ఉంటుంది, అంతేకాదు ప్రోగ్రామింగు భాషలలో మన ఆదేశాలను మరింత వివరంగా, విపులంగా వ్యక్తపరచాలి. మనుషులకు ఆదేశాలు ఇచ్చేటప్పుడు కొన్ని చిన్న చిన్న తపుడు ఆదేశాలు ఇచ్చినా, లేదా సందిగ్ధమైన ఆదేశాలు ఇచ్చినా కూడా వాటి అసలు అర్థాన్ని అవతలి వారి అర్థం చేసుకుంటారని భావించవచ్చు. కానీ కంప్యూటర్లు చెప్పింది చెప్పినట్లు చేస్తాయి, కాబట్టి వాటికి మన ఆదేశాలలోని అసలు భావాన్ని అర్ధం చేసుకునే శక్తి ఉండదు, అందుకని ప్రోగ్రామింగు భాషలు సందిగ్ధమైన ఆదేశాలను స్వీకరించవు.

ఇప్పటి వరకూ చాలా భాషలు తయారయ్యాయి, కొన్ని భాషలను కొత్తగా సృష్టిస్తే, కొన్నిటినేమో ఇతర భాషలను మార్చి సృష్టించారు, కానీ చివరికి చాలా భాషలు నిరుపయోగంగా మారిపోయాయి. అయితే అన్ని అవసరాలకూ ఉపయోగించగలిగే ఒక విశ్వవ్యాప్తమైన ప్రోగ్రామింగు భాషను తయారుచేయడానికి కొంత కృషి జరిగింది, కానీ ఆ కృషిలో తయారైన ఏ భాష కూడా పరీక్షలలో నిలువలేదు. భాషలను విభిన్నమైన పరిస్థితులలో ఉపయోగించటం వలన విభిన్నమైన ప్రోగ్రామింగు భాషల అవసరం ఏర్పడింది:

* వ్యక్తిగతావసరాలకు రాసుకునే చిన్నచిన్న ప్రోగ్రాముల నుండి, పెద్ద పెద్ద వ్యవస్థలను నడపటానికి వందల మంది తయారుచేసే ప్రోగ్రాముల వరకూ, చూస్తే ప్రోగ్రాముల శ్రేణి చాలా విస్తృతంగా ఉంటుంది.
* ప్రోగ్రాములను రాసేవారి స్థాయినిబట్టి వారు కూడా విస్తృత శ్రేణులలో ఉంటారు, కొంతమంది సులువుగా అర్థమవ్వగలిగేలా ప్రోగ్రాములు ఉండాలని కోరుకుంటే, ఇంకొంతమంది క్లిష్టమైన ప్రోగ్రాములను కూడా ఆకళింపు చేసుకోగలుగుతారు.
* మైక్రోకంట్రోలర్ల నుండి సూపరు కంప్యూటర్ల వరకూ విస్తరించిన విస్తృతమైన వ్యవస్థలపైన పని చేయాల్సిన ప్రోగ్రాములు వాటి వేగము, సైజు, సరళత మధ్యన సమతూకం పాటిస్తూ తయారు చేయవలసి ఉంటుంది. 
* కొన్ని ప్రోగ్రాములు ఒకసారి రాసిన తరువాత కొన్ని తరాలపాటు వాటిపై ఎటువంటి మార్పులు చేయక పోవచ్చు లేదా అతి చిన్న మార్పులకు లోనుకావచ్చు.
* చివరకు, ప్రోగ్రాములను రాసేవారి అభిరుచులే వేరుగా ఉండవచ్చు: వారు కొన్ని ప్రోగ్రామింగు భాషలకు అలవాటుపడిపోయి వాటిలోనే సందేశాలను వ్యక్తపరచటానికి ఇష్టపడుతూ ఉంటారు.

ప్రోగ్రామింగు భాషల తయారీలో సాధారణంగా, ఆ భాషకు సమస్యల సారాంశాన్ని మాత్రమే వ్యక్తపరస్తూ పరిష్కరించగలిగే (Abstraction) సమర్ధతను చేర్చాలనే ధోరణిని అనుసరిస్తూ ఉంటారు. మొదటి తరం ప్రోగ్రామింగు భాషలు దాదాపుగా కంప్యూటరు హార్డువేరుకు సమాంతరంగా ఉండేవి, ఆ భాషలకూ కంప్యూటరు అర్ధంచేసుకునే 0లు 1లకు పెద్ద తేడాయేమీ ఉండేది కాదు. కొత్త కొత్త భాషలు తయారవుతున్న కొద్దీ, వాటికి మరిన్ని మెరుగులను, కొత్త కొత్త హంగులు చేర్చడం మొదలయింది, ఈ కొత్త హంగులవలన మరింత విస్తృత రూపంలో కంప్యూటరుకు మన ఆదేశాలను వ్యక్తపరచగలిగే అవకాశం లభించింది. ఇందు వలన ప్రోగ్రాములు వ్రాసేవారు తాము చేయించాలనుకున్న పనిని మరింత సమర్ధంగా, తక్కువ సమయంలో రాయగలుగుతున్నారు.

ప్రోగ్రామింగు భాషలకు కూడా మనుషుల భాషలలో ఉన్నటువంటి భాషా నిర్మాణాలను చేర్చాలనే ప్రతిపాదనలు కొన్ని వచ్చాయి, అలాంటి నిర్మాణాల వలన కంప్యూటరుతో కూడా మనుషులతో మాట్లాడినట్లే మాట్లాడి పనులు చేయించుకోవచ్చని ఊహించారు. కానీ అటువంటి సాంకేతిక పరిజ్ఞానం సాధ్యాసాద్యాలపైన, అటువంటి భాషలు అవసరమా లేదా అనే వాటిపైనా ఇంకా చర్చలు జరుగుతూనే ఉన్నాయి. ఎడ్గర్ డైకెస్ట్రా (Edsger Dijkstra) ప్రోగ్రాములను రాయడానికి మనుషులు వాడే తరహా భాషలను ఉపయోగించటాన్ని మూర్ఖత్వం అని పేర్కొన్నాడు, అటువంటి భాషలవలన ప్రోగ్రామింగు భాషలలో బొలెడన్ని అనవసరపు నిర్మాణాలు చోటు చేసుకుంటాయని కూడా వివరించాడు. అలాన్ పెర్లిస్ కూడా ఇటువంటి భాషల సృష్టిని అనవసరం అని పేర్కొన్నాడు.

## భాగాలు
### వాక్యనిర్మాణం (syntax)
ప్రోగ్రామింగు భాషలలో రాసిన ప్రోగ్రాములలో కనిపించే వాక్యనిర్మాణాలు అన్నిటినీ సింటాక్సు అని పిలుస్తారు. చాలామట్టుకు ప్రోగ్రామింగు భాషల వాక్యనిర్మాణాలు పాఠ్యరూపంలోనే ఉంటాయి, అలాంటి భాషలలో వాక్యాలన్నీ పదాలు, సంఖ్యలూ, విరామ చిహ్నాలతో నిండి ఉంటాయి. ఇంకో పక్క కొన్ని ప్రోగ్రామింగు భాషలలో వాక్యనిర్మాణాలు రేఖాచిత్రాల రూపంలో ఉంటాయి, అటువంటి భాషలలో చిహ్నాల అమరికలో ఉన్న సంబంధాల ద్వారా ప్రోగ్రాములను తయారుచేస్తారు.

ప్రోగ్రామింగు భాషల వాక్యనిర్మాణం (syntax) ద్వారా మనం, సరైన ప్రోగ్రాము రాయడానికి ఆ భాషలో ఉన్న పదాలనూ, చిహ్నాలనూ ఏవిధంగా కూర్చుకుని ఉపయోగించుకోవచ్చో తెలుసుకోగలుగుతాము. అలాగే ఆ భాషలలో తయారుచేసిన వాక్యాల భావాలను సరిగ్గా తెలుపుతున్నామా లేదా అనేదానిని సిమాన్టిక్స్ (semantics) చూసుకుంటుంది. దాదాపు అన్ని ప్రోగ్రామింగు భాషలూ పాఠ్యరూపంలోనే ఉండటం వలన ఈ వ్యాసం వాటి గురించే చర్చిస్తుంది.

ప్రోగ్రామింగు భాషల వాక్యనిర్మాణాన్ని నిర్వచించటానికి రెగులర్ ఎక్స్‌ప్రెషన్లను (భాషలో వాడగలిగే పదాలను నిర్వచించటానికి), బాకస్-నార్ ఫారంల (భాష వ్యాకరణాన్ని నిర్వచించటానికి) సమ్మిశ్రమాన్ని ఉపయోగిస్తారు. కింద లిస్ప్ ప్రోగ్రామింగు భాష ఆధారిత సులువైన వ్యాకరణం ఒకటి ఉంది:

`
expression ::= atom  | list<br />
atom    ::= number | symbol<br />  
number   ::= [+-]?['0'-'9']+<br />
symbol   ::= ['A'-'Z'a'-'z'].*<br />
list    ::= '(' expression* ')'<br />
`

ఈ వ్యాకరణం క్రింది వివరాలను తెలుపుతుంది:
* ఒక *expression*, *atom* లేదా *list* అవుతుంది;
* ఒక *atom*, *number* లేదా *symbol* అవుతుంది;
* ఒక *number*, ప్లస్సు లేదా మైనస్సు గుర్తులతో మొదలయ్యి వరుస క్రమంలో ఖాలీలు లేకుండా ఒకటి లేదా అంతకంటే ఎక్కువ అంకెలను పేర్చడం ద్వారా తయారవ్వుతుంది;
* ఒక *symbol*, ఒక ఆంగ్ల అక్షరం దానిని ఆనుకునే 0 లేదా అంతకంటే ఎక్కువ ఆంగ్ల అక్షరాలను చేరిస్తే తయారవుతుంది; చివరిగా
* ఒక *list*, జంట బ్రాకెట్ల మధ్యన 0 లేదా అంతకంటే ఎక్కువ *expression*లను చేర్చటం ద్వారా తయారవుతుంది.

ఈ వ్యాకరణ నియమాలను ఉపయోగించి బాగా తయారుచేసిన (well formed) చిహ్నాల వరుసక్రమాలు కొన్ని: '`12345`', '`()`', '`(a b c232 (1))`'

## కొన్ని ప్రముఖ ప్రోగ్రామింగ్ భాషలు
* బేసిక్
* సి
* సీ ప్లస్ ప్లస్
* జావా
* పైథాన్
* పెర్ల్
* సీ షార్ప్

## మూలాలు

వర్గం:ప్రోగ్రామింగ్ భాషలు