ਐਰੇ ਪ੍ਰੋਗਰਾਮਿੰਗ

ਕੰਪਿਊਟਰ ਵਿਗਿਆਨ ਵਿਚ , ਐਰੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਉਹਨਾਂ ਹੱਲਾਂ ਨੂੰ ਦਰਸਾਉਂਦੀ ਹੈ ਜੋ ਇੱਕ ਵਾਰ ਵਿਚ ਮੁੱਲਾਂ ਦੇ ਪੂਰੇ ਸਮੂਹ ਵਿਚ ਕਾਰਜਾਂ ਨੂੰ ਲਾਗੂ ਕਰਨ ਦੀ ਇਜਾਜ਼ਤ ਦਿੰਦੇ ਹਨ। ਅਜਿਹੇ ਹੱਲ ਆਮ ਤੌਰ 'ਤੇ ਵਿਗਿਆਨਕ ਅਤੇ ਇੰਜਨੀਅਰਿੰਗ ਸੈਟਿੰਗਾਂ ਵਿਚ ਵਰਤੇ ਜਾਂਦੇ ਹਨ।

ਆਧੁਨਿਕ ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾਵਾਂ ਜੋ ਐਰੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਦਾ ਸਮਰਥਨ ਕਰਦੀਆਂ ਹਨ (ਜਿਸ ਨੂੰ ਵੈਕਟਰ ਜਾਂ ਬਹੁ-ਆਯਾਮੀ ਭਾਸ਼ਾਵਾਂ ਵੀ ਕਿਹਾ ਜਾਂਦਾ ਹੈ) ਨੂੰ ਵਿਸ਼ੇਸ਼ ਤੌਰ 'ਤੇ ਵੈਕਟਰਾਂ, ਮੈਟ੍ਰਿਕਸ ਅਤੇ ਉੱਚ-ਅਯਾਮੀ ਐਰੇਆਂ 'ਤੇ ਪਾਰਦਰਸ਼ੀ ਢੰਗ ਨਾਲ ਲਾਗੂ ਕਰਨ ਲਈ ਸਕੇਲਰ 'ਤੇ ਕਾਰਵਾਈਆਂ ਨੂੰ ਆਮ ਬਣਾਉਣ ਲਈ ਤਿਆਰ ਕੀਤਾ ਗਿਆ ਹੈ। ਇਹਨਾਂ ਵਿਚ APL, J, Fortran, MATLAB, Analytica, Octave, R, Cilk Plus, Julia, Perl Data Language (PDL) ਸ਼ਾਮਲ ਹਨ। ਇਹਨਾਂ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ, ਇੱਕ ਓਪਰੇਸ਼ਨ ਜੋ ਪੂਰੇ ਐਰੇ ਉੱਤੇ ਕੰਮ ਕਰਦਾ ਹੈ ਇੱਕ ਵੈਕਟਰਾਈਜ਼ਡ ਓਪਰੇਸ਼ਨ ਕਿਹਾ ਜਾ ਸਕਦਾ ਹੈ, ਇਸ ਗੱਲ ਦੀ ਪਰਵਾਹ ਕੀਤੇ ਬਿਨਾਂ ਕਿ ਇਹ ਵੈਕਟਰ ਪ੍ਰੋਸੈਸਰ ਉੱਤੇ ਚਲਾਇਆ ਗਿਆ ਹੈ, ਜੋ ਵੈਕਟਰ ਨਿਰਦੇਸ਼ਾਂ ਨੂੰ ਲਾਗੂ ਕਰਦਾ ਹੈ। ਐਰੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਪ੍ਰਾਈਮਿਟਿਵਜ਼ ਸੰਖੇਪ ਰੂਪ ਵਿਚ ਡੇਟਾ ਹੇਰਾਫੇਰੀ ਬਾਰੇ ਵਿਆਪਕ ਵਿਚਾਰ ਪ੍ਰਗਟ ਕਰਦੇ ਹਨ। ਸੰਖੇਪਤਾ ਦਾ ਪੱਧਰ ਕੁਝ ਮਾਮਲਿਆਂ ਵਿਚ ਨਾਟਕੀ ਹੋ ਸਕਦਾ ਹੈ: ਐਰੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾ ਨੂੰ ਇੱਕ-ਲਾਈਨਰ ਲੱਭਣ ਲਈ ਇਹ ਅਸਧਾਰਨ ਨਹੀਂ ਹੈ[ਉਦਾਹਰਨ ਦੀ ਲੋੜ] ਜਿਸ ਲਈ ਆਬਜੈਕਟ-ਓਰੀਐਂਟਿਡ ਕੋਡ ਦੇ ਕਈ ਪੰਨਿਆਂ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ। 

