V-ohjelmointikieli avoimen lähdekoodin

Käännetty avoimen kääntäjän luokkaan kieli V. V on staattisesti kirjoitettu koneella käännetty kieli, joka keskittyy tekemään kehityksestä helpommin ylläpidettävä ja erittäin nopea kääntää. Kääntäjäkoodi, kirjastot ja niihin liittyvät työkalut on auki MIT-lisenssillä.

V:n syntaksi on hyvin samanlainen kuin Go, lainaten joitain rakenteita Oberonilta, Rustilta ja Swiftiltä. Kieli on yksinkertaistettu mahdollisimman paljon ja kehittäjän mukaan 30 minuuttia opiskelua riittää perusteiden oppimiseen dokumentointi. Samalla kieli pysyy melko tehokkaana ja sitä voidaan käyttää samojen tehtävien suorittamiseen kuin käytettäessä muita ohjelmointikieliä (esimerkiksi kirjastoja on saatavana 2D/3D-grafiikkaa, graafisten käyttöliittymien ja verkkosovellusten luomiseen).

Uuden kielen luomisen taustalla oli halu saavuttaa yhdistelmä Go-kielen syntaksin yksinkertaisuutta, käännösnopeutta, toimintojen rinnakkaisuuden helppoutta, koodin siirrettävyyttä ja ylläpidettävyyttä C/C++:n suorituskyvyn kanssa, Rustin turvallisuutta ja konekoodin luominen Zig-kääntämisvaiheessa. Halusin myös saada kompaktin ja nopean kääntäjän, joka voisi toimia ilman ulkoisia riippuvuuksia, päästä eroon globaalista laajuudesta (globaalit muuttujat) ja tarjoamaan mahdollisuuden "kuuma" ladata koodi uudelleen.

Verrattuna C++:aan, uusi kieli on huomattavasti yksinkertaisempi, nopeampi käännösnopeus (jopa 400 kertaa), käyttää turvallisia ohjelmointitekniikoita, ei sisällä ongelmia määrittämättömän käyttäytymisen kanssa ja tarjoaa sisäänrakennetut työkalut toimintojen rinnastukseen. Pythoniin verrattuna V on nopeampi, yksinkertaisempi, turvallisempi ja huollettavampi. Go:hon verrattuna V:ssä ei ole globaaleja muuttujia, ei nollia, kaikki muuttujien arvot on aina määriteltävä, kaikki objektit ovat oletuksena muuttumattomia, vain yhtä määritystyyppiä tuetaan ("a := 0"), huomattavasti kompaktimpi suoritusaika ja tuloksena olevien suoritettavien tiedostojen koko, suora siirrettävyys C:stä, roskankeräimen puuttuminen, nopeampi sarjoittaminen, kyky interpoloida merkkijonoja ("println('$foo: $bar.baz')").

fnmain() {
alueet := ['peli', 'web', 'työkalut', 'tiede', 'järjestelmät', 'GUI', 'mobiili'] a := 10
jos totta {
:= 20
}
alueella alueilla {
println('Hei, $alueen kehittäjät!')
}
}

