V programlingvo malfermfonte

Tradukita en la kategorion de malfermita kompililo por lingvo V. V estas statike tajpita maŝin-kompilita lingvo, kiu fokusiĝas pri igi evoluon pli facile konservebla kaj tre rapida por kompili. Kompilkodo, bibliotekoj kaj rilataj iloj malfermi sub la MIT-licenco.

La sintakso de V estas tre simila al Iru, pruntante kelkajn konstrukciojn de Oberono, Rust, kaj Swift. La lingvo estas kiel eble plej simpligita kaj, laŭ la programisto, 30 minutoj da studado sufiĉas por lerni la bazaĵojn. dokumentado. Samtempe, la lingvo restas sufiĉe potenca kaj povas esti uzata por plenumi la samajn taskojn kiel kiam oni uzas aliajn programlingvojn (ekzemple, bibliotekoj estas disponeblaj por 2D/3D grafikoj, kreante GUI-ojn kaj TTT-aplikaĵojn).

La kreado de nova lingvo estis instigita de la deziro atingi kombinaĵon de la simpleco de sintakso de la lingvo Go, kompilrapideco, facileco de paraleligo de operacioj, porteblo kaj konservebleco de kodo kun la efikeco de C/C++, la sekureco de Rust kaj la generacio de maŝinkodo ĉe la Zig-kompila stadio. Mi ankaŭ volis akiri kompaktan kaj rapidan kompililon, kiu povus funkcii sen eksteraj dependecoj, forigi la tutmondan amplekson (tutmondaj variabloj) kaj disponigi la kapablon "varme" reŝargi la kodon.

Kompare kun C++, la nova lingvo estas signife pli simpla, disponigas pli rapidan kompilrapidecon (ĝis 400 fojojn), praktikas sekurajn programajn teknikojn, estas libera de problemoj kun nedifinita konduto kaj disponigas enkonstruitajn ilojn por paraleligi operaciojn. Kompare kun Python, V estas pli rapida, pli simpla, pli sekura kaj pli konservebla. Kompare kun Go, V ne havas tutmondajn variablojn, neniujn nulojn, ĉiuj variaj valoroj ĉiam devas esti difinitaj, ĉiuj objektoj estas neŝanĝeblaj defaŭlte, nur unu speco de tasko estas subtenata ("a := 0"), signife pli kompakta. rultempo kaj la grandeco de la rezultaj ruleblaj dosieroj, la ĉeesto de rekta porteblo de C, la foresto de rubkolektisto, pli rapida seriigo, la kapablo interpoli ŝnurojn ("println('$foo: $bar.baz')").

fn ĉefa () {
areoj := ['ludo', 'retejo', 'iloj', 'scienco', 'sistemoj', 'GUI', 'poŝtelefono'] a := 10
se vera {
al := 20
}
por areo en areoj {
println('Saluton, $areaj programistoj!')
}
}

