Vala (programming language)
વાલા એ સ્વ-હોસ્ટિંગ કમ્પાઇલર સાથે ઓબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગ લેંગ્વેજ છે જે સી કોડ જનરેટ કરે છે અને ગોબજેક્ટ સિસ્ટમનો ઉપયોગ કરે છે. વાલાની વાક્યરચના સી #જેવી જ છે અને તેમાં અનામી કાર્યો, સંકેતો, ગુણધર્મો, જેનરિક, સહાયક મેમરી વ્યવસ્થાપન, અપવાદ સંચાલન, પ્રકાર અનુમાન અને ફોરચ સ્ટેટમેન્ટ જેવી નોંધપાત્ર સુવિધાઓ શામેલ છે. તેના વિકાસકર્તાઓ, જુર્ગ બિલેટર અને રાફેલ સેન્ડ્રીની, આ સુવિધાઓને સાદા સી રનટાઇમમાં લાવવા માંગતા હતા, જેમાં ગોબ્જેક્ટ ઓબ્જેક્ટ સિસ્ટમને લક્ષ્યાંક બનાવીને થોડો ઓવરહેડ અને કોઈ વિશેષ રનટાઇમ સપોર્ટ ન હતો. સીધા મશીન કોડ અથવા એસેમ્બલી ભાષામાં સંકલન કરવાને બદલે, તે નીચલા સ્તરની મધ્યવર્તી ભાષામાં સંકલન કરે છે. તે સ્રોત-થી-સ્રોત C ને સંકલિત કરે છે, જે પછી આપેલ પ્લેટફોર્મ માટે C સંકલનકાર સાથે સંકલિત કરવામાં આવે છે, જેમ કે GCC અથવા ક્લાંગ. મૂળ કોડ લાઈબ્રેરીઓમાંથી કાર્યક્ષમતાનો ઉપયોગ કરવા માટે લાઇબ્રેરી ઇન્ટરફેસોને વ્યાખ્યાયિત કરીને વાપી ફાઇલો લખવાની જરૂર પડે છે. આ ઈન્ટરફેસ વ્યાખ્યાઓ લખવી એ સી લાઈબ્રેરીઓ માટે સારી રીતે દસ્તાવેજીકૃત છે. મલ્ટીમીડિયા લાઈબ્રેરી એસ. ડી. એલ. અને ઓપન. જી. એલ. જેવી જીઓબજેક્ટ પર આધારિત ન હોય તેવી લાઈબ્રેરીઓ સહિત મોટી સંખ્યામાં લાઈબ્રેરીઓ માટે બંધન પહેલેથી જ ઉપલબ્ધ છે. વર્ણન વાલા એ એક પ્રોગ્રામિંગ ભાષા છે જે નિમ્ન-સ્તરની પ્રોગ્રામિંગ ભાષાઓના રન-ટાઇમ પ્રદર્શન સાથે સ્ક્રિપ્ટીંગ ભાષાઓના ઉચ્ચ-સ્તરના બિલ્ડ-ટાઇમ પ્રદર્શનને જોડે છે. તેનો ઉદ્દેશ GNOME વિકાસકર્તાઓ માટે કોઈ વધારાની રનટાઇમ જરૂરિયાતો લાદ્યા વિના અને અલગ ABI નો ઉપયોગ કર્યા વિના, C માં લખાયેલી એપ્લિકેશનો અને લાઈબ્રેરીઓની તુલનામાં આધુનિક પ્રોગ્રામિંગ લેંગ્વેજ સુવિધાઓ લાવવાનો છે. વાલાનું વાક્યરચના C #જેવું જ છે, જે ગોબ્જેક્ટ પ્રકારની સિસ્ટમમાં વધુ સારી રીતે ફિટ થવા માટે સુધારેલ છે. હિસ્ટ્રી વાલાની કલ્પના જુર્ગ બિલેટર દ્વારા કરવામાં આવી હતી અને તેનો અમલ તેમના અને રાફેલ સેન્ડ્રીની દ્વારા કરવામાં આવ્યો હતો, જેમણે સીને બદલે GNOME કાર્યક્રમો વિકસાવવા માટે ઉચ્ચ સ્તરના વિકલ્પની ઇચ્છા વ્યક્ત કરી હતી. તેમને C #નું વાક્યરચના અને શબ્દાર્થ ગમ્યું હતું પરંતુ તેઓ મોનોનો ઉપયોગ કરવા માંગતા ન હતા, તેથી તેઓએ મે 2006 માં કમ્પાઇલર પૂર્ણ કર્યું. શરૂઆતમાં, તેને સી નો ઉપયોગ કરીને બુટસ્ટ્રેપ કરવામાં આવ્યું હતું, અને એક વર્ષ પછી (જુલાઈ 2007 માં આવૃત્તિ 0.1 ના પ્રકાશન સાથે), વાલા કમ્પાઇલર સ્વ-હોસ્ટેડ બન્યું હતું. 2021 સુધીમાં, લાંબા ગાળાના સમર્થન સાથે વર્તમાન સ્થિર પ્રકાશન શાખા 0.48 છે, અને સ્થિર સંસ્કરણ 1.0 બહાર પાડવાના લક્ષ્ય સાથે ભાષા સક્રિય વિકાસ હેઠળ છે. ભાષા ડિઝાઇનની વિશેષતાઓ વાલા જી. એલ. આઈ. બી. અને તેના પેટા મોડ્યુલો (જી. ઓ. બી. જી. ઓ. બી. જી. ઓ. બી. જી. એમ. મોડ્યુલ, જી. ટી. થ્રેડ, જી. આઈ. ઓ.) નો મુખ્ય પુસ્તકાલય તરીકે ઉપયોગ કરે છે, જે મોટાભાગની ઓપરેટિંગ સિસ્ટમો માટે ઉપલબ્ધ છે અને પ્લેટફોર્મ સ્વતંત્ર થ્રેડિંગ, ઇનપુટ/આઉટપુટ, ફાઇલ મેનેજમેન્ટ, નેટવર્ક સોકેટ્સ, પ્લગિન્સ, નિયમિત સમીકરણો વગેરે જેવી વસ્તુઓ પ્રદાન કરે છે. વાલાનું વાક્યરચના હાલમાં નીચે મુજબ આધુનિક ભાષાની સુવિધાઓને ટેકો આપે છેઃ આંતરપૃષ્ઠ ગુણધર્મો સંકેતો સંકેત લંબડા અભિવ્યક્તિઓ સ્થાનિક ચલ માટે પ્રકાર અનુમાન સામાન્ય બિન-શૂન્ય પ્રકાર સહાયક મેમરી વ્યવસ્થાપન અપવાદ સંચાલન ગ્રાફિકલ વપરાશકર્તા ઇન્ટરફેસો GTK GUI ટૂલકિટ અને ગ્લેડ GUI બિલ્ડર સાથે વિકસાવી શકાય છે. મેમરી મેનેજમેન્ટ મેમરી મેનેજમેન્ટ માટે, જી. ટાઇપ અથવા ગોબજેક્ટ સિસ્ટમ સંદર્ભ ગણતરી પૂરી પાડે છે. સીમાં, પ્રોગ્રામરે સંદર્ભો ઉમેરવા અને દૂર કરવાનું જાતે જ મેનેજ કરવું આવશ્યક છે, પરંતુ વાલામાં, જો પ્રોગ્રામર સાદા પોઇન્ટરને બદલે ભાષાના બિલ્ટ-ઇન સંદર્ભ પ્રકારોનો ઉપયોગ કરે તો આવી સંદર્ભ ગણતરીઓનું સંચાલન સ્વચાલિત થાય છે. તમારે ચિંતા કરવાની જરૂર છે તે એકમાત્ર વિગત એ છે કે સંદર્ભ ચક્ર પેદા કરવાનું ટાળવું, કારણ કે તે કિસ્સામાં આ મેમરી મેનેજમેન્ટ સિસ્ટમ યોગ્ય રીતે કામ કરશે નહીં. વાલા એક વિકલ્પ તરીકે પોઇન્ટર સાથે મેન્યુઅલ મેમરી મેનેજમેન્ટને પણ મંજૂરી આપે છે. બાઈન્ડીંગ્સ વાલાનો હેતુ હાલની સી લાઈબ્રેરીઓ, ખાસ કરીને ગોબજેક્ટ-આધારિત લાઈબ્રેરીઓને રનટાઇમ બાઈન્ડીંગની જરૂર વગર રનટાઇમ એક્સેસ પ્રદાન કરવાનો છે. વાલા સાથેની લાઇબ્રેરીનો ઉપયોગ કરવા માટે, માત્ર એક API ફાઇલ (. vapi) ની જરૂર પડે છે જેમાં વાલા વાક્યરચનામાં વર્ગ અને પદ્ધતિની ઘોષણાઓ હોય છે. જો કે, C + + લાઈબ્રેરીઓ આધારભૂત નથી. હાલમાં, જી. ટી. કે. સહિત, જી. એન. યુ. પ્રોજેક્ટ અને જી. એન. ઓ. એમ. ઇ. પ્લેટફોર્મના મોટા ભાગ માટેની વાપી ફાઇલો વાલાના દરેક પ્રકાશન સાથે સમાવવામાં આવી છે. જી નામની એક લાઈબ્રેરી પણ છે, જે વાલામાં લખાયેલી છે, જે સામાન્ય રીતે ઉપયોગમાં લેવાતા ડેટા સ્ટ્રક્ચર્સ માટે ગોબજેક્ટ-આધારિત ઇન્ટરફેસ અને વર્ગો પ્રદાન કરે છે. અન્ય ભાષાઓમાં લખાયેલી એપ્લિકેશનોમાંથી વાલા લાઈબ્રેરીઓની ઍક્સેસ માટે બાઈન્ડીંગ જનરેટર લખવું પણ સરળતાથી શક્ય હોવું જોઈએ, દા. ત., સી #, કારણ કે વાલા પાર્સર લાઈબ્રેરી તરીકે લખાયેલું છે, જેથી બાઈન્ડીંગ જનરેટ કરતી વખતે તમામ સંકલન-સમયની માહિતી ઉપલબ્ધ થાય. ટૂલ્સ એડિટર્સ ટૂલિંગ ફોર વાલા ડેવલપમેન્ટમાં તાજેતરના વર્ષોમાં નોંધપાત્ર સુધારો જોવા મળ્યો છે. નીચે કેટલાક લોકપ્રિય આઇ. ડી. ઇ. અને લખાણ સંપાદકોની યાદી છે જે વામાં પ્રોગ્રામિંગ માટે આધાર ઉમેરે છેઃ GNOME બિલ્ડર વિઝ્યુઅલ સ્ટુડિયો કોડ, વલ્લા પ્લગઇન વિમ સાથે, arrufat/vala. vim પ્લગઇન ઇમૅક્સ સાથે, વલ્લા-મોડ એટમ જીની કોડ ઇન્ટેલિજન્સ સાથે હાલમાં, બે સક્રિય રીતે વિકસતા ભાષા સર્વરો છે જે વલ્લા માટે કોડ ઇન્ટેલિજન્સ પ્રદાન કરે છેઃ, જે VSCode, vim અને GNOME બિલ્ડર સહિત LSP ને ટેકો આપતા કોઈપણ સંપાદક માટે રચાયેલ છે, જે હાલમાં GNOME બિલ્ડરમાં વલ્લા માટે મૂળભૂત ભાષા સર્વર છે અને LSP બિલ્ડ સિસ્ટમ્સ માટે આધાર સાથે કોઈપણ સંપાદકને ટેકો પૂરો પાડે છે હાલમાં, વલ્લા ને ટેકો આપતી સંખ્યાબંધ બિલ્ડ સિસ્ટમ્સ છે. વાલા કાર્યક્રમો માટે ડિબગીંગ જી. ડી. બી. અથવા એલ. એલ. ડી. બી. સાથે કરી શકાય છે. IDEમાં ડિબગીંગ માટે, GNOME બિલ્ડર પાસે GDB સાથે વાલા માટે બિલ્ટ-ઇન ડિબગીંગ સપોર્ટ છે. વિઝ્યુઅલ સ્ટુડિયો કોડમાં GDB અને LLDB માટે વિસ્તરણ છે, જેમ કે cpptools અને CodeLLDB. ઉદાહરણો હેલો વર્લ્ડ એક સરળ "હેલો, વર્લ્ડ!" વાલામાં પ્રોગ્રામઃ રદબાતલ મુખ્ય () {પ્રિન્ટ ("હેલો વર્લ્ડ");} જેમ કે નોંધ કરી શકાય છે, સી અથવા સી + + થી વિપરીત, વાલામાં કોઈ હેડર ફાઇલો નથી. પુસ્તકાલયો સાથે જોડણી સંકલન દરમિયાન-- pkg પરિમાણો નિર્દિષ્ટ કરીને કરવામાં આવે છે. વધુમાં, જી. એલ. આઈ. બી. લાઈબ્રેરી હંમેશા જોડાયેલી હોય છે અને તેની નેમસ્પેસ કાઢી શકાય છે (પ્રિન્ટ હકીકતમાં GLib.print છે). નીચે ઓબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગ વધુ જટિલ સંસ્કરણ છે જે બેઝ ક્લાસ GLib.Object, ઉર્ફ ગોબ્જેક્ટ ક્લાસમાંથી વારસામાં મળેલા પેટા વર્ગ હેલોવર્લ્ડને વ્યાખ્યાયિત કરે છે. તે વાલાની કેટલીક ઓબ્જેક્ટ-ઓરિએન્ટેડ સુવિધાઓ દર્શાવે છેઃ વર્ગ હેલોવર્લ્ડઃ ઓબ્જેક્ટ {ખાનગી યુન્ટ વર્ષ = 0; સાર્વજનિક હેલોવર્લ્ડ () {} સાર્વજનિક HelloWorld.with_year (ઇન્ટ વર્ષ) {જો (વર્ષ> 0) this.year = વર્ષ;} સાર્વજનિક રદબાતલ શુભેચ્છા () {જો (વર્ષ = = 0) પ્રિન્ટ ("હેલો વર્લ્ડ \n"); અન્યથા/* '@' સાથે પ્રિફિક્સ કરેલી સ્ટ્રિંગ્સ સ્ટ્રિંગ નમૂનાઓ છે. */પ્રિન્ટ કરો (@"હેલો વર્લ્ડ, $(this.year) \n");}} શૂન્ય મુખ્ય (શબ્દમાળા [] આરજીએસ) {વાર હેલોવર્લ્ડ = નવું HelloWorld.with_year (2021); helloworld.greeting ();} જીઓબીજેક્ટ લાઇબ્રેરીના કિસ્સામાં, વાલા બહુવિધ વારસાને સમર્થન આપતું નથી, પરંતુ વાલામાં વર્ગ કોઈપણ સંખ્યામાં ઇન્ટરફેસોને અમલમાં મૂકી શકે છે, જેમાં તેમની પદ્ધતિઓ માટે મૂળભૂત અમલીકરણ હોઈ શકે છે. GLib નો ઉપયોગ કરીને મૂળભૂત અમલીકરણ (કેટલીકવાર મિક્સિન તરીકે ઓળખવામાં આવે છે) સાથે વાલા ઇન્ટરફેસને દર્શાવવા માટે અહીં નમૂના કોડનો એક ભાગ છે; ઈન્ટરફેસ પ્રિન્ટેબલ {પબ્લિક એબ્સ્ટ્રેક્ટ સ્ટ્રિંગ પ્રિન્ટ (); પબ્લિક વર્ચ્યુઅલ સ્ટ્રિંગ પ્રીટી _ પ્રિન્ટ () {રીટર્ન "પ્લીઝ" + પ્રિન્ટ ();}} ક્લાસ નોર્મલપ્રિન્ટઃ ઓબ્જેક્ટ, પ્રિન્ટેબલ {સ્ટ્રિંગ પ્રિન્ટ () {રીટર્ન "ડોન્ટ ફોરગેટ મી";} વર્ગ ઓવરરાઇડપ્રિન્ટઃ ઓબ્જેક્ટ, પ્રિન્ટેબલ {સ્ટ્રિંગ પ્રિન્ટ () {રીટર્ન "માઇન્ડ ધ ગેપ";} પબ્લિક ઓવરરાઇડ સ્ટ્રિંગ પ્રીટી _ પ્રિન્ટ () {રીટર્ન "ઓવરરાઇડ";} વોઈડ મેઇન (સ્ટ્રિંગ [] આર્ગ્સ) {વાર નોર્મલ = ન્યૂ નોર્મલ પ્રિન્ટ (); વાર ઓવર પછી કોલબેક વિધેયો વર્ગના ઉદાહરણના સંકેત પર નોંધાયેલા હોય છે. ઉદાહરણ તરીકે સિગ્નલ બહાર પાડી શકે છે અને સિગ્નલ સાથે જોડાયેલ દરેક કોલબેક ફંક્શન (જેને હેન્ડલર તરીકે પણ ઓળખવામાં આવે છે) તેઓ જે ક્રમમાં જોડાયેલા હતા તે ક્રમમાં બોલાવવામાં આવશેઃ વર્ગ Foo {જાહેર સિગ્નલ રદબાતલ અમુક _ ઇવેન્ટ ();// સિગ્નલની વ્યાખ્યા જાહેર રદબાતલ પદ્ધતિ () {અમુક _ ઇવેન્ટ ();// સિગ્નલ બહાર પાડવું (કોલબેક બોલાવવામાં આવે છે)}} રદબાતલ કોલબેક _ એ () {stdout.printf ("કોલબેક A\n");} રદબાતલ કોલબેક _ બી () {stdout.printf ("કોલબેક B\n");} રદબાતલ મુખ્ય () {વાર ફૂ = નવું ફૂ (); foo.some_event.connect (કોલબેક _ એ); નવા થ્રેડોની રચના અને સુમેળ GLib માં થ્રેડ વર્ગનો ઉપયોગ કરીને કરવામાં આવે છે, જે નવા થ્રેડો બનાવતી વખતે કાર્યને પરિમાણ તરીકે લે છે, જે નીચેના (ખૂબ જ સરળ) ઉદાહરણમાં બતાવ્યા પ્રમાણે છેઃ પૂર્ણાંક પ્રશ્ન () {// (વાર i = 0; i <3; i + +) {પ્રિન્ટ (". "); Thread.usleep (800000); stdout.flush ();} રીટર્ન 42;} રદબાતલ મુખ્ય () () {જો (! Thread.supported ()) {stderr.printf (" "થ્રેડ સપોર્ટ વિના ચલાવી શકાતું નથી. \n" "); રીટર્ન;} પ્રિન્ટ (" "જીવન, બ્રહ્માંડ અને દરેક વસ્તુનો અંતિમ પ્રશ્ન" ");// સામાન્ય પરિમાણ એ રીટર્ન મૂલ્ય વાર થ્રેડ = નવો થ્રેડ <int> (" "પ્રશ્ન", "પ્રશ્ન) નો પ્રકાર છે; પ્રિન્ટ (@" "$(thread.join () \n" ");} ગ્રાફિકલ યુઝર ઇન્ટરફેસ નીચે GTK નો ઉપયોગ કરીને GUI" "હેલો, વર્લ્ડ!" "બનાવવા માટેનું એક ઉદાહરણ છે". પ્રોગ્રામ (GTK હેલો વર્લ્ડ પણ જુઓ) વાલામાંઃ Gtk નો ઉપયોગ કરીને; int મુખ્ય (શબ્દમાળા [] args) {Gtk.init (રીફ આર્ગ); વાર વિન્ડો = નવી વિન્ડો (); window.title = "હેલો, વર્લ્ડ! "; window.border_width = 10; window.window_position = WindowPosition.CENTER; window.set_default_size (350,70); window.destroy.connect (Gtk.main_quit); વાર લેબલ = નવું લેબલ (" હેલો, વર્લ્ડ! "); window.add (લેબલ); window.show_all (); Gtk.main (); રીટર્ન 0;} નિવેદન Gtk.main () ઘટનાઓ માટે મુખ્ય લૂપ શ્રવણ બનાવે છે અને શરૂ કરે છે, જે સંકેતો દ્વારા કોલબેક કાર્યોમાં પસાર થાય છે. આ ઉદાહરણ GTK પેકેજનો ઉપયોગ કરે છે, તેને સંકલન કરવા માટે વધારાના-- pKG પરિમાણની જરૂર છે (જે C બેકએન્ડમાં pKG-રૂપરેખાંકનને આમંત્રણ આપે છે): વાલાક-- pKG gtk +-3.0 hellogtk.vala જીની પણ જુઓ, જે પાયથોનની નજીકના વાક્યરચના સાથે વાલા સંકલન માટે એક પ્રોગ્રામિંગ ભાષા છે. શોટવેલ, એક છબી આયોજક જે વાલામાં લખાયેલ છે. ગેરી, એક ઇમેઇલ ક્લાયન્ટ જે વાલામાં લખાયેલું છે. પ્રાથમિક ઓએસ, મોટાભાગે વાલામાં પ્રોગ્રામ કરેલ ડેસ્કટોપ વાતાવરણ સાથેનું લિનક્સ વિતરણ છે. બગ્ગી, એક લિનક્સ ડેસ્કટોપ વાતાવરણ છે જે મોટે ભાગે વાલામાં પ્રોગ્રામ કરેલું છે. સંદર્ભો બાહ્ય લિંક્સ GNOME વિકિ પેજ API દસ્તાવેજીકરણ Vala રીપોઝીટરી GNOME · GitLab LibGee પર, જે Vala માટે એક ઉપયોગિતા પુસ્તકાલય છે. નવા નિશાળીઓ માટે વાલા નમૂનાનો કોડ બાલા પ્રોગ્રામ્સની સૂચિ ઓટોવાલા, એક એવો પ્રોગ્રામ કે જે વાલા/સી પ્રોજેક્ટ્સ માટે સીમેક અને મેસન ફાઇલો બનાવવાનું સ્વચાલિત અને સરળ બનાવે છે ગિટહબ અકિરા પર વાલા સમુદાય-લિનક્સ નેટિવ ડિઝાઇનર ટૂલ કાંગારૂ-લોકપ્રિય ડેટાબેસેસ માટે ક્રોસ-પ્લેટફોર્મ ડેટાબેઝ ક્લાયન્ટ ટૂલ અન્ય ભાષાઓ સાથે સરખામણી વાલા અને જાવા વાલા અને સી #વેલા પ્રોગ્રામિંગ ભાષાઓ સહિત વિવિધ ભાષાઓના બેન્ચમાર્ક ઓબ્જેક્ટ-ઓરિએન્ટેડ પ્રોગ્રામિંગ ભાષાઓ એલ. જી. પી. એલ. લાઇસન્સનો ઉપયોગ કરીને સોફ્ટવેર સ્રોત-થી-સ્રોત કમ્પાઇલર્સ સ્ટેટિકલી ટાઇપ્ડ પ્રોગ્રામિંગ ભાષાઓ 2006 માં બનાવેલ સોફ્ટવેર ક્રોસ-પ્લેટફોર્મ ફ્રી સોફ્ટવેર