Re[5]: tuple vs record
От: vsb Казахстан  
Дата: 02.02.20 22:35
Оценка:
Здравствуйте, Ops, Вы писали:

vsb>>Это уже не абстракция, а конкретный язык программирования. А я про абстрактное понятие говорю. В С рефлексии, например, нет.


Ops>Так в С и туплов нет.


Ну в данном случае речь о записях.

vsb>>Кроме того если ты переупорядочишь поля в объявлении записи, код (написанный без хаков) будет работать как работал.


Ops>Да, есть такое. В чем разница с туплом с именованными элементами?


В том, что с туплом ты пишешь код вида `let (a, b) = tuple`, где деструктуризация идёт по позициям. Именованные элементы там или нет, значения не имеет, пока речь о кортеже. И если ты поменяешь порядок полей, то семантика кода изменится там, где не используются именованные элементы.

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

Ops>Нельзя, наверное, в отрыве от языка рассматривать. Абстракция-то из практических нужд родилась, а не ради богословских споров.


Ну суть в том, что у разных языков программирования имеются общие черты. Поэтому и выделяют какие-то сущности на более абстрактном уровне. Массивы, записи есть практически в каждом ЯВУ. Кортежи, вот, далеко не в каждом. Понятно, что если речь идёт о C, то порядок полей в исполняемом файле будет таким же, как объявлен в struct и если знать логику выравнивания и размеры типов, можно даже к этим полям достучаться по индексу. Но это уже особенности реализации этой сущности в языке С. В Java порядок полей спецификацией не гарантируется, например.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.