ஜாவா (நிரலாக்க மொழி)

ஜாவா சன் மைக்ரோசிஸ்டம்ஸ் (Sun Microsystems) என்ற நிறுவனத்தினால் இணையத்தை மனத்தில் கொண்டு சி++ கணினி நிரலாக்க மொழியைப் பின்பற்றி உருவாக்கப் பட்ட பொருள் நோக்கு நிரலாக்க மொழி. சி,சி++ முதலிய மற்ற கணினிமொழிகளின் மூல நிரல் அல்லது மூலங்கள் (Source code) இயங்குதளங்களில் இயங்குவதற்கு ஒவ்வொரு முறை zhயும் தொகுக்க (compile) வேண்டியிருந்தது. இக்குறைபாடுகளைக் களைந்து உருவாக்கப்பட்ட ஜாவா கணினி மொழியில் இயங்குதளத்தில் தொகுத்த உடன் அவை இயங்குதளங்களைச் சாரா எண்ணுன்மி குறிமுறைகளாக (byte code) மாற்றப்படும். இந்த எண்ணுன்மிக் குறிமுறை நிரல்கள் இயங்குதள சார்பின்மையை ஏற்படுத்துகின்றன. இவை எண்ணுன்மிக் குறிமுறை இயக்க நேரத்தில், ஜாவா மெய்நிகர் இயந்திரம் (Java Virtual Machine) என்றழைக்கப்படும், மென்பொருளினால் புரிந்துகொள்ளப்பட்டு அந்தந்த இயங்குதளங்களுக்கு ஏற்றவாறு இயக்கப்படும்.

ஜாவா, ஜாவாஸ்கிரிப்ட் ஆகிய மொழிகள் பெயர் மற்றும் நடையளவில் ஒத்திருந்த போதிலும் அவை வெவ்வேறு காரணங்களுக்காகத் தோற்றுவிக்கப்பட்ட மாறுபட்ட மொழிகளாகும். ஜாவா என்பது மிகவும் பிரபலமான மென்பொருள் உருவாக்கி. தற்காலத்தில் பெரும்பாலான மின் கருவிகள் ஜாவாவை அடிப்படையாகக்கொண்டு செயல்படுகின்றன. ஜாவா சன் மைக்ரோசிஸ்டம் என்ற நிறுவனத்தைச் சேர்ந்த ஜேம்ஸ் கோஸ்லிங் என்பவரால் 1991  ஆம் ஆண்டு கண்டுபிடிக்கப்பட்டது. ஜாவாவின் முதல் பதிப்பு (ஜாவா 1.0) 1995  ஆம் ஆண்டு வெளியிடப்பட்டது. ஜாவா பொருள் சார்ந்த நிரலாக்க மொழியாகும் (object oriented programming language). இதன் பெரும்பாலான அமைப்புகள் C, C++ ஐ ஒத்துக் காணப்படும்.

வரலாறு

தொடக்ககால வரலாறு 

ஜாவா நிரலாக்க மொழி, ஜாவா இயங்குசூழல் ஆகியவை சன் மைக்ரோசிஸ்டம்ஸ் நிறுவனத்தின் உட்புற செயற்றிட்டங்களாக மார்கழி 1990 இல் தொடங்கப்பட்டன. பசுமைத் திட்டம் (Green Project) என்ற பெயரில் கலிபோர்னியாவின் மென்லோ பார்க் நகரில் தொடங்கிய இத்திட்டத்தில் ஜேம்ஸ் காஸ்லிங், பாட்ரிக் நோட்டன், மைக் ஷெரிடன் ஆகியோர் முக்கிய பங்கு வகித்தனர். அடுத்த தலைமுறை (next generation) வீட்டுப் பாவனைக்குரிய இலத்திரனியல் உபகரணங்களுக்கான தொழில்நுட்பத்தை வடிவமைப்பதே இவர்களுடையதும் சன் நிறுவனத்தினதுமான அப்போதைய குறிக்கோளாக இருந்தது.

