Fortran
कार्यक्रम इकाइयों और फ़ाइल लेआउट
खोज…
फोरट्रान कार्यक्रम
एक संपूर्ण फोरट्रान कार्यक्रम कई विशिष्ट कार्यक्रम इकाइयों से बना है। कार्यक्रम इकाइयाँ हैं:
- मुख्य कार्यक्रम
- फ़ंक्शन या सबरूटीन सबप्रोग्राम
- मॉड्यूल या सबमॉड्यूल
- ब्लॉक डेटा प्रोग्राम यूनिट
मुख्य कार्यक्रम और कुछ प्रक्रिया (फ़ंक्शन या सबरूटीन) उपप्रोग्राम फोरट्रान के अलावा अन्य भाषा द्वारा प्रदान किए जा सकते हैं। उदाहरण के लिए एक C मुख्य कार्यक्रम एक फ़ोर्ट्रान फ़ंक्शन सबप्रोग्राम द्वारा परिभाषित फ़ंक्शन को कह सकता है, या फ़ोर्ट्रान मुख्य प्रोग्राम C से परिभाषित एक प्रक्रिया कह सकता है।
ये फोरट्रान प्रोग्राम इकाइयाँ अलग-अलग फ़ाइल या एकल फ़ाइल के भीतर दी जा सकती हैं।
उदाहरण के लिए, हम दो फाइलें देख सकते हैं:
prog.f90
program main
use mod
end program main
mod.f90
module mod
end module mod
और कंपाइलर (सही ढंग से आह्वान) मुख्य कार्यक्रम को मॉड्यूल के साथ जोड़ने में सक्षम होगा।
एकल फ़ाइल में कई प्रोग्राम इकाइयाँ हो सकती हैं
everything.f90
module mod
end module mod
program prog
use mod
end program prog
function f()
end function f()
इस मामले में, हालांकि, यह ध्यान दिया जाना चाहिए कि फ़ंक्शन f
अभी भी एक बाहरी फ़ंक्शन है जहां तक मुख्य कार्यक्रम और मॉड्यूल का संबंध है। मॉड्यूल मुख्य कार्यक्रम द्वारा सुलभ होगा, हालांकि।
टाइपिंग स्कोप नियम प्रत्येक व्यक्तिगत प्रोग्राम यूनिट पर लागू होते हैं, न कि उस फाइल पर जिसमें वे निहित हैं। उदाहरण के लिए, यदि हम चाहते हैं कि प्रत्येक स्कूपिंग यूनिट में कोई निहित टाइपिंग न हो, तो उपरोक्त फ़ाइल को इस प्रकार लिखा जाना चाहिए
module mod
implicit none
end module mod
program prog
use mod
implicit none
end program prog
function f()
implicit none
<type> f
end function f
मॉड्यूल और सबमॉड्यूल
मॉड्यूल कहीं और प्रलेखित हैं ।
कंपाइलर अक्सर तथाकथित मॉड्यूल फाइलें उत्पन्न करते हैं: आमतौर पर फाइल युक्त
module my_module
end module
कंपाइलर द्वारा my_module.mod
नाम की एक फ़ाइल में परिणाम होगा। ऐसे मामलों में, एक मॉड्यूल के लिए एक प्रोग्राम यूनिट द्वारा एक्सेस किया जा सकता है, इस बाद की प्रोग्राम यूनिट को संसाधित करने से पहले मॉड्यूल फ़ाइल को दिखाई देना चाहिए।
बाहरी प्रक्रियाओं
एक बाहरी प्रक्रिया वह है जो किसी अन्य प्रोग्राम यूनिट के बाहर, या फोरट्रान के अलावा किसी अन्य माध्यम से परिभाषित की जाती है।
फ़ंक्शन जैसे फ़ाइल में सम्मिलित है
integer function f()
implicit none
end function f
एक बाहरी कार्य है।
बाहरी प्रक्रियाओं के लिए, इंटरफ़ेस ब्लॉक का उपयोग करके उनके अस्तित्व की घोषणा की जा सकती है (स्पष्ट इंटरफ़ेस दिए जाने के लिए)
program prog
implicit none
interface
integer function f()
end interface
end program prog
या एक अंतर्निहित कथन देने के लिए एक घोषणा विवरण द्वारा
program prog
implicit none
integer, external :: f
end program prog
या और भी
program prog
implicit none
integer f
external f
end program prog
external
विशेषता आवश्यक नहीं है:
program prog
implicit none
integer i
integer f
i = f() ! f is now an external function
end program prog
डेटा प्रोग्राम इकाइयों को ब्लॉक करें
ब्लॉक डेटा प्रोग्राम इकाइयाँ प्रोग्राम इकाइयाँ हैं जो सामान्य ब्लॉकों में वस्तुओं के लिए प्रारंभिक मान प्रदान करती हैं। इन्हें जानबूझकर यहां अनजाने में छोड़ दिया गया है, और यह ऐतिहासिक फोरट्रान सुविधाओं के प्रलेखन में सुविधा प्रदान करेगा।
आंतरिक उपप्रोग्राम
एक प्रोग्राम यूनिट जो आंतरिक उपप्रोग्राम नहीं है, में अन्य प्रोग्राम इकाइयाँ हो सकती हैं, जिन्हें आंतरिक उपप्रोग्राम कहा जाता है।
program prog
implicit none
contains
function f()
end function f
subroutine g()
end subroutine g
end program
इस तरह के एक आंतरिक उपप्रोग्राम में कई विशेषताएं हैं:
- उपप्रोग्राम और बाहरी कार्यक्रम में संस्थाओं के बीच मेजबान संघ है
- निहित टाइपिंग नियम विरासत में दिए गए हैं
f
उपरोक्त मेंimplicit none
प्रभावीimplicit none
है) - आंतरिक उपप्रोग्राम में होस्ट में एक स्पष्ट इंटरफ़ेस उपलब्ध है
मॉड्यूल उपप्रोग्राम और बाहरी उपप्रोग्राम में आंतरिक उपप्रोग्राम हो सकते हैं, जैसे कि
module mod
implicit none
contains
function f()
contains
subroutine s()
end subroutine s
end function f
end module mod
स्रोत कोड फ़ाइलें
एक स्रोत कोड फ़ाइल एक आम तौर पर (आम तौर पर) सादे पाठ फ़ाइल है जो संकलक द्वारा संसाधित की जाती है। एक स्रोत कोड फ़ाइल में एक मुख्य कार्यक्रम और किसी भी मॉड्यूल और बाहरी उपप्रोग्राम हो सकते हैं। उदाहरण के लिए, एक स्रोत कोड फ़ाइल में निम्नलिखित शामिल हो सकते हैं
module mod1
end module mod1
module mod2
end module mod2
function func1() ! An external function
end function func1
subroutine sub1() ! An external subroutine
end subroutine sub1
program prog ! The main program starts here...
end program prog ! ... and ends here
function func2() ! An external function
end function func2
हमें यहां यह याद रखना चाहिए कि भले ही बाह्य उपप्रोग्राम मॉड्यूल और मुख्य कार्यक्रम के रूप में एक ही फ़ाइल में दिए गए हों, बाहरी उपप्रोग्राम किसी अन्य घटक द्वारा स्पष्ट रूप से ज्ञात नहीं हैं।
वैकल्पिक रूप से, अलग-अलग घटकों को कई फ़ाइलों में फैलाया जा सकता है, और यहां तक कि अलग-अलग समय पर संकलित किया जा सकता है। कंपाइलर प्रलेखन को एक प्रोग्राम में कई फ़ाइलों को संयोजित करने के तरीके के बारे में पढ़ा जाना चाहिए।
एकल स्रोत कोड फ़ाइल में फ़िक्स्ड-फ़ार्म या फ़्री-फ़ार्म स्रोत कोड हो सकते हैं: उन्हें मिश्रित नहीं किया जा सकता है, हालाँकि संकलन-समय पर संयोजित की जा रही एकाधिक फ़ाइलों में भिन्न शैलियाँ हो सकती हैं।
संकलक को इंगित करने के लिए स्रोत के रूप में आम तौर पर दो विकल्प होते हैं:
- फ़ाइल नाम प्रत्यय की पसंद
- संकलक झंडे का उपयोग
संकलक के दस्तावेजीकरण में निर्धारित-या मुक्त-प्रपत्र स्रोत को इंगित करने के लिए संकलन-समय ध्वज पाया जा सकता है।
महत्वपूर्ण फ़ाइल नाम प्रत्यय भी कर रहे हैं संकलक के प्रलेखन में पाया जा सकता है, लेकिन एक सामान्य नियम के रूप में एक फ़ाइल का नाम file.f90
मुक्त रूप स्रोत को रोकने के लिए, जबकि फ़ाइल लिया जाता है file.f
निश्चित-रूप स्रोत को रोकने के लिए लिया जाता है।
फ्री-फॉर्म सोर्स (जो कि फोरट्रान 90 मानक में पेश किया गया था) को इंगित करने के लिए .f90
प्रत्यय का उपयोग अक्सर प्रोग्रामर को उस मानक का उपयोग करने का संकेत देता है जिसमें भाषा का मानक स्रोत कोड के अनुरूप होता है। उदाहरण के लिए, हम .f03
या .f08
प्रत्यय वाली फाइलें देख सकते हैं। यह आमतौर पर टाला जाता है: अधिकांश फोरट्रान 2003 स्रोत भी फोरट्रान 77, फोरट्रान 90/5 और फोरट्रान 2008 के अनुरूप हैं। इसके अलावा, कई कॉमलर स्वचालित रूप से ऐसे प्रत्ययों पर विचार नहीं करते हैं।
कंपाइलर भी अक्सर एक अंतर्निहित कोड प्रीप्रोसेसर (आमतौर पर सीपीपी पर आधारित) की पेशकश करते हैं। फिर से, संकलन-समय ध्वज का उपयोग यह इंगित करने के लिए किया जा सकता है कि संकलन से पहले प्रीप्रोसेसर को चलाया जाना चाहिए, लेकिन स्रोत कोड फ़ाइल प्रत्यय भी इस तरह की प्रीप्रोसेसिंग आवश्यकता को इंगित कर सकता है।
केस-संवेदी फाइलसिस्टम के लिए, फ़ाइल file.F
को अक्सर file.F
होने के लिए एक फिक्स्ड-फॉर्म सोर्स फाइल के रूप में लिया जाता है और फाइल file.F
को file.F
- file.F90
करने के लिए एक फ्री-फॉर्म सोर्स फाइल होना चाहिए। पहले की तरह, इस तरह के झंडे और फ़ाइल प्रत्यय के लिए संकलक के दस्तावेज से परामर्श किया जाना चाहिए।