ভাষাগুলিতে একই বৈশিষ্ট্য-সেট রয়েছে। পারফরম্যান্সের পার্থক্যটি এ থেকে আসে যে ফোরট্রান বলে যে এলকিউজিং অনুমোদিত নয়, যদি না কোনও EQUIVALENCE বিবৃতি ব্যবহার করা হয়। যে কোনও কোডে এলিয়াসিং রয়েছে তা বৈধ ফোর্টরান নয়, তবে এই ত্রুটিগুলি সনাক্ত করার জন্য এটি প্রোগ্রামারটির উপর নির্ভর করে এবং সংকলক নয়। সুতরাং ফোর্টরান সংকলকগণ মেমরি পয়েন্টারগুলির সম্ভাব্য এলিয়াসিং উপেক্ষা করে এবং তাদের আরও কার্যকর কোড তৈরি করতে দেয়। সি এর এই ছোট্ট উদাহরণটি একবার দেখুন:
void transform (float *output, float const * input, float const * matrix, int *n)
{
int i;
for (i=0; i<*n; i++)
{
float x = input[i*2+0];
float y = input[i*2+1];
output[i*2+0] = matrix[0] * x + matrix[1] * y;
output[i*2+1] = matrix[2] * x + matrix[3] * y;
}
}
এই ফাংশনটি অপ্টিমাইজেশনের পরে ফোর্টরান অংশের তুলনায় ধীরে চলবে। কেন এমন? আপনি যদি আউটপুট অ্যারেতে মান লিখেন তবে আপনি ম্যাট্রিক্সের মান পরিবর্তন করতে পারেন। সর্বোপরি, পয়েন্টারগুলি ওভারল্যাপ করে একই মেমরির অংশকে নির্দেশ করতে পারে ( int
পয়েন্টার সহ !)। সি সংকলক সমস্ত গণনার জন্য মেমরি থেকে চারটি ম্যাট্রিক্স মান পুনরায় লোড করতে বাধ্য হয়।
ফোর্টরানে সংকলক ম্যাট্রিক্স মান একবার লোড করতে এবং রেজিস্টারে সংরক্ষণ করতে পারে store এটি এটি করতে পারে কারণ ফোর্টরান সংকলক ধরে নিয়েছে পয়েন্টার / অ্যারে মেমরিতে ওভারল্যাপ হয় না।
ভাগ্যক্রমে, restrict
এই সমস্যাটির সমাধানের জন্য কী-ওয়ার্ড এবং কঠোর-এলিয়াসিং C99 স্ট্যান্ডার্ডের সাথে প্রবর্তিত হয়েছে। এটি বেশিরভাগ সি ++ সংকলকগুলিতেও এই দিনগুলিতে ভালভাবে সমর্থিত। কীওয়ার্ডটি আপনাকে সংকলকটিকে একটি ইঙ্গিত দেওয়ার অনুমতি দেয় যা প্রোগ্রামার প্রতিশ্রুতি দেয় যে কোনও পয়েন্টার অন্য কোনও পয়েন্টারটির সাথে উরফ করে না। কঠোর-aliasing মানে যে প্রোগ্রামার প্রতিশ্রুতি যে বিভিন্ন ধরনের পয়েন্টার করবে না ঐসব ওভারল্যাপ, উদাহরণস্বরূপ একটি জন্য double*
হবে না ওভারল্যাপ সঙ্গে একটি int*
(নির্দিষ্ট ব্যতিক্রম যে সঙ্গে char*
এবং void*
কিছু ওভারল্যাপ করতে পারেন)।
আপনি যদি এগুলি ব্যবহার করেন তবে আপনি সি এবং ফোর্টরান থেকে একই গতি পাবেন। তবে, কী- restrict
ওয়ার্ডটি কেবল পারফরম্যান্স সমালোচনামূলক ফাংশন সহ ব্যবহার করার দক্ষতার অর্থ সি (এবং সি ++) প্রোগ্রামগুলি অনেক বেশি নিরাপদ এবং লিখতে সহজ। উদাহরণস্বরূপ, অবৈধ ফোর্টরান কোডটি বিবেচনা করুন:, CALL TRANSFORM(A(1, 30), A(2, 31), A(3, 32), 30)
যা বেশিরভাগ ফোর্টরান সংকলকগণ আনন্দের সাথে কোনও সতর্কতা ছাড়াই সংকলন করবে তবে একটি বাগ প্রবর্তন করবে যা কেবলমাত্র কয়েকটি সংকলকগুলিতে, কিছু হার্ডওয়্যার এবং কিছু অপ্টিমাইজেশন বিকল্পের সাহায্যে প্রদর্শিত হবে।