[Powered by Google Translate] રોબ બોડેન: લેટ્સ હિસ્સો કમ્પાઇલરોનો વિશે વાત કરો. આ બિંદુએ, જ્યાં સુધી તમે હમણાં તમારી સ્રોત કોડ લખ્યો કર્યું છે માં અમુક ફાઈલો, તેમને આ મોટી કાળી બોક્સમાં કે જે દ્વારા મોકલવામાં રણકાર, અને તમારા એક્ઝેક્યુટેબલ ફાઈલ કરે છે જે આવે બરાબર તમે તમારી સ્રોત કોડ લખ્યું શું. થયા છે તે જાદુઈ તરીકે, અમે નજીક લઈ જઈ રહ્યાં છો ખરેખર શું ચાલી રહ્યું છે તે જોવા માટે જ્યારે અમે ફાઈલ કમ્પાઈલ. તેથી તે શું કંઈક કમ્પાઇલ અર્થ છે? વેલ, સૌથી સામાન્ય અર્થમાં, તે માત્ર અર્થ એ થાય રૂપાંતરિત કોડ એક હોય તેવા પરચૂરણ ખર્ચ બીજી ભાષા પ્રોગ્રામિંગ. પરંતુ સામાન્ય રીતે જ્યારે લોકો કહે છે કે તેઓ કંઇક કમ્પાઇલ તેઓ, મીન તેઓ તેને ઊંચા લેવલ પ્રોગ્રામીંગ થી લઇ રહ્યા છીએ નીચા લેવલ પ્રોગ્રામીંગ ભાષા માટે ભાષા. આ ખૂબ જ વ્યક્તિલક્ષી શરતો જેવી લાગે. ઉદાહરણ તરીકે, તમે કદાચ સી ઊંચી તરીકે લાગતું નથી લેવલ પ્રોગ્રામીંગ ભાષા છે, પરંતુ તમે તેને કમ્પાઇલ નથી. પરંતુ તે તમામ સંબંધિત છે. આપણે જોઈ શકશો, વિધાનસભાની કોડ અને છેવટે મશીન કોડ કે અમે નીચે કમ્પાઇલ undeniably નીચા સ્તરે છે સી કરતાં જો કે અમે આજે નિદર્શન માં રણકાર શકાય મદદથી પડશે એ, અહીં વિચારો ઘણો અન્ય કમ્પાઇલરોનો પર લઇ જાય છે. રણકાર માટે, ત્યાં એકંદર ચાર મુખ્ય પગલાંઓ છે સંકલન. બે; આ એક છે, preprocessor દ્વારા કરવામાં preprocessing છે પણ કમ્પાઇલર દ્વારા કરવામાં સંકલન; ત્રણ, એસેમ્બલ આ એસેમ્બ્લર દ્વારા કરવામાં; અને ચાર, લિંક આ linker દ્વારા થાય છે. તે મૂંઝવણમાં થઈ શકે છે કે જે સમગ્ર ના substeps ઓફ રણકાર કમ્પાઇલર્સ કમ્પાઇલર કહેવામાં આવે છે, પરંતુ અમે તે માટે મળશે. અમે અમારી ઉદાહરણ તરીકે એક સરળ હેલ્લો વિશ્વ કાર્યક્રમની મદદથી પડશે આ વિડિઓ સમગ્ર. ચાલો એક નજર નાખો. પ્રથમ પગલું preprocessing છે. આ preprocessor શું થાય છે? ખૂબ ખૂબ દરેક સી કાર્યક્રમ તમે ક્યારેય અથવા વાંચી લીધું છે તેવા પરચૂરણ ખર્ચ માં, તમે કોડ લીટીઓ કે જે હેશ સાથે શરૂ ઉપયોગ કર્યો છે. હું તેને હેશ કહી શકાય, પરંતુ તમને પણ તે પાઉન્ડ નંબર, કૉલ કરી શકો છો સાઇન ઇન કરો, અથવા તીવ્ર. કોઈપણ જેમ કે લીટી preprocessor ડાઈરેક્ટીવ છે. તમે કદાચ જોઇ છે # વ્યાખ્યાયિત અને # પહેલાં સમાવેશ થાય છે, પરંતુ ત્યાં અનેક કે preprocessor શકાય છે. ચાલો એક # અમારા હેલ્લો વિશ્વ ઉદાહરણ માટે વ્યાખ્યાયિત ઉમેરો. હવે આપણે આ ફાઇલ પર ફક્ત preprocessor ચલાવો. Clage ધ ઇ ધ્વજ પસાર કરીને, તો તમે તેને ચલાવવા માટે સૂચના આપી રહ્યાં છો ફક્ત preprocessor. માતાનો જુઓ શું થાય દો. એવું લાગે છે કે રણકાર બસ બધું spits આદેશ વાક્ય પર. ક્રમમાં આ આઉટપુટ તમામ નવા તરીકે ઓળખાતી ફાઈલ સાચવવા માટે hello2.c, અમે> અમારી આદેશ hello2.c ઉમેરી શકશો. હવે આપણે આપણા preprocessed ફાઈલ પર એક નજર. સાંભળો, શું અમારી ટૂંકા થોડું કાર્યક્રમ થયું? જો અમે આ ફાઇલ નીચે બધી રીતે જવું, અમે જોશો કોડ કે અમે ખરેખર લખ્યું કેટલાક. નોંધ કરો કે આ # વ્યાખ્યાયિત ગઇ છે અને નામ બધા ઘટકોમાં ખરેખર શું આપણે સ્પષ્ટ સાથે બદલી કરવામાં આવી આ વાક્ય # વ્યાખ્યાયિત કરે છે. તેથી આ તમામ typedefs અને કાર્ય ઘોષણાઓ શું છે ફાઇલ ટોચ પર? નોંધ કરો કે આ વ્યાખ્યાયિત # જ માત્ર preprocessor ન હતી ડાઈરેક્ટીવ કે અમે સ્પષ્ટ કરેલ છે. અમે પણ સમાવેશ થાય છે stdio.h # છે. તેથી ઉન્મત્ત રેખાઓ બધી વાસ્તવમાં માત્ર stdio.h નકલ અને આ ફાઈલની ટોચ માં પેસ્ટ. કે શા માટે હેડર ફાઈલો જેથી કાર્ય કરવા માટે ઉપયોગી છે જાહેરાતો. તેના બદલે નકલ અને કાર્ય બધા પેસ્ટ જરૂર ના જાહેરાતો તમે તમારી ફાઈલ ટોચ પર વાપરી રહ્યા માંગો, તો preprocessor નકલ અને હેડર તેમને પેસ્ટ કરશે તમે ફાઈલ કરવા માટે. હવે અમે preprocessing પૂર્ણ કરી, અમે પર ખસેડો સંકલન. કારણ કે અમે આ પગલું સંકલન કહી છે કારણ કે આ તે જ છે આ પગલું જ્યાં રણકાર ખરેખર તેના સી થી સંકલન નથી વિધાનસભા કોડ. ક્રમમાં હોય રણકાર વિધાનસભા માટે એક ફાઇલ નીચે કમ્પાઇલ, પરંતુ કોઈ વધુ ચાલુ રાખવા માટે, તે પસાર ધ એસ ધ્વજ આદેશ વાક્ય પર. ચાલો એસેમ્બલી પર એક નજર ફાઈલ કે જે outputted હતી. તે તદ્દન અલગ ભાષા જેવો દેખાય છે. વિધાનસભા કોડ ખૂબ પ્રોસેસર ચોક્કસ છે. આ કિસ્સામાં, કારણ કે CS50 ઉપકરણ પર ચાલી રહ્યું છે વર્ચ્યુઅલ x86 પ્રોસેસર, આ x86 વિધાનસભા કોડ છે. બહુ ઓછા લોકો વિધાનસભા કોડ માં આ દિવસોમાં સીધી લખો, પરંતુ દરેક સી કાર્યક્રમ તમે ક્યારેય લખી પરિવર્તન નહીં વિધાનસભા માં. ફરીથી, અમે આ વિધાનસભા માં સી કમ્પાઇલ પગલું કૉલ કારણ કે અમે એક ઉચ્ચ સ્તર માંથી નીચા સ્તરે જોઈ રહ્યા છે ભાષા પ્રોગ્રામિંગ. શું સી કરતાં વિધાનસભા નીચલા સ્તર બનાવે છે? વેલ, વિધાનસભા, અમે ખૂબ જ અમે શું કરી શકે મર્યાદિત હોય છે. ત્યાં કોઈ માતાનો જો, જ્યારે છે, છે કે, કોઈ પણ પ્રકારની અથવા આંટીઓ છે. પરંતુ તમે તે જ વસ્તુઓ પરિપૂર્ણ કરી શકો છો કે જે આ નિયંત્રણ માળખાં મર્યાદિત કામગીરી મદદથી તક આપે છે કે વિધાનસભા પૂરી પાડે છે. પરંતુ તે જોવા માટે માત્ર કેવી રીતે નીચા સ્તર વિધાનસભા ખરેખર છે, ચાલો જાઓ અમારા સંકલન એક વધુ પગલું, એસેમ્બલ. તે એસેમ્બ્લર માટે એસેમ્બલી કોડ પરિવર્તન કામ પદાર્થ કે યંત્ર કોડમાં. યાદ રાખો કે એસેમ્બ્લર આઉટપુટ વિધાનસભા નથી; તેના બદલે, તે વિધાનસભા અને આઉટપુટ મશીન કોડ લે. મશીન કોડ વાસ્તવિક 1 અને 0 ના કે જે CPU ભાર છે કરી શકો છો સમજવું છે, તેમ છતાં અમે હજુ કામ એક નાના બીટ બાકી છે પહેલાં અમે અમારા કાર્યક્રમ ચલાવી શકો છો. ચાલો પસાર કરીને અમારી વિધાનસભા કોડ એસેમ્બલ રણકાર એ-c ફ્લેગ. હવે આપણે શું એસેમ્બલ ફાઈલમાં છે. વેલ, અમને કે ખૂબ ખૂબ મદદ ન કરતું નથી. યાદ રાખો કે મશીન કોડ કરે અને zeros છે કે તમારા કમ્પ્યુટર સમજી શકે છે. એનો અર્થ એ નથી કે તે સરળ અમારા માટે સમજવા માટે છે. તેથી બરાબર નીચા સ્તર કેવી રીતે વિધાનસભા છે? તે લગભગ પદાર્થ કોડ સમાન છે. વિધાનસભા ના પદાર્થ કોડ જવું બહુ વધારે છે એક રૂપાંતર કરતાં અનુવાદ, જે શા માટે છે એક માટે એસેમ્બ્લર ધ્યાનમાં શકે છે કોઈપણ વાસ્તવિક કમ્પાઇલ કરવું. હકીકતમાં, તે સારુ સરળ જાતે માંથી અનુવાદિત મશીન કોડ એસેમ્બલી. એક મુખ્ય કાર્ય માટે વિધાનસભા ખાતે છીએ, તે પ્રથમ વાક્ય માટે હેક્સાડેસિમલ 0x55 અનુલક્ષે બને છે. દ્વિસંગી, તે 1010101 છે. બીજા વાક્ય હેક્સાડેસિમલ 0x895 અનુલક્ષે બને છે. અને આગામી 0x56,. પ્રમાણમાં સરળ ટેબલ જોતાં, તમે અનુવાદ કરી શકે છે આ કોડમાં વિધાનસભા કે મશીનો પણ સમજી શકે છે. તેથી ત્યાં એક બાકી પગલું છે સંકલન છે, જે લિંક છે. લિંક એક મોટા ફાઇલમાં પદાર્થ ફાઈલો સમૂહ જોડે કે તમે વાસ્તવમાં ચલાવી શકો છો. લિંક ખૂબ સિસ્ટમ આધાર રાખે છે. તેથી સૌથી સરળ રણકાર વિચાર માત્ર પદાર્થ લિંક માર્ગ ફાઇલોને સાથે ફાઈલો છે કે જે બધા પર રણકાર કહી છે તમે એક સાથે લિંક કરવા માંગો છો. જો તમે ઓ ફાઈલો છે. સ્પષ્ટ કરો, પછી તેને ફરી પ્રક્રિયા કરવા જરૂર નથી, કમ્પાઇલ, અને તમારી સ્રોત કોડ તમામ એસેમ્બલ. ચાલો અમારી ફાઇલમાં એક ગણિત કાર્ય ફેંકવું, તેથી અમે હોય સાઇન લિંક કંઈક હવે આપણે તેના પાછા પદાર્થ કોડ ઘટીને કમ્પાઇલ અને તેના પર રણકાર કૉલ કરો. અરે. કારણ કે આપણે એક ગણિત કાર્ય સમાવેશ થાય છે, અમે લિંક કરવાની જરૂર છે ગણિત લાઇબ્રેરી સાથે એલએમ. જો અમે એકસાથે સમૂહ લિંક માગતા હતા. ઓ ફાઈલો અમે તે અમારી પોતાની પર લખ્યું હતું, અમે ફક્ત અંતે તેમને બધા સ્પષ્ટ હો આદેશ વાક્ય. આ પ્રતિબંધ આ ફાઈલો છે કે માત્ર એક જ જોઈએ છે ખરેખર એક મુખ્ય કાર્ય સ્પષ્ટ કરવા માટે, અથવા અન્ય જે પરિણામે એક્ઝેક્યુટેબલ શરૂ કરવા જ્યાં ખબર નથી કરશે તમારો કોડ ચાલી રહ્યું છે. ફાઈલ સ્પષ્ટ કરવા માટે લિંક વચ્ચે શું તફાવત છે સાથે l અને માત્ર એક ફાઈલ સીધા સ્પષ્ટ? કંઈ નથી. તે માત્ર કે રણકાર માટે ચોકકસ શું ફાઈલ ખબર થાય છે કંઈક જેવા એલએમ સંદર્ભ લો બને છે. જો તમે તે ફાઈલ પોતાને ખબર પડી, તો તમે તેને સ્પષ્ટ કરી શકે છે નિશ્ચિતપણે. જસ્ટ યાદ રાખો કે તમામ-l ફ્લેગ કરવા માટે ઓવરને અંતે આવે છે તમારી ક્લાઈન્ટ માંગ છે. અને તે તમામ ત્યાં તે છે છે. જ્યારે તમે માત્ર અમુક ફાઈલો પર રણકાર ચલાવવા માટે, આ તે શું છે વાસ્તવમાં કરી. મારું નામ રોબ બોડેન છે, અને આ CS50 છે.