Быстродействие языков программирования и язык программирования V
Сегодня в телеграм-канале Metanit увидел графики быстродействия примитивной программы на разных языках, которая модифицирует все числа массива размером 1 миллиард. Самым быстрым оказался язык Zig. Даже С оказался лишь на втором месте. Мой любимчик Nim тоже показал прекрасный результат в 0,5458 секунды.
Из любопытства решил посмотреть на исходники программ на разных языках на GitHub, по результатам которых и составили этот график. Программы на Zig и Rust меня откровенно разочаровали, потому что были написаны с помощью итераторов. Ну и синтаксис, мягко говоря, не самый читаемый.
Стал смотреть другие языки. Pascal — нормальный код. Nim, С — тоже. Языка Ada среди результатов нет, но программа есть. Fortran посмотрел — язык сильно отличается от Fortran IV и 77, которые я много лет назад изучал.
В конце списка обнаружил язык V. Заинтересовался, потому что ни разу о нём не слышал. И увлёкся. Оказалось, очень перспективная разработка.
Язык программирования V
V - это интересный проект, который появился относительно недавно, но уже успел привлечь внимание многих разработчиков. Он позиционируется как язык для создания быстрых, безопасных и простых программ, что само по себе звучит заманчиво.
Первое, что бросается в глаза - это его синтаксис. Он действительно очень чистый и лаконичный. Если вы работали с Go или даже C#, то увидите много знакомого, но при этом V избавлен от некоторых "шумовых" элементов, таких как точечная нотация или сложные конструкции управления памятью. Это делает код на V приятным для чтения и понимания, особенно для новичков.
Одна из ключевых фишек V - это компиляция в нативный код без необходимости использовать внешние зависимости. То есть программа, написанная на V, может быть скомпилирована в один исполняемый файл, который можно запустить практически на любой платформе без установки дополнительных библиотек. Это очень удобно для дистрибуции софта, особенно если вы хотите сделать что-то кроссплатформенное.
В плане производительности V тоже показывает хорошие результаты. Он был создан с мыслью о том, чтобы быть быстрее Python, Ruby и других интерпретируемых языков, но при этом сохранять их простоту использования. В некоторых тестах он действительно демонстрирует скорость, сопоставимую с C++ или Rust, что впечатляет для такого молодого языка.
Ещё одно интересное свойство - это встроенная система сборки. В отличие от многих других языков, где вам нужно использовать Makefiles, CMake или другие инструменты, в V всё это встроено прямо в язык. Просто пишете `v run main.v`, и всё работает. Это значительно упрощает процесс разработки, особенно для небольших проектов.
Но вот что действительно привлекает внимание - это философия языка. Создатели V стараются делать всё максимально просто и понятно. Например, в языке нет null-значений, что помогает избежать распространённой ошибки NullPointerException. Также нет наследования в классическом смысле - вместо этого используется композиция, что считается более современным подходом.
Конечно, как и любой молодой язык, V имеет свои ограничения. Экосистема ещё не такая развитая, как у более зрелых языков типа JavaScript или Python. Но community активно растёт, и появляются новые библиотеки и инструменты.
Интересно также, что создатели V делают акцент на безопасности и надёжности кода. Язык автоматически проверяет границы массивов, управляет памятью и предотвращает многие типичные ошибки, которые могут возникнуть в C или C++. При этом остаётся достаточно быстрым благодаря использованию статической типизации и компиляции в нативный код.
Так что, хотя V пока ещё находится в стадии развития, он уже показывает себя как перспективный инструмент для тех, кто хочет писать быстрые и безопасные программы без лишней сложности. Возможно, через несколько лет мы увидим его среди лидеров в определённых нишах разработки.
Вот как выглядит та самая программа на V:
import rand @[direct_array_access] fn main() { u := arguments()[1].i32() // Get an input number from the command line r := rand.i32_in_range(0, 10_000)! // Get a random integer 0 <= r < 10k mut a := [10000]i32{} // Array of 10k elements initialized to 0 for i := 0; i < 10000; i++ { // 10k outer loop iterations for j := 0; j < 100000; j++ { // 100k inner loop iterations, per outer loop iteration a[i] = i32(a[i] + j % u) // Simple sum } a[i] += r // Add a random value to each element in array } println(a[r]) // Print out a single element from the array }
Взаимодействие V с кодом на C
Один из самых интересных аспектов V — это его способность легко взаимодействовать с кодом на C, и наоборот. Это открывает огромные возможности для разработчиков, особенно тех, кто работает с низкоуровневыми системами или использует существующие библиотеки, написанные на C.
В V можно напрямую встраивать C-код внутри программы без каких-либо дополнительных инструментов или сложных механизмов. Просто добавляете блок `//cc` и пишете нужный C-код. Например:
fn main() { //cc #include <stdio.h> //cc void say_hello() { printf("Hello from C!\n"); } //cc say_hello(); }
Это невероятно удобно, когда нужно использовать готовые C-библиотеки или оптимизировать конкретные части программы на более низком уровне. При этом вы не теряете всю красоту и простоту V, просто добавляете необходимый C-код там, где он действительно нужен.
А вот если говорить о том, чтобы использовать V-код в программах на C, то тут тоже всё достаточно просто. Поскольку V компилируется в чистый C-код, вы можете взять этот исходник и использовать его в своих C-проектах. Это делает V отличным выбором для тех случаев, когда нужно быстро написать какой-то модуль или библиотеку, но при этом сохранить совместимость с существующими C-проектами.
Например, если вы пишете большую системную утилиту на C, но хотите добавить какой-то новый функционал, который проще реализовать на V, вы можете сделать это без проблем. Просто пишете нужную часть на V, компилируете её в C, и дальше работаете уже с этим C-кодом.
Эта гибкость особенно ценна в мире разработки, где часто приходится работать с legacy-кодом или использовать специфические библиотеки. Вместо того чтобы полностью переписывать всё на новый язык, вы можете постепенно внедрять V там, где это даёт реальные преимущества, не нарушая существующую архитектуру.
Интересно также то, что V пытается сохранить простоту использования даже при работе с C. Нет необходимости глубоко понимать все тонкости C-синтаксиса или принципов работы с памятью, если вы просто хотите использовать готовую библиотеку. V предоставляет удобные обёртки для многих распространённых C-библиотек, что делает их использование максимально прозрачным.
Такое сочетание мощности C и простоты V создаёт уникальную возможность для разработчиков: писать современный, безопасный и быстрый код, не отказываясь от возможностей старых проверенных технологий. Это особенно важно в таких областях, как игры, встраиваемые системы или любые другие области, где производительность и контроль над ресурсами имеют первостепенное значение.
Конечно, как и в любом кросс-языковом программировании, здесь есть свои нюансы и ограничения. Но благодаря продуманному дизайну V эти моменты минимизированы, что делает работу с C максимально комфортной.
История создания V и создатель
История создания V начинается с одного человека — Александра Медведникова. Это программист из России, который работал над различными проектами, от стартапов до крупных компаний, и столкнулся с множеством проблем, которые существующие языки на его взгляд не могли полностью решить.
Всё началось примерно в 2019 году, когда Александр решил создать язык программирования, который будет простым, быстрым и безопасным одновременно. Он был разочарован тем, что современные языки либо слишком сложны (например, C++), либо недостаточно производительны (например, Python). Поэтому он поставил перед собой цель создать что-то новое, что бы совмещало лучшие качества разных языков, но при этом было бы максимально понятным и удобным для использования.
Первоначально идея родилась из потребности в инструменте для быстрой разработки небольших утилит и скриптов. Но со временем она выросла в нечто большее. Александр хотел создать язык, который можно использовать для всего: от маленьких утилит до больших системных программ.
Особенно интересно, что Александр начал разрабатывать V практически в одиночку. Первые версии языка были написаны им самим, и только позже к проекту начали присоединяться другие разработчики из сообщества. Это говорит о том, насколько сильной была его мотивация и видение конечного продукта.
Сам процесс создания был достаточно нетривиальным. Вместо того чтобы просто скопировать существующие решения, Александр решил пересмотреть многие подходы к проектированию языков. Например, отказ от null-значений, автоматическое управление памятью без сборщика мусора, простая система компиляции — все эти решения появились после долгих обсуждений и экспериментов.
Интересный факт: первая версия компилятора V была написана на Go! Это было сделано для того, чтобы быстро протестировать основные идеи языка. Позже компилятор был полностью переписан на самом V, что позволило сделать его ещё более эффективным.
Александр активно общается с сообществом через Twitter, Reddit и другие платформы. Он часто делится своими мыслями о будущем языка, отвечает на вопросы и принимает предложения от других разработчиков. Такой открытый подход помогает формировать дружелюбное сообщество вокруг языка.
Также стоит отметить, что V был создан как некоммерческий проект. Alexander не планирует монетизировать язык напрямую, а хочет, чтобы он развивался как open-source проект, доступный всем желающим. Это создаёт доверие среди разработчиков и помогает привлекать новых участников.
За несколько лет проект успел получить значительную популярность, особенно среди тех, кто ценит простоту и производительность. Хотя V всё ещё находится в стадии развития, он уже показывает себя как серьёзный конкурент в определённых нишах разработки. История его создания - это история одного человека, который решился изменить мир программирования своим видением идеального языка.
P.S. Поставил компилятор V себе на мак. Собирается из исходников очень быстро. Как пишет автор языка, высочайшая скорость компиляции — одна из фишек, которой он уделяет много внимания. Буду смотреть, как развивается язык.