இப்பணிக்காக இவர்கள் முதலில் சி++ மொழியைப் பாவிப்பதற்கு எண்ணியிருந்த போதிலும், பின் பலவித காரணங்களால் அது நிராகரிக்கப்பட்டது. அவர்கள் வளங்கள் வரையறுக்கப்பட்டதொரு உள்ளமைப்பு இயந்திரம் (embedded system) ஐ உருவாக்க நினைத்திருந்தனர். சி++ மொழியானது ஏற்படுத்தும் நினைவகக் கால்தடங்கள் (memory footprints) இவ்வாறான இலத்திரனியல் உபகரணங்களுக்குத் தேவைக்கதிகமாகப் பெரிதானதாக இருப்பதும், சி++ மொழிக்கே உரியதான கடினத்தன்மை மென்பொருட் பிழைகள் ஏற்படக் காரணமாக இருக்கும் என்பதும் இம்மொழி நிராகரிக்கப்பட முக்கியக் காரணங்களாக இருந்தது. அத்துடன் சி++ மொழியானது நினைவகச் சுத்திகரிக்கும் (garbage collection அல்லது GC) வசதிகளைக் கொண்டிருக்கவில்லை. இதனால் மென்பொருளாளர் தாங்களே நினைவகச் சுத்திகரிப்பை ஆற்றவேண்டியிருந்தது. இது மிகக் கடினமானதும் தவறுகள் அதிகமாக எற்பட வாய்ப்புள்ளதுமான ஒரு பணியாகும். மேலும் சி++ மொழியானது மேம்படுத்தப்பட்ட பாதுகாப்பு, பரவலாக்கப்பட்ட நிரலாக்கம் (distributed programming), இயக்க இழை (threading) போன்ற வசதிகளைக் கொண்டிருக்காதது மட்டுமின்றி பல்வேறுபட்ட கருவிகளில் உபயோகிக்கத்தக்கவாறு இயங்குதள சார்பின்மையையும் (platform independence) கொண்டிருக்கவில்லை.

1995 இல் சன் மைக்ரோசிஸ்டம்ஸ் ஜாவா 1.0 ஐ வெளியிட்டது. இது பிரபலமான தளங்களினைப் போலவே "ஒருமுறை எழுதி, எங்கு வேண்டுமானாலும் இயக்கலாம்" உறுதியளித்தார். மிகவும் பாதுகாப்பான இணைய, கோப்பு ஆகிய அணுகல் கட்டுப்பாடுகளை அனுமதித்தது. ஜாவா விரைவில் பிரபலமான பின்னர் முக்கிய இணைய உலாவிகளில் வலை பக்கங்களில் உள்ள ஜாவா ஆப்லேட்ஸ்-ஐ இயக்கும் திறன் இணைக்கப்பட்டது.
1998 டிசம்பர் இல் ஜாவா 2 வெளியீட்டிற்கு பின் J2EE நிறுவன பயன்பாடுகளும் மொபைல் பயன்பாடுகளும் (மொபைல் ஜாவா) பெரிய அளவில் இழந்து கீழே பதிப்பு J2ME இலக்கு. J2SE ஸ்டாண்டர்ட் பதிப்பு நியமிக்கப்பட்ட. 2006 இல், சந்தைப்படுத்தல் நோக்கங்களுக்காக சன், ஜாவா EE, ஜாவா ME, மற்றும் ஜாவா SE புதிய J2 பதிப்புகள் அறிமுகப்படுத்தப்பட்டது.
2006, நவம்பர் 13, அன்று, சன் குனு பொது மக்கள் உரிமத்தின் (GPL) கீழ், இலவச மற்றும் திறந்த மூல மென்பொருலாக ஜாவாவின் பெரும்பகுதி வெளியிடப்பட்டது.
2007, மே 8 அன்று, சன் இதை முழுமையான இலவச திறந்த மூல மென்பொருளாக நிபந்தனைகளின் கீழ் விநியோகம்  செய்யப்படுகிறது.
2010 முதல் ஒவ்வொரு ஆண்டும் 930 மில்லியன் ஜாவா நிகழ்நேர சூழல் மற்றும் 3 பில்லியன் மொபைல் தொலைபேசிகளில் ஜாவா பதிவிறக்கம் செய்யப்பட்டன.

கொள்கைகள்
ஜாவா மொழியை உருவாக்குவதில் ஐந்து முதன்மை இலக்குகள் இருந்தன.

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

பதிப்புகள் 

ஜாவாவின் முதன்மை வெளியீட்டுப்பதிப்புகளும், அவற்றின் வெளியீட்டு நாளும்:

ஜாவாவின் சிறப்பம்சங்கள் 
 எளிமையானது
 பலமானது
 பாதுகாப்பானது
 இயங்குதள சார்பின்மை
 எளிதில் ஓர் இயங்குதளத்திலிருந்து மற்றொன்றிற்கு மாற்றலாம்

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

தளம் சாரத்தன்மை 

