V програмчлалын нээлттэй эхийн хэл

Орчуулсан нээлттэй хөрвүүлэгчийн ангилалд хэл V. V нь статик хэлбэрээр бичигдсэн машинд хөрвүүлсэн хэл бөгөөд хөгжүүлэлтийг засварлахад хялбар, эмхэтгэх нь маш хурдан болгоход чиглэдэг. Хөрвүүлэгчийн код, номын сан болон холбогдох хэрэгслүүд нээлттэй MIT лицензийн дагуу.

V-ийн синтакс нь Go-той маш төстэй бөгөөд Oberon, Rust, Swift-ээс зарим бүтцийг зээлдэг. Хэл нь аль болох хялбаршуулсан бөгөөд хөгжүүлэгчийн үзэж байгаагаар үндсийг сурахад 30 минут суралцахад хангалттай. баримт бичиг. Үүний зэрэгцээ хэл нь нэлээд хүчирхэг хэвээр байгаа бөгөөд бусад програмчлалын хэлийг ашиглахтай ижил ажлуудыг гүйцэтгэхэд ашиглаж болно (жишээлбэл, 2D / 3D график, GUI болон вэб програм үүсгэх номын сангууд байдаг).

Шинэ хэлийг бий болгоход Go хэлний энгийн синтакс, эмхэтгэлийн хурд, үйлдлүүдийг зэрэгцүүлэхэд хялбар, C/C++-ийн гүйцэтгэлтэй кодын зөөвөрлөж, хадгалах чадвар, Rust-ийн аюулгүй байдал болон Zig эмхэтгэлийн үе шатанд машины код үүсгэх. Би мөн гадны хамааралгүйгээр ажиллах боломжтой, глобал цар хүрээг (глобал хувьсагч) арилгаж, кодыг "халуун" дахин ачаалах боломжийг олгодог авсаархан, хурдан хөрвүүлэгч авахыг хүссэн.

C++-тэй харьцуулахад шинэ хэл нь хамаагүй хялбар, эмхэтгэлийн хурдыг (400 хүртэл удаа) өгдөг, аюулгүй програмчлалын техникийг дадлагажуулдаг, тодорхойгүй үйлдэлтэй холбоотой асуудалгүй, үйлдлүүдийг зэрэгцүүлэн холбох хэрэгслүүдээр хангагдсан. Python-той харьцуулахад V нь илүү хурдан, энгийн, аюулгүй, засвар үйлчилгээ сайтай. Go-той харьцуулахад V-д глобал хувьсагч байхгүй, тэг байхгүй, бүх хувьсагчийн утгууд үргэлж тодорхойлогддог байх ёстой, бүх объектууд өгөгдмөлөөр өөрчлөгддөггүй, зөвхөн нэг төрлийн даалгаврыг дэмждэг ("a := 0"), хамаагүй илүү авсаархан. ажиллах хугацаа болон үүссэн гүйцэтгэгдэх файлуудын хэмжээ, С-ээс шууд зөөвөрлөх боломжтой, хог цуглуулагч байхгүй, илүү хурдан цуваа, мөрүүдийг интерполяци хийх чадвар ("println('$foo: $bar.baz')").

fn main() {
талбарууд := ['тоглоом', 'вэб', 'хэрэгслүүд', 'шинжлэх ухаан', 'системүүд', 'GUI', 'мобайл'] a := 10
үнэн бол {
a := 20
}
бүс нутгийн хувьд {
println('Сайн уу, $area хөгжүүлэгчид!')
}
}

