Форум программистов, компьютерный форум, киберфорум
Другие языки программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/48: Рейтинг темы: голосов - 48, средняя оценка - 4.60
Заблокирован

Язык V (VLang)

09.09.2020, 15:09. Показов 11117. Ответов 29

Студворк — интернет-сервис помощи студентам
Пока программисты C++ думаю станет ли Rust тем языком, который сможет потеснить плюсы и занять их нишу, сам Rust уже пятый год подряд становится самым любимым языком у пользователей StackOwerflow. А вот С++ уверенно входит в пятерку самых нелюбимых языков. Это доказывает, что Rust - это будущее. И будущее уже здесь.
Но как только что-то появляется в этом мире оно сразу начинает устаревать, так как ни время, ни прогресс не стоят на месте.
Rust вышел, кажется, недавно, однако, уже есть язык который метит на его место. И имя ему - Vlang. Или просто V.
Автор языка говорит о том, что его детище должно заменить такие языки, как С, C++, Go и Rust.
Доводы почему так должно случится он приводит примерно следующие:
1) Легкость языка. Сам автор вдохновлялся Go, Rust и Python. Но его язык по синтаксису больше напоминает Python.
В частности он отмечает, что в умелых руках Rust может стать отличным инструментом, но на овладение этим инструментом могут уйти годы.
Vlang же простой, благодаря чему вы довольно быстро сможете научиться на нем писать.
2) Быстрота. Автор говорит, что Vlang такой же быстрый как С. Но кто только так не говорил. Хотя на сайте Vlang есть бенчмарки.
3)Быстрота компиляции. Говорят, что миллион строк компилирует за секунду. Doom переписанный на V собирается за 0.7 секунд.
4)Безопасность. У Rust язык позаимствовал такие штуки, как Result, Option и тд. Так же много функциональщины вроде отсутствия глобального состояния, иммутабельность и тд.
5)Отсутствие сборщика мусора.
6)Компилятор размером меньше чем 2MB.
7)Транслятор из С.
8)Горячая замена кода.
9)Repl и V script.
И тд.

Я с языком познакомился наверно полгода назад и это была любовь с первого взгляда.
Предлагаю немного пробежаться по коду.

Можно объявлять тип сразу для нескольких переменных.

Go
1
2
3
fn sub(x, y int) int {
    return x - y
}
Возвращать несколько значений

Go
1
2
3
fn foo() (int, int) {
    return 2, 3
}
Возрадуйтесь те, кто пишет на Lisp: допустимо неограниченное количество аргументов для функции.
Не знаю почему раньше этого никто не делал в подобных языках.
Если в Lisp аргументы добавляются в список, то тут они, как видно, помещаются в массив.

Go
1
2
3
4
5
6
7
8
9
10
fn sum(a ...int) int {
    mut total := 0
    for x in a {
        total += x
    }
    return total
}
println(sum())    // Output: 0
println(sum(1))   //         1
println(sum(2,3)) //         5
Отсутствие затенения переменных.

Go
1
2
3
4
5
6
7
fn main() {
    a := 10
    if true {
        a := 20 // error: shadowed variable
    }
    // warning: unused variable `a`
}
Удобный синтаксис.

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
mut nums := [1, 2, 3]
nums << 4
println(nums) // "[1, 2, 3, 4]"
 
// append array
nums << [5, 6, 7]
println(nums) // "[1, 2, 3, 4, 5, 6, 7]"
 
mut names := ['John']
names << 'Peter'
names << 'Sam'
// names << 10  <-- This will not compile. `names` is an array of strings.
println(names.len) // "3"
println('Alex' in names) // "false"
Математические типы и их проверка.

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
struct Abc {
    val string
}
struct Xyz {
    foo string
}
type Alphabet = Abc | Xyz
 
x := Alphabet(Abc{'test'}) // sum type
if x is Abc {
    // x is automatically castet to Abc and can be used here
    println(x)
}
Методы типов.

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
struct User {
    age int
}
 
fn (u User) can_register() bool {
    return u.age > 16
}
 
user := User{age: 10}
println(user.can_register()) // "false"
 
user2 := User{age: 20}
println(user2.can_register()) // "true"
Функции высшего порядка и лямбда функции

