Здравствуйте, Ops, Вы писали:
vsb>>Это уже не абстракция, а конкретный язык программирования. А я про абстрактное понятие говорю. В С рефлексии, например, нет.
Ops>Так в С и туплов нет.
Ну в данном случае речь о записях.
vsb>>Кроме того если ты переупорядочишь поля в объявлении записи, код (написанный без хаков) будет работать как работал.
Ops>Да, есть такое. В чем разница с туплом с именованными элементами?
В том, что с туплом ты пишешь код вида `let (a, b) = tuple`, где деструктуризация идёт по позициям. Именованные элементы там или нет, значения не имеет, пока речь о кортеже. И если ты поменяешь порядок полей, то семантика кода изменится там, где не используются именованные элементы.
Если ты работаешь с записью через рефлексию и твой код зависит от порядка полей в записи, значит это уже не запись, а такой же кортеж.
Ops>Нельзя, наверное, в отрыве от языка рассматривать. Абстракция-то из практических нужд родилась, а не ради богословских споров.
Ну суть в том, что у разных языков программирования имеются общие черты. Поэтому и выделяют какие-то сущности на более абстрактном уровне. Массивы, записи есть практически в каждом ЯВУ. Кортежи, вот, далеко не в каждом. Понятно, что если речь идёт о C, то порядок полей в исполняемом файле будет таким же, как объявлен в struct и если знать логику выравнивания и размеры типов, можно даже к этим полям достучаться по индексу. Но это уже особенности реализации этой сущности в языке С. В Java порядок полей спецификацией не гарантируется, например.