## ਐਰੇ ਦੀਆਂ ਧਾਰਨਾਵਾਂ 
ਐਰੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਦੇ ਪਿੱਛੇ ਬੁਨਿਆਦੀ ਵਿਚਾਰ ਇਹ ਹੈ ਕਿ ਓਪਰੇਸ਼ਨ ਮੁੱਲਾਂ ਦੇ ਇੱਕ ਪੂਰੇ ਸਮੂਹ 'ਤੇ ਇੱਕ ਵਾਰ ਲਾਗੂ ਹੁੰਦੇ ਹਨ। ਇਹ ਇਸਨੂੰ ਇੱਕ ਉੱਚ-ਪੱਧਰੀ ਪ੍ਰੋਗ੍ਰਾਮਿੰਗ ਮਾਡਲ ਬਣਾਉਂਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ ਪ੍ਰੋਗਰਾਮਰ ਨੂੰ ਵਿਅਕਤੀਗਤ ਸਕੇਲਰ ਓਪਰੇਸ਼ਨਾਂ ਦੇ ਸਪੱਸ਼ਟ ਲੂਪਾਂ ਦਾ ਸਹਾਰਾ ਲਏ ਬਿਨਾਂ, ਡੇਟਾ ਦੇ ਸਮੁੱਚੇ ਸਮੂਹਾਂ 'ਤੇ ਸੋਚਣ ਅਤੇ ਕੰਮ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।

ਕੇਨੇਥ ਈ. ਆਈਵਰਸਨ ਨੇ ਐਰੇ ਪ੍ਰੋਗਰਾਮਿੰਗ (ਅਸਲ ਵਿੱਚ APL ਦਾ ਹਵਾਲਾ ਦਿੰਦੇ ਹੋਏ) ਦੇ ਪਿੱਛੇ ਤਰਕ ਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਦੱਸਿਆ:

ਜ਼ਿਆਦਾਤਰ ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾਵਾਂ ਗਣਿਤਿਕ ਸੰਕੇਤਾਂ ਤੋਂ ਨਿਸ਼ਚਿਤ ਤੌਰ 'ਤੇ ਘਟੀਆ ਹੁੰਦੀਆਂ ਹਨ ਅਤੇ ਉਹਨਾਂ ਤਰੀਕਿਆਂ ਨਾਲ ਸੋਚਣ ਦੇ ਸਾਧਨਾਂ ਵਜੋਂ ਬਹੁਤ ਘੱਟ ਵਰਤੀਆਂ ਜਾਂਦੀਆਂ ਹਨ ਜੋ ਇੱਕ ਲਾਗੂ ਗਣਿਤ-ਸ਼ਾਸਤਰੀ ਦੁਆਰਾ ਮਹੱਤਵਪੂਰਨ ਮੰਨੀਆਂ ਜਾਂਦੀਆਂ ਹਨ।

