กลับไปหน้าบทความ

อ่าน 7 นาที

วาลา (ภาษาโปรแกรม)

Valaเป็นภาษาโปรแกรมเชิงวัตถุ ที่มีคอมไพเลอร์แบบโฮสต์ตัวเองซึ่งสร้างตัวแทนระดับกลางในซอร์สโค้ดภาษาซีและใช้ ระบบ GObjectเป็นซอฟต์แวร์ฟรีและโอเพนซอร์สที่เผยแพร่ภายใต้สัญญาอนุญาต GNU..

วาลา (ภาษาโปรแกรม)

วาลา
กระบวนทัศน์รูปแบบการ เขียนโปรแกรมหลายแบบ : แบบคำสั่ง แบบมีโครงสร้างและแบบเชิงวัตถุ
นักพัฒนาเจอร์ก บิลเลเตอร์, ราฟฟาเอล ซานดรินี, ริโก ทซ์ชิชโฮลซ์
ปรากฏครั้งแรกพฤษภาคม 2549 ( 2006-05 )
เวอร์ชันเสถียร
0.57.0  แก้ไขข้อมูลนี้บนวิกิดาต้า / 11 เมษายน 2566 ( 11 เมษายน 2566 )
วินัยในการพิมพ์คงที่แข็งแกร่งอนุมานได้โครงสร้าง
โอเอสGLibรองรับการทำงานข้ามแพลตฟอร์มแต่เผยแพร่ในรูปแบบซอร์สโค้ดเท่านั้น
ใบอนุญาตLGPL 2.1+
นามสกุลไฟล์.vala, .vapi
เว็บไซต์วาลา.เดฟ
ได้รับอิทธิพลจาก
C , C++ , C# , D , Java , Boo

Valaเป็นภาษาโปรแกรมเชิงวัตถุ ที่มีคอมไพเลอร์แบบโฮสต์ตัวเองซึ่งสร้างตัวแทนระดับกลางในซอร์สโค้ดภาษาซีและใช้ ระบบ GObjectเป็นซอฟต์แวร์ฟรีและโอเพนซอร์สที่เผยแพร่ภายใต้สัญญาอนุญาต GNU Lesser General Public License (LGPL) เวอร์ชัน 2.1+

Vala มีโครงสร้างทางไวยากรณ์คล้ายกับC#และมีคุณสมบัติที่โดดเด่น เช่นฟังก์ชันนิรนามสัญญาณคุณสมบัติเจเนริกการจัดการหน่วยความจำแบบช่วยเหลือการจัดการข้อยกเว้นการอนุมานประเภทและคำสั่งforeach [ 1 ]ผู้พัฒนา Jürg Billeter และ Raffaele Sandrini ต้องการนำคุณสมบัติเหล่านี้มาสู่ รันไทม์ C ธรรมดา โดยมีค่าใช้จ่ายน้อยและไม่มี การสนับสนุน รันไทม์ พิเศษ โดยการกำหนดเป้าหมายไปที่ ระบบวัตถุ GObjectแทนที่จะคอมไพล์โดยตรงเป็นรหัสเครื่องหรือภาษาแอสเซมบลี มันจะคอมไพล์เป็นภาษาระดับกลางที่ ต่ำกว่า มันจะแปลง เป็น C ซึ่งจะ ถูกคอมไพล์ด้วยคอมไพเลอร์ C สำหรับแพลตฟอร์มที่กำหนด เช่นGNU Compiler Collection (GCC) หรือClang [ 2 ]

การใช้ฟังก์ชันจากไลบรารี โค้ดเนทีฟ จำเป็นต้องเขียนไฟล์ vapi เพื่อกำหนดอินเทอร์เฟซของ ไลบรารี การเขียนคำจำกัดความอินเทอร์เฟซเหล่านี้มีเอกสารอธิบายไว้อย่างละเอียดสำหรับไลบรารีภาษา C มี Binding ที่พร้อมใช้งานแล้วสำหรับไลบรารีจำนวนมาก รวมถึงบางไลบรารีที่ไม่ใช้ GObject เช่น ไลบรารีมัลติมีเดียSimple DirectMedia Layer (SDL) และ OpenGL

คำอธิบาย

