ภาษาโปรแกรม V โอเพ่นซอร์ส

แปลแล้ว เข้าไปอยู่ในหมวดหมู่ของคอมไพเลอร์แบบเปิดสำหรับ ภาษาวี. V เป็นภาษาที่คอมไพล์ด้วยเครื่องที่พิมพ์แบบสแตติกซึ่งมุ่งเน้นที่การทำให้การพัฒนาง่ายต่อการบำรุงรักษาและคอมไพล์ได้เร็วมาก โค้ดคอมไพเลอร์ ไลบรารี และเครื่องมือที่เกี่ยวข้อง เปิดอยู่ ภายใต้ใบอนุญาต MIT

ไวยากรณ์ของ V คล้ายกับ Go มาก โดยยืมโครงสร้างบางอย่างจาก Oberon, Rust และ Swift ภาษานั้นเรียบง่ายที่สุดเท่าที่จะเป็นไปได้ และตามที่นักพัฒนาระบุว่า การศึกษา 30 นาทีก็เพียงพอที่จะเรียนรู้พื้นฐานแล้ว เอกสาร. ในเวลาเดียวกัน ภาษายังคงค่อนข้างทรงพลังและสามารถนำไปใช้ในการทำงานเดียวกันกับเมื่อใช้ภาษาการเขียนโปรแกรมอื่นๆ (เช่น ไลบรารีพร้อมใช้งานสำหรับกราฟิก 2D/3D การสร้าง GUI และเว็บแอปพลิเคชัน)

การสร้างภาษาใหม่ได้รับแจ้งจากความปรารถนาที่จะบรรลุการผสมผสานระหว่างความเรียบง่ายของไวยากรณ์ ความเร็วในการคอมไพล์ ความง่ายในการดำเนินการแบบขนาน ความสะดวกในการพกพา และการบำรุงรักษาโค้ดด้วยประสิทธิภาพของ C/C++ ความปลอดภัยของ Rust และ การสร้างรหัสเครื่องในขั้นตอนการคอมไพล์ Zig ฉันยังต้องการคอมไพเลอร์ที่มีขนาดกะทัดรัดและรวดเร็วซึ่งสามารถทำงานได้โดยไม่ต้องพึ่งพาภายนอก กำจัดขอบเขตส่วนกลาง (ตัวแปรส่วนกลาง) และจัดเตรียมความสามารถในการรีโหลดโค้ดแบบ "ร้อน"

เมื่อเปรียบเทียบกับ C++ ภาษาใหม่จะง่ายกว่าอย่างเห็นได้ชัด ให้ความเร็วในการคอมไพล์ที่เร็วขึ้น (สูงสุด 400 เท่า) ฝึกฝนเทคนิคการเขียนโปรแกรมที่ปลอดภัย ไม่มีปัญหากับพฤติกรรมที่ไม่ได้กำหนด และมีเครื่องมือในตัวสำหรับการดำเนินการแบบขนาน เมื่อเปรียบเทียบกับ Python แล้ว V นั้นเร็วกว่า ง่ายกว่า ปลอดภัยกว่า และบำรุงรักษาได้มากกว่า เมื่อเปรียบเทียบกับ Go แล้ว V ไม่มีตัวแปรส่วนกลาง ไม่มีค่าว่าง ต้องกำหนดค่าตัวแปรทั้งหมดเสมอ วัตถุทั้งหมดไม่เปลี่ยนรูปตามค่าเริ่มต้น รองรับการกำหนดประเภทเดียวเท่านั้น (“a := 0”) ซึ่งมีขนาดกะทัดรัดกว่าอย่างเห็นได้ชัด รันไทม์และขนาดของไฟล์ที่ปฏิบัติการได้, การมีอยู่ของความสามารถในการพกพาโดยตรงจาก C, การไม่มีตัวรวบรวมขยะ, การทำให้เป็นซีเรียลไลซ์ที่เร็วขึ้น, ความสามารถในการแก้ไขสตริง (“println('$foo: $bar.baz')”)

fnmain() {
พื้นที่ := ['เกม', 'เว็บ', 'เครื่องมือ', 'วิทยาศาสตร์', 'ระบบ', 'GUI', 'มือถือ'] a := 10
ถ้าเป็นจริง {
ถึง := 20
}
สำหรับพื้นที่ในพื้นที่ {
println('สวัสดี นักพัฒนา $area!')
}
}

