valuetuple или tuple?


#1

Пожелание чтобы в качестве встроенного (по умолчанию) кортежа применялся стандартный тип system.valuetuple (record) вместо system.tuple (class). Это позволит уменьшить временные издержки на создания объекта кортежа (тип record размещается в стеке, а тип class создается в куче).


#2

Вообще это скорее всего не мало сломает совместимость с C#, это разве что директивой.


#3

Но ведь в C# нет встроенных кортежей. Какая тут может быть совместимость?


#4

Разве? А ну ка…


#5

Перепроверил - да, в новой версии они таки появились. Но тем не менее, как это может повлиять на совместимость?


#6

Ну смотрите, в .dll написанной на C#:

        void p1((int, int) t)
        {

        }

Чтоб вызвать это из паскаля - надо будет вручную писать, какой тип мы используем.

Насчёт новизны версии - я что то сомневаюсь, давно говорили о том как в C# работают кортежи, а значит ещё тогда это было.


#7

А, стоп, что?!


#8

Там мог быть именно тип кортежа(в .NET), он там с 4.0 версии.


#9


#10

Да, а паскале ссылочные по умолчанию:

Что ж, это, наверное, уже можно считать проблемой?


#11

Значит, теперь не просто вопрос эффективности, но и совместимости… Вдвойне приятно. :smile:


#12

Ну на счет совместимости не знаю, хотя можно и идти в ногу C# (раз уж они ввели новый тип, аналогичный существующему, но не как класс (потомок system.object), а уже как тип запись (потомок system.valuetype). А вообще ещё мне хочется видеть именованные поля в кортеже. Такая возможность в новой версии С#. Я так понимаю, что такая возможность в C# реализована на уровне препроцессора. Такая возможность (поддержка именованных полей) как мне кажется сделает более удобным применение кортежей, а на текущий момент зачастую приходится стоять перед выбором: кортеж или запись, и не всегда ответ очевиден как хотелось бы. В некоторых случаях кортеж бывает удобнее, но зачастую чего-то в нем не хватает (какой-то он недоделанный что-ли).


#13

Например, в нем может быть не более 7 полей (ограничение реализации).


#14

У нас кортежи появились раньше чем в c#. Да, появление их кортежей сломало совместимость их с нами. Пока мы не можем понять, что с этим делать. Дело в том, что кортежи в cs не работают по моему с версии 4.6.2 и ниже. Поэтому что делать тем, у кого голый 4.0 или даже 4.6.1 - я ума не приложу


#15

Обновиться)))

Ну, ограничение это только в паскале действует…


#16

А если на ХРюше?


#17

На сколько я помню, у @RAlex .Net 4.7 прекрасно стала на XP.


#18

А зачем тогда сделали отдельный релиз Паскаля для старого .NET?


#19

Потому что она не становится на XP


#20

Это ограничение можно обойти - просто нужно реализовать. Четно говоря, мы не думали, что может понадобиться больше 7 полей