Vala เป็นภาษาโปรแกรมที่ผสมผสานประสิทธิภาพการสร้างระดับสูง ของ ภาษาสคริปต์เข้ากับประสิทธิภาพการทำงานของภาษาโปรแกรมระดับต่ำโดยมีเป้าหมายที่จะนำคุณสมบัติของภาษาโปรแกรมสมัยใหม่มาสู่GNOMEโดยไม่ต้องเพิ่มข้อกำหนดการทำงานเพิ่มเติม และไม่ต้องใช้Application Binary Interface (ABI) ที่แตกต่างไปจากแอปพลิเคชันและไลบรารีที่เขียนด้วยภาษา C ไวยากรณ์ของ Vala คล้ายกับC#ซึ่งได้รับการดัดแปลงเพื่อให้เข้ากับระบบประเภท GObjectได้ ดียิ่งขึ้น [ 3 ]

ประวัติศาสตร์

ภาษา Vala ถูกคิดค้นโดย Jürg Billeter และถูกนำไปใช้โดยเขาและ Raffaele Sandrini ซึ่งต้องการทางเลือกที่มีระดับสูงกว่าสำหรับการพัฒนา แอปพลิเคชัน GNOMEแทนภาษา C พวกเขาชอบไวยากรณ์และความหมายของ C# แต่ไม่ต้องการใช้Monoดังนั้นพวกเขาจึงสร้างคอมไพเลอร์เสร็จในเดือนพฤษภาคม 2006 ในตอนแรกมันถูกบูตสแตรปโดยใช้ภาษา C และหนึ่งปีต่อมา (ด้วยการเปิดตัวเวอร์ชัน 0.1.0 ในเดือนกรกฎาคม 2007) คอมไพเลอร์ Vala ก็กลายเป็นแบบโฮสต์ด้วยตนเองในปี 2008 ภาษา Genie ถูกสร้างขึ้นเพื่อเปิดเผย ไวยากรณ์ที่คล้ายกับ Pythonให้กับคอมไพเลอร์ Vala [ 4 ]ณ ปี 2021 สาขาการเผยแพร่ที่เสถียรในปัจจุบันที่มีการสนับสนุนระยะยาวคือ 0.48 และภาษานี้อยู่ระหว่างการพัฒนาอย่างต่อเนื่องโดยมีเป้าหมายที่จะปล่อยเวอร์ชันเสถียร 1.0 [ 5 ]

เวอร์ชั่น วันที่วางจำหน่าย[ 6 ]หมายเหตุ
ไม่รองรับ: 0.0.1 15 กรกฎาคม 2549
ไม่รองรับ: 0.1.09 กรกฎาคม 2550
ไม่รองรับ: 0.10.018 กันยายน 2553
ไม่รองรับ: 0.20.027 พฤษภาคม 2556
ไม่รองรับ: 0.30.018 กันยายน 2558
ไม่รองรับ: 0.40.012 พฤษภาคม 2561 การสนับสนุนที่มั่นคงในระยะยาว
ไม่รองรับ: 0.42.01 กันยายน 2018
ไม่รองรับ: 0.44.09 พฤษภาคม 2562
ไม่รองรับ: 0.46.05 กันยายน 2019
ไม่รองรับ: 0.48.02020-03-03 การสนับสนุนที่มั่นคงในระยะยาว
ไม่รองรับ: 0.50.02020-09-10
ไม่รองรับ: 0.52.017 พฤษภาคม 2021
ไม่รองรับ: 0.54.016 กันยายน 2021
รองรับ: 0.40.2511 มกราคม 2021 การสนับสนุนที่มั่นคงในระยะยาว
ไม่รองรับ: 0.56.017 มีนาคม 2022 การสนับสนุนที่มั่นคงในระยะยาว
รองรับ: 0.48.2516 กันยายน 2022 การสนับสนุนที่มั่นคงในระยะยาว
เวอร์ชันล่าสุด:0.56.1719 เมษายน 2567 การสนับสนุนที่มั่นคงในระยะยาว
ตำนาน:
ไม่ได้รับการสนับสนุน
ได้รับการสนับสนุน
เวอร์ชั่นล่าสุด
สำหรับเวอร์ชันเก่า จะแสดงเฉพาะเวอร์ชันย่อยแรกเท่านั้น

