LINUX.ORG.RU

Еще одно маленькое украшение в синтаксисе Rust

 


0

8

Скоро указывать включение правой границы в диапазонах станет еще удобнее!

Было:

#![feature(inclusive_range_syntax)]

fn main() {
  for i in 1...4 {
    print!("{},", i);
  }
}

=> 1,2,3,4,

Станет:

#![feature(inclusive_range_syntax)]

fn main() {
  for i in 1..=4 {
    print!("{},", i);
  }
}

=> 1,2,3,4,

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

★★★★★

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

3 элемента с хвоста?

Нет, это три элемента с начала. Тебе же постом выше показали что это [from..to). Если не написал from то вместо него будет начало. Если не написал to, то вместо него будет конец. А если оба не написал &a[..] то будут все элементы (от начала до конца).

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

Это все конечно хорошо, но никто же не будет это добавлять в язык. А значит и обсуждать нечего.

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

Ну прости, не научился еще парсить раст с полувзгляда. Для такой фигни не нужен отдельный синтаксис, кстати. Опять вы изобрели квадратное колесо.

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

Кому очень надо - сделает стайлгайд для своего проекта с

macro_rules! irange {
    ($start:expr, $stop:expr) => {
        $start..=$stop
    }
}
и поедет, а ты можешь дальше шашечки на ЛОРе гонять.

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

А как тогда будет выглядеть это

Не знаю. А что это? Типа питоновского слайса? Можно так

let b = &a[from 1];
let b = &a[to 3];

Ну и основная помеха в том что from, to и till не ключевые слова, так что их использовать нельзя. А еще синтаксис 0..10 уже есть и стабилен, сейчас обсуждают только добавку к нему в виде 0..=10

Я просто предложил невырвиглазное (на мой вкус) решение проблемы «хотим различать два вида диапазонов». А если конкретно о расширении конструкции 1..10, то вариант 1..=9 мне кажется вполне годным. Можно ещё 1..<=9, но особой разницы нет.

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

А если я скажу, что раньше было две формы одной сущности «две точки»: с ещё одной точкой и без неё?

А три ноги это то же самое, что две ноги, только плюс еще одна нога.

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

Да, это слайсы. Если бы были from и to вместо точек то может и хорошо было бы, но такое решение надо было принимать с самого начала, теперь уже поздно. Graydon Hoare, автор раста (сейчас в яблоке свифт делает), похоже очень не любит ключевые слова, поэтому в расте исторически так сложилось что все что можно делают символами а не словами.

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

А три ноги это то же самое, что две ноги, только плюс еще одна нога.

3=2+1
Ну да.

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

Graydon Hoare, автор раста (сейчас в яблоке свифт делает), похоже

Инопланетный гость
Летит издалека
Инопланетный гость
Не знаю я пока
Что ты мне принесешь
И сколько бы я дал
Чтоб ты бы поскорее
Подальше улетал!
bread
()
Ответ на: комментарий от dave

Ух ты, здорово.

До этого приходилось писать функцию enumerate:

enumerate =: ,.~ i.@:#

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

D и Vala добавляют какие-то фичи платформы, но не выдумывая смрад типа fn := и прочего непонятного

Хочешь сказать, в D мало закорючек, которых нет в «священном Си»? В голову приходят, например, операторы типа таких: >>>=.

Так-то я соглашусь, что в среднем код на D выглядит «чище», но синтаксис они тоже расширяют (и это нормально)..

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

Хорошо, вот сейчас добавят читабельный вариант for i...10

Тут справедливо жалуются, что количество точек не бросается в глаза. Равно всё-таки заметнее. Мне второй вариант больше нравится, хотя на самом деле более-менее пофиг.

Чем больше я узнаю о всяких новых непродакшен языках

