ਵੇਖੋ ਕਿ ਕਿਵੇਂ C ਅਤੇ C++ ਹੁਣ ਵੀ ਆਪਰੇਟਿੰਗ ਸਿਸਟਮ, ਡੇਟਾਬੇਸ ਅਤੇ ਗੇਮ ਇੰਜਣਾਂ ਦੇ ਕੋਰ ਨੂੰ ਘਣਿਸ਼ਠ ਰੱਖਦੇ ਹਨ—ਮੇਮੋਰੀ ਕੰਟਰੋਲ, ਗਤੀ, ਅਤੇ ਨੀਵੀਂ-ਸਤਹ ਐਕਸੇਸ ਰਾਹੀਂ।

“ਹੇਠਲੇ ਹਿੱਸੇ” ਉਹ ਸਭ ਕੁਝ ਹੈ ਜਿਸ 'ਤੇ ਤੁਹਾਡੀ ਐਪ ਨਿਰਭਰ ਕਰਦੀ ਹੈ ਪਰ ਜੋ ਅਕਸਰ ਸਿੱਧਾ ਹੱਥ ਨਹੀਂ ਲਗਦੀ: ਆਪਰੇਟਿੰਗ ਸਿਸਟਮ ਕਰਨਲ, ਡਿਵਾਈਸ ਡਰਾਇਵਰ, ਡੇਟਾਬੇਸ ਸਟੋਰੇਜ ਇੰਜਣ, ਨੈਟਵਰਕਿੰਗ ਸਟੈੱਕ, ਰਨਟਾਈਮਸ ਅਤੇ ਪ੍ਰਦਰਸ਼ਨ-ਨਾਜ਼ੁਕ ਲਾਇਬ੍ਰੇਰੀਆਂ।
ਇਸਦੇ ਉਲਟ, ਜਿਹੜੇ ਬਹੁਤ ਸਾਰੇ ਐਪ ਡਿਵੈਲਪਰ ਹਰ ਰੋਜ਼ ਦੇਖਦੇ ਹਨ ਉਹ ਸਤਹ ਹਨ: ਫਰੇਮਵਰਕ, APIs, ਮੈਨੇਜਡ ਰਨਟਾਈਮ, ਪੈਕੇਜ ਮੈਨੇਜਰ ਅਤੇ ਕਲਾਉਡ ਸਰਵਿਸਿਜ਼। ਇਹ ਲੇਅਰਸ ਸੁਰੱਖਿਅਤ ਅਤੇ ਉਤਪੀੜਕਤਾ-ਕੇਂਦ੍ਰਿਤ ਬਣਾਏ ਜਾਂਦੇ ਹਨ—ਭਾਵੇਂ ਕਿ ਉਹ ਜਾਣਬੂਝ ਕੇ ਜਟਿਲਤਾ ਨੂੰ ਛੁਪਾਉਂਦੇ ਹਨ।
ਕੁਝ ਸਾਫਟਵੇਅਰ ਕੰਪੋਨੇਟਾਂ ਦੀਆਂ ਮੰਗਾਂ ਐਸੀਆਂ ਹੁੰਦੀਆਂ ਹਨ ਜੋ ਬਿਨਾਂ ਸਿੱਧੇ ਕੰਟਰੋਲ ਦੇ ਪੂਰੀਆਂ ਕਰਨੀ ਮੁਸ਼ਕਿਲ ਹੁੰਦੀਆਂ ਹਨ:
ਇੱਥੇ C ਅਤੇ C++ ਹੁਣ ਵੀ ਆਮ ਹਨ ਕਿਉਂਕਿ ਉਹ ਘੱਟ ਤੋਂ ਘੱਟ ਰਨਟਾਈਮ ਓਵਰਹੈੱਡ ਨਾਲ ਨੇਟਿਵ ਕੋਡ ਵਿੱਚ ਕੰਪਾਇਲ ਹੁੰਦੇ ਹਨ ਅਤੇ ਇੰਜੀਨੀਅਰਾਂ ਨੂੰ ਮੇਮੋਰੀ ਅਤੇ ਸਿਸਟਮ ਕਾਲਜ਼ ਉਤੇ ਬਰੀਕ ਕੰਟਰੋਲ ਦਿੰਦੇ ਹਨ।
ਉੱਚ-ਸਤਹ ਤੇ ਤੁਸੀਂ C ਅਤੇ C++ ਨੂੰ ਇਹਨਾਂ ਥਾਵਾਂ ਤੇ ਪਾਓਗੇ:
ਇਹ ਲੇਖ ਤਕਨੀਕੀ ਮਕੈਨਿਕਸ 'ਤੇ ਧਿਆਨ ਦੇਵੇਗਾ: ਉਹ "ਹੇਠਲੇ ਹਿੱਸੇ" ਕੀ ਕਰਦੇ ਹਨ, ਕਿ ਉਹਨਾਂ ਨੂੰ ਨੇਟਿਵ ਕੋਡ کیوں ਫ਼ਾਇਦਾ ਦਿੰਦਾ ਹੈ, ਅਤੇ ਉਨ੍ਹਾਂ ਨਾਲ ਜੁੜੇ ਟਰੇਡ-ਆਫ਼ ਕੀ ਹਨ।
ਇਹ ਇਹ ਦਾਅਵਾ ਨਹੀਂ ਕਰੇਗਾ ਕਿ C/C++ ਹਰ ਪ੍ਰਾਜੈਕਟ ਲਈ ਸਭ ਤੋਂ ਵਧੀਆ ਚੋਣ ਹਨ, ਅਤੇ ਨਾ ਹੀ ਇਹ ਕਿਸੇ ਭਾਸ਼ਾ-ਯੁੱਧ ਵਿੱਚ ਬਦਲਿਆ ਜਾਵੇਗਾ। ਮਕਸਦ ਇਹ ਸਮਝ ਹੋਣਾ ਹੈ ਕਿ ਇਹ ਭਾਸ਼ਾਵਾਂ ਕਿੱਥੇ ਅਤੇ ਕਿਉਂ ਅਜੇ ਵੀ ਲੋੜੀਂਦੀਆਂ ਹਨ—ਅਤੇ ਕਿਉਂ ਆਧੁਨਿਕ ਸਾਫਟਵੇਅਰ ਸਟੈਕ ਉਨਾਂ ਦੇ ਉੱਤੇ ਬਣਦੇ ਰਹਿੰਦੇ ਹਨ।
C ਅਤੇ C++ ਨੂੰ ਸਿਸਟਮ ਸਾਫਟਵੇਅਰ ਵਿੱਚ ਵਿਆਪਕ ਤੌਰ 'ਤੇ ਇਸ ਲਈ ਵਰਤਿਆ ਜਾਂਦਾ ਹੈ ਕਿਉਂਕਿ ਇਹ "ਮੈਟਲ ਦੇ ਨੇੜੇ" ਪ੍ਰੋਗਰਾਮ ਬਣਾਉਂਦੇ ਹਨ: ਛੋਟੇ, ਤੇਜ਼, ਅਤੇ OS ਤੇ ਹਾਰਡਵੇਅਰ ਨਾਲ ਘਣਿਸ਼ਠ ਤੌਰ 'ਤੇ ਇੰਟਿਗ੍ਰੇਟ ਕੀਤੇ ਹੋਏ।
ਜਦੋਂ C/C++ ਕੋਡ ਕੰਪਾਈਲ ਹੁੰਦਾ ਹੈ, ਉਹ CPU ਵੱਲੋਂ ਸਿੱਧਾ ਚਲਾਏ ਜਾਣ ਵਾਲੇ ਮਸ਼ੀਨ ਨਿਰਦੇਸ਼ਾਂ ਵਿੱਚ ਬਦਲ ਜਾਂਦਾ ਹੈ। ਕਿਸੇ ਰਨਟਾਈਮ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ ਜੋ ਚਲਦੇ ਸਮੇਂ ਨਿਰਦੇਸ਼ਾਂ ਦਾ ਅਨੁਵਾਦ ਕਰੇ।
ਇਹ ਕੇਰ ਉਦਯੋਗਿਕ ਹੋਇਆਂ घटਕਾਂ—ਕਰਨਲ, ਡੇਟਾਬੇਸ ਇੰਜਣ, ਗੇਮ ਇੰਜਣ—ਲਈ ਜ਼ਰੂਰੀ ਹੈ ਜਿੱਥੇ ਛੋਟੀ-ਛੋਟੀ ਓਵਰਹੈੱਡ ਵੀ ਭਾਰੀ ਲੋਡ ਹੇਠਾਂ ਬੜੇ ਪ੍ਰਭਾਵ ਪਾ ਸਕਦੇ ਹਨ।
ਸਿਸਟਮ ਸਾਫਟਵੇਅਰ ਨੂੰ ਅਕਸਰ ਇੱਕਸਾਰ ਸਮਾਂ-ਅੰਕ ਚਾਹੀਦਾ ਹੈ, ਸਿਰਫ਼ ਔਸਤ ਤੇਜ਼ੀ ਨਹੀਂ। ਉਦਾਹਰਨ:
C/C++ CPU ਵਰਤੋਂ, ਮੇਮੋਰੀ ਲੇਆਉਟ ਅਤੇ ਡੇਟਾ ਸਟ੍ਰਕਚਰਾਂ 'ਤੇ ਨਿਆੰਤਰਣ ਦਿੰਦੇ ਹਨ, ਜੋ ਇੰਜੀਨੀਅਰਾਂ ਨੂੰ ਪੇਸ਼ਗੋਈਯੋਗ ਪ੍ਰਦਰਸ਼ਨ ਹਾਸਲ ਕਰਨ ਵਿੱਚ ਮਦਦ ਕਰਦਾ ਹੈ।
ਪੋਇੰਟਰ ਤੁਹਾਨੂੰ ਮੇਮੋਰੀ ਐਡਰੈੱਸ ਨਾਲ ਸਿੱਧਾ ਕੰਮ ਕਰਨ ਦਿੰਦੇ ਹਨ। ਇਹ ਸ਼ਕਤੀ ਡਰਾਉਣੀ ਲੱਗ ਸਕਦੀ ਹੈ, ਪਰ ਇਹ ਉਹਨਾਂ ਯੋਗਤਾਵਾਂ ਨੂੰ ਖੋਲ੍ਹਦੀ ਹੈ ਜੋ ਬਹੁਤ-ਸਾਰੇ ਉੱਚ-ਸਤਹ ਭਾਸ਼ਾਵਾਂ ਲੁਕਾ ਦेंदੀਆਂ ਹਨ:
ਧਿਆਨ ਨਾਲ ਵਰਤੋਂ ਕਰਨ 'ਤੇ ਇਹ ਕੰਟਰੋਲ ਨਾਟਕੀਅਤ ਤੇਜ਼ੀ ਵਧਾ ਸਕਦਾ ਹੈ।
ਇਹੀ ਆਜ਼ਾਦੀ ਵੀ ਖਤਰਾ ਹੈ। ਆਮ ਟਰੇਡ-ਆਫ਼ ਵਿੱਚ ਸ਼ਾਮਲ ਹਨ:
ਆਮ ਰਵਾਇਤ ਇਹ ਹੈ ਕਿ ਪ੍ਰਦਰਸ਼ਨ-ਨਾਜ਼ੁਕ ਕੋਰ C/C++ ਵਿੱਚ ਰੱਖੋ, ਅਤੇ ਉਤਪਾਦ ਫੀਚਰ ਤੇ UX ਲਈ ਸੁਰੱਖਿਅਤ ਭਾਸ਼ਾਵਾਂ ਨਾਲ ਘੇਰੋ।
ਆਪਰੇਟਿੰਗ ਸਿਸਟਮ ਕਰਨਲ ਹਾਰਡਵੇਅਰ ਦੇ ਸਭ ਤੋਂ ਨੇੜੇ ਬੈਠਦਾ ਹੈ। ਜਦੋਂ ਤੁਹਾਡਾ ਲੈਪਟਾਪ ਜਾਗਦਾ ਹੈ, ਬ੍ਰਾਉਜ਼ਰ ਖੁਲਦਾ ਹੈ, ਜਾਂ ਕੋਈ ਪ੍ਰੋਗਰਾਮ ਹੋਰ RAM ਮੰਗਦਾ ਹੈ, ਕਰਨਲ ਉਹ ਸਭ ਸਮਨਵਯ ਕਰ ਰਿਹਾ ਹੁੰਦਾ ਹੈ।
ਕਾਰਗਿਰੀਕ ਰੂਪ ਵਿੱਚ, ਕਰਨਲ ਕੁਝ ਮੂਲ ਕੰਮ ਸੰਭਾਲਦਾ ਹੈ:
ਇਹ ਜਿੰਮੇਵਾਰੀਆਂ ਸਿਸਟਮ ਦੇ ਕੇਂਦਰ ਤੇ ਬੈਠਦੀਆਂ ਹਨ, ਇਸ ਲਈ ਕਰਨਲ ਕੋਡ ਪ੍ਰਦਰਸ਼ਨ-ਸੰਵੇਦਨਸ਼ੀਲ ਅਤੇ ਸਹੀਤਾ-ਸੰਵੇਦਨਸ਼ੀਲ ਦੋਹਾਂ ਹੁੰਦਾ ਹੈ।
ਕਰਨਲ ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਸਟੀਕ ਕੰਟਰੋਲ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ:
C ਇੱਕ ਆਮ “ਕਰਨਲ ਭਾਸ਼ਾ” ਰਹੀ ਹੈ ਕਿਉਂਕਿ ਇਹ ਮਸ਼ੀਨ-ਸਤਹ ਆਮ ਧਾਰਨਾ ਨਾਲ ਸਾਫ਼-ਸੁਥਰੇ ਤਰੀਕੇ ਨਾਲ ਮੇਲ ਖਾਂਦੀ ਹੈ ਅਤੇ ਆਰਕੀਟੈਕਚਰਾਂ ਦੇ ਵਿਚਕਾਰ ਪੋਰਟੇਬਲ ਵੀ ਰਹਿੰਦੀ ਹੈ। ਬਹੁਤ ਸਾਰੇ ਕਰਨਲ ਸਭ ਤੋਂ ਛੋਟੇ-ਤੇ-ਛੋਟੇ ਹਾਰਡਵੇਅਰ-ਨਿਰਧਾਰਿਤ ਹਿੱਸਿਆਂ ਲਈ assembly 'ਤੇ ਭਰੋਸਾ ਕਰਦੇ ਹਨ, ਜਦਕਿ C ਵੱਡਾ ਕੰਮ ਸੰਭਾਲਦਾ ਹੈ।
C++ ਕਰਨਲਾਂ ਵਿੱਚ ਹੋ ਸਕਦਾ ਹੈ ਪਰ ਆਮ ਤੌਰ 'ਤੇ ਸੀਮਿਤ ਅੰਦਾਜ਼ ਵਿੱਚ (ਰੰਟਾਈਮ ਫੀਚਰ ਘੱਟ, ਐਕਸੈਪਸ਼ਨ ਨੀਤੀਆਂ ਧਿਆਨ ਨਾਲ, ਅਤੇ ਅਲੋਕੇਸ਼ਨ ਬਾਰੇ ਕਾਫੀ ਨਿਯਮ)। ਜਿੱਥੇ ਇਸਦਾ ਵਰਤੋਂ ਹੁੰਦਾ ਹੈ, ਉਹ ਆੰਤਰਨਿਕਤਾ (abstraction) ਨੂੰ ਬਹਿਤਰ ਕਰਨ ਲਈ ਹੁੰਦਾ ਹੈ ਬਿਨਾਂ ਕੰਟਰੋਲ ਛੱਡੇ।
ਭਾਵੇਂ ਕਰਨਲ ਖੁਦ ਸੰਭਾਲੂ ਹੋਵੇ, ਕਈ ਨਜ਼ਦੀਕੀ ਕੰਪੋਨੇਟ C/C++ ਵਿੱਚ ਹੁੰਦੇ ਹਨ:
ਹੋਰ ਵੇਰਵਾ ਲਈ ਡ੍ਰਾਈਵਰਾਂ ਦੇ ਭੁਮਿਕਾ ਬਾਰੇ ਬਲੌਗ ਲੇਖ "Device Drivers and Hardware Access" ਵੇਖੋ।
ਡਿਵਾਈਸ ਡਰਾਈਵਰ ਇੱਕ ਆਪਰੇਟਿੰਗ ਸਿਸਟਮ ਅਤੇ ਫਿਜ਼ਿਕਲ ਹਾਰਡਵੇਅਰ—ਜਿਵੇਂ ਨੈੱਟਵਰਕ ਕਾਰਡ, GPUs, SSD ਕੰਟਰੋਲਰ, ਆਡੀਓ ਡਿਵਾਈਸ—ਦੇ ਵਿਚਕਾਰ ਅਨੁਵਾਦ ਕਰਦੇ ਹਨ। ਜਦੋਂ ਤੁਸੀਂ "ਪਲੇ" 'ਤੇ ਕਲਿਕ ਕਰਦੇ ਹੋ, ਇੱਕ ਫਾਇਲ ਕੌਪੀ ਕਰਦੇ ਹੋ, ਜਾਂ Wi‑Fi ਨਾਲ ਜੁੜਦੇ ਹੋ, ਇਕ ਡਰਾਈਵਰ ਪਹਿਲਾ ਕੋਡ ਹੁੰਦਾ ਹੈ ਜੋ ਜਵਾਬ ਦੇਣਾ चाहिए।
ਡਰਾਈਵਰ I/O ਦੇ ਗਰਮ ਰਸਤੇ (hot path) 'ਤੇ ਬੈਠਦੇ ਹਨ, ਇਸ ਲਈ ਉਹ ਬਹੁਤ ਪ੍ਰਦਰਸ਼ਨ-ਸੰਵੇਦਨਸ਼ੀਲ ਹੁੰਦੇ ਹਨ। ਕੁਝ ਹੋਰ ਮਾਇਕ੍ਰੋਸੈਕਿੰਡ ਪ੍ਰਤੀ ਪੈਕੇਟ ਜਾਂ ਡਿਸਕ ਰਿਕਵੇਸਟ ਤੇਜ਼ੀ ਨਾਲ ਭਾਰੀ ਪ੍ਰਭਾਵ ਪਾ ਸਕਦੀ ਹੈ। C ਅਤੇ C++ ਇੱਥੇ ਆਮ ਹਨ ਕਿਉਂਕਿ ਉਹ ਸਿੱਧਾ kernel APIs ਨੂੰ ਕਾਲ ਕਰ ਸਕਦੇ ਹਨ, ਮੇਮੋਰੀ ਲੇਆਉਟ ਤੇ ਬਰੀਕ ਕੰਟਰੋਲ ਰੱਖ ਸਕਦੇ ਹਨ, ਅਤੇ ਘੱਟ ਓਵਰਹੈੱਡ ਨਾਲ ਚੱਲ ਸਕਦੇ ਹਨ।
ਹਾਰਡਵੇਅਰ ਠਹਿਰ ਕੇ ਆਪਣੀ ਵਾਰੀ ਦੀ ਉਡੀਕ ਨਹੀਂ ਕਰਦਾ। ਡਿਵਾਈਸ CPU ਨੂੰ ਇੰਟਰਪਟ ਰਾਹੀਂ ਸੰਕੇਤ ਕਰਦੇ ਹਨ—ਤੁਰੰਤ ਸੂਚਨਾ ਕਿ ਕੁਝ ਹੋਇਆ। ਡਰਾਈਵਰ ਕੋਡ ਨੂੰ ਇਹਨਾਂ ਘਟਨਾਵਾਂ ਨੂੰ ਤੇਜ਼ੀ ਨਾਲ ਅਤੇ ਸਹੀ ਤਰੀਕੇ ਨਾਲ ਸੰਭਾਲਣਾ ਪੈਂਦਾ ਹੈ, ਅਕਸਰ ਕਠੋਰ ਸਮਾਂ ਅਤੇ ਥ੍ਰੈਡਿੰਗ ਪਾਬੰਦੀਆਂ ਦੇ ਵਿੱਚ।
ਉੱਚ ਥਰੂਪੁੱਟ ਲਈ, ਡਰਾਈਵਰ DMA (Direct Memory Access) 'ਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹਨ, ਜਿੱਥੇ ਡਿਵਾਈਸ ਸਿਸਟਮ ਮੇਮੋਰੀ ਨੂੰ CPU ਤੋਂ ਬਿਨਾਂ ਪੜ੍ਹ/ਲਿਖ ਸਕਦਾ ਹੈ। DMA ਸੈੱਟਅਪ ਆਮ ਤੌਰ 'ਤੇ ਸ਼ਾਮਲ ਕਰਦਾ ਹੈ:
ਇਹ ਕੰਮ ਨੀਵੀਂ-ਸਤਹ ਇੰਟਰਫੇਸ ਦੀ ਮੰਗ ਕਰਦੇ ਹਨ: ਮੈਮੋਰੀ-ਮੈਪਡ ਰਜਿਸਟਰ, ਬਿਟ ਫਲੈਗ, ਅਤੇ ਪੜ੍ਹਨ/ਲਿਖਣ ਦੇ ਠੀਕ ਕ੍ਰਮ। C/C++ ਇਸ ਕਿਸਮ ਦੇ "ਮੈਟਲ ਦੇ ਨੇੜੇ" ਤਰਕੀਬ ਨੂੰ ਪ੍ਰਯੋਗਯੋਗ ਅਤੇ ਕ੍ਰਾਸ-ਕੰਪਾਇਲਰ ਪੋਰਟੇਬਲ ਬਣਾਉਂਦੇ ਹਨ।
ਆਮ ਐਪ ਦੇ ਉਲਟ, ਇੱਕ ਡਰਾਈਵਰ ਦੀ ਬਗ ਸਾਰੇ ਸਿਸਟਮ ਨੂੰ ਕਰੈਸ਼ ਕਰਵਾ ਸਕਦੀ ਹੈ, ਡੇਟਾ ਕਰਪਟ ਕਰ ਸਕਦੀ ਹੈ, ਜਾਂ ਸੁਰੱਖਿਆ ਖਾਮੀ ਉਘਾੜ ਸਕਦੀ ਹੈ। ਇਹ ਖ਼ਤਰਾ ਇਹ ਨਿਰਧਾਰਤ ਕਰਦਾ ਹੈ ਕਿ ਡਰਾਈਵਰ ਕੋਡ ਕਿਵੇਂ ਲਿਖਿਆ ਅਤੇ ਸਮੀਖਿਆ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।
ਟੀਮਾਂ ਖਤਰੇ ਨੂੰ ਘਟਾਉਣ ਲਈ ਸਖ਼ਤ ਕੋਡਿੰਗ ਮਿਆਰ, ਰੱਖਿਆਮੂਲ ਜਾਂਚਾਂ, ਅਤੇ ਪਰਤ-ਦਰ-ਪਰਤ ਸਮੀਖਿਆ ਵਰਤਦੀਆਂ ਹਨ। ਆਮ ਅਭਿਆਸਾਂ ਵਿੱਚ ਅਣ-ਸੁਰੱਖਿਅਤ ਪੋਇੰਟਰ ਵਰਤੋਂ ਨੂੰ ਸੀਮਿਤ ਕਰਨਾ, ਹਾਰਡਵੇਅਰ/ਫਰਮਵੇਅਰ ਤੋਂ ਆਉਣ ਵਾਲੇ ਇਨਪੁੱਟ ਦੀ ਜਾਂਚ ਕਰਨਾ, ਅਤੇ CI ਵਿੱਚ ਸਟੈਟਿਕ ਵਿਸ਼ਲੇਸ਼ਣ ਸ਼ਾਮਲ ਹਨ।
ਮੇਮੋਰੀ ਪ੍ਰਬੰਧਨ C ਅਤੇ C++ ਦੇ ਉਹਨਾਂ ਹਿੱਸਿਆਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ ਜਿਸ ਕਰਕੇ ਇਹ ਭਾਸ਼ਾਵਾਂ OS, ਡੇਟਾਬੇਸ ਅਤੇ ਗੇਮ ਇੰਜਣਾਂ ਵਿੱਚ ਅਜੇ ਵੀ ਪ੍ਰਮੁੱਖ ਹਨ। ਇਹ ਓੁਹਨਾਂ ਥਾਵਾਂ ਵਿੱਚੋਂ ਇੱਕ ਹੈ ਜਿੱਥੇ ਸੁਖਮ ਬਗ ਬਹੁਤ ਆਸਾਨੀ ਨਾਲ ਪੈਦਾ ਹੋ ਸਕਦੇ ਹਨ।
ਅਮਲੀ ਰੂਪ ਵਿੱਚ, ਮੇਮੋਰੀ ਪ੍ਰਬੰਧਨ ਵਿੱਚ ਸ਼ਾਮਲ ਹਨ:
C ਵਿੱਚ ਇਹ ਅਕਸਰ ਸਪਸ਼ਟ ਹੁੰਦਾ ਹੈ (malloc/free)। C++ ਵਿੱਚ ਇਹ ਸਪਸ਼ਟ (new/delete) ਹੋ ਸਕਦਾ ਹੈ ਜਾਂ ਸੁਰੱਖਿਅਤ ਪੈਟਰਨ ਵਿੱਚ ਲਪੇਟਿਆ ਜਾ ਸਕਦਾ ਹੈ।
ਪ੍ਰਦਰਸ਼ਨ-ਨਾਜ਼ੁਕ ਹਿੱਸਿਆਂ ਵਿੱਚ, ਮੈਨੁਅਲ ਕੰਟਰੋਲ ਇੱਕ ਫੀਚਰ ਹੋ ਸਕਦਾ ਹੈ:
ਜਦੋਂ ਡੇਟਾਬੇਸ ਨੂੰ ਲੱਗਾਤਾਰ ਲੈਟੈਂਸੀ ਬਣਾਈ ਰੱਖਣੀ ਹੋਵੇ ਜਾਂ ਗੇਮ ਇੰਜਣ ਨੂੰ ਫਰੇਮ-ਟਾਈਮ ਬਜਟ ਪੂਰਾ ਕਰਨਾ ਹੋਵੇ, ਇਹ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦਾ ਹੈ।
ਇਸੀ ਆਜ਼ਾਦੀ ਨਾਲ ਕੁਝ ਕਲਾਸਿਕ ਸਮੱਸਿਆਵਾਂ ਹੁੰਦੀਆਂ ਹਨ:
ਇਹ ਬੱਗ ਸੁਖਮ ਹੁੰਦੇ ਹਨ ਕਿਉਂਕਿ ਪ੍ਰੋਗਰਾਮ "ਠੀਕ ਲੱਗ ਸਕਦਾ ਹੈ" ਜਦ ਤੱਕ ਕੋਈ ਖਾਸ ਵਰਕਲੋਡ ਫੇਲ੍ਹਰ ਨੂੰ ਟ੍ਰਿigger ਨਾ ਕਰੇ।
ਆਧੁਨਿਕ C++ ਸੰਭਾਲ ਬਿਨਾਂ ਕੰਟਰੋਲ ਖੋਏ ਖਤਰੇ ਘਟਾਉਂਦਾ ਹੈ:
std::unique_ptr, std::shared_ptr) ਮਾਲਕੀਅਤ ਨੂੰ ਵਿਅਕਤ ਕਰਦੇ ਹਨ ਅਤੇ ਕਈ ਲੀਕ ਰੋਕਦੇ ਹਨ।ਇਨ੍ਹਾਂ ਟੂਲਜ਼ ਦੀ ਸਮਝਦਾਰੀ ਨਾਲ ਵਰਤੋਂ C/C++ ਨੂੰ ਤੇਜ਼ ਰੱਖਦੀ ਹੈ ਤੇ ਮੇਮੋਰੀ ਬੱਗ ਪ੍ਰੋਡਕਸ਼ਨ ਤੱਕ ਪਹੁੰਚਣ ਦੀ ਸੰਭਾਵਨਾ ਘਟਾ ਦਿੰਦੀ ਹੈ।
ਆਧੁਨਿਕ CPUs ਹਰ ਕੋਰ 'ਤੇ ਸ਼ਾਹਕਾਰ ਤੇਜ਼ੀ ਨਹੀਂ ਲਾ ਰਹੇ—ਉਹ ਹੋਰ ਕੋਰ ਦੇ ਰਹੇ ਹਨ। ਇਹ ਪ੍ਰਦਰਸ਼ਨ ਸਵਾਲ ਨੂੰ ਬਦਲ ਦਿੰਦਾ ਹੈ: "ਮੇਰਾ ਕੋਡ ਕਿੰਨਾ ਚੰਗੀ ਤਰ੍ਹਾਂ ਪੈਰਲਲ ਚੱਲ ਸਕਦਾ ਹੈ ਬਿਨਾਂ ਇੱਕ-ਦੂਜੇ ਨੂੰ ਰੋਕਣ ਦੇ?" C ਅਤੇ C++ ਇੱਥੇ ਲੋਕਪ੍ਰਿਯ ਹਨ ਕਿਉਂਕਿ ਉਹ ਥ੍ਰੈਡਿੰਗ, ਸਿੰਕਰੋਨਾਈਜ਼ੇਸ਼ਨ ਅਤੇ ਮੇਮੋਰੀ ਵਿਹਾਰ ਉਤੇ ਘੱਟ ਓਵਰਹੈੱਡ ਨਾਲ ਨੀਵੀਂ-ਸਤਹ ਕੰਟਰੋਲ ਦਿੰਦੇ ਹਨ।
ਥ੍ਰੈਡ ਉਹ ਯੂਨਿਟ ਹੈ ਜਿਸ 'ਤੇ ਤੁਹਾਡਾ ਪ੍ਰੋਗਰਾਮ ਕੰਮ ਕਰਾਉਂਦਾ ਹੈ; CPU ਕੋਰ ਉਹ ਥਾਂ ਹੈ ਜਿੱਥੇ ਉਹ ਕੰਮ ਚੱਲਦਾ ਹੈ। OS ਸ਼ਡਿਊਲਰ ਚਲਦੇ ਥ੍ਰੈਡਸ ਨੂੰ ਉਪਲਬਧ ਕੋਰਾਂ 'ਤੇ ਨਕਸ਼ਾ ਬਣਾਉਂਦਾ ਹੈ, ਬਾਰੰਬਾਰ ਫੈਸਲੇ ਕਰਦਾ ਰਹਿੰਦਾ ਹੈ।
ਛੋਟੀ ਸ਼ਡਿਊਲਿੰਗ ਵਿਸਥਾਰਵਾਂ ਪ੍ਰਦਰਸ਼ਨ-ਸੰਵੇਦਨਸ਼ੀਲ ਕੋਡ 'ਚ ਮੱਤਵਪੂਰਨ ਹੁੰਦੀਆਂ: ਇੱਕ ਥ੍ਰੈਡ ਨੂੰ ਗਲਤ ਸਮੇਂ 'ਤੇ ਰੋਕਣ ਨਾਲ ਪਾਈਪਲਾਈਨ ਰੁਕ ਸਕਦੀ ਹੈ, ਕਿਊ ਬੈਕਲੌਗ ਬਣ ਸਕਦੇ ਹਨ, ਜਾਂ ਰੁਕ-ਵਰਕ-ਰੁਕ ਵਿਹਾਰ ਹੋ ਸਕਦਾ ਹੈ। CPU-ਬਾਊਂਡ ਕੰਮ ਲਈ, ਸਰਗਰਮ ਥ੍ਰੈਡਸ ਨੂੰ ਕੋਰ ਗਿਣਤੀ ਦੇ ਨੇੜੇ ਰੱਖਣਾ ਅਕਸਰ ਥਰੈਸ਼ਿੰਗ ਘਟਾਉਂਦਾ ਹੈ।
ਵਾਸਤਵਿਕ ਲਕੜੀ ਇਹ ਨਹੀਂ ਕਿ "ਕਦੇ ਲਾਕ ਨਾ ਕਰੋ"। ਮਕਸਦ: ਘੱਟ ਲਾਕ ਕਰੋ, ਤੇਜ਼ੀ ਨਾਲ ਲਾਕ ਕਰੋ—ਕ੍ਰਿਟੀਕਲ ਸੈਕਸ਼ਨਾਂ ਨੂੰ ਛੋਟਾ ਰੱਖੋ, ਗਲੋਬਲ ਲਾਕ ਤੋਂ بچੋ ਅਤੇ ਸਾਂਝੀ ਬਦਲਣਯੋਗ ਸਟੇਟ ਨੂੰ ਘਟਾਓ।
ਡੇਟਾਬੇਸ ਅਤੇ ਗੇਮ ਇੰਜਣ ਸਿਰਫ਼ ਔਸਤ ਤੇਜ਼ੀ ਦੀ ਪਰਵਾਹ ਨਹੀਂ ਕਰਦੇ—ਉਹ ਵਰਲਾਸਟ-ਕੇਸ ਰੁਕਾਵਟਾਂ ਦੀ ਵੀ ਪਰਵਾਹ ਕਰਦੇ ਹਨ। ਇਕ ਲਾਕ ਕਨਵਓ, ਪੇਜ ਫੌਲਟ, ਜਾਂ ਰੁਕੇ ਹੋਏ ਵਰਕਰ ਕਾਰਨ ਦਿਖਾਈ ਦੇਣ ਵਾਲੀ ਸਟਟਰ ਜਾਂ SLA ਭੰਗ ਹੋ ਸਕਦਾ ਹੈ।
ਕਈ ਉੱਚ-ਪ੍ਰਦਰਸ਼ਨ ਸਿਸਟਮ ਇਨ੍ਹਾਂ 'ਤੇ ਨਿਰਭਰ ਹੁੰਦੇ ਹਨ:
ਇਹ ਪੈਟਰਨ ਸਮਰੱਥਾ ਅਤੇ ਲੈਟੈਂਸੀ ਦੋਹਾਂ 'ਤੇ ਧਿਆਨ ਰੱਖਦੇ ਹਨ।
ਡੇਟਾਬੇਸ ਇੰਜਣ ਸਿਰਫ਼ "ਰੋਜ਼ਾਂ ਸਟੋਰ" ਨਹੀਂ ਹੁੰਦਾ। ਇਹ CPU ਅਤੇ I/O ਦੇ ਤੇਜ਼ ਲੂਪ ਦਾ ਕੰਮ ਹੈ ਜੋ ਸੈਕੰਡ ਵਿੱਚ ਲੱਖਾਂ ਵਾਰੀ ਚੱਲਦਾ ਹੈ, ਜਿੱਥੇ ਛੋਟੀ-ਛੋਟੀ ਅਣਗੌਲਾਈਆਂ ਤੇਜ਼ੀ ਨਾਲ ਗੁਣਾ ਹੋ ਜਾਂਦੀਆਂ ਹਨ। ਇਸ ਲਈ ਬਹੁਤ ਸਾਰੇ ਇੰਜਣ ਅਤੇ ਕੋਰ ਕੰਪੋਨੇਟ ਅਜੇ ਵੀ ਵੱਡੇ ਪੱਧਰ 'ਤੇ C ਜਾਂ C++ ਵਿੱਚ ਲਿਖੇ ਜਾਂਦੇ ਹਨ।
ਜਦੋਂ ਤੁਸੀਂ SQL ਭੇਜਦੇ ਹੋ, ਇੰਜਣ:
ਹਰ ਮੰਚੇ ਨੂੰ ਮੇਮੋਰੀ ਅਤੇ CPU ਸਮਾਂ 'ਤੇ ਧਿਆਨ ਨਾਲ ਕੰਟਰੋਲ ਕਰਨ ਨਾਲ ਫਾਇਦਾ ਹੁੰਦਾ ਹੈ। C/C++ ਤੇਜ਼ ਪਾਰਸਰ, ਪਲੈਨ ਦੌਰਾਨ ਘੱਟ ਅਲੋਕੇਸ਼ਨ, ਅਤੇ ਲੀਨ ਐਕਜ਼ਿਕਿਊਸ਼ਨ ਹਾਟ-ਪਾਥ ਨੂੰ ਯਕੀਨੀ ਬਣਾਉਂਦੇ ਹਨ—ਅਕਸਰ ਵਰਕਲੋਡ ਲਈ ਖਾਸ ਡੇਟਾ ਸਟ੍ਰਕਚਰਾਂ ਨਾਲ।
SQL ਲੇਅਰ ਦੇ ਹੇਠਾਂ, ਸਟੋਰੇਜ ਇੰਜਣ ਉਹਨਾਂ ਨਿਰੰਤਰ ਪਰਣਾਲੀਆਂ ਨੂੰ ਸੰਭਾਲਦਾ ਹੈ:
ਇਹਨਾਂ ਕੰਪੋਨੇਟਾਂ ਲਈ C/C++ ਮਜ਼ਬੂਤ ਫ਼ਿੱਟ ਹਨ ਕਿਉਂਕਿ ਇਹ ਪ੍ਰਭਾਵਸ਼ਾਲੀ ਮੇਮੋਰੀ ਲੇਆਉਟ ਅਤੇ I/O ਸਥਰੀਆਂ ਉੱਤੇ ਨਿਰਭਰ ਕਰਦੇ ਹਨ।
ਆਧੁਨਿਕ ਪ੍ਰਦਰਸ਼ਨ ਅਕਸਰ ਕੱਚੇ CPU ਗਤੀ ਤੋਂ ਵੱਧ CPU ਕੈਸ਼ 'ਤੇ ਨਿਰਭਰ ਹੁੰਦਾ ਹੈ। C/C++ ਨਾਲ डਿਵੈਲਪਰ ਅਕਸਰ ਵਾਰ-ਵਾਰ ਵਰਤੀਆਂ ਫੀਲਡਾਂ ਨੂੰ ਇਕੱਠੇ ਰੱਖ ਸਕਦੇ ਹਨ, ਕਾਲਮਾਂ ਨੂੰ ਲਗਾਤਾਰ ਐਰੇਜ਼ ਵਿੱਚ ਸਟੋਰ ਕਰ ਸਕਦੇ ਹਨ, ਅਤੇ ਪੁਆਇੰਟਰ ਚੇਜ਼ਿੰਗ ਘਟਾ ਸਕਦੇ ਹਨ—ਇਹ ਉਹ ਪੈਟਰਨ ਹਨ ਜੋ ਡੇਟਾ ਨੂੰ CPU ਨੇੜੇ ਰੱਖਕੇ ਰੁਕਾਵਟਾਂ ਘਟਾਉਂਦੇ ਹਨ।
C/C++-ਭਾਰੀ ਡੇਟਾਬੇਸਾਂ ਵਿੱਚ ਵੀ, ਉੱਚ-ਸਤਹ ਭਾਸ਼ਾਵਾਂ ਆਮ ਤੌਰ 'ਤੇ ਐਡਮਿਨ ਟੂਲ, ਬੈਕਅੱਪ, ਮਾਨੀਟਰੀੰਗ, ਮਾਈਗ੍ਰੇਸ਼ਨ, ਅਤੇ ਆਰਕੀਸਟ੍ਰੇਸ਼ਨ ਲਈ ਵਰਤੀ ਜਾਂਦੀਆਂ ਹਨ। ਪ੍ਰਦਰਸ਼ਨ-ਨਾਜ਼ੁਕ ਕੋਰ ਨੇਟਿਵ ਰਹਿੰਦਾ ਹੈ; ਆਸ پاس ਦਾ ਪਰਿਵੇਸ਼ ਤੇਜ਼ ਇਟਰੈਸ਼ਨ ਅਤੇ ਵਰਤੋਂਕਾਰੀ ਸੁਵਿਧਾ ਨੂੰ ਤਰਜੀਹ ਦਿੰਦਾ ਹੈ।
ਡੇਟਾਬੇਸ ਤੁਰੰਤ ਮਹਿਸੂਸ ਹੁੰਦੇ ਹਨ ਕਿਉਂਕਿ ਉਹ ਡਿਸਕ ਤੋਂ ਬਚਣ ਲਈ ਭਾਰੀ ਮਿਹਨਤ ਕਰਦੇ ਹਨ। ਤੇਜ਼ SSD ਹੋਣ ਦੇ ਬਾਵਜੂਦ, ਸਟੋਰੇਜ਼ ਰੀਡਿੰਗ RAM ਨਾਲੋਂ ਕਈ ਗੁਣਾ ਧੀਮੀ ਹੁੰਦੀ ਹੈ। ਇਕ C ਜਾਂ C++ ਵਿੱਚ ਲਿਖਿਆ ਡੇਟਾਬੇਸ इंजਣ ਹਰ ਵੇਲੇ ਉਸ ਪ੍ਰਤੀਖਿਆ ਨੂੰ ਕੰਟਰੋਲ ਕਰ ਸਕਦਾ ਹੈ—ਅਤੇ ਅਕਸਰ ਉਸਨੂੰ ਛੁਪਾ ਵੀ ਸਕਦਾ ਹੈ।
ਡਿਸਕ 'ਤੇ ਡੇਟਾ ਨੂੰ ਗੋਦਾਮ ਵਿੱਚ ਰੱਖੀਆਂ ਡਿਬੀਆਂ ਵਜੋਂ ਸੋਚੋ। ਇੱਕ ਬਾਕਸ ਲੈ ਕੇ ਆਉਣਾ (ਡਿਸਕ ਰੀਡ) ਸਮਾਂ ਲੈਂਦਾ ਹੈ, ਇਸ ਲਈ ਤੁਸੀਂ ਸਭ ਤੋਂ ਵੱਧ ਵਰਤੇ ਜਾਣ ਵਾਲੀਆਂ ਚੀਜ਼ਾਂ ਮੇਜ਼ (RAM) 'ਤੇ ਰੱਖਦੇ ਹੋ।
ਕਈ ਡੇਟਾਬੇਸ ਆਪਣਾ ਬਫਰ ਪੂਲ ਮੈਨੇਜ ਕਰਦੇ ਹਨ ਤਾਂ ਕਿ ਉਹ RAM ਨੂੰ ਕੀ ਹੀਟ ਰੱਖਣਾ ਹੈ ਪੇਸ਼ਗੀਯੋਗ ਤੌਰ ਤੇ ਨਿਰਧਾਰਿਤ ਕਰ ਸਕਣ ਅਤੇ OS ਨਾਲ ਯਾਦਦਾਸ਼ਤ ਲਈ ਮੁਕਾਬਲਾ ਨਾ ਕਰਨ।
ਸਟੋਰੇਜ਼ ਸਿਰਫ਼ ਧੀਮ੍ਹਾ ਨਹੀਂ; ਇਹ ਅਣਪੇਸ਼ਗੋਈ ਵੀ ਹੁੰਦਾ ਹੈ। ਲੈਟੈਂਸੀ ਸਪਾਈਕ, ਕਤਕਾਰ, ਅਤੇ ਰੈੰਡਮ ਐਕਸੇਸ ਸਾਰੇ ਦੇਰ ਵਧਾਉਂਦੇ ਹਨ। ਕੈਸ਼ਿੰਗ ਇਹਨਾਂ ਨੂੰ ਕਿਵੇਂ ਘਟਾਉਂਦੀ ਹੈ:
C/C++ ਡੇਟਾਬੇਸ ਇੰਜਣਾਂ ਨੂੰ ਉਹ ਵੇਰਵੇ ਸੁਧਾਰਨ ਦੀ ਆਜ਼ਾਦੀ ਦਿੰਦੇ ਹਨ ਜੋ ਉੱਚ ਥਰੂਪੁੱਟ 'ਤੇ ਮਾਇਨੇ ਰੱਖਦੇ ਹਨ: ਅਲਾਈਨਡ ਰੀਡ, ਡਾਇਰੈਕਟ I/O ਵਿਰੁੱਧ ਬਫਰਡ I/O, ਕਸਟਮ ਐਵੀਕਸ਼ਨ ਨੀਤੀਆਂ, ਅਤੇ ਇੰਡੈਕਸਾਂ ਅਤੇ ਲੌਗ ਬਫਰਾਂ ਲਈ ਧਿਆਨ ਨਾਲ ਬਣੇ ਇਨ-ਮੇਮੋਰੀ ਲੇਆਉਟ। ਇਹ ਚੋਣਾਂ ਨਕਲਾਂ ਨੂੰ ਘਟਾਉਂਦੀਆਂ ਹਨ, ਟਕਰਾਅ ਤੋਂ ਬਚਾਉਂਦੀਆਂ ਹਨ, ਅਤੇ CPU ਕੈਸ਼ ਨੂੰ ਪ੍ਰਯੋਗਯੋਗ ਡੇਟਾ ਨਾਲ ਭਰਕੇ ਰੱਖਦੀਆਂ ਹਨ।
ਕੈਸ਼ਿੰਗ I/O ਘਟਾਉਂਦੀ ਹੈ, ਪਰ CPU ਕੰਮ ਵਧਾਉਂਦੀ ਹੈ। ਪੇਜਾਂ ਨੂੰ ਡਿਕੰਪ੍ਰੈਸ ਕਰਨਾ, ਚੈਕਸਮ ਹਿਸਾਬ ਕਰਨਾ, ਲਾਗ ਨੂੰ ਇਨਕ੍ਰਿਪਟ/ਵੈਰਿਫਾਈ ਕਰਨਾ CPU ਬੋਤਲਨੈਕ ਬਣ ਸਕਦੇ ਹਨ। ਕਿਉਂਕਿ C ਅਤੇ C++ ਮੇਮੋਰੀ ਐਕਸੇਸ ਪੈਟਰਨ ਅਤੇ SIMD-ਅਨੁਕੂਲ ਲੂਪਾਂ 'ਤੇ ਕੰਟਰੋਲ ਦਿੰਦੇ ਹਨ, ਉਂਝ ਉਹ ਅਕਸਰ ਹਰ ਕੋਰ ਤੋਂ ਵੱਧ ਕੰਮ ਖਿੱਚਣ ਲਈ ਵਰਤੇ ਜਾਂਦੇ ਹਨ।
ਗੇਮ ਇੰਜਣ ਸਖ਼ਤ ਰੀਅਲ-ਟਾਈਮ ਉਮੀਦਾਂ 'ਤੇ ਕੰਮ ਕਰਦੇ ਹਨ: ਖਿਡਾਰੀ ਕੈਮਰਾ ਘੁਮਾਉਂਦਾ ਹੈ, ਬਟਨ ਦਬਾਉਂਦਾ ਹੈ, ਅਤੇ ਦੁਨੀਆ ਨੂੰ ਤੁਰੰਤ ਜਵਾਬ ਦੇਣਾ ਚਾਹੀਦਾ ਹੈ। ਇਹ ਮਾਪ ਫਰੇਮ ਟਾਈਮ ਵਿੱਚ ਕੀਤਾ ਜਾਂਦਾ ਹੈ, ਨਾ ਕਿ ਔਸਤ ਥਰੂਪੁੱਟ ਵਿੱਚ।
60 FPS ਤੇ, ਤੁਹਾਨੂੰ ਇੱਕ ਫਰੇਮ ਬਣਾਉਣ ਲਈ ਲਗਭਗ 16.7 ms ਮਿਲਦੇ ਹਨ: ਸਿਮੂਲੇਸ਼ਨ, ਐਨੀਮੇਸ਼ਨ, ਫਿਜ਼ਿਕਸ, ਆਡੀਓ ਮਿਕਿੰਗ, ਕਲਿੰਗ (culling), ਰੇੰਡਰ ਸਬਮਸ਼ਨ, ਅਤੇ ਅਕਸਰ ਐਸੈਟ ਸਟ੍ਰੀਮਿੰਗ। 120 FPS ਤੇ ਇਹ ਬਜਟ ਘਟ ਕੇ 8.3 ms ਹੋ ਜਾਂਦਾ ਹੈ। ਬਜਟ ਮਿਸ ਹੋਣ 'ਤੇ ਖਿਡਾਰੀ ਨੂੰ ਸਟਟਰ, ਇਨਪੁੱਟ ਲੈਗ ਜਾਂ ਅਸਥਿਰ ਪੇਸਿੰਗ ਮਹਿਸੂਸ ਹੁੰਦੀ ਹੈ।
ਇਸੀ ਲਈ C programming ਅਤੇ C++ programming ਇੰਜਣ ਕੋਰ ਵਿੱਚ ਆਮ ਹਨ: ਪੇਸ਼ਗੋਈਯੋਗ ਪ੍ਰਦਰਸ਼ਨ, ਘੱਟ ਓਵਰਹੈੱਡ, ਅਤੇ ਮੇਮੋਰੀ/CPU ਵਰਤੋਂ ਉਤੇ ਨਜ਼ਾਕਤ ਭਰਾ ਕੰਟਰੋਲ।
ਜ਼ਿਆਦਾਤਰ ਇੰਜਣ ਭਾਰੀ ਕੰਮ ਲਈ ਨੇਟਿਵ ਕੋਡ ਵਰਤਦੇ ਹਨ:
ਇਹ ਸਿਸਟਮ ਹਰ ਫਰੇਮ ਚੱਲਦੇ ਹਨ, ਇਸ ਲਈ ਛੋਟੀ ਆਗਿਆਵਲੀ ਗਲਤੀ ਵੀ ਤੇਜ਼ੀ ਨਾਲ ਵੱਡੀ ਹੋ ਜਾਂਦੀ ਹੈ।
ਕਈ ਖੇਡ ਦੀ ਪ੍ਰਦਰਸ਼ਨ ਤੰਗ ਲੂਪਾਂ 'ਤੇ ਨਿਰਭਰ ਕਰਦੀ ਹੈ: ਐਂਟੀਟੀਜ਼ ਨੂੰ ਇਟਰੇਟ ਕਰਨਾ, ਟਰਾਂਸਫਾਰਮ ਅਪਡੇਟ ਕਰਨਾ, ਕੋਲਿਜ਼ਨ ਟੈਸਟ, ਵੈਨਸਿੰਗ vertices। C/C++ ਇਸਨੂੰ ਇਸ ਤਰ੍ਹਾਂ ਮੌਕਾ ਦਿੰਦੇ ਹਨ ਕਿ ਯਾਦਦਾਸ਼ਤ ਕੈਸ਼ ਲਈ ਮੇਮੋਰੀ ਸਟ੍ਰਕਚਰ ਬਣਾਈ ਜਾਵੇ (ਲਗਾਤਾਰ ਐਰੇਜ਼, ਘੱਟ ਅਲੋਕੇਸ਼ਨ, ਘੱਟ ਵਰਚੁਅਲ ਇੰਡਾਇਰੈਕਸ਼ਨ)। ਡੇਟਾ ਲੇਆਉਟ ਅਕਸਰ ਅਲਗੋ੍ਰਿਦਮ ਚੋਣ ਦੇ ਜਿੰਨਾ ਹੀ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦਾ ਹੈ।
ਕਈ ਸਟੂਡੀਓਜ਼ ਵਿੱਚ ਗੇਮਪਲੇ ਲਾਜ਼ਿਕ—ਕ quest, UI ਨਿਯਮ, ਟ੍ਰਿੱਗਰ—ਲਈ ਸਕ੍ਰਿਪਟਿੰਗ ਭਾਸ਼ਾਵਾਂ ਵਰਤੀ ਜਾਂਦੀਆਂ ਹਨ ਕਿਉਂਕਿ ਇਤਰੈਸ਼ਨ ਦੀ ਰਫ਼ਤਾਰ ਮਹੱਤਵਪੂਰਨ ਹੁੰਦੀ ਹੈ। ਇੰਜਣ ਕੋਰ ਆਮ ਤੌਰ 'ਤੇ ਨੇਟਿਵ ਰਹਿੰਦਾ ਹੈ, ਅਤੇ ਸਕ੍ਰਿਪਟਾਂ C/C++ ਸਿਸਟਮਾਂ ਨੂੰ ਬਾਈਂਡਿੰਗ ਰਾਹੀਂ ਕਾਲ ਕਰਦੀਆਂ ਹਨ। ਆਮ ਪੈਟਰਨ: ਸਕ੍ਰਿਪਟਾਂ ਆਰਕੀਸਟਰੇਟ ਕਰਦੀਆਂ ਹਨ; C/C++ ਮਹਿੰਗੇ ਹਿੱਸਿਆਂ ਨੂੰ ਚਲਾਉਂਦੇ ਹਨ।
C ਅਤੇ C++ ਸਿਰਫ਼ "ਦੌੜਦੇ" ਹੀ ਨਹੀਂ—ਉਹਨਾਂ ਨੂੰ ਇੱਕ ਵਿਸ਼ੇਸ਼ CPU ਅਤੇ OS ਲਈ ਨੈਟਿਵ ਬਾਇਨਰੀਜ਼ ਵਿੱਚ ਬਣਾਇਆ ਜਾਂਦਾ ਹੈ। ਇਹ ਬਿਲਡ ਪਾਈਪਲਾਈਨ ਇੱਕ ਵੱਡਾ ਕਾਰਨ ਹੈ ਕਿ ਇਹ ਭਾਸ਼ਾਵਾਂ OS, ਡੇਟਾਬੇਸ, ਅਤੇ ਗੇਮ ਇੰਜਣਾਂ ਵਿੱਚ ਕੇਂਦਰੀ ਪ੍ਰਭਾਵ ਰੱਖਦੀਆਂ ਹਨ।
ਇੱਕ ਆਮ ਬਿਲਡ ਵਿੱਚ ਕੁਝ ਪੜਾਅ ਹੁੰਦੇ ਹਨ:
ਲਿੰਕਰ ਪੜਾਅ 'ਚ ਕਈ ਅਸਲ-ਦੁਨੀਆ ਮੁੱਦੇ ਸਾਹਮਣੇ ਆਉਂਦੇ ਹਨ: ਮਿਸਿੰਗ ਸਿੰਬਲ, ਲਾਇਬ੍ਰੇਰੀ ਸੰਸਕਰਨ ਦਾ ਮੇਲ ਨਾ ਹੋਣਾ, ਜਾਂ ਅਣ-ਮੈਚਿੰਗ ਬਿਲਡ ਸੈਟਿੰਗ।
ਇੱਕ ਟੂਲਚੇਨ ਵਿੱਚ ਕੰਪਾਇਲਰ, ਲਿੰਕਰ, ਸਟੈਂਡਰਡ ਲਾਇਬ੍ਰੇਰੀ, ਅਤੇ ਬਿਲਡ ਟੂਲ ਸ਼ਾਮਲ ਹੁੰਦੇ ਹਨ। ਸਿਸਟਮ ਸਾਫਟਵੇਅਰ ਲਈ ਪਲੇਟਫਾਰਮ ਕਵਰੇਜ ਨਿਰਣায়ক ਹੋ ਸਕਦੀ ਹੈ:
ਟੀਮਾਂ ਕਈ ਵਾਰੀ C/C++ ਚੁਣਦੀਆਂ ਹਨ ਕਿਉਂਕਿ ਟੂਲਚੇਨ ਪੱਕੇ ਤੇ ਵਿਆਪਕ ਹਨ—embedded ਡਿਵਾਈਸਾਂ ਤੋਂ ਲੈ ਕੇ ਸਰਵਰਾਂ ਤੱਕ।
C ਨੂੰ ਅਕਸਰ "ਯੂਨੀਵਰਸਲ ਐਡਾਪਟਰ" ਮੰਨਿਆ ਜਾਂਦਾ ਹੈ। ਕਈ ਭਾਸ਼ਾਵਾਂ C ਫੰਕਸ਼ਨਾਂ ਨੂੰ FFI ਰਾਹੀਂ ਕਾਲ ਕਰ ਸਕਦੀਆਂ ਹਨ, ਇਸ ਲਈ ਟੀਮਾਂ ਅਕਸਰ ਪ੍ਰਦਰਸ਼ਨ-ਨਾਜ਼ੁਕ ਲਾਜਿਕ ਨੂੰ C/C++ ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚ ਰੱਖਦੀਆਂ ਹਨ ਅਤੇ ਉੱਤੇ ਛੋਟੀ API ਪ੍ਰਦਾਨ ਕਰਦੀਆਂ ਹਨ। ਇਸੀ ਲਈ Python, Rust, Java ਅਤੇ ਹੋਰ ਅਕਸਰ ਮੌਜੂਦਾ C/C++ ਕੰਪੋਨੇਟਾਂ ਨੂੰ ਰੈਪ ਕਰਦੇ ਹਨ, ਨਾਂ ਕਿ ਉਹਨਾਂ ਨੂੰ ਦੁਬਾਰਾ ਲਿਖਦੇ ਹਨ।
C/C++ ਟੀਮਾਂ ਆਮ ਤੌਰ 'ਤੇ ਮਾਪਦੀਆਂ ਹਨ:
ਵਰਕਫਲੋ ਲਗਾਤਾਰ ਹੈ: ਬੋਤਲਨੈਕ ਲੱਭੋ, ਡੇਟਾ ਨਾਲ ਪੁਸ਼ਟੀ ਕਰੋ, ਫਿਰ ਸਭ ਤੋਂ ਛੋਟੀ ਕੰਪੋਨੈਂਟ ਨੂੰ optimize ਕਰੋ ਜੋ ਅਸਲ ਵਿੱਚ ਮਾਇਨੇ ਰੱਖਦੀ ਹੈ।
C ਅਤੇ C++ ਅਜੇ ਵੀ ਬਹੁਤ ਵਧੀਆ ਟੂਲ ਹਨ—ਜਦੋਂ ਤੁਸੀਂ ਐਸਾ ਸਾਫਟਵੇਅਰ ਬਣਾਉਂਦੇ ਹੋ ਜਿਥੇ ਕੁਝ ਮਿਲੀਸੈਕਿੰਡ, ਕੁਝ ਬਾਈਟ, ਜਾਂ ਖਾਸ CPU ਨਿਰਦੇਸ਼ ਅਸਲ ਵਿੱਚ ਮਾਇਨੇ ਰੱਖਦੇ ਹਨ। ਉਹ ਹਰ ਫੀਚਰ ਜਾਂ ਟੀਮ ਲਈ ਡਿਫਾਲਟ ਚੋਣ ਨਹੀਂ ਹਨ।
C/C++ ਨੂੰ ਚੁਣੋ ਜਦੋਂ ਕੰਪੋਨੈਂਟ ਪ੍ਰਦਰਸ਼ਨ-ਨਾਜ਼ੁਕ ਹੋ, ਤਿੱਖਾ ਮੇਮੋਰੀ ਕੰਟਰੋਲ ਚਾਹੀਦਾ ਹੋਵੇ, ਜਾਂ ਜਦੋਂ OS/ਹਾਰਡਵੇਅਰ ਨਾਲ ਨੇੜੇ ਇੰਟਿਗ੍ਰੇਸ਼ਨ ਲਾਜ਼ਮੀ ਹੋਵੇ।
ਾਮੂਦਰ ਹਿੱਸੇ:
ਉੱਚ-ਸਤਹ ਭਾਸ਼ਾ ਚੁਣੋ ਜਦੋਂ ਪ੍ਰਾਥਮਿਕਤਾ ਸੁਰੱਖਿਆ, ਇਟਰੈਸ਼ਨ ਰਫ਼ਤਾਰ, ਜਾਂ ਵੱਡੇ ਪੱਧਰ 'ਤੇ বজ਼-ਬਹਾਲ ਰੱਖਣਾ ਹੋਵੇ।
ਇਸਦਾ ਅਰਥ ਹੈ ਕਿ Rust, Go, Java, C#, Python, ਜਾਂ TypeScript ਵਰਗੀਆਂ ਭਾਸ਼ਾਵਾਂ ਦਾ ਚੋਣ ਉਹਨਾਂ ਵੇਲੇ ਬੇਤਰ ਹੁੰਦਾ ਹੈ ਜਦੋਂ:
ਅਮਲੀ ਤੌਰ 'ਤੇ, ਜ਼ਿਆਦਾਤਰ ਪ੍ਰੋਡਕਟ ਮਿਕਸ ਹੁੰਦੇ ਹਨ: ਪ੍ਰਦਰਸ਼ਨ-ਨਾਜ਼ੁਕ ਕੋਰ ਲਈ ਨੇਟਿਵ ਲਾਇਬ੍ਰੇਰੀਆਂ, ਅਤੇ ਹੋਰ ਸੇਵਾਵਾਂ ਅਤੇ UI ਲਈ ਉੱਚ-ਸਤਹ ਭਾਸ਼ਾਵਾਂ।
ਜੇ ਤੁਸੀਂ ਮੁੱਖ ਤੌਰ 'ਤੇ ਵੈੱਬ, ਬੈਕਐਂਡ, ਜਾਂ ਮੋਬਾਈਲ ਫੀਚਰ ਬਣਾ ਰਹੇ ਹੋ, ਤਾਂ ਆਮ ਤੌਰ 'ਤੇ ਤੁਹਾਨੂੰ C/C++ ਲਿਖਣ ਦੀ ਲੋੜ ਨਹੀਂ ਹੁੰਦੀ—ਤੁਸੀਂ ਇਸਦਾ ਲਾਭ ਆਪਣੇ OS, ਡੇਟਾਬੇਸ, ਰਨਟਾਈਮ ਅਤੇ ਡਿਪੈਂਡੇੰਸੀਜ਼ ਦੇ ਰਾਹੀਂ ਲੈਂਦੇ ਹੋ। Platforms ਜਿਵੇਂ Koder.ai ਇਸ ਵੰਡ ਨੂੰ ਸਵਾਲੀ ਰਖਦੀਆਂ ਹਨ: ਤੁਸੀਂ ਚੈਟ-ਚਾਲਿਤ ਵਰਕਫਲੋ ਨਾਲ ਤੇਜ਼ੀ ਨਾਲ React ਵੈੱਬ ਐਪ, Go + PostgreSQL ਬੈਕਐਂਡ, ਜਾਂ Flutter ਮੋਬਾਈਲ ਐਪ ਤਿਆਰ ਕਰ ਸਕਦੇ ਹੋ, ਅਤੇ ਜ਼ਰੂਰਤ ਪੈਣ 'ਤੇ ਮੌਜੂਦਾ C/C++ ਲਾਇਬ੍ਰੇਰੀ ਵਿੱਚੋਂ ਇੱਕ FFI ਬਾਊਂਡਰੀ ਰਾਹੀਂ ਕਾਲ ਕਰਕੇ ਨੇਟਿਵ ਕੰਪੋਨੈਂਟ ਸ਼ਾਮਿਲ ਕਰ ਸਕਦੇ ਹੋ। ਇਸ ਨਾਲ ਉਤਪਾਦ ਸਤਹ ਦਾ ਜ਼ਿਆਦਾ ਹਿੱਸਾ ਤੇਜ਼ ਇਟਰੇਸ਼ਨ ਵਾਲੇ ਕੋਡ ਵਿੱਚ ਰਹਿੰਦਾ ਹੈ, ਜਦੋਂ ਕਿ ਜਿੱਥੇ ਨੇਟਿਵ ਕੋਡ ਸਹੀ ਉਪਕਾਰ ਹੈ ਉਸਨੂੰ ਨਜ਼ਰਅੰਦਾਜ਼ ਨਹੀਂ ਕੀਤਾ ਜਾਂਦਾ।
ਇਕੋ ਬਾਰ ਫੈਸਲਾ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਇਹ ਸਵਾਲ ਪੁੱਛੋ:
C ਅਤੇ C++ ਅਜੇ ਵੀ ਉਹ ਔਜਾਰ ਹਨ ਜੋ ਨੀਵੀਂ-ਸਤਹ ਕੰਪੋਨੈਂਟਾਂ ਨੂੰ ਛੋਟੇ ਅਦਾਂ ਅਤੇ ਤੇਜ਼ੀ ਨਾਲ ਚਲਾਉਣ ਲਈ ਜ਼ਰੂਰੀ ਕੰਟਰੋਲ ਦਿੰਦੇ ਹਨ। ਉਹ ਹਰ ਸਮੇਂ ਦੀ ਦਫ਼ਤਰ-ਵਿਹਾਰ ਦੀ ਭਾਸ਼ਾ ਨਹੀਂ—ਪਰ ਜਿੱਥੇ ਹਾਰਡਵੇਅਰ, ਮੇਮੋਰੀ ਅਤੇ ਲੈਟੈਂਸੀ ਅਤਿ-ਅਹੰਕਾਰਕ ਹਨ, ਉਥੇ ਇਹ ਭਾਸ਼ਾਵਾਂ ਆਪਣਾ ਥਾਂ ਬਰਕਰਾਰ ਰੱਖਦੀਆਂ ਹਨ।
ਅਧਿਕਤਰ ਪ੍ਰੋਜੈਕਟਾਂ ਲਈ ਪ੍ਰਯੋਗਤਮ ਦਿਸ਼ਾ ਇਹ ਹੈ: ਪ੍ਰਦਰਸ਼ਨ-ਕ੍ਰੀਟੀਕਲ ਕੋਰ ਨੇਟਿਵ ਵਿੱਚ ਰੱਖੋ ਅਤੇ ਪ੍ਰੋਡਕਟ ਫੀਚਰਾਂ ਲਈ ਤੇਜ਼ ਇਟਰੈਸ਼ਨ ਵਾਲੀਆਂ ਅਤੇ ਜ਼ਿਆਦਾ ਸੁਰੱਖਿਅਤ ਭਾਸ਼ਾਵਾਂ ਵਰਤੋ।
ਇਹ ਆਫਰ ਹੁੰਦਾ ਹੈ ਕਿ ਜੇ ਤੁਹਾਡੀ ਟੀਮ ਨੂੰ ਨੇਟਿਵ ਕੋਡ ਨਾਲ ਸੰਪਰਕ ਕਰਨ ਦੀ ਲੋੜ ਹੋਵੇ, ਤਾਂ ਤੁਹਾਨੂੰ ਜ਼ਰੂਰੀ ਜ਼ਾਹਿਰੀ ਇੰਟਰਫੇਸ ਅਤੇ ਟੂਲਿੰਗ ਰੱਖਣੀ ਚਾਹੀਦੀ ਹੈ—ਜੋ ਕੀ Koder.ai ਵਰਗੀਆਂ ਪਲੈਟਫਾਰਮਾਂ ਨਾਲ ਆਸਾਨੀ ਨਾਲ ਇੰਟੀਗ੍ਰੇਟ ਹੋ ਸਕਦਾ ਹੈ।