Помощь новичкам

Каким образом? Можно пример?

Вот пример.

Сколько угодно. Тесты физической памяти (оперативной, дисковой и т.д.) содержат целый набор таких алгоритмов. Чтение всех четных, затем всех нечетных, чтение “бабочкой” - навстречу, когда первая-последняя, вторая - предпоследняя и т.д., случайное чтение (номер по датчику случайных чисел). Есть и другие, более мудреные последовательности чтения.

1 лайк

По предложению @MrFresnel сделал замер через Stopwatch. Speed.cs (1,6 КБ)

В моём случае это вызвано тем, что трёхмерный массив развёрнут в одномерный.

А если четырехмерный развернете, скорость возрастет еще в разы. Это настолько очевидно, что даже можно и не измерять. Вот только опыт этот нужно ставить с медленным носителем, потому что сейчас Вы ловите разницу от времени вычисления индекса, т.е. преобразования трехмерного индекса в порядковый номер, а это не совсем то, о чем говорилось первоначально. Кстати, это одна из причин, по которой Фортран разрешает обращаться к двухмерному массиву, как к одномерному. Там это называется “обобщенный индекс”.

Такое тоже есть, правда пока не использовалось.

В смысле? Индекс везде одинаково вычисляется.

Зато он сложнее в разы. Кстати, @Sun_Serega, индексы уже не используются явно. Я перешёл на указатели, так что о проверке можно забыть во всех случаях.

Фортран сложнее всяких С++ и C# ? Спасибо, повеселили. На нем с массивами работают, как с простыми переменными, - куда уж “сложнее”. Плюс там оптимизация, заложенная в компилятор изначально…

Можно подумать, это отменяет арифметику при вычислении нужного смещения. Программирование с помощью указателей - это ассемблер прошлого века. Хотите в нем жить и мыслить на этом уровне - Ваше право, конечно.

Нет, но отменяет проверку индексатора. Т. е. порядок чтения не определяет ничего, кроме загрузки данных в кэш процессора. Именно к этому я и веду.

Предложите замену.

А можно с этого места подробнее? Расскажите, пожалуйста, как это Вы управляете кэшем процессора из своей программы? :rofl:

Ну уж это Вы сами. Я предлагал, но Вам в одном языке то не нравится, в другом -это… На деле Вам просто не хочется учить какой-то другой язык, чтобы оторваться от мышления в стиле С/С++, потому что Вы его считаете эталоном всего и единственно правильным подходом к программированию. Оно же не даром говорят, что изучение языка С в качестве первого искривляет мышление на всю жизнь.

Но, тем не менее, это важный аспект языка программирования, который следует знать программистам. Так как не факт, что им не придется писать на таких языках, в которых это пригодится. Однако, если есть способ этого избежать и не потерять сильно в скорости, то пожалуйста. Лично я без арифметики указателей живу, используя ее в редких случаях, когда без этого никак, либо решение будет проигрывать по скорости.

Знать, что указатели есть на нижнем уровне работы с памятью - это знают все программисты. А вот считать, что если в языке они есть, то к ним нужно прибегать - совсем иное. Те, кто пишут на С/С++ в силу особенностей языка иначе просто не могут. Отсюда - соответствующий стиль.

Если нужно получить эффективное, быстро работающее приложение, использующее многомерные массивы - программист уходит писать на Фортран. Либо пишет на С, вынося мозг себе и окружающим, попутно жалуясь и проклиная все и всех подряд.

Да, согласен.

Вы очень не любите, когда другие упоминают C/C++/C# или другие языки, однако сами регулярно делаете это, причём ещё агрессивней, чем, скажем, я.

Прибегать надо к тому, что позволяет писать производительный код, а не тому, что характерно стилю ЯП.

Не думаю, что стоит начинать беседу на эту тему. Главная причина - засорение темы Помощь для начинающих. Однако, я с Вами согласен в этом вопросе.

1 лайк

Когда в разделе PascalABC.NЕТ упоминают эти языки, попутно рыдая или требуя, чтобы и Паскаль работал так же - да, очень не люблю. И когда о своих проблемах пишут, но “продолжают упорно лезть на кактус” - тоже не люблю, ибо отдает смесью упрямства и инфантилизма. Не люблю, когда рассуждают про “производительные коды”, имея об оптимизации самые поверхностные представления. И что?

Алекс,

Summary

хотя это скорее уже Болталка, но суть в том, что

  1. в основе PABC.NEТ лежит .NET Framework;
  2. справка и все справочные материалы отсылают именно на MSDN;
  3. официальный язык .NET – именно C#;
  4. когда примеры вдруг не получается из-за нюансов адаптировать на PABC.NEТ, вопросы ставят в сравнении с неработающим примером – на C#.

Итак, с чем сравнивать, откуда брать не-сишные примеры, и где, самое, искать нормальные ответы без лишних поучений и ёрничанья?

Другими словами, программисту на PABC.NEТ нужно (а) неплохо знать паскаль,(б) учитывать новые возможности, (в) хотя бы иметь представление о .NET, и (г) учитывать возможные нюансы.

А из какого, по-вашему, языка или источника следует брать соответствующую информацию? Да, за пару дней-часов-недель можно потужиться и что-то сообразить, но разве PABC.NEТ не позиционируют как современную среду для обучения, быстрого/визуального прототипирования и выпуска (минимум частично) кросс-платформенного ПО? Вот некоторые и фрустируют в прострации…

2 лайка

У Microsoft есть также VB.NET. Вы считаете, в нем надо тоже гонять примеры из C# и писать в поддержку, если что-то не удалось “пропихнуть”? Кроме того, “народ хочут указатели”. Ибо как примеры тянут и из С/С++. И ничего, что .NET-среда указатели не любит, - есть же у C# небезопасные указатели - надо чтобы оно и в PABC работало так же, как в С#, а может даже лучше. Почему-то я не видел, чтобы за все время существования VB.NET в него хоть что-то добавили из C# на том основании, что оно там просто есть. А тут такие предложения в порядке вещей. Потому, что Microsoft с такими идеями просто “пошлет, куда положено в таких случаях слать”, а здесь разработчики - люди культурные, такого себе позволить не могут.

Об этом говорится, что такая возможность в определенных рамках имеется. Но язык не позиционируется именно в этих целях - его ниша - обучение в первую очередь. Обучение программированию в целом, в том числе и с тем, чтобы привыкнуть к NET-среде и в дальнейшем перейти на C#. Но это не означает изучение С#, замаскированного под Паскаль.

Послать можно и вежливо.