Пишу на расте за деньги. (:

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

0..10 это итератор, у массива тоже есть итератор. for умеет ходить по любому типу у которого есть итератор, и не надо придумывать специальный синтаксис для каждого случая.

Так они все равно не требуют итераторы явно объявлять типа Iterator(a, b, true), поэтому тут уже есть специальный синтаксис, все эти .., ..=.

Их просто функциональщики покусали.

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

Если очень хочется можно нарисовать функцию range как в питоне, например так:

fn range<T>(begin: T, end: T) -> std::ops::Range<T> {
    begin..end
}

fn main() {
    for i in range(1, 10) {
        println!("{}", i);
    }
}

Или можно макрос сделать:

macro_rules! range {
    ($end: expr) => (0..$end);
    ($begin: expr, $end: expr) => ($begin..$end);
}

fn main() {
    for i in range!(10) {
        println!("{}", i);
    }
}
pftBest ★★★★
()
Ответ на: комментарий от DarkEld3r

Мне второй вариант больше нравится

Против него есть аргумент что синтаксис получится не симметричный. В паттерн матчинге уже есть троеточие и оно по смыслу делает то же самое что и ..= У людей будут вопросы почему сделано не одинаково

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

В паттерн матчинге уже есть троеточие и оно по смыслу делает то же самое

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

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

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

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

Было: ...
Станет: ..=
... и ..= доступны только в ночной сборке

Кто-то врёт же!

Только с точки зрения людей, не пользующихся ночной сборкой.

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

Госпади они это серьёзно? Тут ведь даже не в аскиарте дело, а в том что люди то ли жидятся написать пару лишних строк то ли просто язые им не дает аналога итераторов. И они это затыкают такими затычками

ckotinko ☆☆☆
()
Ответ на: комментарий от bread

Тут беда не в том что колесо квадратное а в том что в расте специально запилили отдельный вид колёс для самокатов, для велосипедов, для колясок, для коней педальных и т.д.

Ну реально, АСТАНАВИТЕСЬ.

Люди пилят синтаксис для написания однострочников. В одно время этим дажепишались: мол на расте я могу в одну строку разбить строку и получившиеся подстроки поколбасить и потом еще поколбасить и еще...

Зачем? Такое ощущение что раст нужен только вебмакакам и бэкэндщикам из веба

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

Угу, скучающим макакам. Нормальные макаки пишут на похапе и не жужжат. А эти только онанируют на закорючки.

bread
()

Мне кажется, у них просто нет чувства вкуса.

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

Людей, которые сравнивают синтаксис языков разных уровней нужно в клинику отправлять.

Естественно, что в языках с GC не будет синтаксических конструкций для управления временем жизни объектов.

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

то ли просто язые им не дает аналога итераторов

И ты, разумеется, сможешь объяснить эту мысль. Так?

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

Людей, которые сравнивают синтаксис языков разных уровней нужно в клинику отправлять.

Давай начнём с тех, кто начинает нести ерунду не вникая в контекст.

Я говорил безотносительно синтаксиса лайфтаймов. D всё равно выглядит лаконичнее/«чище» благодаря исключениям и неявному приведению типов и подобным «мелочам». Ну и в целом ощущение, что «сахара» побольше. И прежде чем ты начнёшь снова спорить: Rust мне нравится больше.

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

Я не вас имел ввиду, а автора сообщения, на которое вы отвечали. Криво сформулировал.

В D мне совсем не нравится foreach. Питоновский for in приятнее.

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

Нормальный синтаксис - это

(1..4]

[1..4)

(1..4)

[1..4]

Остальное - **ня, особенности в реализации на Rust, поскольку здесь это как всегда сделано максимально нечитабельно и просто уродливо.

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

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

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

И в каком ЯП есть твой «нормальный синтаксис»? Я подозреваю, что в разряд уйни ты сейчас записал очень многие ЯП.

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

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

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

Точно не на тебя, на троллей и прочих военов Интернета).

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

[start..stop) Тогда уж. Но этого нет и вроде бы не будет из-за ограничений парсера.

Конкретнее про ограничения сможешь? Ссылку или что-нибудь?

Поэтому что с наукой парсеростроения я знаком лишь в теории. Но что такое КС-грамматика представляю. И ту же БНФ для диапазона [start..stop) вроде как придумать совсем несложно.

Так что за ограничения парсера?

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