Pull to refresh

Comments 14

Не надо фантазировать, опишите ваш синтаксис как грамматику.
Синтаксиса как такового нет, есть "творческий поиск". Выяснение, возможно ли такое в принципе без противоречий и в как можно более удобном для человека виде.
Так в Python же уже есть тип "кортеж" и реализация операций с ним… И там после x=(1, 2, 3) х окажется равным таки (1, 2, 3), а x, = (1, 2, 3) вообще некорректно, только лишь x, y, z = (1, 2, 3) корректно. Наверное, у них были причины сделать так. На мой взгляд, остальные варианты для x=(1, 2, 3) совсем уж неочевидные.
Кроме присваивания, есть и другие операции, и в этом основная сложность — как сделать интуитивно понятно для человека и в то же время синтаксически универсально для компилятора?
Синтаксически универсально не получится просто потому, что нет даже логически универсального поведения. Что вы сами и продемонстрировали в статье. Следовательно, в каждом случае использования придется явно указывать требуемую логику операции. Ну и чем это отличается от поэлементного применения операции? А раз так, то и практически все операции над кортежом безсмысленно делать на уровне семантики языка.
в случае с python3 второй вариант можно записать как x, *_ = (1, 2, 3)
UFO just landed and posted this here
В том то и дело, что "кортеж нулевой длины" и "void" это по сути одно и то же, просто пришли к этим понятиям разными путями.
А тип int по умолчанию — это древнее ископаемое правило, действующее только в Си; не стоит рассматривать его как эталон правильности:)
Кстати, в С/С++ таки можно вернуть void явно, и я этим на практике пользуюсь — когда нужно при выходе из функции сделать какие-то действия. Например так:
void foo() { /*...*/ }
void bar() {
  //...
  return foo();
}
UFO just landed and posted this here
В… Rust предусмотрена специальная метапеременная "_" ...

Я бы не назвал это метапеременной, это просто часть синтаксиса сопоставления с образцом.
_ (как и .., ref, mut и т.д.) работает только в контексте образца, иначе:
fn main() {
    fn f_ab() -> (u8, u8) { (1, 2) }
    let mut a;
    (a, _) = f_ab();
    println!("{}", a);
}

руганется:
<anon>:6:9: 6:10 error: unexpected token: `_`
<anon>:6     (a, _) = f_ab();
                 ^
Какой невнятный поток сознания!
В чём смысл этой статьи? Собрать в кучу все собственные непонятки и осчастливить ими человечество?
Я пользуюсь Хабром как дискуссионной площадкой.
Мне интересна эта тема; все изложенное — это действительно лишь мои мысли (о чем честно сказано в начале статьи), если вам она неинтересна — никакой практической пользы вы из этого не извлечете, никаких новых технологий не освоите. Для тех кому этом интересно — это возможность обдумать и обсудить предложенные идеи и предложить свои:)
Ды-дыщ :-)
Если честно, то после прочтения у меня стойкое ощущение что вы вообще не понимаете о чем ведете рассуждения.

Смотрите… даже отбросив ваши весьма пространные рассуждения про "тип/не тип". Когда я читаю
Но уже сейчас ясно одно: если и давать такую возможность программисту, то указание способа взаимодействия кортежей должно делаться явно.
мне не смешно ни разу. И у меня возникает вопрос: а о чем же вы так радостно вещали «пять минут назад»?! Вы реально сами не понимаете? Т.е. вам «все понятно и очевидно» с x = {1,2,3}, и даже с {i,j,k} = 0, и тут раз — внезапно — «должно делаться явно». Серьезно? Т.е. вот эта ваша фраза
По крайней мере, можно принять как пожелание, чтобы кортежи из одного значения свободно конвертировались в эти самые значения, и наоборот.
она о чем вообще тогда?

А учитывая то, что вы, судя по всему, еще и не делаете особой разницы между — имхо — важными в такого рода построениях вещами, то у меня вопрос: ну ок… «дискуссионная площадка» — все дела. Дискуссия-то о чем? Вы пытаетесь изобрести синтаксис? Ну тогда, как вам уже говорили, грамматику в студию. Обсуждать такую тему «на пальцах» — себе дороже.
Вы изобретаете синтаксис языка PL/I. Только осталось ещё добавить обобщённый цикл DO.
Sign up to leave a comment.

Articles

Change theme settings