Go
1
2
3
4
5
6
7
fn run(value int, op fn(int) int) int {
    return op(value)
}
 
double_fn := fn(n int) int {
        return n + n
    }
Интерфейсы
Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
struct Dog {}
struct Cat {}
 
fn (d Dog) speak() string {
    return 'woof'
}
 
fn (c Cat) speak() string {
    return 'meow'
}
 
interface Speaker {
    speak() string
}
Дженерики

Go
1
2
3
4
5
6
7
struct Repo<T> {
    db DB
}
 
fn new_repo<T>(db DB) Repo<T> {
    return Repo<T>{db: db}
}
Option/Result

Go
1
2
3
4
5
6
7
8
9
fn (r Repo) find_user_by_id(id int) ?User {
    for user in r.users {
        if user.id == id {
            // V automatically wraps this into an option type
            return user
        }
    }
    return error('User $id not found')
}
И так далее.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.09.2020, 15:09
Ответы с готовыми решениями:

Что мощнее язык программирования Perl или язык программирования PHP
Какой из них лучше

Чем похожи и отличаются русский язык и автоматный язык
кто нибудь может ответить на этот вопрос кратко? 9. Чем, похожи и отличаются русский язык и автоматный язык?

Язык интерфейса Excel 2007 влияет на язык макросов?
Здравствуйте. Думаю что нет, но лучше спрошу. Влияет ли язык интерфейса Excel 2007 на язык макросов? Т.е. если Excel с русским...

29
Модератор
 Аватар для Curry
5160 / 3508 / 536
Регистрация: 01.06.2013
Сообщений: 7,618
Записей в блоге: 9
10.09.2020, 15:55
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от sodda Посмотреть сообщение
Горячая замена кода.
Вот это может быть интересно. Вангую что изменение типов данных и введение новых при такой горячей замене будет невозможно. Ну и то хлеб.
Остальные "киллерфичи" или уже есть в других языках, и/или криво сделаны.
Цитата Сообщение от sodda Посмотреть сообщение
Можно объявлять тип сразу для нескольких переменных.
См. Pascal,Delphi.
Цитата Сообщение от sodda Посмотреть сообщение
Возвращать несколько значений
Любой язык с кортежами. И даже lua без кортежей.
Цитата Сообщение от sodda Посмотреть сообщение
Отсутствие затенения переменных.
Точнее запрет затенения. Некоторые компиляторы выдают предупреждения при затенении.
В этом я с авторами rust не согласен. В rust затенение норма.
Цитата Сообщение от sodda Посмотреть сообщение
Удобный синтаксис.
Неудобный вообще. Не нужно под капот компилятора пихать всё подряд.
Цитата Сообщение от sodda Посмотреть сообщение
Математические типы
(Упрощённый?) вариант алгебраических типов.
Всё остальное тоже есть в относительно свежих языках. А кое что и в не свежих.
2
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,361
Записей в блоге: 5
10.09.2020, 19:30
Цитата Сообщение от Curry Посмотреть сообщение
В этом я с авторами rust не согласен. В rust затенение норма.
Была же тема о swap-е где-то тут. Затенением задача решается элементарно. Я недавно начал раст использовать и мне затенение один раз помешало когда я недоглядел, но там всё равно переписывать надо было ибо большой кусок кода был. А в целом удобное свойство языка, IMHO.
0
Модератор
 Аватар для Curry
5160 / 3508 / 536
Регистрация: 01.06.2013
Сообщений: 7,618
Записей в блоге: 9
10.09.2020, 19:39
Цитата Сообщение от outoftime Посмотреть сообщение
Затенением задача решается элементарно.
Именно затенением никакая задача не решается. Всегда можно присвоить более вложенному значению другое имя. Зато при ненарочном затенении (не заметил что имя уже было) можно получить труднотлавливаемую ошибку.
0
Заблокирован
12.09.2020, 13:49  [ТС]
Цитата Сообщение от Curry Посмотреть сообщение
Неудобный вообще. Не нужно под капот компилятора пихать всё подряд.
Чем неудобный?
Весьма удобный. Мне чем-то perl напомнило. А как по мне, так у perl один из самых приятных синтаксисов.

