valuetuple или tuple?

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

2 лайка

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

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

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

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

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

        void p1((int, int) t)
        {

        }

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

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

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

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

1 лайк

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

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

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

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

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

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

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

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

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

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

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

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

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