คุณสมบัติโครงการ:

  • คอมไพเลอร์ขนาดกะทัดรัดและรวดเร็ว ซึ่งเมื่อใช้ร่วมกับไลบรารีมาตรฐานจะกินพื้นที่ประมาณ 400 KB ความเร็วในการคอมไพล์สูงเกิดขึ้นได้จากการสร้างรหัสเครื่องและโมดูลาร์โดยตรง ความเร็วในการคอมไพล์อยู่ที่ประมาณ 1.2 ล้านบรรทัดต่อวินาทีบน CPU หนึ่งคอร์ (สังเกตว่าในระหว่างการดำเนินการ V สามารถใช้ C ได้จากนั้นความเร็วจะลดลงเหลือ 100 บรรทัดต่อวินาที) การประกอบคอมไพเลอร์ด้วยตนเองซึ่งเขียนด้วยภาษา V (มีเวอร์ชันอ้างอิงใน Go ด้วย) ใช้เวลาประมาณ 0.4 วินาที ภายในสิ้นปีนี้ คาดว่าจะดำเนินการเพิ่มประสิทธิภาพเพิ่มเติมได้ ซึ่งจะช่วยลดเวลาในการสร้างคอมไพเลอร์ลงเหลือ 0.15 วินาที ตัดสินโดยการทดสอบที่จัดทำโดยนักพัฒนา การประกอบ Go ด้วยตนเองต้องใช้พื้นที่ดิสก์ 512 MB และทำงานในหนึ่งชั่วโมงครึ่ง Rust ต้องใช้ 30 GB และ 45 นาที GCC - 8 GB และ 50 นาที Clang - 90 GB และ 25 นาที
    Swift - 70 GB และ 90 นาที

  • โปรแกรมถูกคอมไพล์เป็นไฟล์ปฏิบัติการโดยไม่ต้องพึ่งพาภายนอก ขนาดไฟล์ปฏิบัติการของเซิร์ฟเวอร์ http แบบธรรมดาหลังจากแอสเซมบลีคือ 65 KB เท่านั้น
  • ประสิทธิภาพของแอปพลิเคชันที่คอมไพล์แล้วอยู่ที่ระดับแอสเซมบลีของโปรแกรม C
  • ความสามารถในการโต้ตอบกับโค้ด C ได้อย่างราบรื่นโดยไม่มีค่าใช้จ่ายเพิ่มเติม ฟังก์ชันในภาษา C สามารถเรียกใช้จากโค้ดในภาษา V และในทางกลับกัน โค้ดในภาษา V สามารถเรียกใช้ในภาษาใดก็ได้ที่เข้ากันได้กับ C;
  • รองรับการแปลโปรเจ็กต์ C/C++ เป็นการเป็นตัวแทนในภาษา V ตัวแยกวิเคราะห์จาก Clang ใช้สำหรับการแปล คุณลักษณะบางอย่างของมาตรฐาน C ยังไม่ได้รับการสนับสนุน แต่ความสามารถในปัจจุบันของนักแปลก็เพียงพอแล้ว การแปล ในภาษาของเกม V DOOM นักแปล C++ ยังอยู่ในช่วงเริ่มต้นของการพัฒนา
  • รองรับการทำให้ซีเรียลไลซ์ในตัวโดยไม่เชื่อมโยงกับรันไทม์
  • ลดการดำเนินการจัดสรรหน่วยความจำให้เหลือน้อยที่สุด
  • มั่นใจในความปลอดภัย: ไม่มี NULL, ตัวแปรร่วม, ค่าที่ไม่ได้กำหนด และการกำหนดตัวแปรใหม่ การตรวจสอบบัฟเฟอร์โอเวอร์รันในตัว รองรับฟังก์ชั่นทั่วไป (ทั่วไป) วัตถุและโครงสร้างที่ไม่สามารถเปลี่ยนแปลงได้ตามค่าเริ่มต้น
  • ความเป็นไปได้ของการโหลดโค้ด "ร้อน" ใหม่ (สะท้อนถึงการเปลี่ยนแปลงในโค้ดได้ทันทีโดยไม่ต้องคอมไพล์ใหม่)
  • เครื่องมือสำหรับการรับรองมัลติเธรด เช่นเดียวกับในภาษา Go โครงสร้างเช่น "run foo()" ใช้เพื่อเริ่มเธรดการดำเนินการใหม่ (คล้ายกับ "go foo()") ในอนาคต มีการวางแผนรองรับ goroutines และตัวกำหนดตารางเวลาเธรด
  • รองรับระบบปฏิบัติการ Windows, macOS, Linux, *BSD มีการวางแผนที่จะเพิ่มการรองรับสำหรับ Android และ iOS ภายในสิ้นปีนี้
  • การจัดการหน่วยความจำ ณ เวลาคอมไพล์ (เช่นเดียวกับใน Rust) โดยไม่ต้องใช้ตัวรวบรวมขยะ
  • ความพร้อมใช้งานของชุดเครื่องมือหลายแพลตฟอร์มสำหรับเอาท์พุตกราฟิก โดยใช้ GDI+/Cocoa และ OpenGL สำหรับการเรนเดอร์ (รองรับ DirectX, Vulkan และ Metal APIs) มีเครื่องมือสำหรับการทำงานกับวัตถุ 3 มิติ แอนิเมชันโครงกระดูก และการควบคุมกล้อง
  • ความพร้อมใช้งานของไลบรารีสำหรับสร้างส่วนต่อประสานกราฟิกพร้อมองค์ประกอบการออกแบบที่มีอยู่ในแต่ละระบบปฏิบัติการ Windows ใช้ WinAPI/GDI+, macOS ใช้ Cocoa และ Linux ใช้ชุดวิดเจ็ตของตัวเอง ห้องสมุดถูกใช้ในการพัฒนาแล้ว โวลต์ — ไคลเอนต์สำหรับ Slack, Skype, Gmail, Twitter และ Facebook

    แผนคือการสร้างแอปพลิเคชันการออกแบบอินเทอร์เฟซที่คล้ายกับ Delphi จัดเตรียม API ที่เปิดเผยซึ่งคล้ายกับ SwiftUI และ React Native และให้การสนับสนุนในการสร้างแอปพลิเคชันมือถือสำหรับ iOS และ Android

    ภาษาโปรแกรม V โอเพ่นซอร์ส

  • ความพร้อมใช้งานของเฟรมเวิร์กเว็บในตัว ซึ่งใช้ในการสร้างเว็บไซต์ ฟอรัม และบล็อกสำหรับนักพัฒนาโครงการ รองรับการคอมไพล์เทมเพลต HTML ล่วงหน้า โดยไม่ต้องประมวลผลในแต่ละคำขอ
  • รองรับการคอมไพล์ข้าม หากต้องการสร้างไฟล์ปฏิบัติการสำหรับ Windows เพียงเรียกใช้ "v -os windows" และสำหรับ Linux - "v -os linux" (คาดว่าจะรองรับการคอมไพล์ข้ามสำหรับ macOS ในภายหลัง) การคอมไพล์ข้ามยังใช้งานได้กับแอปพลิเคชันกราฟิก
  • ตัวจัดการการพึ่งพาในตัว ตัวจัดการแพ็คเกจ และเครื่องมือสร้าง ในการสร้างโปรแกรม เพียงแค่รัน “v.” โดยไม่ต้องใช้ make หรือยูทิลิตี้ภายนอก หากต้องการติดตั้งไลบรารีเพิ่มเติม เพียงเรียกใช้เช่น "v get sqlite";
  • ความพร้อมใช้งานของปลั๊กอินสำหรับการพัฒนาในภาษา V ในบรรณาธิการ VS Code и เป็นกลุ่ม.