Projektin ominaisuudet:

  • Kompakti ja nopea kääntäjä, joka yhdessä vakiokirjaston kanssa vie noin 400 kt. Suuri käännösnopeus saavutetaan konekoodin suoran generoinnin ja modulaarisuuden avulla. Käännösnopeus on noin 1.2 miljoonaa riviä koodia sekunnissa yhdellä CPU-ytimellä (huomaa, että käytön aikana V voi käyttää C:tä, jolloin nopeus putoaa 100 tuhanteen riviin sekunnissa). Kääntäjän itsekokoonpano, joka on kirjoitettu myös V-kielellä (Go:ssa on myös viiteversio), kestää noin 0.4 sekuntia. Vuoden loppuun mennessä lisäoptimointityön odotetaan valmistuvan, mikä lyhentää kääntäjän rakennusaikaa 0.15 sekuntiin. Kehittäjän tekemien testien perusteella Go:n itsekokoonpano vaatii 512 Mt levytilaa ja toimii puolessatoista minuutissa, Rust vaatii 30 Gt ja 45 minuuttia, GCC - 8 Gt ja 50 minuuttia, Clang - 90 Gt ja 25 minuuttia,
    Swift - 70 Gt ja 90 minuuttia;

  • Ohjelmat käännetään suoritettaviksi tiedostoiksi ilman ulkoisia riippuvuuksia. Yksinkertaisen http-palvelimen suoritettavan tiedoston koko on kokoamisen jälkeen vain 65 kt;
  • Käytettyjen sovellusten suorituskyky on C-ohjelmien kokoonpanojen tasolla;
  • Mahdollisuus olla saumattomasti vuorovaikutuksessa C-koodin kanssa ilman lisäkustannuksia. C-kielen funktioita voidaan kutsua V-kielen koodista ja päinvastoin V-kielen koodia voidaan kutsua millä tahansa C-yhteensopivalla kielellä;
  • Tuki C/C++-projektien kääntämiseen V-kielen esitykseksi Kääntämiseen käytetään Clangin jäsennintä. Kaikkia C-standardin ominaisuuksia ei vielä tueta, mutta kääntäjän nykyiset ominaisuudet ovat jo riittävät käännös V-pelin DOOM kielellä. C++-kääntäjä on vielä kehitysvaiheessa;
  • Sisäänrakennettu serialisointituki ilman, että se on sidottu suoritusaikaan;
  • Muistinvaraustoimintojen minimoiminen;
  • Turvallisuuden takaaminen: ei NULL-arvoa, globaaleja muuttujia, määrittelemättömiä arvoja ja muuttujan uudelleenmäärittelyä. Sisäänrakennettu puskurin ylityksen tarkistus. Yleisten toimintojen tuki (Generic). Objektit ja rakenteet, joita ei voi muuttaa oletusarvoisesti;
  • Mahdollisuus "kuuman" koodin uudelleenlataukseen (heijastaa muutoksia koodissa lennossa ilman uudelleenkääntämistä);
  • Työkalut monisäikeisyyden varmistamiseen. Aivan kuten Go-kielessä, rakennetta, kuten "run foo()" käytetään aloittamaan uusi suoritussäie (samanlainen kuin "go foo()"). Tulevaisuudessa on suunnitteilla tuki gorutiineille ja säikeen ajoittimelle;
  • Tuki Windows-, macOS-, Linux- ja *BSD-käyttöjärjestelmille. Android- ja iOS-tuki on tarkoitus lisätä vuoden loppuun mennessä;
  • Muistinhallinta käännöshetkellä (kuten Rustissa), ilman roskakeräystä;
  • Monialustaisen työkalusarjan saatavuus grafiikan tuottamiseen, jossa käytetään GDI+/Cocoaa ja OpenGL:ää renderöintiin (DirectX-, Vulkan- ja Metal-sovellusliittymien tuki on suunniteltu). Siellä on työkaluja 3D-objektien, luurankoanimaatioiden ja kameran ohjaamiseen.
  • Kirjaston saatavuus graafisten käyttöliittymien luomiseen kunkin käyttöjärjestelmän suunnitteluelementeillä. Windows käyttää WinAPI/GDI+:aa, macOS Cocoaa ja Linux omia widgetejään. Kirjasto on jo käytössä kehitystyössä Voltti - Slackin, Skypen, Gmailin, Twitterin ja Facebookin asiakas;

    Suunnitelmana on luoda Delphin kaltainen käyttöliittymäsuunnittelusovellus, tarjota SwiftUI:n ja React Nativen kaltainen deklaratiivinen API sekä tukea mobiilisovellusten luomiseen iOS:lle ja Androidille;

    V-ohjelmointikieli avoimen lähdekoodin

  • Sisäänrakennetun verkkokehyksen saatavuus, jolla luodaan verkkosivusto, foorumi ja blogi projektin kehittäjille. HTML-mallien esikääntämistä tuetaan ilman, että niitä käsitellään jokaisessa pyynnöstä;
  • Ristikokoelman tuki. Luodaksesi suoritettavan tiedoston Windowsille, suorita "v -os windows" ja Linuxissa "v -os linux" (macOS:n ristiinkäännöstukea odotetaan myöhemmin). Ristikääntäminen toimii myös graafisissa sovelluksissa;
  • Sisäänrakennettu riippuvuushallinta, paketinhallinta ja rakennustyökalut. Rakenna ohjelma suorittamalla "v." ilman merkkiä tai ulkoisia apuohjelmia. Jos haluat asentaa lisää kirjastoja, suorita esimerkiksi "v get sqlite";
  • Lisäosien saatavuus kehittämiseen V-kielellä editoreissa VS-koodi и puhti.

suunnittelu havaittu yhteisön kanssa skeptisyyttä, koska julkaistu koodi osoitti, että kaikkia ilmoitettuja ominaisuuksia ei ole vielä otettu käyttöön ja kaikkien suunnitelmien toteuttaminen vaatii erittäin paljon työtä.
Lisäksi alun perin arkistolla oli lähetetty rikkinäinen koodi, jolla on ongelmia kokoonpanossa ja suorittamisessa. Oletetaan, että kirjoittaja ei ole vielä saavuttanut vaihetta, jossa hän alkaa huomata Pareton laki, jonka mukaan 20 % vaivannäöstä tuottaa 80 % tuloksesta ja loput 80 % ponnisteluista vain 20 % tuloksesta.

Samaan aikaan Project V:n virheenseurantaohjelmasta on poistettu noin 10 viestiä esittely huonolaatuinen koodi esimerkiksi ilmaisee C-lisäkkeiden käytön ja funktioiden käytön kirjastossa rm-komennon hakemiston poistamiseen kutsun os.system("rm -rf $polku" kautta). Projektin kirjoittaja sanoiettä hän vain poisti viestit, julkaistu peikko (muutoksilla, jotka vahvistavat kritiikin paikkansapitävyyden, pysyi в muokkaa historiaa).

Lähde: opennet.ru

Lisää kommentti