Otwarte źródło języka programowania V

Przetłumaczony do kategorii otwartego kompilatora dla język V. V to język kompilowany maszynowo ze statycznym typem, który koncentruje się na ułatwianiu programowania i bardzo szybkiej kompilacji. Kod kompilatora, biblioteki i powiązane narzędzia otwarty na licencji MIT.

Składnia V jest bardzo podobna do Go, zapożyczając pewne konstrukcje z Oberona, Rusta i Swifta. Język jest maksymalnie uproszczony i zdaniem twórcy wystarczy 30 minut nauki, aby nauczyć się podstaw dokumentacja. Jednocześnie język pozostaje dość potężny i można go używać do wykonywania tych samych zadań, co przy użyciu innych języków programowania (dostępne są na przykład biblioteki do grafiki 2D/3D, tworzenia GUI i aplikacji internetowych).

Do stworzenia nowego języka podyktowana została chęć uzyskania połączenia prostoty składni języka Go, szybkości kompilacji, łatwości zrównoleglenia operacji, przenośności i łatwości konserwacji kodu z wydajnością C/C++, bezpieczeństwem Rusta i generowanie kodu maszynowego na etapie kompilacji Ziga. Chciałem także uzyskać kompaktowy i szybki kompilator, który mógłby działać bez zewnętrznych zależności, pozbyć się zasięgu globalnego (zmiennych globalnych) i zapewnić możliwość „gorącego” przeładowania kodu.

W porównaniu do C++ nowy język jest znacznie prostszy, zapewnia większą szybkość kompilacji (nawet 400 razy), ćwiczy bezpieczne techniki programowania, jest wolny od problemów z niezdefiniowanym zachowaniem i udostępnia wbudowane narzędzia do operacji równoległych. W porównaniu do Pythona V jest szybszy, prostszy, bezpieczniejszy i łatwiejszy w utrzymaniu. W porównaniu do Go, V nie ma zmiennych globalnych, nie ma wartości null, wszystkie wartości zmiennych muszą być zawsze zdefiniowane, wszystkie obiekty są domyślnie niezmienne, obsługiwany jest tylko jeden typ przypisania („a := 0”), znacznie bardziej kompaktowy czas wykonania i rozmiar powstałych plików wykonywalnych, obecność bezpośredniej przenośności z C, brak modułu zbierającego elementy bezużyteczne, szybsza serializacja, możliwość interpolacji ciągów („println('$foo: $bar.baz')”).

fn główna() {
obszary := ['gra', 'sieć', 'narzędzia', 'nauka', 'systemy', 'GUI', 'mobile'] a := 10
Jeśli prawda {
do := 20
}
dla obszaru w obszarach {
println('Witajcie, $obszarowi programiści!')
}
}

