Да, спасибо. А в чём смысл двух практически одинаковых синтаксически сахарных конструкций в языке?
Вот те 20% преимущества в случае, если умеешь ими правильно пользоваться.
Дополнительный синтаксический сахар - это замусоривание языка. А без сахара - можно создать свой класс и им пользоваться.
Не придётся, если оформить эти кортежи в виде библиотеки. Тем более в C# есть уже свой System.ValueTuple<T, T2, ...>
. Так что по сути это по большей части только для Паскаля делается (в C# и так своя реализация таких кортежей есть). В итоге (если кортежи такие будут включены в язык) и Паскаль будет иметь свои средства для работы с значимыми кортежами. Не везде же держаться за совместимость с C#. Так, у нас, например, операторы могут быть обобщёнными, но в C# - нет. В C# мы не смогли бы использовать такие операторы, но ведь они реализованы в Паскале, не смотря на отсутствие их в C#. И ещё: не должен же быть Паскаль вторым C# - в этом нет смысла, он должен иметь (и уже имеет) свои особенности.
Это дополнительная работа, которая будет ложиться на плечи программиста. Если же эти средства будут в языке, то работать будет легче. Мы ведь не пишем, например, везде обычные свойства - где можно - пользуемся автосвойствами. Это тоже ведь синтаксический сахар. Но ведь, это же не
не правда ли? Да и свойства как таковые - тоже синтаксический сахар по сути - это ведь просто два метода геттер и сеттер. Примеров синтаксического сахара в Паскале можно ещё много привести, например:
- loop
- lock
- срезы
- методы расширения (ведь, это фактически просто статические методы, которое можно вызывать в формате
objectName.Method({parameters})
) - И так далее
В смысле включения его как стандартного?
Мне не кажется эта идея хорошей.
Да.
Ну, как выше уже было показано, значимые кортежи - более производительны. Можно включить в стандартный пакет пока только модуль, а синтаксический сахар (предложенный выше) сделать потом. Если Вы можете посоветовать - что доработать - с радостью.
-
Я не вижу никакой лучшей производительности значимых кортежей. 20% плюс-минус в разных ситуациях.
-
C#, на который вы ссылаетесь, не имеет двух сахарных конструкций для одной возможности, потому что это плохой дизайн языка.
-
В C# уже есть System.ValueTuple. Те, кому важна производительность, установят версию .NET 4.7 и будут ими пользоваться.
Конечно, меня радует, что вы сделали такую серьёзную попытку улучшить с вашей точки зрения язык - это - немало труда и мыслей. Но - в другое бы русло.
Ну, начинающим, думаю, возиться с установкой .NET 4.7 - не особо захочется. Поэтому я предложил свой вариант кортежей. Преимущество же Паскаля в том, что ничего устанавливать дополнительного не надо - открыл и пользуйся. Если этот модуль был бы стандартным, то это ёще раз поддержало этот принцип. И более того помогло бы лучше оптимизировать программы.
На счёт сахарных конструкций - как я сказал - не обязательно делать их сейчас (и вообще), я сделал короткие функции для создания кортежей (максимально похожие на Rec
).
Я мотивировку понимаю, но не разделяю её.
Начинающим (в некотором понимании этого слова) вообще неважна производительность в 20%
Те, кому важна, - не начинающие. И они конечно же поддерживают самые новые версии платформы.
Дополнительный модуль будет выглядеть странно особенно для тех, у кого уже стоит .NET 4.7 - а таких нашими стараниями всё больше - стандартная установка не под XP включает в себя NET 4.7. Так вот, под NET 4.7 будет целых три разновидности кортежей. Это, я думаю, для большинства будет выглядеть странно.
Ну, не всегда же это возможно технически. Насколько помню, на XP - .NET 4.7 - не идёт. И насколько помню пользователей на XP немало. Чтобы было проще - можно считать, что TuplesABC
- для всех тех, у кого .NET 4.7 просто не может быть установлен. А те - у кого .NET 4.7 - могут просто моим модулем не пользоваться. Я думаю, что не стоит оставлять за бортом тех, у кого XP. Все мы в одной команде - все мы пишем на PascalABC.NET.
Это - школы со старым парком компьютеров. Они точно не будут этим пользоваться.
Всё-таки я, несмотря на ваши ссылки, не увидел улучшенной производительности ValueTuple. Моя ссылка говорит о том, что они хуже, тест SunSerega - что они в 50% случаев на 20% быстрее, а воставшихся 50 - на 20% медленнее.
Ну, всё-же есть 20% преимущества,
Поэтому можно TuplesABC добавить как эксперементальный модуль.
Любой “экспериментальный модуль” замусоривает дистрибутив и, как следствие, попадает в готовый продукт. А установка пока что не предполагает возможности ставить такие экспериментальные модули только по желанию пользователя.
К моему и Вашему, как вижу, тоже сожалению. Полезная была бы возможность.
Именно так. Но это возможность не первостепенной важности, поэтому пока что в каждом конкретном случае разработчик самостоятельно принимает решение о возможности включения чего-либо еще в дистрибутив.
Как я себе это представляю. Примерно так же как и менеджер пакетов NuGet в Visual Studio - открыл, установил, продолжил работать. Главное - ничего лишнего, несколько кликов мыши.
Да что вы всё - замусоривает да замусоривает… Кому он там и чем может помешать? Весить много он не может, и имя он не занимает, потому что одноимённый модуль из папки с программой всегда имеет больший приоритет.