Projektaj Trajtoj:

  • Kompakta kaj rapida kompililo, kiu kune kun la norma biblioteko okupas ĉirkaŭ 400 KB. Alta kompilrapideco estas atingita per rekta generacio de maŝinkodo kaj modulareco. La kompila rapido estas proksimume 1.2 milionoj da linioj de kodo sekundo sur unu CPU-kerno (oni rimarkas, ke dum operacio V povas uzi C, tiam la rapido falas al 100 mil linioj sekundo). Memmuntado de la kompililo, kiu ankaŭ estas skribita en la V-lingvo (ekzistas ankaŭ referenca versio en Go), daŭras proksimume 0.4 sekundojn. Antaŭ la fino de la jaro, laboro pri pliaj optimumigoj estas atendita esti finita, kio reduktos la konstrutempon de la kompililo al 0.15 sekundoj. Juĝante laŭ la testoj faritaj de la programisto, mem-muntado de Go postulas 512 MB da diskospaco kaj funkcias en unu kaj duono minutoj, Rust postulas 30 GB kaj 45 minutojn, GCC - 8 GB kaj 50 minutojn, Clang - 90 GB kaj 25 minutoj,
    Swift - 70 GB kaj 90 minutoj;

  • Programoj estas kompilitaj en ruleblajn dosierojn sen eksteraj dependecoj. La plenumebla dosiergrandeco de simpla http-servilo post kunigo estas nur 65 KB;
  • La agado de kompilitaj aplikoj estas je la nivelo de asembleoj de C-programoj;
  • La kapablo perfekte interagi kun C-kodo, sen plia ŝarĝo. Funkcioj en la C-lingvo povas esti nomitaj de kodo en la V-lingvo, kaj inverse, kodo en la V-lingvo povas esti nomita en iu ajn lingvo kongrua kun C;
  • Subteno por tradukado de C/C++-projektoj en reprezentadon en la lingvo V. Analizilo de Clang estas uzata por tradukado. Ne ĉiuj funkcioj de la C-normo ankoraŭ estas subtenataj, sed la nunaj kapabloj de la tradukisto jam sufiĉas por traduko en la lingvo de la V-ludo DOOM. La tradukilo C++ estas ankoraŭ en frua etapo de evoluo;
  • Enkonstruita serialigsubteno, sen esti ligita al rultempo;
  • Minimumigo de memor-asignaj operacioj;
  • Certigante sekurecon: neniu NULL, tutmondaj variabloj, nedifinitaj valoroj kaj ŝanĝiĝema redifino. Enkonstruita bufro-superkontrolado. Subteno por ĝeneralaj funkcioj (Generic). Objektoj kaj strukturoj kiuj ne povas esti ŝanĝitaj defaŭlte;
  • Eblo de "varma" kodo reŝargi (reflektante ŝanĝojn en kodo sur la flugo sen rekompilo);
  • Iloj por certigi multifadenadon. Same kiel en la Go-lingvo, konstruo kiel "run foo()" estas uzata por komenci novan fadenon de ekzekuto (simila al "go foo()"). Estontece, subteno por gorutinoj kaj fadenoplanilo estas planita;
  • Subteno por Vindozo, macOS, Linukso, *BSD operaciumoj. Estas planite aldoni subtenon por Android kaj iOS antaŭ la fino de la jaro;
  • Memoradministrado ĉe kompiltempo (kiel en Rust), sen uzado de rubkolektilo;
  • Havebleco de plurplatforma ilaro por grafika eligo, uzante GDI+/Cocoa kaj OpenGL por bildigo (subteno por DirectX, Vulkan kaj Metal API-oj estas planita). Estas iloj por labori kun 3D objektoj, skeleta animacio kaj fotila kontrolo;
  • Havebleco de biblioteko por generi grafikajn interfacojn kun dezajnelementoj indiĝenaj al ĉiu OS. Vindozo uzas WinAPI/GDI+, macOS uzas Kakaon, kaj Linukso uzas sian propran aron de fenestraĵoj. La biblioteko jam estas uzata en evoluo Volt — kliento por Slack, Skype, Gmail, Twitter kaj Facebook;

    La plano estas krei Delphi-similan interfacan dezajnaplikaĵon, disponigi deklaran API similan al SwiftUI kaj React Native, kaj disponigi subtenon por kreado de moveblaj aplikoj por iOS kaj Android;

    V programlingvo malfermfonte

  • Havebleco de enkonstruita interreta kadro, kiu estas uzata por krei retejon, forumon kaj blogon por la projektaj programistoj. Antaŭkompilo de HTML-ŝablonoj estas subtenata, sen prilaborado de ili sur ĉiu peto;
  • Transversa kompila subteno. Por konstrui la ruleblan dosieron por Vindozo, simple rulu "v -os windows", kaj por Linukso - "v -os linux" (subteno de transkompilado por macOS estas atendita poste). Kruc-kompilo ankaŭ funkcias por grafikaj aplikoj;
  • Enkonstruita dependeca administranto, pakaĵa administranto kaj konstruaj iloj. Por konstrui la programon, simple rulu "v.", sen uzi make aŭ eksterajn ilojn. Por instali pliajn bibliotekojn, nur rulu, ekzemple, "v get sqlite";
  • Havebleco de aldonaĵoj por evoluo en la V-lingvo en redaktantoj VS-Kodo и mi venis.

Disvolviĝo perceptita komunumo kun skeptiko, ĉar la publikigita kodo montris ke ne ĉiuj deklaritaj kapabloj ankoraŭ estis efektivigitaj kaj tre granda kvanto da laboro estas postulata por efektivigi ĉiujn planojn.
Krome, komence la deponejo havis afiŝita rompita kodo kiu havas problemojn kun muntado kaj ekzekuto. Oni supozas, ke la aŭtoro ankoraŭ ne atingis la stadion, ĉe kiu ili komencas rimarki Leĝo de Pareto, laŭ kiu 20% de peno produktas 80% de la rezulto, kaj la ceteraj 80% de peno produktas nur 20% de la rezulto.

Dume, la cimspurilo de Projekto V estis forigitaj de ĉirkaŭ 10 afiŝoj manifestacio malaltkvalita kodo, ekzemple, indikas la uzon de C-enigaĵoj kaj la uzon en la biblioteko de funkcioj por forigi la dosierujon de la komando rm per la voko os.system ("rm -rf $pado"). Aŭtoro de la projekto deklaritake li nur forigis la mesaĝojn, eldonita trolo (kun ŝanĝoj konfirmante la validecon de la kritiko, restis в redakti historion).

fonto: opennet.ru

Aldoni komenton