Cechy projektu:

  • Kompaktowy i szybki kompilator, który wraz ze standardową biblioteką zajmuje około 400 KB. Wysoką prędkość kompilacji osiąga się poprzez bezpośrednie generowanie kodu maszynowego i modułowość. Szybkość kompilacji wynosi około 1.2 miliona linii kodu na sekundę na jednym rdzeniu procesora (należy zauważyć, że podczas operacji V może używać C, wówczas prędkość spada do 100 tysięcy linii na sekundę). Samodzielne złożenie kompilatora, który jest również napisany w języku V (w Go jest także wersja referencyjna), zajmuje około 0.4 sekundy. Do końca roku mają zakończyć się prace nad dodatkowymi optymalizacjami, które skrócą czas budowy kompilatora do 0.15 sekundy. Sądząc po testach przeprowadzonych przez dewelopera, samodzielny montaż Go wymaga 512 MB miejsca na dysku i działa w półtorej minuty, Rust wymaga 30 GB i 45 minut, GCC – 8 GB i 50 minut, Clang – 90 GB i 25 minut,
    Swift – 70 GB i 90 minut;

  • Programy są kompilowane do plików wykonywalnych bez zewnętrznych zależności. Rozmiar pliku wykonywalnego prostego serwera http po złożeniu wynosi tylko 65 KB;
  • Wydajność skompilowanych aplikacji jest na poziomie zestawów programów C;
  • Możliwość płynnej interakcji z kodem C, bez dodatkowych kosztów ogólnych. Funkcje w języku C można wywoływać z kodu w języku V i odwrotnie, kod w języku V można wywoływać w dowolnym języku kompatybilnym z C;
  • Wsparcie dla tłumaczenia projektów C/C++ na reprezentację w języku V. Do tłumaczenia używany jest parser firmy Clang. Nie wszystkie funkcje standardu C są jeszcze obsługiwane, ale obecne możliwości tłumacza są już wystarczające tłumaczenie w języku V gry DOOM. Tłumacz C++ jest wciąż na wczesnym etapie rozwoju;
  • Wbudowana obsługa serializacji, bez konieczności wiązania się ze środowiskiem wykonawczym;
  • Minimalizowanie operacji alokacji pamięci;
  • Zapewnienie bezpieczeństwa: brak NULL, zmienne globalne, wartości niezdefiniowane i redefinicja zmiennych. Wbudowane sprawdzanie przepełnienia bufora. Obsługa funkcji ogólnych (Generic). Obiekty i konstrukcje, których domyślnie nie można zmienić;
  • Możliwość „gorącego” przeładowania kodu (odzwierciedlenia zmian w kodzie w locie, bez rekompilacji);
  • Narzędzia zapewniające wielowątkowość. Podobnie jak w języku Go, do rozpoczęcia nowego wątku wykonania używana jest konstrukcja typu „run foo()” (podobnie jak „go foo()”). W przyszłości planowana jest obsługa goroutines i harmonogramu wątków;
  • Wsparcie dla systemów operacyjnych Windows, macOS, Linux, *BSD. Do końca roku planowane jest dodanie obsługi Androida i iOS;
  • Zarządzanie pamięcią w czasie kompilacji (jak w Rust), bez użycia modułu zbierającego elementy bezużyteczne;
  • Dostępność wieloplatformowego zestawu narzędzi do generowania grafiki, wykorzystującego GDI+/Cocoa i OpenGL do renderowania (planowana jest obsługa API DirectX, Vulkan i Metal). Istnieją narzędzia do pracy z obiektami 3D, animacji szkieletowej i sterowania kamerą;
  • Dostępność biblioteki do generowania interfejsów graficznych z elementami projektu natywnymi dla każdego systemu operacyjnego. Windows korzysta z WinAPI/GDI+, macOS używa Cocoa, a Linux używa własnego zestawu widżetów. Biblioteka jest już wykorzystywana w fazie rozwoju Wolt — klient Slack, Skype, Gmail, Twitter i Facebook;

    W planach jest stworzenie aplikacji do projektowania interfejsów na wzór Delphi, udostępnienie deklaratywnego API na wzór SwiftUI i React Native oraz zapewnienie wsparcia przy tworzeniu aplikacji mobilnych na iOS i Androida;

    Otwarte źródło języka programowania V

  • Dostępność wbudowanego frameworka sieciowego, który służy do tworzenia strony internetowej, forum i bloga dla twórców projektu. Obsługiwana jest prekompilacja szablonów HTML, bez przetwarzania ich przy każdym żądaniu;
  • Obsługa kompilacji krzyżowej. Aby zbudować plik wykonywalny dla systemu Windows, po prostu uruchom „v -os Windows”, a dla systemu Linux - „v -os linux” (obsługa kompilacji krzyżowej dla systemu macOS spodziewana jest później). Kompilacja krzyżowa działa również w przypadku aplikacji graficznych;
  • Wbudowany menedżer zależności, menedżer pakietów i narzędzia do kompilacji. Aby zbudować program, po prostu uruchom „v.”, bez użycia make lub zewnętrznych narzędzi. Aby zainstalować dodatkowe biblioteki, wystarczy uruchomić na przykład „v get sqlite”;
  • Dostępność wtyczek do programowania w języku V w edytorach Kod VS и Vim.

Rozwój postrzegane społeczność z sceptycyzm, ponieważ opublikowany kod pokazał, że nie wszystkie zadeklarowane możliwości zostały jeszcze zaimplementowane, a wdrożenie wszystkich planów wymaga bardzo dużej ilości pracy.
Ponadto początkowo repozytorium miało umieszczony zepsuty kod, który ma problemy z montażem i wykonaniem. Zakłada się, że autor nie osiągnął jeszcze etapu, na którym zaczyna zauważać Prawo Paretozgodnie z którą 20% wysiłku daje 80% wyniku, a pozostałe 80% wysiłku daje tylko 20% wyniku.

Tymczasem z narzędzia do śledzenia błędów Project V usunięto około 10 postów demonstracja na przykład kod niskiej jakości wskazuje na użycie wstawek C i użycie w bibliotece funkcji do usuwania katalogu polecenia rm poprzez wywołanie os.system("rm -rf $path"). Autor projektu powiedziałże usunął tylko wiadomości, opublikowany Troll (ze zmianami potwierdzającymi zasadność krytyki, został в edytować historię).

Źródło: opennet.ru

Dodaj komentarz