LINUX.ORG.RU

Новый язык V

 , , , ,


1

6

Что сообщество думает по поводу сегодняшнего релиза нового компилируемого языка с авто транслейтом Си в V
https://github.com/vlang/v
? Конкурент Rust?

★★★★★

Последнее исправление: menangen (всего исправлений: 1)
Ответ на: комментарий от anonymous

Я, казалось бы, собрал, сборка отработала с экзиткодом 0, но бинаря в рабочей директории не появилось, нет его ни в /tmp, ни где-либо ещё.

WitcherGeralt ★★
()
Ответ на: комментарий от WitcherGeralt

бинарь называется vc первый, потом им нужно собрать компилер, который уже на V он будет называться v. По сути он весь код выворачивает в Си и его компилит. у меня собрался только 1 пример с подсчетом слов получается вот такой вот нагенеренный файл https://pastebin.com/52bHRd4d

Он собирается и работает. в валгринде чисто.

Репл работает так же. Создает файл /var/tmp/vlang0.0.12/vrepl.v компилит его своей V, создает vrepl.с и потом компилит уже gcc.

anonymous
()
Ответ на: комментарий от anonymous

Первый я собрал, а второй первым не собирается. Короче, до меня таки дошло. Это нифига не компилятор, а транспиллер, который потом компилятор запускает.

Оно создаёт v.c во временной директории, а потом почему-то забивает и не компилит его, то же самое с repl. Видимо там захардкожен шланг, которого у меня в системе нет, но хз почему оно при этом не валится, а завершается с нулём.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от WitcherGeralt