Цитата Сообщение от Curry Посмотреть сообщение
Любой язык с кортежами. И даже lua без кортежей.
Я не говорил, что это киллер-фича. Лишь привел примеры синтаксиса.
Цитата Сообщение от Curry Посмотреть сообщение
Всё остальное тоже есть в относительно свежих языках. А кое что и в не свежих.
В разных. Но все водном - не так часто.
0
Заблокирован
13.09.2020, 15:12  [ТС]
Цитата Сообщение от Curry Посмотреть сообщение
Цитата Сообщение от sodda Посмотреть сообщение
Удобный синтаксис.
Неудобный вообще. Не нужно под капот компилятора пихать всё подряд.
Для примера. Вот две одинаковые программы на Rust и на Vlang.
Чисто по синтаксису на V писать гораздо легче.


Rust

C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
use std::io;
use std::io::*;
 
fn check(name: &String, arr: &Vec<&str>) -> bool {
 
for i in arr {
  if *i == name.trim_end() { 
      return true;
   }
};
 
      false
 
}
 
 
fn main() {
   
  let  friends = vec!["Александр", "Сергей", "Виктор"];
  let mut name = String::new();
  println!("Привет, друг, как тебя зовут?");
  print!("Привет, меня зовут: ");
  io::stdout().flush().ok();
  io::stdin().read_line(&mut name).unwrap();
 
  if check(&name, &friends) {
     println!("Рад тебя видеть, {}", name);
 
   } else {
       println!("Я тебя не знаю, {}", name);
       loop {
          let mut again = String::new();
          print!("Как говоришь тебя зовут: ");
          io::stdout().flush().ok();
          io::stdin().read_line(&mut again).unwrap();
 
          if check(&again, &friends) {
            println!("Рад тебя видеть, {}", again);
            break;
          } else {
              println!("Я тебя не знаю, {}", again);
              continue;
           }
       }          
   } 
}
Vlang

Go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
module main
 
import os
 
fn check(name string, druzi &[]string) bool {
    
      for i in druzi {
          
          if name == i {
          return true   
           }
         }
          
         return false
    
    }
 
 
fn main() {
    
    druzi := ["Сергей", "Виктор", "Алекс"]
    println('Привет, друг, как тебя зовут?')
    name := os.input('Меня зовут: ')
    
          if check(name, &druzi) {
          println('Рад тебя видеть, $name')
          } else {
               println('Я тебя не знаю, $name')
               for  {
                   rename := os.input('Так как ты говоришь тебя зовут: ')
                   if check(rename, &druzi) {
                       println('Рад тебя видеть, $rename')
                       break
                       } else {
                           println('Я тебя не знаю, $rename')
                                                   continue
                           }
                   
                   }
                            
              
               }
 
    
    }
0
 Аватар для chessman2
164 / 144 / 10
Регистрация: 21.10.2012
Сообщений: 492
02.09.2021, 17:14
Цитата Сообщение от sodda Посмотреть сообщение
Дружище, я уже лет десять с linux и BSD
Я тоже лет 10 в linux.

Прошу совет - простые шаги попробовать V
0
Модератор
 Аватар для Curry
5160 / 3508 / 536
Регистрация: 01.06.2013
Сообщений: 7,618
Записей в блоге: 9
03.09.2021, 02:41
Наконец то я сподобился посмотреть что это за https://vlang.io/ .
При чём тут rust?
По ссылке выше написано
V is very similar to Go. If you know Go, you already know ≈80% of V.
При чём тут это холиварное название темы "Убийца ..."?
Авторы V не позиционируют его на замену чего либо, а как простой язык. Весьма простой. в приведённой там же таблице затрат памяти и времени для сборки компиляторов разных языков
 Space Build time
Go525 MB1m 33s
Rust30 GB45m
GCC8 GB50m
Clang90 GB60m
Swift70 GB90m
V< 10 MB<1s
Понятно, что такой небольшой компилятор свидетельствует об, ну очень, простом языке. Такой язык, конечно, имеет право быть, Но не надо приплетать убийц всяких.