การออกแบบภาษา

คุณสมบัติ

Vala ใช้ GLib และโมดูลย่อย ( GObject , GModule, GThread, GIO) เป็นไลบรารีหลัก ซึ่งใช้งานได้กับระบบปฏิบัติการ ส่วนใหญ่ และมีคุณสมบัติต่างๆ เช่น การทำงานแบบมัลติ เธรดที่ ไม่ขึ้นกับแพลตฟอร์ม การรับ/ส่งข้อมูลการจัดการไฟล์ซ็อกเก็ตเครือข่ายปลั๊กอินนิพจน์ปกติเป็นต้นไวยากรณ์ของ Vala ในปัจจุบันรองรับคุณสมบัติทางภาษาที่ทันสมัยดังต่อไปนี้:

สามารถพัฒนาส่วนติดต่อผู้ใช้แบบกราฟิก ได้โดยใช้ชุดเครื่องมือ GTK GUIและโปรแกรมสร้าง GUI Glade

การจัดการหน่วยความจำ

สำหรับการจัดการหน่วยความจำ ระบบ GType หรือGObjectจะมีการนับการอ้างอิงในภาษา C โปรแกรมเมอร์ต้องจัดการการเพิ่มและการลบการอ้างอิงด้วยตนเอง แต่ใน Vala การจัดการการนับการอ้างอิงดังกล่าวเป็นไปโดยอัตโนมัติหากโปรแกรมเมอร์ใช้ประเภทการอ้างอิงในตัวของภาษาแทนที่จะใช้พอยเตอร์ธรรมดา รายละเอียดเดียวที่ต้องกังวลคือการหลีกเลี่ยงการสร้างวงจรการอ้างอิงเพราะในกรณีนั้นระบบการจัดการหน่วยความจำนี้จะไม่ทำงานอย่างถูกต้อง[ 7 ]

นอกจากนี้ Vala ยังอนุญาตให้จัดการหน่วยความจำด้วยตนเองโดยใช้ตัวชี้เป็นตัวเลือกได้ อีกด้วย

การผูกมัด

Vala มีจุดประสงค์เพื่อให้สามารถเข้าถึงไลบรารี C ที่มีอยู่ได้ในขณะรันไทม์ โดยเฉพาะไลบรารีที่ใช้GObject โดยไม่จำเป็นต้องมีการเชื่อมโยงในขณะรันไทม์ ในการใช้ไลบรารีกับ Vala สิ่งที่จำเป็นคือไฟล์ API (.vapi) ที่มีการประกาศ คลาสและเมธอดในไวยากรณ์ Vala อย่างไรก็ตาม ไลบรารี C++ ไม่ได้รับการสนับสนุน ในปัจจุบัน ไฟล์ vapi สำหรับส่วนใหญ่ของ โปรเจกต์ GNUและแพลตฟอร์ม GNOME จะถูกรวมอยู่ใน Vala แต่ละรุ่น รวมถึงGTK ด้วย นอกจากนี้ยังมีไลบรารีชื่อ Gee ซึ่งเขียนด้วย Vala ที่ให้ส่วนต่อประสานและคลาสที่ใช้GObject สำหรับ โครงสร้างข้อมูลที่ ใช้กันทั่วไป [ 8 ]

นอกจากนี้ ยังควรเขียนตัวสร้างการเชื่อมโยง (bindings generator) สำหรับการเข้าถึงไลบรารี Vala จากแอปพลิเคชันที่เขียนด้วยภาษาอื่น เช่น C# ได้อย่างง่ายดาย เนื่องจากตัวแยกวิเคราะห์ Vala ถูกเขียนในรูปแบบของไลบรารี ดังนั้นข้อมูลทั้งหมดในระหว่างการคอมไพล์จึงพร้อมใช้งานเมื่อสร้างการเชื่อมโยง

เครื่องมือ

บรรณาธิการ

เครื่องมือสำหรับการพัฒนา Vala ได้รับการพัฒนาอย่างมากในช่วงไม่กี่ปีที่ผ่านมา ต่อไปนี้คือรายชื่อIDEและโปรแกรมแก้ไขข้อความ ยอดนิยมบางส่วน ที่มีปลั๊กอินที่เพิ่มการสนับสนุนการเขียนโปรแกรมด้วย Vala:

ความฉลาดด้านโค้ด

ปัจจุบันมีเซิร์ฟเวอร์ภาษา ที่กำลังพัฒนาอยู่สองตัว ซึ่งให้บริการการวิเคราะห์โค้ดสำหรับภาษา Vala ดังต่อไปนี้:

  • vala-lang/vala-language-server ออกแบบมาสำหรับโปรแกรมแก้ไขข้อความใดๆ ที่รองรับLSPรวมถึง VSCode, vim และ GNOME Builder [ 12 ]
  • esodan/gvls ปัจจุบันเป็นเซิร์ฟเวอร์ภาษาเริ่มต้นสำหรับ Vala ใน GNOME Builder และให้การสนับสนุนแก่โปรแกรมแก้ไขใดๆ ที่รองรับLSP [ 13 ]

สร้างระบบ

ปัจจุบันมี ระบบสร้างหลาย ระบบ ที่รองรับ Vala รวมถึงAutomake , CMake , Mesonและอื่นๆ[ 14 ]

การดีบัก

การดีบักโปรแกรม Vala สามารถทำได้โดยใช้GDBหรือLLDBสำหรับการดีบักในIDEนั้น

  • GNOME Builderมีระบบสนับสนุนการดีบักในตัวสำหรับ Vala โดยใช้GDB
  • Visual Studio Codeมีส่วนขยายสำหรับGDBและLLDBเช่น cpptools และ CodeLLDB [ 9 ]

ตัวอย่าง

สวัสดีโลก

โปรแกรม "Hello, World!"อย่างง่ายในภาษา Vala:

void main () { print ( "Hello World \n " ); }

ดังที่สังเกตได้ ในภาษา Vala นั้นไม่มีไฟล์เฮดเดอร์ ซึ่งแตกต่างจากภาษา C หรือ C++ การเชื่อมโยงกับไลบรารีทำได้โดยการระบุ--pkgพารามิเตอร์ระหว่างการคอมไพล์ นอกจากนี้ ไลบรารี GLib จะถูกเชื่อมโยงเสมอ และสามารถละเว้นเนมสเปซของมันได้ ( printในความเป็นจริงคือGLib.print)

การเขียนโปรแกรมเชิงวัตถุ

ด้านล่างนี้คือเวอร์ชันที่ซับซ้อนกว่า ซึ่งกำหนดคลาสย่อยHelloWorldที่สืบทอดมาจากคลาสพื้นฐานGLib.Objectหรือที่เรียกว่า คลาส GObject โดยแสดงให้เห็นถึง คุณสมบัติ เชิงวัตถุบางประการของ Vala :

คลาสHelloWorld : Object { private uint year = 0 ; public HelloWorld () { } public HelloWorld . with_year ( int year ) { if ( year > 0 ) this . year = year ; }public void greeting () { if ( year == 0 ) print ( "Hello World \n " ); else /* สตริงที่ขึ้นต้นด้วย '@' คือเทมเพลตสตริง */ print ( @"Hello World, $(this.year) \n " ); } }void main ( string [ ] args ) { var helloworld = new HelloWorld.with_year ( 2021 ) ; helloworld.greeting ( ) ; }

เช่นเดียวกับไลบรารี GObjectภาษา Vala ไม่รองรับการสืบทอดแบบหลายทางแต่คลาสใน Vala สามารถใช้งานอินเทอร์เฟซ ได้หลายแบบ ซึ่งอาจมีการใช้งานเริ่มต้นสำหรับเมธอดต่างๆ นี่คือตัวอย่างโค้ดเพื่อแสดงอินเทอร์เฟซ Vala ที่มีการใช้งานเริ่มต้น (บางครั้งเรียกว่าmixin )

โดยใช้GLib ;อินเทอร์เฟซPrintable { public abstract string print ();public virtual string pretty_print () { return "กรุณา" + print (); } }คลาสNormalPrint : Object , Printable { string print () { return "อย่าลืมฉันนะ" ; } }คลาสOverridePrint : Object , Printable { string print () { return "ระวังช่องว่าง" ; } }public override string pretty_print () { return "Override" ; } }เป็นโมฆะหลัก( สตริง[] args ) { var ปกติ= new NormalPrint (); var overridden = ใหม่OverridePrint ();พิมพ์( normal.pretty_print ( )); พิมพ์( overridden.pretty_print ( ) ) ; }