ஜாவாவின் மிக முக்கியமான பண்பு தளம் சாராத்தன்மை (Platform Independent) ஆகும். C, C++ போன்ற கணினி நிரலாக்க மொழிகளைத் தொகுக்கும்போது (compile) அவை குறிப்பட்ட தொகுக்கும் இயந்திரத்தின் தன்மைக்கேற்ப அமையும். ஆனால் ஜாவா தொகுக்கப்படும்போது அவை தளம்சாரா எண்ணுன்மி குறியீடு (platform independent byte code) எனப்படும் தளம் சாரா அமைப்பை உருவாக்கும். இந்த பைட் குறியீடானது ஜாவா மெய்நிகர் பொறி (JVM) எனப்படும் ஜாவா மெய்நிகர் இயந்திரத்தால் பல்வேறு தளங்களில் விளக்கப்படுகின்றன.

ஜாவா மெய்நிகர் இயந்திரம் 
ஜாவா அமைப்பில் ஜாவா மெய்நிகர் இயந்திரம் [(Java Virtual Machine (JVM)] மிக முக்கிய பங்கு வகிக்கின்றது. இதில் ஜாவா நிரல்களை இயக்கும் சூழல் உள்ளது. ஜாவா மெய்நிகர் இயந்திரமானது ஒரு மென்பொருளாகும். இவை வன்பொருள் (Hardware) மற்றும் இயக்கு தளம் (Operating System) ஆகியவற்றின் மீது செயல்படுத்தப்படும். ஜாவா மூலக் குறியீடு (source code) அதாவது .java கோப்பானது செயல்படுத்தப்படும் போது இவை எண்ணுன்மி குறியீடுகளாக (Byte Codes) மாற்றப்பட்டு பின் .class கோப்பிற்குள் வைக்கப்படும். இந்த பைட் குறியீடுகளானது பின் ஜாவா மெய்நிகர் இயந்திரத்தால் செயல்படுத்தப்படுகின்றன. ஆகவே இந்த பைட் குறியீடுகளானது ஜாவா மெய்நிகர் இயந்திரத்தின் எந்திர மொழி (Machine Language) எனப்படுகின்றது.

பொருள் சார்ந்த நிரலாக்கம் 
ஜாவா ஓர் பொருள் சார்ந்த நிரலாக்க மொழியாகும் (Object Oriented Programming). இவை பின்வரும் தனிச் சிறப்புகளைக் கொண்டுள்ளன.

எளிமையானது 
ஜாவா கற்பதற்கு ஏற்ற மிக எளிமையானது. இவை புரிந்துகொள்ள எளிமையான வடிவமைப்பை பெற்றுள்ளன. C, C++ இல் உள்ள குழப்பமான மற்றும் தெளிவற்ற கருத்துக்கள் நீக்கப்பட்டு அல்லது மறு வடிவமைக்கப்பட்டு இவை செயல்படுத்தப்படுகிறது.

வலுவான அமைப்புடையது 
ஜாவா பெரும்பாலும் பிழை உள்ள குறியீடுகளை நீக்கி சிறந்த முறையில் செயல்பட முயற்சிக்கும். மேலும் நினைவக மேலாண்மை மற்றும் பிழைகளை கையாளும் வகையில் ஜாவா சிறப்பாக வடிவமைக்கப்பட்துள்ளது.

பாதுகாப்பானது 
பாதுகாப்பைக் கருதும்போது ஜாவா எப்பொழுதும் முதலில் தேர்வாகிறது. இதன் பாதுகாப்புத் தன்மையால் நச்சுநிரல் அற்ற (virus free) அமைப்பை உருவாக்க முடியும்.

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

நடுநிலையான வடிவமைப்புடையது 
தொகுப்பி (compiler) உருவாக்கும் ப்பைட் குறியீடுகளானது குறுப்பிட்ட இயந்திரம் என்று அல்லாமல் அணைத்து வகையான இயந்திரங்களிலும் செயல்படும் தன்மையுள்ளது.

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

செயல் திறன்மிக்கது 
ஜாவா விளக்கத்தன்மையுடையது.  இது C, C++ போன்ற நிரலாக்க மொழிகளைக் காட்டிலும் மேலானது.

பகிர்வுதன்மை 
ஜாவா HTTP மற்றும் FTP போன்ற TCP/IP நெறிமுறைகளில் (Protocol) மேம்பட்ட நடைமுறைகளை, பகிர்வுதன்மையைக் (JAVA IS DISTRIBUTED)  கொண்டுள்ளது. ஆகவே வலையமைப்பிலுள்ள URL மூலமாக பொருட்களை (objects) அணுக முடியும்.

தொடரியல்

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

அகிலத்திற்கு வணக்க நரலின் எடுத்துக்காட்டு
ஜாவாவில் மரபார்ந்த அகிலத்திற்கு வணக்க நிரலை இவ்வாறென எழுதலாம்:
public class HelloWorldApp {
    public static void main(String[] args) {
        System.out.println("Hello World!"); // முனையத்தில் உரையை அச்சிடுகிறது.
    }
}

செயற்பாடுகளுடன் எடுத்துக்காட்டு
// இரு முன்கோடுகளைப் பயன்படுத்தி ஒற்றை வரி குறிப்புரைக்கு இஃது ஓர் எடுத்துக்காட்டு.

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

package fibsandlies;

import java.util.Map;
import java.util.HashMap;

/**
 * ஜாவா ஆவணக்குறிப்புரைக்கு இஃது ஓர் எடுத்துக்காட்டு; ஜாவா ஆவணம் இவ்வுரையிலிருந்து 
 * ஆவணங்களைத் தொகுக்க முடியும். ஆவணப்படுத்துவதில் ஜாவா ஆவணக்குறிப்புரைகள் 
 * நிரல் வகுப்பு, செயற்பாடு, தரவுகளம் ஆகியவற்றிருக்கு முற்பட்டு இருக்க வேண்டும்.
 * @படைப்பாளர் விக்கிபீடியா தொண்டூழியர்
 */
public class FibCalculator extends Fibonacci implements Calculator {
    private static Map<Integer, Integer> memoized = new HashMap<>();

    /*
     * ஜாவா மெய்நிகர் இயந்திரம் பின்வருமாறு எழுதப்பட்ட நிரலின் முதன்மை செயற்பாட்டை
     * ஒரு தொடக்கப் புள்ளியாக பயன்படுத்துகிறது.
     */
    public static void main(String[] args) {
        memoized.put(1, 1);
        memoized.put(2, 1);
        System.out.println(fibonacci(12)); // 12 வது ஃபிபனாச்சி எண்ணைப் பெற்று முனையத்தில் அச்சிடுக
    }

    /**
     * ஒரு செயற்பாடும் அதனைச்சுற்றி பொதிந்த ஒரு நிரல் வகுப்பிற்கு ஜாவாவில் எழுதப்பட்ட ஓர் எடுத்துக்காட்டு
     * கொடுக்கப்பட்ட ஓர் எதிர்மறை அல்லாவெண் (FIBINDEX) N வது ஃபிபனாச்சி
     * எண்ணைத் திரும்பி அனுப்புகிறது, அங்கு N FIBINDEX க்கு சமம்.
     * 
     * @param fibIndex ஃபிபனாச்சி எண்ணின் குறியீடு
     * @return ஃபிபனாச்சி எண்
     */
    public static int fibonacci(int fibIndex) {
        if (memoized.containsKey(fibIndex)) return memoized.get(fibIndex);
        else {
            int answer = fibonacci(fibIndex - 1) + fibonacci(fibIndex - 2);
            memoized.put(fibIndex, answer);
            return answer;
        }
    }
}

பயன்பாடுகள்

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

செயலாக்கங்கள் 
ஜனவரி 27, 2010 இல் சன் மைக்ரோசிஸ்டமிடம் ஜாவா SE இயக்குதளத்தை உத்தியோகபூர்வமாக மேம்படுத்த ஆரக்கிள் நிறுவனம் உரிமம் பெற்றது. இதை தொடர்ந்து மாக் X, விண்டோஸ் மற்றும் சோலாரிஸ் இயங்குதளங்களுக்கான ஆரக்கிள் வெளியிடப்பட்டது.

செயல்திறன் 
ஜாவாவில் எழுதப்பட்ட நிரல்கள் சி++ ஐ விட மெதுவாகவும்,அதிக இடம் தேவை படுவதாகவும் இருப்பினும் 1997/1998ல்  ஜாவா 1.1 ன் ஒரேநேர தொகுப்பு அறிமுகத்தின் பின் ஜாவா நிரல்களின் செயல்படுத்தும் வேகம் குறிப்பிடத்தக்க முன்னேற்றம் அடைந்தது. டிசம்பர் 2012 நிலவரப்படி ஜாவா7 சி++ ஐ விட சுமார் 44% மெதுவானதாக தெரிந்தது.

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

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

மேற்கோள்கள்

புற இணைய இணைப்புகள் 

பொருள் நோக்கு நிரலாக்க மொழிகள்
யாவாத் தளம்