Төслийн онцлогууд:

  • Стандарт номын сантай хамт 400 КБ багтаамжтай авсаархан, хурдан хөрвүүлэгч. Машины кодыг шууд үүсгэх, модульчлах замаар эмхэтгэлийн өндөр хурдыг олж авдаг. Эмхэтгэлийн хурд нь нэг CPU-ийн цөм дээр секундэд ойролцоогоор 1.2 сая мөр код (V үйл ажиллагааны явцад C-г ашиглаж болно гэж тэмдэглэсэн бол хурд нь секундэд 100 мянган мөр хүртэл буурдаг). V хэл дээр бичигдсэн хөрвүүлэгчийг өөрөө угсрах нь (Go дээр лавлах хувилбар бас байдаг) ойролцоогоор 0.4 секунд болно. Оны эцэс гэхэд нэмэлт оновчлолын ажил дуусах төлөвтэй байгаа бөгөөд энэ нь хөрвүүлэгчийг бүтээх хугацааг 0.15 секунд хүртэл бууруулах болно. Хөгжүүлэгчийн хийсэн туршилтаас харахад Go-г өөрөө угсрах нь 512 МБ дискний зай шаарддаг бөгөөд нэг минут хагасын дотор ажилладаг, Rust нь 30 ГБ 45 минут, GCC - 8 ГБ 50 минут, Clang - 90 ГБ шаардлагатай байдаг. 25 минут,
    Swift - 70 ГБ ба 90 минут;

  • Программуудыг гадны хамааралгүйгээр гүйцэтгэх боломжтой файл болгон хөрвүүлдэг. Угсарсны дараа энгийн http серверийн гүйцэтгэх файлын хэмжээ ердөө 65 KB байна;
  • Эмхэтгэсэн програмуудын гүйцэтгэл нь C програмын угсралтын түвшинд байна;
  • Нэмэлт зардалгүйгээр С кодтой саадгүй харилцах чадвар. Си хэл дээрх функцуудыг V хэл дээрх кодоос дуудаж болох ба эсрэгээр V хэл дээрх кодыг C хэлэнд тохирох ямар ч хэлээр дуудаж болно;
  • C/C++ төслүүдийг V хэл дээрх дүрслэл болгон хөрвүүлэхэд дэмжлэг үзүүлэх. Орчуулга хийхэд Clang-ийн задлан шинжлэгчийг ашигладаг. C стандартын бүх функцууд хараахан дэмжигдээгүй байгаа ч орчуулагчийн одоогийн чадавхи нь аль хэдийн хангалттай байна орчуулга V тоглоомын хэлээр DOOM. C++ орчуулагч нь хөгжлийн эхний шатандаа байна;
  • Ажиллах цагтай холбоогүй, суурилуулсан цуваажуулалтын дэмжлэг;
  • Санах ойн хуваарилалтын үйл ажиллагааг багасгах;
  • Аюулгүй байдлыг хангах: NULL, глобал хувьсагч, тодорхойгүй утга, хувьсагчийн дахин тодорхойлолт байхгүй. Баригдсан буфер хэтрэлтийг шалгаж байна. Ерөнхий функцүүдийн дэмжлэг (Ерөнхий). Анхдагчаар өөрчлөх боломжгүй объект, бүтэц;
  • "Халуун" кодыг дахин ачаалах боломж (дахин эмхэтгэлгүйгээр шууд кодын өөрчлөлтийг тусгах);
  • Олон урсгалыг хангах хэрэгслүүд. Go хэлний нэгэн адил "run foo()" гэх мэт бүтцийг гүйцэтгэх шинэ хэлхээг эхлүүлэхэд ашигладаг ("go foo()"-тэй төстэй). Ирээдүйд goroutines болон thread төлөвлөгчийг дэмжихээр төлөвлөж байна;
  • Windows, macOS, Linux, *BSD үйлдлийн системүүдийн дэмжлэг. Оны эцэс гэхэд Android болон iOS-ийн дэмжлэгийг нэмэхээр төлөвлөж байна;
  • Хог цуглуулагч ашиглахгүйгээр хөрвүүлэх үед санах ойн менежмент (Rust шиг);
  • График гаргахдаа GDI+/Какао болон OpenGL ашиглан олон платформын хэрэглүүрийг ашиглах боломжтой (DirectX, Vulkan болон Metal API-г дэмжихээр төлөвлөж байна). 3D объекттой ажиллах, араг ясны хөдөлгөөнт дүрс, камерыг хянах хэрэгслүүд байдаг;
  • Үйлдлийн систем тус бүрийн дизайны элементүүдтэй график интерфэйсийг бий болгох номын сангийн бэлэн байдал. Windows нь WinAPI/GDI+, macOS нь Какао, Линукс нь өөрийн виджетүүдийг ашигладаг. Номын санг аль хэдийн хөгжүүлэлтэд ашиглаж байна Вольт — Slack, Skype, Gmail, Twitter, Facebook-ийн үйлчлүүлэгч;

    Төлөвлөгөө нь Delphi-тэй төстэй интерфэйсийн дизайны програм үүсгэх, SwiftUI болон React Native-тай төстэй мэдэгдлийн API-г өгөх, iOS болон Android-д зориулсан гар утасны програмуудыг бий болгоход дэмжлэг үзүүлэх;

    V програмчлалын нээлттэй эхийн хэл

  • Төсөл боловсруулагчдад зориулсан вэбсайт, форум, блог үүсгэхэд ашигладаг вэб фреймворкийн бэлэн байдал. Хүсэлт бүрт тэдгээрийг боловсруулахгүйгээр HTML загваруудын урьдчилсан эмхэтгэлийг дэмждэг;
  • Хөндлөн эмхэтгэлийн дэмжлэг. Windows-д зориулсан гүйцэтгэх файлыг бүтээхийн тулд "v -os windows", Линуксийн хувьд "v -os linux"-ыг ажиллуулна уу (macOS-д зориулсан хөндлөн эмхэтгэлийг дараа нь дэмжих болно). Хөндлөн эмхэтгэл нь график програмуудад бас ажилладаг;
  • Баригдсан хамаарлын менежер, багц менежер, бүтээх хэрэгслүүд. Хөтөлбөрийг бүтээхийн тулд "v."-г ажиллуулахад л "v." программ болон гадны хэрэгслүүд ашиглахгүй. Нэмэлт номын санг суулгахын тулд "v get sqlite" гэх мэтийг ажиллуулна уу;
  • Редакторуудад V хэл дээр хөгжүүлэх нэмэлт өргөтгөлүүдийн бэлэн байдал VS код и VIM.

Хөгжил ойлгосон хамт олон эргэлзээ, нийтлэгдсэн код нь зарласан бүх чадавхи хараахан хэрэгжээгүй байгаа бөгөөд бүх төлөвлөгөөг хэрэгжүүлэхийн тулд маш их хэмжээний ажил шаардагдахыг харуулсан тул.
Нэмж хэлэхэд, эхэндээ хадгалах газар байсан нийтэлсэн эвдэрсэн код нь угсрах, гүйцэтгэхэд асуудалтай байдаг. Зохиогч нь тэдний анзаарч эхлэх үе шатанд хараахан хүрээгүй гэж таамаглаж байна Паретогийн хууль, үүний дагуу хүчин чармайлтын 20% нь үр дүнгийн 80%, үлдсэн 80% хүчин чармайлт нь зөвхөн 20% -ийг өгдөг.

Үүний зэрэгцээ, Project V-ийн алдаа хянагчаас 10 орчим бичлэгийг устгасан байна жагсаал Жишээ нь чанар муутай код нь C-оруулга ашиглах, os.system("rm -rf $path") дуудлагын тусламжтай rm командын санг устгах функцүүдийн номын санд ашиглахыг заана. Төслийн зохиогч зарласантэр зөвхөн мессежүүдийг устгасан гэж нийтэлсэн тролль (шүүмжлэлийн үндэслэлийг баталгаажуулсан өөрчлөлтүүд, үлдсэн в түүхийг засварлах).

Эх сурвалж: opennet.ru

сэтгэгдэл нэмэх