потому что в случае ошибок по большей части он делает никуя пример из конпелятора.

  string ss = _STR("%.*s 2>&1", cmd.len, cmd.str);

  int _ = 0;

  os__FILE *f = os__popen(ss);

  if (isnil(f)) { 
// ай хорошо

    ;
  };

  char buf[MAX];

  while (fgets(buf, MAX, f) != NULL) { // ай хорошо

anonymous
()
Ответ на: комментарий от WitcherGeralt

Видимо там захардкожен шланг

Реальне

  string fast_clang = tos2("/usr/local/Cellar/llvm/8.0.0/bin/clang");

  string args = array_string_join(a, tos2(" "));

  string cmd = (os__file_exists(fast_clang))
                   ? (_STR("%.*s -I. %.*s", fast_clang.len, fast_clang.str,
                           args.len, args.str))
                   : (_STR("clang -I. %.*s", args.len, args.str));

  if (c->show_c_cmd || c->is_verbose) {


    ;
  };

  string res = os__system(cmd);
anonymous
()
Ответ на: комментарий от anonymous

На хрена тогда донат собирать, если он работает? Неспеша пилил бы в свободное время. А теперь вот перед «акционерами» отчитываться и всему миру доказывать, что не «3.14...дабол». Уже второй проект из Go с дурной славой (первым был какой-то грек плагиатор со своим инновационным фреймворком; тоже с кучей звёзд).

BondJamesBond
()

чот толь лыжи не едут ... а лямбды или просто нестед функции у него есть? Можно вообще функцию из функции вернуть?

anonymous
()

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

anonymous
()

Жеское нинужно. Лучше бы существующие языки улучшали.

Deleted
()
Ответ на: комментарий от guixoid

Сколько уже можно ограничивать программиста, когда в последний раз появлялся ЯП где позволяли что то сделать?

Deleted
()
Ответ на: комментарий от guixoid

как писать код, который не использует глобавльное состояние? Допустим, есть клиент, который сделал покупки. Тебе нужно сохранить список покупок и потом делать с ним какие то операции. Как ты это сделаешь? А если у тебя сто таких покупателей со своими покупками?

anonymous
()
Ответ на: комментарий от anonymous

Создать структуру State и хранить в ней информацию о клиенет и его покупках ( использовать хэш таблицу ).


struct State {
    users: LinkedHashMap<UserId,UserData>
}

fn main() {
   let mut state = State::new();
   
   loop {
      work(&mut state);
   }

}

Очевидно есть более изящные методы это сделать,те же трейты.

guixoid
()
Ответ на: комментарий от guixoid

это очевидный костыль, да. Но он подойдет, когда у тебя маленькая кодовая база. А проектам на миллионы строк что делать? Да даже 10-20 классов уже офигеют от такого подхода. Только из-за отсутствия глобальных переменных язык не взлетит.

anonymous
()
Ответ на: комментарий от WitcherGeralt

`println(1+1)` работает? На playground'е всё ОК, а в комментах пишут, что с этим компилятором это fatal error или что-то такое.

anonymous
()
Ответ на: комментарий от anonymous

Вчера у меня на чём-то таком repl вальнулся, но хз, автор за ночь уже 40 коммитов зафигачил, мог и исправить.

WitcherGeralt ★★
()
Ответ на: комментарий от anonymous

За проекты в миллионы строк где логика связана на глобальные переменные нужно вырывать руки и яйца

anonymous
()
Ответ на: комментарий от anonymous

Работает. Проблема всей этой преальфы что там все захардкожено. И пути тоже. А еще иногда не проверяется результат функций. Поэтому записать в нулл там запросто

anonymous
()

О, да это же те самые люди, написавшие альтернативный легкий клиент для Slack и зажавшие исходники.

TheKnight ★★★
()
Ответ на: комментарий от KillTheCat

Очевидно у RazrFalcon не заработало.

Deleted
()
Ответ на: комментарий от KillTheCat

Если под «работает» подразумевает окно с двумя кнопками - то да.

RazrFalcon ★★★★★
()
Ответ на: комментарий от KillTheCat

Варианты?

Qt и GTK тебе мало? Хлебом не корми, лишь бы поюзать хипстерскую маргинальщину.

Есть ещё это и даже это.

WitcherGeralt ★★
()
Последнее исправление: WitcherGeralt (всего исправлений: 1)
Ответ на: комментарий от anonymous

Проблема этой преальфы в том, что нет ни единого теста, не говоря уже о комментариях в коде. Это мусор, а не проект.

anonymous
()
Ответ на: комментарий от anonymous

Проблема этой преальфы в том, что нет ни единого теста, не говоря уже о комментариях в коде. Это мусор, а не проект.

Ну она сама себя собирает. Уже неплохой тест.

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

Нам из студии докладывают 1, что у такого безопасного ЯП (конкурента Rust, на минуточку) - течка: 3.9MB при компиляции «hello world», 15.6MB при сборке себя.

anonymous
()
mut m := map[string]int{} // Only maps with string keys are allowed for now 

хм...вот так сразу только вышел и уже закапывать нужно.

anonymous
()
Ответ на: комментарий от anonymous

Итак, у нас дикие утечки, map'ы поддерживают только строковые ключи и вот такой ржачный REPL.

fn run_repl() []string {
	println('V $Version')
	println('Use Ctrl-D to exit')
	println('For now you have to use println() to print values, this will be fixed soon\n')
	file := TmpPath + '/vrepl.v'
	mut lines := []string
	for {
		print('>>> ')
		mut line := os.get_line().trim_space()
		if line == '' {
			break
		}
		// Save the source only if the user is printing something,
		// but don't add this print call to the `lines` array,
		// so that it doesn't get called during the next print.
		if line.starts_with('print') {
			// TODO remove this once files without main compile correctly
			source_code := 'fn main(){' + lines.join('\n') + '\n' + line + '}'
			os.write_file(file, source_code)
			mut v := new_v( ['v', '-repl', file])
			v.compile()
			s := os.system(TmpPath + '/vrepl')
			println(s)
		}
		else {
			lines << line
		}
	}
	return lines
}
anonymous
()
Ответ на: комментарий от anonymous

if line.starts_with('print') {

да, я с этого сразу поржал. а все потому что ему нужно корректное выражение, которые воводит что-то в консоль и которое он может вставить в сишный исходник при исполнении.

anonymous
()
Ответ на: комментарий от anonymous

Кстати, как в этом дрянном синтаксисе

map[string]int{}

будет выглядеть дженерик из трёх и более типов?

anonymous
()

For readability, ⟨⟩ are allowed instead of <>. vfmt automatically replaces <> with ⟨⟩.

Убивал бы нах такой форматтер, который автоматически символы меняет

anonymous
()
Ответ на: комментарий от anonymous

Еще шедевр с реддита:

>>> with open('test.v','w') as f:
...   f.writelines(["fn main() {\n"])
...   f.writelines(["println('Hello World')\n"] * 1200000)
...   f.writelines(["}\n"])
... 
$ ./v test.v 
pass=2 fn=`main`
panic: test.v:50003
more than 50 000 statements in function `main`
exit(): 
anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от anonymous

Ну, это ж начало. Для старта пойдёт. Концепция понятна, и, вроде, не плоха. Уже исходники Doom, вроде, транслировали в V, и всё работает.

menangen ★★★★★
() автор топика
Ответ на: комментарий от menangen

если ты про это https://github.com/vlang/doom

то нет, не портировали. Портировали только 1 файл с описаловым действия врагов. Ни логики, ни структуры, ни самой игрульки нет. И нет, не работает.

Хотя может я просто плохо искал исходники.

Концепция понятна

А мне вот нет. Это просто учебный язычок с транляцией в Си.

на его фоне и Вала и Ним выглядят куда кучерявее.

anonymous
()
Ответ на: комментарий от anonymous

кстати даже этот файл не компилится уже на стадии трансляции.

pass=1 fn=`atoi`
panic: p_enemy.v:28
function names cannot contain uppercase letters, use snake_case instead
exit():  
anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.