Comments 14
Не надо фантазировать, опишите ваш синтаксис как грамматику.
+2
Так в Python же уже есть тип "кортеж" и реализация операций с ним… И там после x=(1, 2, 3) х окажется равным таки (1, 2, 3), а x, = (1, 2, 3) вообще некорректно, только лишь x, y, z = (1, 2, 3) корректно. Наверное, у них были причины сделать так. На мой взгляд, остальные варианты для x=(1, 2, 3) совсем уж неочевидные.
+1
Кроме присваивания, есть и другие операции, и в этом основная сложность — как сделать интуитивно понятно для человека и в то же время синтаксически универсально для компилятора?
0
Синтаксически универсально не получится просто потому, что нет даже логически универсального поведения. Что вы сами и продемонстрировали в статье. Следовательно, в каждом случае использования придется явно указывать требуемую логику операции. Ну и чем это отличается от поэлементного применения операции? А раз так, то и практически все операции над кортежом безсмысленно делать на уровне семантики языка.
0
в случае с python3 второй вариант можно записать как x, *_ = (1, 2, 3)
0
UFO just landed and posted this here
В том то и дело, что "кортеж нулевой длины" и "void" это по сути одно и то же, просто пришли к этим понятиям разными путями.
А тип int по умолчанию — это древнее ископаемое правило, действующее только в Си; не стоит рассматривать его как эталон правильности:)
Кстати, в С/С++ таки можно вернуть void явно, и я этим на практике пользуюсь — когда нужно при выходе из функции сделать какие-то действия. Например так:
А тип int по умолчанию — это древнее ископаемое правило, действующее только в Си; не стоит рассматривать его как эталон правильности:)
Кстати, в С/С++ таки можно вернуть void явно, и я этим на практике пользуюсь — когда нужно при выходе из функции сделать какие-то действия. Например так:
void foo() { /*...*/ }
void bar() {
//...
return foo();
}
0
В… 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();
^
+2
Какой невнятный поток сознания!
В чём смысл этой статьи? Собрать в кучу все собственные непонятки и осчастливить ими человечество?
В чём смысл этой статьи? Собрать в кучу все собственные непонятки и осчастливить ими человечество?
0
Я пользуюсь Хабром как дискуссионной площадкой.
Мне интересна эта тема; все изложенное — это действительно лишь мои мысли (о чем честно сказано в начале статьи), если вам она неинтересна — никакой практической пользы вы из этого не извлечете, никаких новых технологий не освоите. Для тех кому этом интересно — это возможность обдумать и обсудить предложенные идеи и предложить свои:)
Мне интересна эта тема; все изложенное — это действительно лишь мои мысли (о чем честно сказано в начале статьи), если вам она неинтересна — никакой практической пользы вы из этого не извлечете, никаких новых технологий не освоите. Для тех кому этом интересно — это возможность обдумать и обсудить предложенные идеи и предложить свои:)
0
Ды-дыщ :-)
Если честно, то после прочтения у меня стойкое ощущение что вы вообще не понимаете о чем ведете рассуждения.
Смотрите… даже отбросив ваши весьма пространные рассуждения про "тип/не тип". Когда я читаю
А учитывая то, что вы, судя по всему, еще и не делаете особой разницы между — имхо — важными в такого рода построениях вещами, то у меня вопрос: ну ок… «дискуссионная площадка» — все дела. Дискуссия-то о чем? Вы пытаетесь изобрести синтаксис? Ну тогда, как вам уже говорили, грамматику в студию. Обсуждать такую тему «на пальцах» — себе дороже.
Если честно, то после прочтения у меня стойкое ощущение что вы вообще не понимаете о чем ведете рассуждения.
Смотрите… даже отбросив ваши весьма пространные рассуждения про "тип/не тип". Когда я читаю
Но уже сейчас ясно одно: если и давать такую возможность программисту, то указание способа взаимодействия кортежей должно делаться явно.мне не смешно ни разу. И у меня возникает вопрос: а о чем же вы так радостно вещали «пять минут назад»?! Вы реально сами не понимаете? Т.е. вам «все понятно и очевидно» с x = {1,2,3}, и даже с {i,j,k} = 0, и тут раз — внезапно — «должно делаться явно». Серьезно? Т.е. вот эта ваша фраза
По крайней мере, можно принять как пожелание, чтобы кортежи из одного значения свободно конвертировались в эти самые значения, и наоборот.она о чем вообще тогда?
А учитывая то, что вы, судя по всему, еще и не делаете особой разницы между — имхо — важными в такого рода построениях вещами, то у меня вопрос: ну ок… «дискуссионная площадка» — все дела. Дискуссия-то о чем? Вы пытаетесь изобрести синтаксис? Ну тогда, как вам уже говорили, грамматику в студию. Обсуждать такую тему «на пальцах» — себе дороже.
0
Вы изобретаете синтаксис языка PL/I. Только осталось ещё добавить обобщённый цикл DO.
0
Sign up to leave a comment.
Кортежи в языках программирования. Часть 2