p.s. Вообще то, заявляемое время сборки компилятора менее 1 секунды, на компьютере где clang компилятор собирается час наводит на мысль о каком то МММ. Проверять не хочу.
0
 Аватар для vantfiles
1018 / 1921 / 177
Регистрация: 07.05.2013
Сообщений: 3,931
Записей в блоге: 12
05.09.2021, 07:58
Цитата Сообщение от Curry Посмотреть сообщение
Понятно, что такой небольшой компилятор свидетельствует об, ну очень, простом языке.
Forth - простой язык?
0
Модератор
 Аватар для Curry
5160 / 3508 / 536
Регистрация: 01.06.2013
Сообщений: 7,618
Записей в блоге: 9
05.09.2021, 10:12
Цитата Сообщение от vantfiles Посмотреть сообщение
Forth - простой язык?
Простой, в смысле простоты реализации транслятора.
0
Заблокирован
21.09.2021, 11:26  [ТС]
Цитата Сообщение от Curry Посмотреть сообщение
При чём тут это холиварное название темы "Убийца ..."?
Авторы V не позиционируют его на замену чего либо, а как простой язык. Весьма простой. в приведённой там же таблице затрат памяти и времени для сборки компиляторов разных языков
Не вижу никакой связи и логики в ваших словах.
Я имел ввиду, что этот язык позиционируется как альтернатива или даже замена таким языкам, как Rust, Go и тд.
Автор языка так и пишет об этом - Rust хороший язык, но весьма трудный для изучения и чтобы стать профессионалом, который использует этот язык в повседневной работе, могут уйти годы на его освоение.
При какой кухне то, что он похож на Go? Похож и что? Он и на Rust похож местами, так как автор языка вдохновлялся в том числе и этим языком. Тот же Rust вдохновлялся идеями функционального программирования и, в частности, такими языками как Haskell и Lisp. Но это не значит, что теперь Rust - это функциональный язык.
Цитата Сообщение от Curry Посмотреть сообщение
Понятно, что такой небольшой компилятор свидетельствует об, ну очень, простом языке
Это говорит, что пока что в компиляторе очень мало сторонних зависимостей. Вот и всё.

Добавлено через 1 минуту
Цитата Сообщение от chessman2 Посмотреть сообщение
Прошу совет - простые шаги попробовать V
Скачиваете с гитхаба, собираете. Потом читаете документацию и пишете код. Всё.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2021, 11:26
Помогаю со студенческими работами здесь

Новые ЯП: существует ли язык программирования лучше чем C++, а если нет, то появится ли через 2-3 года такой язык?
Привет, зашёл на сайт, увидел C++ и подумал: Существует ли ЯП лучше чем C++, или появится ли через 2-3 года такой язык? Лучше имеется в...

Язык си и windows batch file. Может язык си заменить батник? Интересует запуск из языка си утилиты cmd
Чтобы не конвертировать bat файл в exe. Возможно сделать саму программу в си, которая запускает нужные программы? Куда смотреть, в какую...

Немецкий язык. Как перевести слово язык?
Информация к размышлению die Zunge = язык (тот, что за зубами) die Sprache = язык, речь der Gefangene = sub (военно)пленный ...

Английский язык для окна ввода пароля, русский язык для самой системы
собственно, сабж. у меня пароль на английском языке, при включении компьютера по умолчанию стоит русский, соответственно надо переключать...

Немецкий язык. Перевести русский текст на немецкий язык
Перевести русский текст на немецкий язык. В немецком языке, как и в русском часто встречаются синонимы, которые не всегда могут...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Ответ Создать тему
Новые блоги и статьи
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера» Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит. Придуман Биллом Госпером в 1970-х, опубликован в. . .
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb"> <style> <!]> </ style> <g id="bush"> </ g> </ svg> function fn(){ let rost;/ / высота древа let xx=165,yy=210,w=256;
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов, содержащихся в реализации модуля. По-умолчанию все члены модуля доступны: module Foo let x = 10 let boo () = printfn "boo" . . .
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции. <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible". . .
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов. import "math" func angleClock(hour int, minutes int) float64 { . . .
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html и его же старой инструкции по установке Lazarus с gtk2. . .
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер. Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru