LINUX.ORG.RU
ФорумTalks

System programming language intended to replace C

 


0

3

Кто там говорил, что языков программирования слишком много?

Эпиграф

http://ziglang.org/

Zig is a system programming language which prioritizes optimality, safety, and readability.

Feature Highlights

  • Import .h files and directly use C types, variables, and functions.
  • The Zig Standard Library does not depend on libc.
  • Maybe type instead of null pointers.
  • A fresh take on error handling that resembles what well-written C error handling looks like, minus the boilerplate and verbosity.
  • Order independent top level declarations.
  • Debug mode optimizes for fast compilation time and crashing when undefined behavior would happen.
  • Release mode produces heavily optimized code. What other projects call «Link Time Optimization» Zig does automatically.
  • Friendly toward package maintainers. Reproducible build, bootstrapping process carefully documented. Issues filed by package maintainers are considered especially important.
  • Easy cross-compiling.
  • There is no preprocessor. Instead Zig has a few carefully designed features that provide a way to accomplish things you might do with a preprocessor.
  • Generic data structures and functions.
★★★★★

Последнее исправление: greenman (всего исправлений: 2)

There is no preprocessor. Instead Zig has a few carefully designed features that provide a way to accomplish things you might do with a preprocessor.

А пример есть? Хочется сравнить с D. Они ведь в том числе и на это сравнение напрашиваются?

greatperson
()

Прикольно что типы после имени. Но точки с запятой на месте, это плохо.

There is no preprocessor. Instead Zig has a few carefully designed features that provide a way to accomplish things you might do with a preprocessor.

Есть константы времени компиляции, было бы не плохо чтобы ещё и переменные времени компиляции были.

А лямбды есть?

Bad_ptr ★★★★★
()
Последнее исправление: Bad_ptr (всего исправлений: 1)

Captain: Take off every 'ZIG'.

Captain: For great justice.

CARS ★★★★
()

На первый взгляд, попытка сделать упрощенный Rust.

tailgunner ★★★★★
()

Странные ребята. Раз уж решили писать идентификатор: тип, то что это за функция() -> тип? Где логика?

quwy
()

Zig code! 0/

Я вижу костры из Си,
Я слышу вотчдогов лай
Коли скажет один Zig
Миллионый ответят - compile!

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

Раз уж решили писать идентификатор: тип, то что это за функция() -> тип?

Share the pain!

Manhunt ★★★★★
()

Больше изыков хороших и разных

Пусть разцвитают сотни сакур

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

Раз уж решили писать идентификатор: тип, то что это за функция() -> тип? Где логика?

Астрологи объявили неделю Rust. :)

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

Если бы функции объявлялись так, тебе было бы легче?

let fun: (arg1: ArgTyp1, arg2: ArgTyp2, ...) -> RetTyp = {
  // function body
}

Собсно, объявление функции от объявления переменной отличается тем, что помимо своего типа функция ещё указывает имена формальных параметров.

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

При чем тут параметры? У них в одном месте тип от идентификатора, к которому этот тип относится, отделяется двоеточием, а в другом случае — стрелкой. В этом смысле function_name(param: param_type) и return_type ничем не должно отличаться от variable_name и variable_type. В язык просто так введена лишняя сущность.

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

Разрабочики из Галичины?

Судя по названию языка москвичи палятся

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

У них в одном месте тип от идентификатора, к которому этот тип относится, отделяется двоеточием, а в другом случае — стрелкой

Нет, ты не прав. Распишем мой предыдущий пример с использованием оригинального синтаксиса:

fn fun(arg1: ArgTyp1, arg2: ArgTyp2, ...) -> RetTyp {
  // function body
}

Идентификатор здесь — это fun, а его тип: (ArgTyp1, ArgTyp2, ...) -> RetTyp (заметь, что имена формальных параметров в тип не входят). Т.е. fun — это функция (отображение) из множества ArgTyp1 x ArgTyp2 x ... в множество RetTyp. Если же следовать твоей логике, то мы имеем идентификатор fun(arg1: ArgTyp1, arg2: ArgTyp2, ...), который имеет тип RetTyp, что совершенно неверно.

В язык просто так введена лишняя сущность.

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

theNamelessOne ★★★★★
()

Что с типами?

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

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

Ну так параметры отображаются на множество допустимых значений, и возвращаемый функцией результат также отображается на множество допустимых значений.

Т.е. fun — это функция (отображение)

На тот факт, что fun — это функция, указывает ключевое слово fn. Стрелка — лишняя.

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

Ну так параметры отображаются на множество допустимых значений, и возвращаемый функцией результат также отображается на множество допустимых значений.

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

Стрелка — лишняя.

Не более лишняя, чем двоеточие в данном случае.

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

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

Так вот можно было описать и типы параметров и возвращаемого значения (с помощью двоеточий), и тип функции (с помощью слова fn). Однако вместо этого тип функции и тип возвращаемого значения слеплены в клубок, и ради этой каши введена новая закорючка (->).

Manhunt ★★★★★
()

Обсуждение на Reddit с участием самого автора языка. В основном обсуждают, что Rust – бебебе. При этом автор Зиги участвует в разработке Piston (либа для игрушек на Rust).

In short, Rust is sufficiently complicated that you can fall into the same trap as C++ where you spend your time debugging your understanding of the programming language instead of debugging your application.

Типа: «Раст достаточно сложный язык, и можно попасть в ситуацию как с крестами: дебажишь своё понимание языка вместо того, чтобы дебажить свой код».

А тут он рассказывает, как начинал писать свой аудиоредактор. Сначала на Go + GTK – не понравилось, потом на C++ + Qt – не понравилось, потом на Rust + GLFW – опять не понравилось. Пост кончается тем, что он счастливо пишет на C++ в стиле «C с классами и шаблончиками» и не линкуется с libstdc++.

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

Пост кончается тем, что он счастливо пишет на C++ в стиле «C с классами и шаблончиками» и не линкуется с libstdc++.

теперь ему осталось открыть для себя ObjC.

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

он счастливо пишет на C++ в стиле «C с классами и шаблончиками» и не линкуется с libstdc++.

теперь ему осталось открыть для себя ObjC.

В ObjC есть шаблоны?

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

ну это тебе уже ObjC++ нужен, если такое интересует. но по-моему это изврат.

waker ★★★★★
()

Кто там говорил, что языков программирования слишком много?

Каждому разработчику по языку. Или даже по два. Некоторым — по морд..по три.

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

В очередной, N+1-й раз слышу (читаю) это заклинание.

Это не заклинание, это Полное имя Святого Грааля. Если ты когда-нибудь находил святой грааль в HoMM3, ты понимаешь, о чём я говорю.

Manhunt ★★★★★
()
Последнее исправление: Manhunt (всего исправлений: 1)

а в перформанс оно умеет или как обычно случается с новыми хипстерскими язычками-убийцами?

reprimand ★★★★★
()

Как-то маловато процентов в коде.

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

C++ в стиле «C с классами и шаблончиками»

зачем он тогда нужен если есть просто C?

Ради классов и шаблонов // К.О.

tailgunner ★★★★★
()

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

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

Извини, но fun в современном программировании отсутствует

Ну вот они бы и вернули.

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

Пост кончается тем, что он счастливо пишет на C++ в стиле «C с классами и шаблончиками» и не линкуется с libstdc++.

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

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

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

а что хорошего в типах после имени?

я такое в паскале видел, а паскаль отстой.

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

может же человек просто пользоваться тем, что ему надо и не пользоваться тем, что, по его мнению, overcomplicated

Получилось как обычно: он нагородил свою версию std. Обработка ошибок смешная: panic. Самого кода panic я не нашёл, но подозреваю там exit(1) какой-нибудь, исключений-то у него нет. И он такой пишет: вот на Rust я такой потратил много времени... А вот на написание своих шаблонных контейнеров значит время не жалко.

uuwaan ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.