ਥੀਸਿਸ ਇਹ ਹੈ ਕਿ ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ ਪਾਏ ਜਾਣ ਵਾਲੇ ਐਗਜ਼ੀਕਿਊਟੇਬਿਲਟੀ ਅਤੇ ਸਰਵਵਿਆਪਕਤਾ ਦੇ ਫਾਇਦਿਆਂ ਨੂੰ ਗਣਿਤਿਕ ਸੰਕੇਤ ਦੁਆਰਾ ਪੇਸ਼ ਕੀਤੇ ਫਾਇਦਿਆਂ ਦੇ ਨਾਲ, ਇੱਕ ਇਕਹਿਰੀ ਭਾਸ਼ਾ ਵਿੱਚ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਢੰਗ ਨਾਲ ਜੋੜਿਆ ਜਾ ਸਕਦਾ ਹੈ। ਨੋਟੇਸ਼ਨ ਦੇ ਇੱਕ ਟੁਕੜੇ ਦਾ ਵਰਣਨ ਕਰਨ ਅਤੇ ਸਿੱਖਣ ਦੀ ਮੁਸ਼ਕਲ ਨੂੰ ਇਸਦੇ ਪ੍ਰਭਾਵਾਂ ਵਿੱਚ ਮੁਹਾਰਤ ਹਾਸਲ ਕਰਨ ਦੀ ਮੁਸ਼ਕਲ ਤੋਂ ਵੱਖ ਕਰਨਾ ਮਹੱਤਵਪੂਰਨ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਇੱਕ ਮੈਟ੍ਰਿਕਸ ਉਤਪਾਦ ਦੀ ਗਣਨਾ ਕਰਨ ਲਈ ਨਿਯਮਾਂ ਨੂੰ ਸਿੱਖਣਾ ਆਸਾਨ ਹੈ, ਪਰ ਇਸਦੇ ਪ੍ਰਭਾਵ (ਜਿਵੇਂ ਕਿ ਇਸਦੀ ਸਹਿਯੋਗੀਤਾ, ਇਸਦੀ ਵਿਤਰਕਤਾ, ਅਤੇ ਰੇਖਿਕ ਫੰਕਸ਼ਨਾਂ ਅਤੇ ਜਿਓਮੈਟ੍ਰਿਕ ਓਪਰੇਸ਼ਨਾਂ ਨੂੰ ਦਰਸਾਉਣ ਦੀ ਸਮਰੱਥਾ) ਵਿੱਚ ਮੁਹਾਰਤ ਇੱਕ ਵੱਖਰਾ ਅਤੇ ਬਹੁਤ ਜ਼ਿਆਦਾ ਮੁਸ਼ਕਲ ਮਾਮਲਾ ਹੈ। 

ਵਾਸਤਵ ਵਿੱਚ, ਇੱਕ ਸੰਕੇਤ ਦੀ ਬਹੁਤ ਹੀ ਸੂਝਵਾਨਤਾ ਇਸ ਨੂੰ ਖੋਜਣ ਲਈ ਸੁਝਾਅ ਦੇਣ ਵਾਲੀਆਂ ਬਹੁਤ ਸਾਰੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਦੇ ਕਾਰਨ ਸਿੱਖਣਾ ਔਖਾ ਜਾਪਦੀ ਹੈ।

[...] 

ਕੰਪਿਊਟਰਾਂ ਅਤੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾਵਾਂ ਦੇ ਉਪਭੋਗਤਾ ਅਕਸਰ ਐਲਗੋਰਿਦਮ ਨੂੰ ਚਲਾਉਣ ਦੀ ਕੁਸ਼ਲਤਾ ਨਾਲ ਚਿੰਤਤ ਹੁੰਦੇ ਹਨ, ਅਤੇ ਇਸ ਲਈ, ਇੱਥੇ ਪੇਸ਼ ਕੀਤੇ ਗਏ ਬਹੁਤ ਸਾਰੇ ਐਲਗੋਰਿਦਮ ਨੂੰ ਸੰਖੇਪ ਰੂਪ ਵਿੱਚ ਖਾਰਜ ਕਰ ਸਕਦੇ ਹਨ। ਅਜਿਹੀ ਬਰਖਾਸਤਗੀ ਛੋਟੀ ਨਜ਼ਰ ਹੋਵੇਗੀ ਕਿਉਂਕਿ ਇੱਕ ਐਲਗੋਰਿਦਮ ਦੇ ਇੱਕ ਸਪੱਸ਼ਟ ਬਿਆਨ ਨੂੰ ਆਮ ਤੌਰ 'ਤੇ ਇੱਕ ਅਧਾਰ ਵਜੋਂ ਵਰਤਿਆ ਜਾ ਸਕਦਾ ਹੈ ਜਿਸ ਤੋਂ ਕੋਈ ਆਸਾਨੀ ਨਾਲ ਵਧੇਰੇ ਕੁਸ਼ਲ ਐਲਗੋਰਿਦਮ ਪ੍ਰਾਪਤ ਕਰ ਸਕਦਾ ਹੈ। 

ਐਰੇ ਪ੍ਰੋਗ੍ਰਾਮਿੰਗ ਅਤੇ ਸੋਚ ਦੇ ਪਿੱਛੇ ਆਧਾਰ ਡੇਟਾ ਦੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਲੱਭਣਾ ਅਤੇ ਉਹਨਾਂ ਦਾ ਸ਼ੋਸ਼ਣ ਕਰਨਾ ਹੈ ਜਿੱਥੇ ਵਿਅਕਤੀਗਤ ਤੱਤ ਸਮਾਨ ਜਾਂ ਆਸ ਪਾਸ ਹਨ। ਆਬਜੈਕਟ ਓਰੀਐਂਟੇਸ਼ਨ ਦੇ ਉਲਟ ਜੋ ਡੇਟਾ ਨੂੰ ਇਸਦੇ ਭਾਗਾਂ (ਜਾਂ ਸਕੇਲਰ ਮਾਤਰਾਵਾਂ) ਵਿੱਚ ਸਪਸ਼ਟ ਤੌਰ 'ਤੇ ਤੋੜਦਾ ਹੈ, ਐਰੇ ਓਰੀਐਂਟੇਸ਼ਨ ਡੇਟਾ ਨੂੰ ਗਰੁੱਪ ਵਿੱਚ ਵੇਖਦਾ ਹੈ ਅਤੇ ਇੱਕ ਸਮਾਨ ਹੈਂਡਲਿੰਗ ਲਾਗੂ ਕਰਦਾ ਹੈ।

ਫੰਕਸ਼ਨ ਰੈਂਕ ਗਣਿਤ ਵਿੱਚ ਟੈਂਸਰ ਰੈਂਕ ਦੇ ਸਮਾਨਤਾ ਦੁਆਰਾ, ਆਮ ਤੌਰ 'ਤੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾਵਾਂ ਨੂੰ ਐਰੇ ਕਰਨ ਲਈ ਇੱਕ ਮਹੱਤਵਪੂਰਨ ਧਾਰਨਾ ਹੈ: ਫੰਕਸ਼ਨ ਜੋ ਡੇਟਾ 'ਤੇ ਕੰਮ ਕਰਦੇ ਹਨ ਉਹਨਾਂ ਮਾਪਾਂ ਦੀ ਸੰਖਿਆ ਦੁਆਰਾ ਸ਼੍ਰੇਣੀਬੱਧ ਕੀਤੇ ਜਾ ਸਕਦੇ ਹਨ ਜਿਨ੍ਹਾਂ 'ਤੇ ਉਹ ਕੰਮ ਕਰਦੇ ਹਨ। ਸਾਧਾਰਨ ਗੁਣਾ, ਉਦਾਹਰਨ ਲਈ, ਇੱਕ ਸਕੇਲਰ ਦਰਜਾਬੰਦੀ ਵਾਲਾ ਫੰਕਸ਼ਨ ਹੈ ਕਿਉਂਕਿ ਇਹ ਜ਼ੀਰੋ-ਅਯਾਮੀ ਡੇਟਾ (ਵਿਅਕਤੀਗਤ ਸੰਖਿਆਵਾਂ) 'ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ। ਕਰਾਸ ਉਤਪਾਦ ਓਪਰੇਸ਼ਨ ਵੈਕਟਰ ਰੈਂਕ ਫੰਕਸ਼ਨ ਦੀ ਇੱਕ ਉਦਾਹਰਨ ਹੈ ਕਿਉਂਕਿ ਇਹ ਵੈਕਟਰਾਂ 'ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ, ਨਾ ਕਿ ਸਕੇਲਰਾਂ 'ਤੇ। ਮੈਟ੍ਰਿਕਸ ਗੁਣਾ ਇੱਕ 2-ਰੈਂਕ ਫੰਕਸ਼ਨ ਦੀ ਇੱਕ ਉਦਾਹਰਣ ਹੈ, ਕਿਉਂਕਿ ਇਹ 2-ਅਯਾਮੀ ਵਸਤੂਆਂ (ਮੈਟ੍ਰਿਕਸ) 'ਤੇ ਕੰਮ ਕਰਦਾ ਹੈ। ਸੰਕੁਚਿਤ ਓਪਰੇਟਰ ਇੱਕ ਜਾਂ ਇੱਕ ਤੋਂ ਵੱਧ ਅਯਾਮਾਂ ਦੁਆਰਾ ਇੱਕ ਇਨਪੁਟ ਡੇਟਾ ਐਰੇ ਦੀ ਅਯਾਮ ਨੂੰ ਘਟਾਉਂਦੇ ਹਨ। ਉਦਾਹਰਨ ਲਈ, ਐਲੀਮੈਂਟਸ ਨੂੰ ਜੋੜਨਾ ਇਨਪੁਟ ਐਰੇ ਨੂੰ 1 ਅਯਾਮ ਦੁਆਰਾ ਸਮੇਟਦਾ ਹੈ।

## ਵਰਤੋਂ 
ਐਰੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਪਰਿਭਾਸ਼ਿਤ ਸਮਾਨਤਾ ਲਈ ਬਹੁਤ ਵਧੀਆ ਹੈ; ਅੱਜ ਕੱਲ੍ਹ ਬਹੁਤ ਖੋਜ ਦਾ ਵਿਸ਼ਾ ਹੈ। ਇਸ ਤੋਂ ਇਲਾਵਾ, 1997 ਤੋਂ ਬਾਅਦ ਵਿਕਸਤ ਅਤੇ ਤਿਆਰ ਕੀਤੇ Intel ਅਤੇ ਅਨੁਕੂਲ CPUs ਵਿੱਚ MMX ਤੋਂ ਸ਼ੁਰੂ ਹੋ ਕੇ ਅਤੇ SSSE3 ਅਤੇ 3DNow! ਦੁਆਰਾ ਜਾਰੀ ਰਹਿਣ ਵਾਲੇ ਵੱਖ-ਵੱਖ ਨਿਰਦੇਸ਼ ਸੈੱਟ ਐਕਸਟੈਂਸ਼ਨ ਸ਼ਾਮਲ ਹਨ, ਜਿਸ ਵਿੱਚ ਮੁੱਢਲੀ SIMD ਐਰੇ ਸਮਰੱਥਾਵਾਂ ਸ਼ਾਮਲ ਹਨ। ਇਹ 2020 ਦੇ ਦਹਾਕੇ ਵਿੱਚ AVX-512 ਵਰਗੇ ਨਿਰਦੇਸ਼ ਸੈੱਟਾਂ ਦੇ ਨਾਲ ਜਾਰੀ ਰਿਹਾ, ਆਧੁਨਿਕ CPUs ਨੂੰ ਆਧੁਨਿਕ ਵੈਕਟਰ ਪ੍ਰੋਸੈਸਰ ਬਣਾਉਂਦਾ ਹੈ। ਐਰੇ ਪ੍ਰੋਸੈਸਿੰਗ ਸਮਾਨਾਂਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਤੋਂ ਵੱਖਰੀ ਹੈ ਜਿਸ ਵਿੱਚ ਇੱਕ ਭੌਤਿਕ ਪ੍ਰੋਸੈਸਰ ਆਈਟਮਾਂ ਦੇ ਇੱਕ ਸਮੂਹ ਉੱਤੇ ਇੱਕੋ ਸਮੇਂ ਕੰਮ ਕਰਦਾ ਹੈ ਜਦੋਂ ਕਿ ਸਮਾਨਾਂਤਰ ਪ੍ਰੋਸੈਸਿੰਗ ਦਾ ਉਦੇਸ਼ ਇੱਕ ਵੱਡੀ ਸਮੱਸਿਆ ਨੂੰ ਛੋਟੇ (MIMD) ਵਿੱਚ ਵੰਡਣਾ ਹੈ ਤਾਂ ਜੋ ਕਈ ਪ੍ਰੋਸੈਸਰਾਂ ਦੁਆਰਾ ਟੁਕੜੇ-ਟੁਕੜੇ ਹੱਲ ਕੀਤੇ ਜਾ ਸਕਣ। ਮਲਟੀਪਲ ਕੋਰ ਵਾਲੇ ਪ੍ਰੋਸੈਸਰ ਅਤੇ ਹਜ਼ਾਰਾਂ ਜਨਰਲ ਕੰਪਿਊਟਿੰਗ ਕੋਰ ਵਾਲੇ GPU 2023 ਤੱਕ ਆਮ ਹਨ। 