สัญญาณและการเรียกกลับ

ด้านล่างนี้คือตัวอย่างพื้นฐานเพื่อแสดงสัญญาณที่กำหนดไว้ในคลาสที่ไม่ใช่แบบกระชับ ซึ่งมีระบบสัญญาณที่สร้างขึ้นโดย Vala ผ่าน GLib จากนั้น ฟังก์ชัน เรียกกลับ (callback function) จะถูกลงทะเบียนกับสัญญาณของอินสแตนซ์ของคลาส อินสแตนซ์สามารถส่งสัญญาณได้ และแต่ละฟังก์ชันเรียกกลับ (หรือเรียกว่า handler) ที่เชื่อมต่อกับสัญญาณสำหรับอินสแตนซ์จะถูกเรียกใช้ตามลำดับที่เชื่อมต่อไว้:

คลาสFoo { public signal void some_event (); // นิยามของสัญญาณpublic void method () { some_event (); // ส่งสัญญาณ (มีการเรียกใช้ฟังก์ชัน callback) } }void callback_a () { stdout . printf ( "Callback A \n " ); }void callback_b () { stdout . printf ( "Callback B \n " ); }void main () { var foo = new Foo (); foo . some_event . connect ( callback_a ); // เชื่อมต่อฟังก์ชัน callback foo . some_event . connect ( callback_b ); foo . method (); }

การร้อยด้าย

ในภาษา Vala เธรดใหม่คือส่วนของโค้ด เช่น ฟังก์ชัน ที่ถูกร้องขอให้ทำงานพร้อมกันในระหว่างการรันไทม์ การสร้างและการซิงโครไนซ์เธรดใหม่ทำได้โดยใช้Threadคลาสใน GLib ซึ่งรับฟังก์ชันเป็นพารามิเตอร์เมื่อสร้างเธรดใหม่ ดังแสดงในตัวอย่างต่อไปนี้ (ซึ่งเป็นตัวอย่างที่ง่ายมาก):

int question (){ // การดำเนินการพิมพ์บางอย่างfor ( var i = 0 ; i < 3 ; i ++ ){ print ( "." ); Thread . usleep ( 800000 ); stdout . flush (); }คืนค่า42 ; }void main () { if ( ! Thread . supported ()) { stderr . printf ( "ไม่สามารถทำงานได้หากไม่มีการรองรับเธรด\n " ); return ; } print ( "คำถามสุดท้ายของชีวิต จักรวาล และทุกสิ่ง" ); // พารามิเตอร์ทั่วไปคือประเภทของค่าส่งคืนvar thread = new Thread < int > ( "question" , question );print ( @" $(thread.join()) \n " ); }

ส่วนติดต่อผู้ใช้แบบกราฟิก

ด้านล่างนี้คือตัวอย่างการใช้GTKเพื่อสร้าง โปรแกรม GUI "Hello, World!" (ดูเพิ่มเติมที่GTK hello world ) ในภาษา Vala:

โดยใช้Gtk ;int main ( string [] args ) { Gtk . init ( ref args );var window = new Window ( ) ; window.title = " Hello , World ! " ; window.border_width = 10 ; window.window_position = WindowPosition.CENTER ; window.set_default_size ( 350 , 70 ) ; window.destroy.connect ( Gtk.main_quit ) ;var label = new Label ( "Hello, World!" );window.add ( label ) ; window.show_all ( ) ;Gtk.main ( ) ; return 0 ; }

คำสั่งนี้Gtk.main()สร้างและเริ่มต้นลูปหลักที่คอยรับฟังเหตุการณ์ ซึ่งจะถูกส่งต่อไปยังฟังก์ชันเรียกกลับผ่านสัญญาณ เนื่องจากตัวอย่างนี้ใช้ แพ็ก เกจ GTKจึงจำเป็นต้องมี--pkgพารามิเตอร์เพิ่มเติม (ซึ่งเรียกใช้pkg-config ใน ส่วนแบ็กเอนด์ C ) เพื่อคอมไพล์:

valac --pkg gtk+-3.0 hellogtk.vala 

ดูเพิ่มเติม

  • Shotwellคือโปรแกรมจัดการรูปภาพที่เขียนด้วยภาษา Vala
  • Gearyคือโปรแกรมรับส่งอีเมลที่เขียนด้วยภาษา Vala
  • elementary OSคือระบบปฏิบัติการลินุกซ์ที่มีสภาพแวดล้อมเดสก์ท็อปซึ่งเขียนโปรแกรมโดยส่วนใหญ่ด้วยภาษา Vala
  • Budgieคือสภาพแวดล้อมเดสก์ท็อปของ Linux ที่เขียนโปรแกรมโดยส่วนใหญ่ด้วยภาษา Vala
  • เว็บไซต์อย่างเป็นทางการ
  • หน้าวิกิของ GNOME
  • เอกสารประกอบ API
  • คลังเก็บ ValaบนGNOME · GitLab
  • LibGeeคือไลบรารีเสริมสำหรับภาษา Vala
  • ตัวอย่างโค้ด Vala สำหรับผู้เริ่มต้น
  • รายชื่อโปรแกรมของ Vala
  • Autovala คือโปรแกรมที่ช่วยสร้างไฟล์ CMake และ Meson สำหรับโปรเจ็กต์ Vala/C โดยอัตโนมัติและง่ายขึ้น
  • ชุมชน Vala บน GitHub
  • Akira - เครื่องมือออกแบบสำหรับ Linux โดยเฉพาะ
  • Kangaroo - เครื่องมือไคลเอ็นต์ฐานข้อมูลแบบข้ามแพลตฟอร์มสำหรับฐานข้อมูลยอดนิยม
การเปรียบเทียบกับภาษาอื่นๆ
  • วาลาและจาวา
  • วาลาและซี#
  • เกณฑ์มาตรฐานของภาษาต่างๆ รวมถึงภาษาวาลา
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Vala_(programming_language)&oldid=1345053344 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ วาลา (ภาษาโปรแกรม)

Valaเป็นภาษาโปรแกรมเชิงวัตถุ ที่มีคอมไพเลอร์แบบโฮสต์ตัวเองซึ่งสร้างตัวแทนระดับกลางในซอร์สโค้ดภาษาซีและใช้ ระบบ GObjectเป็นซอฟต์แวร์ฟรีและโอเพนซอร์สที่เผยแพร่ภายใต้สัญญาอนุญาต GNU..

คำอธิบาย

Vala เป็นภาษาโปรแกรมที่ผสมผสานประสิทธิภาพการสร้าง ระดับสูง ของ ภาษาสคริปต์ เข้ากับประสิทธิภาพการทำงานของ ภาษาโปรแกรมระดับต่ำ โดยมีเป้าหมายที่จะนำคุณสมบัติของภาษาโปรแกรมสมัยใหม่มาสู่ GNOME โดยไม่ต้องเพิ่มข้อกำหนดการทำงานเพิ่มเติม และไม่ต้องใช้ Application...

ประวัติศาสตร์

ภาษา Vala ถูกคิดค้นโดย Jürg Billeter และถูกนำไปใช้โดยเขาและ Raffaele Sandrini ซึ่งต้องการทางเลือกที่มีระดับสูงกว่าสำหรับการพัฒนา แอปพลิเคชัน GNOME แทนภาษา C พวกเขาชอบไวยากรณ์และความหมายของ C# แต่ไม่ต้องการใช้ Mono...

คุณสมบัติ

Vala ใช้ GLib และโมดูลย่อย ( GObject , GModule, GThread, GIO) เป็นไลบรารีหลัก ซึ่งใช้งานได้กับ ระบบปฏิบัติการ ส่วนใหญ่ และมีคุณสมบัติต่างๆ เช่น การทำงานแบบมัลติ เธรด ที่ ไม่ขึ้นกับแพลตฟอร์ม การรับ/ส่งข้อมูล การ จัดการไฟล์ ซ็ อกเก็ตเครือข่าย ปลั๊กอิน นิพจน์...