Аналог System.ValueTuple для PascalABC.NET

Да, спасибо. А в чём смысл двух практически одинаковых синтаксически сахарных конструкций в языке?

Вот те 20% преимущества в случае, если умеешь ими правильно пользоваться.

Дополнительный синтаксический сахар - это замусоривание языка. А без сахара - можно создать свой класс и им пользоваться.

Не придётся, если оформить эти кортежи в виде библиотеки. Тем более в C# есть уже свой System.ValueTuple<T, T2, ...>. Так что по сути это по большей части только для Паскаля делается (в C# и так своя реализация таких кортежей есть). В итоге (если кортежи такие будут включены в язык) и Паскаль будет иметь свои средства для работы с значимыми кортежами. Не везде же держаться за совместимость с C#. Так, у нас, например, операторы могут быть обобщёнными, но в C# - нет. В C# мы не смогли бы использовать такие операторы, но ведь они реализованы в Паскале, не смотря на отсутствие их в C#. И ещё: не должен же быть Паскаль вторым C# - в этом нет смысла, он должен иметь (и уже имеет) свои особенности.

Это дополнительная работа, которая будет ложиться на плечи программиста. Если же эти средства будут в языке, то работать будет легче. Мы ведь не пишем, например, везде обычные свойства - где можно - пользуемся автосвойствами. Это тоже ведь синтаксический сахар. Но ведь, это же не

не правда ли? Да и свойства как таковые - тоже синтаксический сахар по сути - это ведь просто два метода геттер и сеттер. Примеров синтаксического сахара в Паскале можно ещё много привести, например:

  1. loop
  2. lock
  3. срезы
  4. методы расширения (ведь, это фактически просто статические методы, которое можно вызывать в формате objectName.Method({parameters}))
  5. И так далее
1 лайк

13 сообщений перенесены в новую тему: Бесполезные улучшения PascalABC.NET

@Admin, так что на счёт моего модуля?

В смысле включения его как стандартного?

Мне не кажется эта идея хорошей.

Да.

Ну, как выше уже было показано, значимые кортежи - более производительны. Можно включить в стандартный пакет пока только модуль, а синтаксический сахар (предложенный выше) сделать потом. Если Вы можете посоветовать - что доработать - с радостью.

  1. Я не вижу никакой лучшей производительности значимых кортежей. 20% плюс-минус в разных ситуациях.

  2. C#, на который вы ссылаетесь, не имеет двух сахарных конструкций для одной возможности, потому что это плохой дизайн языка.

  3. В C# уже есть System.ValueTuple. Те, кому важна производительность, установят версию .NET 4.7 и будут ими пользоваться.

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

Ну, начинающим, думаю, возиться с установкой .NET 4.7 - не особо захочется. Поэтому я предложил свой вариант кортежей. Преимущество же Паскаля в том, что ничего устанавливать дополнительного не надо - открыл и пользуйся. :slight_smile: Если этот модуль был бы стандартным, то это ёще раз поддержало этот принцип. И более того помогло бы лучше оптимизировать программы.

На счёт сахарных конструкций - как я сказал - не обязательно делать их сейчас (и вообще), я сделал короткие функции для создания кортежей (максимально похожие на 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. :slight_smile: Все мы в одной команде - все мы пишем на PascalABC.NET.

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

Всё-таки я, несмотря на ваши ссылки, не увидел улучшенной производительности ValueTuple. Моя ссылка говорит о том, что они хуже, тест SunSerega - что они в 50% случаев на 20% быстрее, а воставшихся 50 - на 20% медленнее.

Ну, всё-же есть 20% преимущества,

:slight_smile: Поэтому можно TuplesABC добавить как эксперементальный модуль.

Любой “экспериментальный модуль” замусоривает дистрибутив и, как следствие, попадает в готовый продукт. А установка пока что не предполагает возможности ставить такие экспериментальные модули только по желанию пользователя.

К моему и Вашему, как вижу, тоже сожалению. Полезная была бы возможность.

Именно так. Но это возможность не первостепенной важности, поэтому пока что в каждом конкретном случае разработчик самостоятельно принимает решение о возможности включения чего-либо еще в дистрибутив.

Как я себе это представляю. Примерно так же как и менеджер пакетов NuGet в Visual Studio - открыл, установил, продолжил работать. Главное - ничего лишнего, несколько кликов мыши.

Да что вы всё - замусоривает да замусоривает… Кому он там и чем может помешать? Весить много он не может, и имя он не занимает, потому что одноимённый модуль из папки с программой всегда имеет больший приоритет.

1 лайк