Charm (programming language)
ચાર્મ એ 1990ના દાયકાની શરૂઆતમાં વિકસાવવામાં આવેલી કમ્પ્યુટર પ્રોગ્રામિંગ ભાષા છે, જે આરટીએલ/2, પાસ્કલ અને સી ભાષાઓ સાથે સમાનતા ધરાવે છે અને તેની પોતાની કેટલીક વિશિષ્ટ લાક્ષણિકતાઓ ધરાવે છે. કમ્પાઇલર ડિઝાઇન પરના મૂળભૂત પુસ્તકોમાં વર્ણવ્યા મુજબ રિકરસિવ ડિસેન્ટ પાર્સર દ્વારા પ્રક્રિયા કરવા માટે અનુકૂળ સંદર્ભ-મુક્ત વ્યાકરણ દ્વારા ચાર્મ ભાષાને વ્યાખ્યાયિત કરવામાં આવે છે. એકોર્નના આરઆઇએસસી ઓએસ પ્લેટફોર્મ માટે કમ્પાઇલર, એસેમ્બલર અને લિંકર સહિત આકર્ષક સાધનોનો સમૂહ ઉપલબ્ધ કરાવવામાં આવ્યો હતો. આરઆઇએસસી ઓએસ પ્લેટફોર્મ્સ માટે ફરીથી કામ કરાયેલ ચાર્મની આર્કાઇવ મેગેઝિનમાં સમીક્ષા કરવામાં આવી છે. ઈ-બુક પ્રોગ્રામિંગ ઇન ચાર્મ ઓન ધ રાસ્પબેરી પાઈમાં ચાર્મનું વધુ વર્ણન કરવામાં આવ્યું છે. વ્યાકરણ ચાર્મ ભાષાના પૃષ્ઠ પર ચાર્મ રચનાઓના વર્ણનાત્મક ઉદાહરણો સાથે બેકસ-નૌર સ્વરૂપમાં ચાર્મ વ્યાકરણની વ્યાખ્યા વ્યાખ્યાયિત કરવામાં આવી છે. ભાષા બ્લોક સંરચિત છે, જેમાં દરેક બ્લોકને ભાષાના મુખ્ય શબ્દ દ્વારા રજૂ કરવામાં આવે છે જે બ્લોકમાં કરવામાં આવતી કામગીરીનું વર્ણન કરે છે. ,, (પુનરાવર્તન), (પસંદગી). દરેક બ્લોક {અને} સીમાંકનો દ્વારા ઘેરાયેલો છે. વધુમાં બ્લોકની અંદરની ભાષાની રેખાઓ સામાન્ય રીતે સ્પષ્ટતા માટે ઇન્ડેન્ટ કરવામાં આવે છે, જોકે સફેદ જગ્યાને અવગણવામાં આવે છે તેથી આની જરૂર નથી. દરેક વ્યાકરણની રીતે સુસંગત લખાણ એક્ઝેક્યુટેબલ કોડ અને સંકળાયેલ ડેટાના સંગ્રહને રજૂ કરે છે જેનો ઉપયોગ ચાર્મ ટૂલ સેટ દ્વારા એક ઘટક તરીકે કરી શકાય છે જ્યારે કોઈ પ્રોગ્રામને એસેમ્બલ કરી શકાય છે જે ઓપરેટિંગ સિસ્ટમ હેઠળ ચલાવી શકાય છે, જે ડેટા પ્રોસેસિંગ અથવા ગ્રાફિકલ યુઝર ઇન્ટરફેસ (GUI) દ્વારા વપરાશકર્તાઓ સાથે વાતચીત કરવા જેવી ઉપયોગી કામગીરી કરવા માટે પ્રદાન કરેલી સેવાઓનો ઉપયોગ કરે છે. ડેટા પ્રકારો ચાર્મ એ મજબૂત રીતે ટાઇપ કરેલી ભાષા છે, પરંતુ તે આંકડાકીય અને ફ્લોટિંગ પોઇન્ટ પ્રકારો વચ્ચે કેટલાક ગર્ભિત રૂપાંતરણોને મંજૂરી આપે છે. નીચેના મૂળભૂત ચલ પ્રકારોને ટેકો આપવામાં આવે છેઃ-પૂર્ણાંકો-અક્ષરો-બુલિયન મૂલ્યો (અથવા)-ફ્લોટિંગ પોઇન્ટ નંબરો સમાન પ્રકારના ડેટા એગ્રીગેટ્સને મુખ્ય શબ્દનો ઉપયોગ કરીને જાહેર કરી શકાય છે અને સ્થિર રીતે પ્રારંભ કરી શકાય છે, અને આ બહુ-પરિમાણીય હોઈ શકે છે. વિવિધ પ્રકારોના એકત્રીકરણને મુખ્ય શબ્દનો ઉપયોગ કરીને જાહેર કરી શકાય છે, અને સંગ્રહ ફાળવણીની દ્રષ્ટિએ એકબીજાને આવરી લેતા રેકોર્ડ ક્ષેત્રોની વ્યાખ્યાને વ્યાખ્યાયિત કરવા માટે આવી ઘોષણા માટે તે સ્વીકાર્ય છે. મોડ્યુલો સ્થિર અને ગતિશીલ ડેટા સભ્યોના મિશ્રણને પણ એકત્રિત કરી શકે છે. રેકોર્ડ્સ અને મોડ્યુલો (માત્ર ગતિશીલ સામગ્રી) બંનેના ઉદાહરણો સ્ટેક પર અથવા ઓપરેટર દ્વારા ઢગલા પર તાત્કાલિક કરી શકાય છે. મોડ્યુલો ગતિશીલ ડેટાને શરૂ કરવા માટે કન્સ્ટ્રક્ટર પ્રક્રિયાને પણ વ્યાખ્યાયિત કરી શકે છે અને C + + ભાષાની જેમ જ સંસાધનોને મુક્ત કરવા માટે અનુરૂપ ડીકન્સ્ટ્રક્ટર પ્રક્રિયા પણ કરી શકે છે. મોડ્યુલના અવકાશમાં સંદર્ભ ડેટા અથવા પ્રક્રિયાઓને મુખ્ય શબ્દનો ઉપયોગ કરીને અંતિમ એપ્લિકેશન માટે વૈશ્વિક બનાવી શકાય છે. જો કોઈ મોડ્યુલ અન્ય ચાર્મ મોડ્યુલમાંથી પ્રક્રિયા અથવા ડેટાનો સંદર્ભ આપવા માંગે છે, તો તે મુખ્ય શબ્દનો ઉપયોગ કરીને કરે છે. મોડ્યુલોમાં ઉદાહરણ આધારિત સભ્ય ચલ હોઈ શકે છે જે ગર્ભિત પ્રથમ પરિમાણ નિર્દેશક દ્વારા મુખ્ય શબ્દ સાથે જાહેર કરવામાં આવેલી પ્રક્રિયાઓ દ્વારા સુલભ હોય છે. મુખ્ય શબ્દનો ઉપયોગ કરીને ડેટા રચનાઓ અને પ્રક્રિયાઓના સંદર્ભો બનાવી શકાય છે. આને મુખ્ય શબ્દનો ઉપયોગ કરીને સંદર્ભિત કરી શકાય છે. સંદર્ભ ચલોનો ઉપયોગ કરતી વખતે, સરખામણી સંચાલકો એ તપાસવા માટે ઉપલબ્ધ હોય છે કે બે સંદર્ભ ચલ માહિતીની સમાન વસ્તુ (: =:) નો સંદર્ભ આપે છે કે કેમ અથવા તેઓ જે માહિતી તરફ નિર્દેશ કરે છે તે સમાન (=) છે કે કેમ. ઉદાહરણ ચાર્મમાં લખાયેલ મૂળ ક્લાસિક હેલો વર્લ્ડ પ્રોગ્રામ છેઃ ext યથાક્રમ લિખેં _ સ્ટ્રિંગ (રીફ્રે એરે ચાર); મોડ્યુલ હેલો; એન્ટ પ્રોક સ્ટાર્ટ (); રાઈટ _ સ્ટ્રિંગ ("હેલો વર્લ્ડ"); એન્ડ _ પ્રોક; એન્ડ _ મોડ્યુલ; અને ઉત્ક્રાંતિવાદી વાક્યરચના ભાષાના ફેરફારોને અનુસરતું સમકક્ષ નવીનતમ સંસ્કરણ છેઃ ઇમ્પોર્ટ lib.Out; મોડ્યુલ હેલો {એક્સપોર્ટ પ્રોક ~ સ્ટાર્ટ () {Out.vdu.str ("હેલો વર્લ્ડ"). nl ();} ટૂલ સેટ અમલીકરણથી ચાર્મ સોર્સ કોડ અને એસેમ્બલર સોર્સ કોડમાંથી ઓબ્જેક્ટ ફાઇલો બનાવવા માટે કમ્પાઇલર અને એસેમ્બલર પ્રદાન કરવાની અપેક્ષા રાખવામાં આવે છે, જેને પછી લાઇબ્રેરી સાથે જોડી શકાય છે અને એક્ઝેક્યુટેબલ પ્રોગ્રામ બનાવવા માટે રન ટાઇમ સપોર્ટ ફાઇલો સાથે જોડી શકાય છે. લખતી વખતે ડાઉનલોડ કરવા માટે માત્ર એક જ ચાર્મ ટૂલ સેટ ઇન્સ્ટોલેશન (મફત) ઉપલબ્ધ છે. સાધનો પોતે ચાર્મ ભાષામાં લખાયેલા છે, અને સ્રોત કોડ જીએનયુ જનરલ પબ્લિક લાઇસન્સની શરતો હેઠળ ઉપલબ્ધ છે. તેઓ આરઆઇએસસી ઓએસ પીસી અને એઆરએમ સીપીયુ (જેમ કે રાસ્પબેરી પાઇ) સાથેના પ્લેટફોર્મ પર અને આરઆઇએસસી ઓએસ માટે ઇમ્યુલેટર્સ પર ચાલે છે જે વિન્ડોઝ અથવા લિનક્સ પ્લેટફોર્મ (જેમ કે આરપીસીઇમુ) પર હોસ્ટ કરવામાં આવે છે. હાર્ડવેર આસિસ્ટેડ ડબલ પ્રિસિઝન ફ્લોટિંગ પોઇન્ટ ઓપરેશન્સ માટે કોડ જનરેશન એ એઆરએમ ચિપ્સ પર આધારિત પ્લેટફોર્મ માટે સપોર્ટેડ છે જે વીએફપી વર્ઝન 2 કોપ્રોસેસર આર્કિટેક્ચરને સપોર્ટ કરે છે. કમ્પાઇલર ચાર્મ કમ્પાઇલર એ રિકર્સિવ ડિસેન્ટ સિંગલ પાસ કમ્પાઇલર છે જે મધ્યવર્તી ભાષામાં ફોર્મ પરિણામઃ = lhs op rhs ના ચાર ગણો પેદા કરવા માટે ચાર્મ સોર્સ કોડનું વિશ્લેષણ કરે છે જે અંકગણિત, તાર્કિક અને નિયંત્રણ કામગીરીના પ્રવાહને ટેકો આપે છે. ડેટા અસ્થાયીઓમાં સંગ્રહિત થાય છે જે કમ્પાઇલરના પાછળના ભાગમાં રજિસ્ટર અને મેમરી સ્થાનોને સોંપવામાં આવે છે. બે પાછળના છેડા હાલમાં અસ્તિત્વમાં છે, એક મોટોરોલા 68000 એસેમ્બલી લેંગ્વેજ જનરેટ કરે છે, અને બીજું એઆરએમ આર્કિટેક્ચર જનરેટ કરે છે. હેલો વર્લ્ડના ઉદાહરણમાંથી ચાર ગણું આઉટપુટ છેઃ પરમ l1 $કૉલ રાઈટ _ સ્ટ્રિંગ [પ્રોસીક (રેફ એરે ચાર) વોઈડ] અને એસેમ્બલર આઉટપુટ છેઃ સ્ટ્રિંગ "હેલો" xdef _ સ્ટાર્ટ અલાઈન _ સ્ટાર્ટ xref _ લિખેં _ સ્ટ્રિંગ stmfd sp!, {rp} adr r0, _ l1 $bl _ લિખેં _ સ્ટ્રિંગ ldmfd sp!, {pc} એડ્રેસ અલાઈન _ l1 $સ્ટ્રિંગ "હેલો વર્લ્ડ" ડાયરેક્ટ એન્ડ ચાર્મના વધુ તાજેતરના પ્રકાશનોમાં, I/O પ્રક્રિયાઓને તેમના પોતાના મોડ્યુલો ઇન અને આઉટમાં વિભાજિત કરવામાં આવી છે. અન્ય પ્રમાણભૂત પુસ્તકાલય પ્રક્રિયાઓ ક્ષેત્રો તરીકે પ્રક્રિયા સંદર્ભો સાથે રેકોર્ડના સમૂહમાં ગોઠવવામાં આવે છે. આ પુનઃસંગઠનના ભાગરૂપે, લેખન _ શબ્દમાળા પદ્ધતિ હવે સ્થિર સભ્ય સંદર્ભ દ્વારા રન ટાઇમ લાઇબ્રેરી મોડ્યુલ આઉટ દ્વારા લાગુ કરવામાં આવે છે. ઉપરના હેલો વર્લ્ડના ઉદાહરણમાં લિખેં _ સ્ટ્રિંગ ("હેલો વર્લ્ડ") Out.vdu.str ("હેલો વર્લ્ડ") બની જાય છે. એસેમ્બલર સૂચના નેમોનિક્સ, ડેટા ઘોષણાઓ અને નિર્દેશોને સ્વીકારે છે અને લક્ષ્ય પ્રોસેસરના CPU દ્વારા સહેલાઈથી સમજી શકાય તેવી માહિતી ધરાવતી ઑબ્જેક્ટ ફાઇલ બનાવે છે, ખાસ કરીને દ્વિસંગીમાં કોડેડ કોડ સૂચનાઓમાં. લિંકર વન અને એક્ઝેક્યુટેબલ પ્રોગ્રામ રચવા માટે જોડાયેલા ચાર્મ મોડ્યુલોમાંથી ફક્ત એકમાં સહીઓમાંથી એક સાથે મેળ ખાતી પ્રક્રિયા હોવી આવશ્યક છેઃ એક્સપોર્ટ પ્રોસી ~ સ્ટાર્ટ () એક્સપોર્ટ પ્રોસી ~ સ્ટાર્ટ (ઇન્ટ આરજીસી, રેફ એરે રેફ એરે ચાર આરજીવી) આ સી અને જાવા ભાષાઓમાં મુખ્ય કાર્યને અનુરૂપ છે. અહીં એઆરજીસી આદેશ વાક્ય પર પસાર થયેલા પરિમાણોની સંખ્યા ધરાવે છે અને એઆરજીવી એઆરજીસી + 1 શબ્દમાળાઓની શ્રેણીનો સંદર્ભ ધરાવે છે (ક્રમમાં સ્થિતિસ્થાપક પરિમાણ દીઠ એક શબ્દમાળા અને સમાપ્ત થતું શૂન્ય). વધુમાં, મોડ્યુલો વૈકલ્પિક રીતે પ્રોગ્રામ સ્ટાર્ટઅપ અને શટડાઉન દરમિયાન બોલાવવામાં આવેલી સ્થિર શરૂઆત અને શટડાઉન પ્રક્રિયાઓ ધરાવી શકે છે જે સહીઓ સાથે મેળ ખાય છેઃ નિકાસ પ્રોસી ~ સ્ટાર્ટઅપ () નિકાસ પ્રોસી ~ શટડાઉન () લિંકર પ્રોગ્રામને અમલમાં મૂકવા માટે ઓપરેટિંગ સિસ્ટમ દ્વારા જરૂરી કોઈપણ હેડર માહિતી ઉમેરે છે, અને સુનિશ્ચિત કરે છે કે રન ટાઇમ લાઇબ્રેરી એસેમ્બલર સપોર્ટ કોડ ચલાવવામાં આવે છે જે રન ટાઇમ એન્વાયર્નમેન્ટ (ડેટા અને સ્ટેક પોઇન્ટર) સુયોજિત કરે છે અને એપ્લિકેશનની પ્રારંભ પ્રક્રિયા પર નિયંત્રણ પસાર કરે છે. વૈશ્વિક ડેટા અને કોડ સંદર્ભો સાથે પ્રોગ્રામ રચવા માટે જોડાયેલા તમામ મોડ્યુલોના નામ દર્શાવતી નકશાની ફાઇલ વૈકલ્પિક રીતે તૈયાર કરવામાં આવે છે જેનો ઉપયોગ ડીબગર્સ અને પ્રોફાઇલર્સ દ્વારા કરી શકાય છે. સંદર્ભો બાહ્ય કડીઓ ચાર્મ ફોર આરઆઇએસસી ઓએસ રિસ્ક પીસી એમુલેટર એઆરએમ ઇન્ફર્મેશન સેન્ટર પ્રોગ્રામિંગ લેંગ્વેજીઝ આરઆઇએસસી ઓએસ પ્રોગ્રામિંગ ટૂલ્સ ઉદાહરણ કોડ સાથેના લેખો