StaDyn (programming language)
સ્ટેડિન એ ડોટ નેટ પ્લેટફોર્મ માટે ઓબ્જેક્ટ-ઓરિએન્ટેડ સામાન્ય હેતુ માટેની પ્રોગ્રામિંગ લેંગ્વેજ છે જે સમાન પ્રોગ્રામિંગ લેંગ્વેજમાં સ્થિર અને ગતિશીલ ટાઇપિંગ બંનેને સપોર્ટ કરે છે. સ્ટેડિન કમ્પાઇલર ગતિશીલ રીતે ટાઇપ કરેલા કોડ માટે પ્રકારની માહિતી એકત્રિત કરે છે. તે પ્રકારની માહિતીનો ઉપયોગ સંકલન સમયે પ્રકારની ભૂલો શોધવા અને નોંધપાત્ર ઓપ્ટિમાઇઝેશન કરવા માટે થાય છે. તે હેતુ માટે, તે પ્રકાર પુનર્નિર્માણ (અનુમાન), પ્રવાહ-સંવેદનશીલ પ્રકારો, જોડાણ અને આંતરછેદના પ્રકારો, અવરોધ-આધારિત ટાઇપિંગ, ઉપનામ વિશ્લેષણ અને પદ્ધતિ વિશેષતા પ્રદાન કરે છે. તેનો પ્રથમ પ્રોટોટાઇપ 2007 માં સી #3 ના ફેરફાર તરીકે દેખાયો. પ્રકાર અનુમાનને નવા પ્રકાર તરીકે વારનો સમાવેશ કરીને સમર્થન આપવામાં આવ્યું હતું, સી #થી વિપરીત, જે ફક્ત પ્રારંભિક સ્થાનિક ચલને વ્યાખ્યાયિત કરવા માટે વાર પ્રદાન કરે છે. પ્રવાહ-સંવેદનશીલ પ્રકારના વાર સંદર્ભોનું સંકલનકર્તા દ્વારા અનુમાન કરવામાં આવે છે, જે પ્રકાર-સલામત બતક ટાઇપિંગ પ્રદાન કરે છે. જ્યારે પ્રોગ્રામર દ્વારા વધુ નરમ અભિગમની જરૂર પડે છે, ત્યારે વારને બદલે ડાયનેમિકટાઇપનો ઉપયોગ કરી શકાય છે. તેમ છતાં પ્રકાર અનુમાન હજુ પણ કરવામાં આવે છે, ગતિશીલ સંદર્ભો ગતિશીલ ભાષાઓમાંની નજીક વર્તે છે. સ્ટેડિનની રચના ઓવિડો યુનિવર્સિટીના ફ્રાન્સિસ્કો ઓર્ટિન દ્વારા કરવામાં આવી છે. ફ્રાન્સિસ્કો ઓર્ટિન ઉપરાંત મિગુએલ ગાર્સિયા, જોસ બાલ્ટાસર ગાર્સિયા પેરેઝ-સ્કોફિલ્ડ અને જોસ ક્વિરોગા સહિત કોમ્પ્યુટેશનલ રિફ્લેક્શન રિસર્ચ ગ્રૂપના વિવિધ સભ્યો દ્વારા આ ભાષાનો અમલ કરવામાં આવ્યો છે. સ્ટેડિન નામ સ્થિર અને ગતિશીલનું સંયોજન છે, જે સ્થિર અને ગતિશીલ ટાઇપિંગ બંનેના ફાયદા પ્રદાન કરવાના તેના ઉદ્દેશને સૂચવે છે. વિવિધ પ્રકારો સાથેના કોડ નમૂનાઓ ચલ ગતિશીલ ભાષાઓની જેમ, ચલ એક જ અવકાશમાં વિવિધ પ્રકારો ધરાવી શકે છેઃ સિસ્ટમનો ઉપયોગ કરીને; વર્ગ પ્રોગ્રામ {સાર્વજનિક સ્થિર રદબાતલ મુખ્ય () {Console.Write ("સંખ્યાઃ"); વાર વય = Console.In.ReadLine (); Console.WriteLine ("અંકોઃ + age.Length); વય = Convert.ToInt32 (ઉંમર); વય + +; Console.WriteLine (" જન્મદિવસની શુભેચ્છાઓ, તમે "+ વય +" હવે વર્ષ જૂના છો. "); પૂર્ણાંક લંબાઈ = age.Length;// * સંકલન ભૂલ} વય ચલને પહેલા શબ્દમાળા તરીકે અનુમાનિત કરવામાં આવે છે, તેથી તેની લંબાઈનો ગુણધર્મ મેળવવો સલામત છે. પછી, તે એક પૂર્ણાંક ધરાવે છે, તેથી ઉંમર + + એ માન્ય અભિવ્યક્તિ છે. કમ્પાઇલર છેલ્લી લીટીમાં ભૂલ શોધી કાઢે છે, કારણ કે લંબાઈ હવે વય દ્વારા પૂરી પાડવામાં આવતી નથી. પેદા થયેલ કોડ વયને રજૂ કરવા માટે એક જ ઓબ્જેક્ટ ચલનો ઉપયોગ કરતું નથી, પરંતુ બે અલગ અલગ ચલોનો ઉપયોગ કરે છે જેમના પ્રકારો શબ્દમાળા અને પૂર્ણાંક છે. આ એસએસએ ફોર્મની ગણતરી કરવા માટે અલ્ગોરિધમનોના ફેરફાર સાથે પ્રાપ્ત થાય છે. આ જનરેટેડ કોડને વધુ કાર્યક્ષમ બનાવે છે, કારણ કે રનટાઇમ પ્રકાર રૂપાંતરણો જરૂરી નથી. પ્રવાહ-સંવેદનશીલ પ્રકારો વાર અને ગતિશીલ ચલ પ્રવાહ-સંવેદનશીલ પ્રકારોને પકડી શકે છેઃ સિસ્ટમનો ઉપયોગ કરીને; વર્ગ પ્રોગ્રામ {સાર્વજનિક સ્થિર રદબાતલ મુખ્ય (શબ્દમાળા [] આરજીએસ) {વાર અપવાદ; જો (args.Length> 0) અપવાદ = નવી એપ્લિકેશન અપવાદ ("એક એપ્લિકેશન અપવાદ". "); અન્યથા અપવાદ = નવી સિસ્ટમ અપવાદ (" એક સિસ્ટમ અપવાદ. "); Console.WriteLine (exception.Message);}} સંદેશ મિલકતને અપવાદમાંથી મેળવવી સલામત છે કારણ કે એપ્લિકેશન એક્સેપ્શન અને સિસ્ટમ એક્સેપ્શન બંને તે મિલકત પ્રદાન કરે છે. નહિંતર, કમ્પાઇલર ભૂલ બતાવવામાં આવે છે. આ રીતે, સ્ટેડિન એક પ્રકાર-સુરક્ષિત સ્થિર ડક-ટાઇપિંગ સિસ્ટમ પ્રદાન કરે છે. નીચેના પ્રોગ્રામમાંઃ સિસ્ટમનો ઉપયોગ કરવો; વર્ગ પ્રોગ્રામ {સાર્વજનિક સ્થિર રદબાતલ મુખ્ય (શબ્દમાળા [] આરજીએસ) {વાર અપવાદ; સ્વીચ (args.Length) {કેસ 0: અપવાદ = નવી એપ્લિકેશન અપવાદ ("એક એપ્લિકેશન અપવાદ. "); વિરામ; કેસ 1: અપવાદ = નવી સિસ્ટમ અપવાદ (" એક સિસ્ટમ અપવાદ. "); વિરામ; મૂળભૂતઃ અપવાદ =" આ કોઈ અપવાદ નથી. "; વિરામ;} Console.WriteLine (exception.Message);// * વાર સાથે સંકલન ભૂલ, પરંતુ ગતિશીલ Console.WriteLine (exception.Unknown) સાથે નહીં;// * સંકલન ભૂલ} સંદેશ ગુણધર્મ શબ્દમાળા દ્વારા પ્રદાન કરવામાં આવ્યો નથી, તેથી સંકલન ભૂલ exception.Message માટે દર્શાવવામાં આવી છે. જો કે, જો આપણે એક્સેપ્શનને ડાયનેમિક તરીકે જાહેર કરીએ, તો અગાઉના પ્રોગ્રામને કમ્પાઇલર દ્વારા સ્વીકારવામાં આવે છે. ગતિશીલ ભાષાઓના સ્વાદને અનુસરીને ગતિશીલ વાર કરતાં વધુ નરમ હોય છે. જો કે, સ્થિર પ્રકારની ચકાસણી હજુ પણ કરવામાં આવે છે. આ કોડની છેલ્લી પંક્તિમાં દર્શાવવામાં આવ્યું છે, જ્યાં કમ્પાઇલર exception.Unknown માટે ભૂલ દર્શાવે છે, ભલે અપવાદને ગતિશીલ તરીકે જાહેર કરવામાં આવે. આનું કારણ એ છે કે ત્રણ સંભવિત પ્રકારો (એપ્લીકેશન એક્સેપ્શન, સિસ્ટમ એક્સેપ્શન અને સ્ટ્રિંગ) માંથી કોઈ પણ અજ્ઞાત સંદેશને સમર્થન આપતું નથી. જો કે ગતિશીલ અને વાર પ્રકારોનો ઉપયોગ સુરક્ષિત અથવા વધુ ઉદાર પ્રકારની ચકાસણી મેળવવા માટે સ્પષ્ટ રીતે થઈ શકે છે, સિંગલ વાર સંદર્ભોની ગતિશીલતા કમાન્ડ-લાઇન વિકલ્પો, XML રૂપરેખાંકન ફાઇલો અને વિઝ્યુઅલ સ્ટુડિયો માટે પ્લગઇન સાથે પણ સુધારી શકાય છે. વાર અને ગતિશીલ પ્રકારોના ક્ષેત્રોના પ્રકાર અનુમાનનો ઉપયોગ ઓબ્જેક્ટ ક્ષેત્રો તરીકે થઈ શકે છેઃ વર્ગ રેપર {ખાનગી વાર વિશેષતા; સાર્વજનિક રેપર (વાર વિશેષતા) {this.attribute = વિશેષતા;} સાર્વજનિક વાર મેળવો () {વળતર વિશેષતા;} સાર્વજનિક રદબાતલ સમૂહ (વાર વિશેષતા) {this.attribute = વિશેષતા;}} વર્ગ પરીક્ષણ {સાર્વજનિક સ્થિર રદબાતલ મુખ્ય () {શબ્દમાળા aString; int aInt; રેપર રેપર = નવું રેપર ("હેલો"); aString = wrapper.get (); aInt = wrapper.get ();// * કમ્પાઇલર ભૂલ wrapper.set (3); aString = wrapper.get ();// * કમ્પાઇલર દરેક વખતે જ્યારે આપણે સેટ પદ્ધતિને કૉલ કરીએ છીએ, ત્યારે એટ્રિબ્યુટના પ્રકારને દલીલના પ્રકાર તરીકે અનુમાનિત કરવામાં આવે છે. દરેક ઑબ્જેક્ટમાં સંભવિત રીતે અલગ પ્રકારનું લક્ષણ હોય છે, તેથી તેનો પ્રકાર સમગ્ર વર્ગને બદલે દરેક એક ઉદાહરણ માટે સંગ્રહિત થાય છે. આ રીતે, ઉપરોક્ત કોડમાં દર્શાવેલી બે રેખાઓ સંકલનની ભૂલોની જાણ કરે છે. આ વર્તણૂકને ટેકો આપવા માટે પ્રકાર-આધારિત ઉપનામ વિશ્લેષણ અલ્ગોરિધમ લાગુ કરવામાં આવે છે. અવરોધ આધારિત પ્રકારો ચાલો નીચેની પદ્ધતિનું વિશ્લેષણ કરીએઃ સાર્વજનિક સ્થિર વાર અપર (વાર પરિમાણ) {રીટર્ન parameter.ToUpper ();} પરિમાણનો પ્રકાર અને કાર્ય રીટર્ન મૂલ્ય સંકલનકર્તા દ્વારા અનુમાનિત કરવામાં આવે છે. તે હેતુ માટે, ઉપલી પદ્ધતિના પ્રકારમાં એક અવરોધ ઉમેરવામાં આવે છેઃ દલીલમાં કોઈ પરિમાણો વિના ટોઅપર પદ્ધતિ પ્રદાન કરવી આવશ્યક છે. દરેક આહ્વાન સમયે, અવરોધની તપાસ કરવામાં આવશે. વધુમાં, ઉપરના વળતરના પ્રકારનું અનુમાન દલીલ દ્વારા લાગુ કરાયેલ અનુરૂપ ટોઅપર પદ્ધતિના વળતરના પ્રકાર તરીકે કરવામાં આવશે. પ્રોગ્રામર પરિમાણ જાહેર કરવા માટે વાર અથવા ડાયનેમિકનો ઉપયોગ કરી શકે છે, પદ્ધતિની વિનંતી પર પ્રકાર તપાસ કરવાની રીત બદલી શકે છે. ચાલો ધારીએ કે ઉપરની તરફ પસાર થયેલ દલીલ પ્રવાહ-સંવેદનશીલ પ્રકાર ધરાવે છે (દા. ત., ઉપરના કોડમાં એપ્લિકેશન-અપવાદ, સિસ્ટમ-અપવાદ અથવા સ્ટ્રિંગ અપવાદ ચલ). વાર સાથે, દલીલના તમામ સંભવિત પ્રકારોએ ટોપ પ્રદાન કરવું આવશ્યક છે; ડાયનેમિક સાથે, ઓછામાં ઓછો એક પ્રકાર ટોપ પ્રદાન કરવો આવશ્યક છે. રનટાઇમ પ્રદર્શન સ્ટેડિન દ્વારા એકત્રિત કરવામાં આવેલી પ્રકારની માહિતીનો ઉપયોગ જનરેટ કરેલા કોડમાં નોંધપાત્ર ઓપ્ટિમાઇઝેશન કરવા માટે થાય છેઃ પ્રકાર નિરીક્ષણો અને પ્રકાર કાસ્ટની સંખ્યા ઘટાડવામાં આવે છે, પ્રતિબિંબ ટાળવામાં આવે છે, વારંવાર પ્રકારો કેશ કરવામાં આવે છે, અને અવરોધો સાથેની પદ્ધતિઓ વિશિષ્ટ હોય છે. તમામ ઓપ્ટિમાઇઝેશનનો મુદ્દો રનટાઇમ પર કરવામાં આવતી પ્રકાર-તપાસ કામગીરીની સંખ્યાને ઘટાડવાનો છે, જે મોટાભાગની ગતિશીલ ભાષાઓનો મુખ્ય પ્રદર્શન દંડ છે. તેમાંથી ઘણી પ્રકારની તપાસ અગાઉ સ્ટેડિન કમ્પાઇલર દ્વારા હાથ ધરવામાં આવે છે. સ્ટેડિનના રનટાઇમ પ્રદર્શનનું વિગતવાર મૂલ્યાંકન અહીં વિગતવાર છે. ઓસીએએમએલ સ્ટ્રોંગટૉક બૂ સંદર્ભો બાહ્ય લિંક્સ સત્તાવાર વેબસાઇટ ગિટહબ રીપોઝીટરી કોમ્પ્યુટેશનલ રિફ્લેક્શન રિસર્ચ ગ્રૂપ પ્રોગ્રામિંગ ભાષાઓ. નેટ પ્રોગ્રામિંગ ભાષાઓ વર્ગ-આધારિત પ્રોગ્રામિંગ ભાષાઓ મફત કમ્પાઇલર્સ અને દુભાષિયાઓ ઑબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગ ભાષાઓ એમઆઇટી લાઇસન્સનો ઉપયોગ કરીને 2007 માં બનાવવામાં આવેલી પ્રોગ્રામિંગ ભાષાઓ