Відкрито вихідні тексти мови програмування V

Переведений у розряд відкритих компілятор для мови V. V являє собою компилируемый в машинний код мову зі статичною типізацією, зосереджений вирішенні завдань зі спрощення супроводу розробки та забезпечення дуже високої швидкості компіляції. Код компілятора, бібліотек та супутніх інструментів відкритий під ліцензією MIT.

Синтаксис V багато в чому схожий на мову Go із запозиченням деяких конструкцій з Oberon, Rust та Swift. Мова максимально спрощена і, за заявою розробника, для вивчення базових основ достатньо 30 хвилин на вивчення документації. При цьому мова залишається досить потужною і може застосовуватися для виконання тих самих завдань, що й при використанні інших мов програмування (наприклад, доступні бібліотеки для 2D/3D графіки, створення GUI та веб-додатків).

До створення нової мови спонукало бажання домогтися поєднання властивих мові Go простоти синтаксису, швидкості компіляції, простоти розпаралелювання операцій, переносимості та супроводжуваності коду з продуктивністю С/C++, захищеністю Rust та генерацією машинного коду на етапі компіляції Zig. Також хотілося отримати компактний і швидкий компілятор, здатний працювати без зовнішніх залежностей, позбутися глобальної області видимості (глобальних змінних) та забезпечити можливість «гарячого» перезавантаження коду.

У порівнянні з C++ нова мова істотно простіше, забезпечує більш високу швидкість компіляції (до 400 разів), практикує прийоми безпечного програмування, позбавлений проблем з невизначеною поведінкою та надає вбудовані засоби для розпаралелювання операцій. У порівнянні з Python мова V швидше, простіше, безпечніше та зручніше у супроводі. Порівняно з Go в V немає глобальних змінних, немає null, всі значення змінних завжди обов'язково повинні бути визначені, всі об'єкти за замовчуванням є незмінними (immutable), підтримується лише один вид присвоєння («a:=0»), значно компактніший runtime і обсяг підсумкових виконуваних файлів, наявність прямої переносимості з Сі, відсутність збирача сміття, швидша серіалізація, можливість інтерполяції рядків («println('$foo: $bar.baz')»).

fn main() {
areas := ['game', 'web', 'tools', 'science', 'systems', 'GUI', 'mobile'] a := 10
if true {
до := 20
}
for area in areas {
println('Hello, $area developers!')
}
}

