Precompiled header
કમ્પ્યુટર પ્રોગ્રામિંગમાં, પૂર્વ સંકલિત હેડર (પીસીએચ) એ (સી અથવા સી + +) હેડર ફાઇલ છે જે મધ્યવર્તી સ્વરૂપમાં સંકલિત કરવામાં આવે છે જે કમ્પાઇલર માટે પ્રક્રિયા કરવા માટે ઝડપી હોય છે. પૂર્વ સંકલિત હેડરનો ઉપયોગ સંકલનના સમયને નોંધપાત્ર રીતે ઘટાડી શકે છે, ખાસ કરીને જ્યારે મોટી હેડર ફાઇલો, હેડર ફાઇલો કે જેમાં અન્ય ઘણી હેડર ફાઇલો શામેલ હોય અથવા હેડર ફાઇલો કે જે ઘણા અનુવાદ એકમોમાં શામેલ હોય ત્યારે લાગુ થાય છે. તર્ક સી અને સી + + પ્રોગ્રામિંગ ભાષાઓમાં, હેડર ફાઇલ એ એક ફાઇલ છે જેનું લખાણ સી પ્રીપ્રોસેસર દ્વારા સ્રોત ફાઇલમાં પ્રીપ્રોસેસર નિર્દેશનો ઉપયોગ કરીને આપમેળે અન્ય સ્રોત ફાઇલમાં શામેલ થઈ શકે છે. હેડર ફાઇલોમાં કેટલીકવાર ખૂબ મોટી માત્રામાં સ્રોત કોડ હોઈ શકે છે (ઉદાહરણ તરીકે, માઇક્રોસોફ્ટ વિન્ડોઝ અને ઓએસ એક્સ પર અનુક્રમે હેડર ફાઇલો windows.h અને કોકોઆ/કોકોઆ. એચ). આ ખાસ કરીને મોટી "હેડર" લાઈબ્રેરીઓના આગમન સાથે સાચું છે, જે આઈગન ગણિત લાઈબ્રેરી અને બૂસ્ટ સી + + લાઈબ્રેરી જેવા નમૂનાઓનો વ્યાપક ઉપયોગ કરે છે. તેઓ લગભગ સંપૂર્ણપણે હેડર ફાઇલો તરીકે લખવામાં આવે છે જે વપરાશકર્તા #includes, રનટાઇમ પર લિંક થવાને બદલે. આમ, દરેક વખતે જ્યારે વપરાશકર્તા તેમના પ્રોગ્રામનું સંકલન કરે છે, ત્યારે વપરાશકર્તા આવશ્યકપણે અસંખ્ય હેડર લાઈબ્રેરીઓને પણ ફરીથી સંકલન કરે છે. (આ બિન "હેડર" લાઈબ્રેરીઓમાં વહેંચાયેલ ઓબ્જેક્ટો અથવા ડાયનેમિક લિંક લાઈબ્રેરીઓમાં પૂર્વ સંકલિત કરવામાં આવશે.) સંકલનનો સમય ઘટાડવા માટે, કેટલાક સંકલનકારો હેડર ફાઇલોને એવા સ્વરૂપમાં સંકલિત કરવાની મંજૂરી આપે છે જે સંકલનકર્તાને પ્રક્રિયા કરવા માટે ઝડપી હોય. આ મધ્યવર્તી સ્વરૂપને પૂર્વ સંકલિત હેડર તરીકે ઓળખવામાં આવે છે, અને તે સામાન્ય રીતે વિસ્તરણ. pch અથવા સમાન નામની ફાઇલમાં રાખવામાં આવે છે, જેમ કે. gch જીએનયુ કમ્પાઇલર સંગ્રહ હેઠળ. ઉપયોગ ઉદાહરણ તરીકે, C + + ફાઇલ source.cpp આપવામાં આવી છે જેમાં header.hpp:// header.hpp.// source.cpp #include "header.hpp" નો સમાવેશ થાય છે. જ્યારે પૂર્વ સંકલિત હેડર સુવિધા સાથે પ્રથમ વખત source.cpp સંકલન કરે છે, ત્યારે કમ્પાઇલર પૂર્વ સંકલિત હેડર, header.pch જનરેટ કરશે. આગલી વખતે, જો આ હેડરનું ટાઇમસ્ટેમ્પ બદલાયું ન હોય, તો કમ્પાઇલર header.hpp સંબંધિત સંકલન તબક્કાને અવગણી શકે છે અને તેના બદલે સીધા header.pch નો ઉપયોગ કરી શકે છે. સામાન્ય અમલીકરણ માઈક્રોસોફ્ટ વિઝ્યુઅલ સી અને સી + + માઈક્રોસોફ્ટ વિઝ્યુઅલ સી + + (સંસ્કરણ 6 અને નવું) માત્ર હેડર નહીં પણ કોઈપણ કોડને પૂર્વ સંકલિત કરી શકે છે. તે આ બે રીતે કરી શકે છેઃ કાં તો ફાઇલ સુધીના તમામ કોડને પૂર્વ સંકલન કરવું કે જેનું નામ/Ycfilename વિકલ્પ સાથે મેળ ખાય છે અથવા (જ્યારે/Yc કોઈપણ ફાઇલનામ વિના નિર્દિષ્ટ કરવામાં આવે છે) કોડમાં #pragma hdrstop ની પ્રથમ ઘટના સુધી તમામ કોડને પૂર્વ સંકલન કરવું પૂર્વ સંકલિત આઉટપુટ/Yc વિકલ્પને આપવામાં આવેલ ફાઇલના નામ પરથી નામ આપવામાં આવેલી ફાઇલમાં. pch એક્સ્ટેંશન સાથે અથવા/Fpfilename વિકલ્પ દ્વારા પૂરા પાડવામાં આવેલ નામ અનુસાર નામ આપવામાં આવેલી ફાઇલમાં સાચવવામાં આવે છે. / યુ વિકલ્પ, જો એકસાથે ઉપયોગમાં લેવાય તો/વાયસી વિકલ્પને આધિન, કમ્પાઇલરને આવી ફાઇલમાંથી પહેલાથી સંકલિત કોડનો ઉપયોગ કરવા માટેનું કારણ બને છે. pch.h (વિઝ્યુઅલ સ્ટુડિયો 2017 પહેલાં stdafx.h નામ આપવામાં આવ્યું હતું) એ માઈક્રોસોફ્ટ વિઝ્યુઅલ સ્ટુડિયો IDE વિઝાર્ડ દ્વારા જનરેટ કરવામાં આવેલી ફાઇલ છે, જે પ્રમાણભૂત સિસ્ટમ અને પ્રોજેક્ટ વિશિષ્ટ એમ બંનેનું વર્ણન કરે છે જેમાં વારંવાર ઉપયોગમાં લેવાતી પરંતુ ભાગ્યે જ ક્યારેય બદલાતી હોય તેવી ફાઇલોનો સમાવેશ થાય છે. stdafx.h માં એ. એફ. એક્સ. નો અર્થ એપ્લિકેશન ફ્રેમવર્ક એક્સ્ટેંશન છે. એ. એફ. એક્સ. એ માઈક્રોસોફ્ટ ફાઉન્ડેશન ક્લાસિસ (એમ. એફ. સી.) નું મૂળ સંક્ષિપ્ત નામ હતું. જ્યારે નામ stdafx.h નો ઉપયોગ આવૃત્તિ 2017 પહેલા એમ. એસ. વી. સી. પ્રોજેક્ટ્સમાં મૂળભૂત રીતે કરવામાં આવ્યો હતો, ત્યારે કોઈપણ વૈકલ્પિક નામ જાતે નિર્દિષ્ટ કરી શકાય છે. સુસંગત કમ્પાઇલર્સ સંકલનનો એકંદર સમય ઘટાડવા માટે આ ફાઇલને અગાઉથી સંકલિત કરશે. વિઝ્યુઅલ સી + + સ્રોત ફાઇલમાં #include "pch.h" પહેલાં કંઈપણ સંકલન કરશે નહીં, સિવાય કે સંકલન વિકલ્પ/યુ 'pch.h' અનચેક કરેલ હોય (મૂળભૂત રીતે); તે ધારે છે કે તે પંક્તિ સહિત સ્રોતમાં તમામ કોડ પહેલેથી જ સંકલિત છે. જી. સી. સી. પૂર્વ સંકલિત હેડર જી. સી. સી. (3.4 અને નવા) માં આધારભૂત છે. જીસીસીનો અભિગમ વીસી અને સુસંગત કમ્પાઇલર્સ જેવો જ છે. GCC ". gch" પ્રત્યયનો ઉપયોગ કરીને હેડર ફાઇલોના પૂર્વ સંકલિત સંસ્કરણોને સાચવે છે. સ્રોત ફાઇલનું સંકલન કરતી વખતે, કમ્પાઇલર તપાસે છે કે આ ફાઇલ એ જ ડિરેક્ટરીમાં હાજર છે કે નહીં અને જો શક્ય હોય તો તેનો ઉપયોગ કરે છે. જી. સી. સી. પૂર્વ સંકલિત સંસ્કરણનો ઉપયોગ ત્યારે જ કરી શકે છે જ્યારે તે જ કમ્પાઇલર સ્વીચો જ્યારે હેડર સંકલિત કરવામાં આવ્યું હતું તે રીતે સેટ કરવામાં આવે અને તે વધુમાં વધુ એકનો ઉપયોગ કરી શકે. વધુમાં, માત્ર પ્રીપ્રોસેસર સૂચનાઓ પૂર્વ સંકલિત હેડર પહેલાં મૂકી શકાય છે (કારણ કે તે કોઈપણ સંકલનક્ષમ કોડ પહેલાં, અન્ય સામાન્ય હેડર દ્વારા પ્રત્યક્ષ અથવા પરોક્ષ રીતે શામેલ હોવી આવશ્યક છે). જીસીસી આપમેળે મોટા ભાગની હેડર ફાઇલોને તેમના એક્સ્ટેંશન દ્વારા ઓળખે છે. જો કે, જો આ નિષ્ફળ જાય (દા. ત. બિન-માનક હેડર એક્સ્ટેંશનને કારણે), જીસીસી ફાઇલને હેડર તરીકે વર્તે છે તેની ખાતરી કરવા માટે-x સ્વીચનો ઉપયોગ કરી શકાય છે. ક્લાંગ કમ્પાઇલરે 2009ના ક્લાંગ 2.5/એલ. એલ. વી. એમ 2.5 માં પી. સી. એચ. માટે ટેકો ઉમેર્યો. કમ્પાઇલર બંને ઇનપુટ સોર્સ કોડને ટોકનાઇઝ કરે છે અને હેડરનું વાક્યરચના અને સિમેન્ટીક વિશ્લેષણ કરે છે, કમ્પાઇલરના આંતરિક જનરેટેડ એબ્સ્ટ્રેક્ટ સિન્ટેક્સ ટ્રી (એએસટી) અને સિમ્બોલ ટેબલને પૂર્વ સંકલિત હેડર ફાઇલમાં લખે છે. ક્લાંગની પૂર્વ સંકલિત હેડર યોજના, કેટલાક સુધારાઓ સાથે, જેમ કે એક પૂર્વ સંકલિત હેડર માટે બીજાનો સંદર્ભ લેવાની ક્ષમતા, આંતરિક રીતે વપરાયેલ, પૂર્વ સંકલિત હેડર, પણ તેના મોડ્યુલ મિકેનિઝમ માટેનો આધાર બનાવે છે. તે સમાન બિટકોડ ફાઇલ ફોર્મેટનો ઉપયોગ કરે છે જે એલ. એલ. વી. એમ. દ્વારા કાર્યરત છે, જે કોમન ઓબ્જેક્ટ ફાઇલ ફોર્મેટ અથવા એક્સ્ટેન્સિબલ લિંકિંગ ફોર્મેટ ફાઇલોમાં ક્લેંગ-વિશિષ્ટ વિભાગોમાં સમાવિષ્ટ છે. સી + + બિલ્ડર મૂળભૂત પ્રોજેક્ટ રૂપરેખાંકનમાં, સી + + બિલ્ડર કમ્પાઇલર સ્રોત મોડ્યુલ દ્વારા સમાવિષ્ટ તમામ હેડર માટે પૂર્વ સંકલિત હેડરને સ્પષ્ટ રીતે ઉત્પન્ન કરે છે જ્યાં સુધી રેખા #pragma hdrstop મળી ન જાય. જો શક્ય હોય તો પ્રોજેક્ટના તમામ મોડ્યુલો માટે પૂર્વ સંકલિત હેડર વહેંચવામાં આવે છે. ઉદાહરણ તરીકે, વિઝ્યુઅલ કમ્પોનન્ટ લાઇબ્રેરી સાથે કામ કરતી વખતે, પહેલા vcl.h હેડરનો સમાવેશ કરવો સામાન્ય છે જેમાં સામાન્ય રીતે ઉપયોગમાં લેવાતી મોટાભાગની વીસીએલ હેડર ફાઇલો હોય છે. આમ, પૂર્વ સંકલિત હેડરને તમામ પ્રોજેક્ટ મોડ્યુલોમાં વહેંચી શકાય છે, જે નિર્માણના સમયને નાટ્યાત્મક રીતે ઘટાડે છે. વધુમાં, સી + + બિલ્ડરને વિઝ્યુઅલ સી + + દ્વારા પૂરી પાડવામાં આવેલી પદ્ધતિ જેવી જ પૂર્વ સંકલિત હેડર તરીકે ચોક્કસ હેડર ફાઇલનો ઉપયોગ કરવા માટે સાધન બનાવી શકાય છે. સી + + બિલ્ડર 2009 "પૂર્વ સંકલિત હેડર વિઝાર્ડ" રજૂ કરે છે જે સમાવિષ્ટ હેડર ફાઇલો માટે પ્રોજેક્ટના તમામ સ્રોત મોડ્યુલોને પદચ્છેદન કરે છે, તેમને વર્ગીકૃત કરે છે (એટલે કે. હેડર ફાઇલોને બાકાત રાખે છે જો તે પ્રોજેક્ટનો ભાગ હોય અથવા તેમાં ઇન્ક્લુડ ગાર્ડ ન હોય) અને ચોક્કસ ફાઇલો માટે પૂર્વ સંકલિત હેડર આપમેળે જનરેટ કરે છે અને તેનું પરીક્ષણ કરે છે. પ્રીટોકનાઇઝ્ડ હેડર એ પ્રીટોકનાઇઝ્ડ હેડર (પી. ટી. એચ.) એ એક હેડર ફાઇલ છે જે લેક્સિકલ વિશ્લેષણ દ્વારા ચલાવવામાં આવી છે, પરંતુ તેના પર કોઈ સિમેન્ટીક કામગીરી કરવામાં આવી નથી. પી. ટી. એચ. એ પી. સી. એચ. ને ટેકો આપ્યો તે પહેલાં પી. ટી. એચ. ક્લાંગમાં હાજર છે, અને જી. સી. સી. ની એક શાખામાં પણ તેનો પ્રયાસ કરવામાં આવ્યો છે. સંપૂર્ણ પી. સી. એચ. મિકેનિઝમની તુલનામાં, પી. ટી. એચ. ભાષા (અને બોલી) સ્વતંત્રતાના ફાયદા ધરાવે છે, કારણ કે લેક્સિકલ વિશ્લેષણ સી-ફેમિલી ભાષાઓ અને આર્કિટેક્ચર સ્વતંત્રતા માટે સમાન છે, કારણ કે વિવિધ લક્ષ્ય આર્કિટેક્ચર માટે સંકલન કરતી વખતે ટોકનના સમાન પ્રવાહનો ઉપયોગ કરી શકાય છે. જો કે તેમાં સરળ લેક્સિકલ વિશ્લેષણ સિવાય આગળ ન જવાનો ગેરલાભ છે, જેમાં દરેક સંકલન સાથે ટોકન પ્રવાહનું વાક્યરચના અને સિમેન્ટીક વિશ્લેષણ કરવાની જરૂર પડે છે. વધુમાં, પ્રીટોકનાઇઝ્ડ ફાઇલના કદ સાથે, લેક્સિકલ ટોકન્સમાં, રેખીય રીતે સ્કેલિંગને સંકલન કરવાનો સમય, જે સંપૂર્ણ સુવિધાયુક્ત પૂર્વ સંકલન પદ્ધતિ માટે જરૂરી નથી (ક્લાંગમાં PCH રેન્ડમ ઍક્સેસને મંજૂરી આપે છે). ક્લાંગની પ્રીટોકેનાઈઝેશન મિકેનિઝમમાં પ્રી-પ્રોસેસરને મદદ કરવા માટે કેટલીક નાની પદ્ધતિઓનો સમાવેશ થાય છેઃ ફાઇલ અસ્તિત્વ અને ડેટસ્ટેમ્પ માહિતીનું કેશીંગ, અને રેકોર્ડિંગ સમાવેશ રક્ષકો જેથી સંરક્ષિત કોડને ઝડપથી છોડી શકાય. આ પણ જુઓ ઉપસર્ગ હેડર એક સંકલન એકમ સંદર્ભો બાહ્ય કડીઓ પૂર્વ સંકલિત હેડરની સંભાળ અને પોષણ GCC ફ્રેક્ટલ એક્સટ્રીમ સાથે પૂર્વ સંકલિત હેડરઃ પૂર્વ સંકલિત હેડર સ્રોત કોડ C (પ્રોગ્રામિંગ ભાષા) હેડર C + +