## ਭਾਸ਼ਾਵਾਂ 
ਐਰੇ ਪ੍ਰੋਗਰਾਮਿੰਗ ਭਾਸ਼ਾਵਾਂ ਦੀਆਂ ਕੈਨੋਨੀਕਲ ਉਦਾਹਰਨਾਂ ਫੋਰਟਰਨ, ਏਪੀਐਲ, ਅਤੇ ਜੇ ਹਨ। ਹੋਰਾਂ ਵਿੱਚ ਸ਼ਾਮਲ ਹਨ: ਏ+, ਐਨਾਲਿਟਿਕਾ, ਚੈਪਲ, ਆਈਡੀਐਲ, ਜੂਲੀਆ, ਕੇ, ਕਲੋਂਗ, ਕਿਊ, ਮੈਟਲੈਬ, ਜੀਐਨਯੂ ਓਕਟੇਵ, ਸਾਇਲੈਬ, ਫ੍ਰੀਮੈਟ, ਪਰਲ ਡੇਟਾ ਲੈਂਗੂਏਜ (ਪੀਡੀਐਲ), R, Raku, S-Lang, SAC, Nial, ZPL, Futhark, ਅਤੇ TI-BASIC।

ਸਕੇਲਰ ਭਾਸ਼ਾਵਾਂ

ਸਕੇਲਰ ਭਾਸ਼ਾਵਾਂ ਜਿਵੇਂ ਕਿ C ਅਤੇ ਪਾਸਕਲ ਵਿੱਚ, ਓਪਰੇਸ਼ਨ ਕੇਵਲ ਸਿੰਗਲ ਮੁੱਲਾਂ 'ਤੇ ਲਾਗੂ ਹੁੰਦੇ ਹਨ, ਇਸਲਈ a+b ਦੋ ਸੰਖਿਆਵਾਂ ਦੇ ਜੋੜ ਨੂੰ ਦਰਸਾਉਂਦਾ ਹੈ। ਅਜਿਹੀਆਂ ਭਾਸ਼ਾਵਾਂ ਵਿੱਚ, ਇੱਕ ਐਰੇ ਨੂੰ ਦੂਜੀ ਵਿੱਚ ਜੋੜਨ ਲਈ ਇੰਡੈਕਸਿੰਗ ਅਤੇ ਲੂਪਿੰਗ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ, ਜਿਸਦਾ ਕੋਡਿੰਗ ਔਖਾ ਹੈ।

## ਹਵਾਲੇ