Знаете, меня, например, бесят новости, что новое железо/программы прекращают поддержку Win7 и требуют 8, 8.1 и 10. Мне проще не использовать это или искать нелегальные портированные версии. Тут - то же самое. На XP нельзя поставить что-то старше 4.0, во всяком случае без шаманства, но время идёт и место XP может занять семёрка. Так что я поступлю так:
Верно, но не всегда можно её обновить. Вот выйдет, скажем, .NET 8 версии без поддержки 7 и всё. Многие не хотят ставить что - то новее 7. А ничего, что за это ещё и платить надо. За копию. Вы ведь не хотите вирусов, нам подслушки и от РКН хватает за глаза.
Конечно, в компьютерном классе школы, к примеру. Там что сочли нужным поставить, то и стоит. Может, железо старое и не позволяет перейти на семерку даже. Или какие-то учебные программы, которые не работают на семерке из-за ограниченной поддержки ей DOS-режима.
Такое может быть. Я, например, встречал такое, что вместо WinXP ставили 10. Там мониторы на ЭЛТ и встроенный в системник дисковод для дискет(!). Как итог - загрузка 15 минут, выключение 10.
Таким, что не во всех версиях .Net Framework есть поддержка System.ValueTuple. Если точнее, то он есть в Framework 4.7+. В более низких версиях требуется пакет System.ValueTuple, который можно установить через менеджер пакетов NuGet.
В пакете с .NET есть утилита ngen.exe. Написано, что она генерирует машинный код для .NET-программы. Можно ли с её помощью отвязаться от .NET, просто скомпилировав программу?
Вот еще пример на многократное структурное сравнение разных кортежей из 3-х элементов. У меня разница в Release варианте иногда достигает 450 (!) раз. Конечно, это синтетика, но отчетливо показывает потенциал статической ValueTuple для некоторых алгоритмов.
uses
System.Diagnostics;
const
Cycles = 10000000;
type
MyTuple1 = System.Tuple<integer, real, char>;
MyTuple2 = System.ValueTuple<integer, real, char>;
begin
var sw1 := Stopwatch.StartNew();
var a1 := new MyTuple1(123, 1.23, 'a');
var b1 := new MyTuple1(123, 1.23, 'a');
loop Cycles do
if a1 = b1 then;
sw1.Stop();
Println('Tuples =', sw1.ElapsedMilliseconds / 1000);
var sw2 := Stopwatch.StartNew();
var a2 := new MyTuple2(321, 3.21, 'z');
var b2 := new MyTuple2(321, 3.21, 'z');
loop Cycles do
if a2 = b2 then;
sw2.Stop();
Println('ValueTuples =', sw2.ElapsedMilliseconds / 1000);
Println($'Ratio = {sw1.ElapsedTicks/sw2.ElapsedTicks :f2}');
end.
У меня предложение переписать ValueTuple на Паскаль. Кто возьмётся? ILSpy в помощь.
Минусы. Это будет несовместимо ни с каким Tuple, использованным в C#. Если какая-то функция стандартной библиотеки будет работать с Tuple, то нельзя будет в ней использовать наши кортежи.
Второе предложение - прошу высказаться остальных участников. Как-то чудодейственным волшебным образом сделать две версии компилятора - для WinXT и для современных Win.
Третье предложение. Оставить всё как есть.
Четвертое предложение. Выкинуть Tuple и оставить только ValueTuple. Удалить с сайта версию с NET 4.0, поскольку она всё равно будет не нужна и отвратить от нас от 40 до 60% пользователей старых компьютеров. И еще 10% уйдут позже за счет того, что они будут приносить к друзьям exe, те будут запускать, код будет валиться с ужасающе-непонятным сообщением об ошибке.
Пятое предложение. Подождать 2-3 годика когда аудитория WinXP и предустановленной платформы .NET версии ниже 4.7 сократится до минимума процентов в 5. Вполне неплохое кстати. Мы сидели на NET 2.0 года 4 - и ничего, потом перешли на 4.0 со всеми плюшками
Шестое предложение. Сделать новвый крутой Tuple с другими скобками - скажем, (. .). И сделать неявное преобразование одного к другому (по-моему, сделано)
Как насчёт сделать версию для старый компьютеров, которая больше не поддерживается (то есть так что сейчас), но её можно скачать. А новая - только для последней версии .Net ?
К сожалению, там весь компилятор надо для этого перелопачивать. Поддержка двух версий - та еще задача и кошмар для разработчика. Ну и не забываем, что бинарники вообще не будут совместимы между собой. Например, dll
Если получится реализовать какие-то ValueTuple так, чтобы они не затронули того что есть (вообще никак не затронули) - почему нет? Если что-то затронут - это потянет за собой цепь событий, как костяшки домино падающие и тогда - упаси бог от такого шага!
Поддерживать разработчикам две разных версии - это непосильная задача, когда в одной проблем выше крыши.
Блин поминальный! Ну может кто-нибудь сказать, почему когда одна группа людей “по самое немогу” озабочена продвижением языка, другая упорно его пытается куда-то затолкнуть, гарнируя это все “благими побуждениями”? Народ, у Вас что, совершенно нет понимания конечной цели? Или она у Вас настолько своя, что даже непонятна какова?