ออกแบบ ที่รับรู้ ชุมชนด้วย ความสงสัยเนื่องจากโค้ดที่เผยแพร่แสดงให้เห็นว่ายังไม่ได้ใช้ความสามารถที่ประกาศไว้ทั้งหมดและจำเป็นต้องมีงานจำนวนมากเพื่อดำเนินการตามแผนทั้งหมด
นอกจากนี้ในตอนแรกที่เก็บข้อมูลก็มี โพสต์ รหัสที่ใช้งานไม่ได้ซึ่งมีปัญหากับการประกอบและการดำเนินการ สันนิษฐานว่าผู้เขียนยังไม่ถึงขั้นตอนที่พวกเขาเริ่มสังเกตเห็น กฎของพาเรโตโดยที่ความพยายาม 20% ก่อให้เกิดผลลัพธ์ 80% และความพยายาม 80% ที่เหลือทำให้เกิดผลลัพธ์เพียง 20% เท่านั้น

ในขณะเดียวกัน ตัวติดตามข้อบกพร่องของ Project V ได้ลบโพสต์ประมาณ 10 รายการออกไปแล้ว สาธิต ตัวอย่างเช่น โค้ดคุณภาพต่ำ บ่งชี้ถึงการใช้ C-insert และการใช้งานในไลบรารีของฟังก์ชันสำหรับการลบไดเร็กทอรีของคำสั่ง rm ผ่านการเรียก os.system("rm -rf $path") ผู้เขียนโครงการ เขากล่าวว่าว่าเขาลบแต่ข้อความเท่านั้น ที่ตีพิมพ์ โทรลล์ (โดยมีการเปลี่ยนแปลงยืนยันความถูกต้องของการวิจารณ์ ยังคงอยู่ в แก้ไขประวัติ).

ที่มา: opennet.ru

เพิ่มความคิดเห็น