Особливості проекту:

  • Компактний та швидкий компілятор, який разом із стандартною бібліотекою займає близько 400 КБ. Висока швидкість компіляції досягається завдяки прямій генерації машинного коду та модульності. Швидкість компіляції становить приблизно 1.2 млн. рядків коду в секунду на одному ядрі CPU (зазначається, що в процесі роботи V може використовувати Сі, тоді швидкість падає до 100 тисяч рядків в секунду). Самоскладання компілятора, який також написаний мовою V (також є еталонний варіант Go), займає приблизно 0.4 сек. До кінця року очікується завершення роботи над додатковими оптимізаціями, які дозволять зменшити час збирання компілятора до 0.15 сек. Судячи з проведених розробником тестів самоскладання Go вимагає 512 Мб дискового простору і виконується за півтори хвилини, Rust вимагає 30 Гб і 45 хвилин, GCC - 8 ГБ і 50 хвилин, Clang - 90 Гб і 25 хвилин,
    Swift - 70 ГБ та 90 хвилин;

  • Програми компілюються у виконувані файли без зовнішніх залежностей. Розмір файлу простого http-сервера після збирання складає всього 65 КБ;
  • Продуктивність скомпільованих додатків знаходиться на рівні зборок програм мовою Сі;
  • Можливість безшовної взаємодії із Сі-кодом, без додаткових накладних витрат. З коду мовою V можуть викликатися функції мовою Сі і навпаки, код мовою V може викликатися будь-яких мовах, сумісних із Сі;
  • Підтримка трансляції проектів C/C++ у виставу мовою V. Для трансляції використовується парсер від Clang. Не всі можливості стандарту Сі поки що підтримуються, але поточних можливостей транслятора вже достатньо для перекладу на мову V гри DOOM. Транслятор з C++ поки що знаходиться на початковій стадії розвитку;
  • Вбудована підтримка серіалізації без прив'язки до runtime;
  • Мінімізація операцій розподілу пам'яті;
  • Безпека: відсутність NULL, глобальних змінних, невизначених значень та перевизначення змінних. Вбудовані засоби для перевірки виходу за межі буфера. Підтримка узагальнених функцій (Generic). Об'єкти і структури, що не змінюються за умовчанням;
  • Можливість «гарячого» перезавантаження коду (відображення змін у коді на льоту без перекомпіляції);
  • Кошти для забезпечення багатопоточності. Як у мові Go для запуску нового потоку виконання використовується конструкція виду "run foo()" (за аналогією з "go foo()"). У майбутньому планується підтримка goroutines та планувальника потоків;
  • Підтримка операційних систем Windows, MacOS, Linux, *BSD. До кінця року планується додати підтримку Android та iOS;
  • Управління пам'яттю на етапі компіляції (як у Rust), без застосування збирача сміття;
  • Наявність багатоплатформного тулкіта для виведення графіки, що використовує для малювання GDI+/Cocoa та OpenGL (у планах підтримка API DirectX, Vulkan та Metal). Є засоби для роботи з 3D-об'єктами, скелетною анімацією та керування камерою;
  • Наявність бібліотеки для формування графічних інтерфейсів із рідними для кожної ОС елементами оформлення. У Windows використовується WinAPI/GDI+, macOS — Cocoa, Linux — власний набір віджетів. Бібліотека вже використовується для розробки Volt - клієнта для Slack, Skype, Gmail, Twitter та Facebook;

    Планується створення схожого на Delphi програми для проектування інтерфейсу, надання декларативного API, схожого на SwiftUI та React Native, та забезпечення підтримки створення мобільних додатків для iOS та Android;

    Відкрито вихідні тексти мови програмування V

  • Наявність вбудованого web-фреймворку, який використаний для створення сайту, форуму та блогу розробників проекту. Підтримується передкомпіляція HTML-шаблонів, без обробки при кожному запиті;
  • Підтримка крос-компіляції. Для складання виконуваного файлу для Windows достатньо запустити "v -os windows", а для Linux - "v -os linux" (підтримка крос-компіляції для macOS очікується пізніше). Крос-компіляція у тому числі працює і для графічних програм;
  • Вбудований менеджер залежностей, пакетний менеджер та інструментарій збирання. Для складання програми достатньо запустити «v.», без використання make та зовнішніх утиліт. Для встановлення додаткових бібліотек достатньо виконати, наприклад, v get sqlite;
  • Наявність плагінів для розробки мовою V у редакторах В.С. Код и Vim.

Розробка сприйнята спільнотою з скептицизмом, Так як опублікований код показав, що не всі заявлені можливості поки що реалізовані і для здійснення всіх планів потрібно виконати великий обсяг роботи.
Крім того, спочатку в репозиторії був розміщений непрацюючий код, в якому спостерігаються проблеми зі складанням та виконанням. Передбачається, що автор ще не досягла стадії, на якій починають помічати закон Парето, відповідно до якого 20% зусиль дають 80% результату, а решта 80% зусиль — лише 20% результату.

Тим часом, у трекері помилок проекту V було видалено близько 10 повідомлень з демонстрацією низької якості коду, наприклад, вказано застосування Си-вставок і використання у бібліотеці функцій видалення каталогу команди rm через виклик os.system(«rm -rf $path»). Автор проекту заявив, що він лише видалив повідомлення, опубліковані тролем (при цьому зміни, що підтверджують обґрунтованість критики, залишилися в історії правок).

Джерело: opennet.ru

Додати коментар або відгук