Директива компилятора для отключения проверки индексатора массива


#75

Упадёт несомненно, причем, когда она будет работать у того, кто купил программу.

А с чего Вы решили, что не упадет?


#76

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


#77

Даже если она упадёт, что изменится для конкретного пользователя. Что поменяет для пользователя название исключения?


#78

Если исключения не будет при ошибке, но программа продолжит считать, то эффект не заставит себя долго ждать. Для этого есть тесты. А если этого не обнаружили тесты, то не важно, в каком виде будет ошибка. Обращение к элементам по указателям не меняет структуру программы, это важно понимать. В конце концов, ничто не мешает проверять программу со стандартным индексатором, а после того, как появится уверенность в отсутствии ошибок, поставить директиву и работать по указателям. Это ведь почти то - же самое, что Debug/Release.


#79

Это если всюду отрубить проверку границ. А если отрубить её к примеру тут:

begin
  var c := 10;
  var a := new byte[c];
  for var i := 0 to c-1 do
    a[i] := i;
end.

Тут программа никак упасть не может. Всегда есть места в которых можно быть уверенным что всё будет в порядке. И 20% того очень даже стоят, раз то что делал @Gleb уже считалось более минуты (и это ведь готовый вариант, обучение на много дольше).


#80

Согласен. А тут?

begin
  var c := 10;
  var a := new byte[c];
  ...
  for var i := 0 to c-1 do
    a[i] := i;
end.

Вместо многоточия - ваша фантазия


#81

Вам уже ответили. Зачем вообще заниматься программированием, если постоянно сомневаться в чём то, несмотря на то, что ошибка не приведёт к потерям?


#82

Это уже проблема программиста, будет ли на месте троеточия то что не стоит ставить. Кроме всего прочего, поставить последней строчкой в троеточии if c > a.Length then raise new Exception решит все проблемы.

Я бы вообще не ставил бы ничего на месте троеточия, чтоб точно быть увереным.


#83

Обучение MnistNet заняло 16 часов. После оптимизации кода на C# - примерно в 2 раза меньше.


#84

Фантазия бывает и извращённой. Там никакие проверки не помогут.


#85

Я уже тыщу раз повторил, что использование директивы - ОСОЗНАННЫЙ ВЫБОР программиста. Никто не обяжет её использовать. В C# есть модификатор unsafe. Только он позволяет использовать указатели в любом их виде. А ещё надо поставить параметр компилятора unsafe - иначе нельзя. В итоге есть возможность 2 раза обдумать свои действия. Что мешает сделать подобное в Паскале?


#86

Да просто по молодости лет не нарывался еще. Если бы писал программу, к примеру, для банковских транзакций, где ошибка вполне способна закинуть средства на другой счет, а средства измеряются числами с очень большим числом разрядов, может и подумал бы, как будет персонально возмещать потерю от такой трансакции, если получатель откажется возвратить зачисленную сумму (а по закону ее невозможно принудительно взыскать). Или программу в составе комплексного управления чем-либо серьезным, когда за сбой можно просто попасть ко взрослым суровым дядям и там доказывать, что это было не намеренно. А так, пока это развлекушки для души, до человека не дойдет, что такое ответственность за свои действия.


#87

Не все программы банковские. В том же ИИ важнее скорость чем безопасность.

И ещё раз, не во всех программах нельзя точно быть уверенным что не упадёт.


#88

Не все работают над банковскими переводами или управлением ракетами. Если Вас интересуют чисто математические задачи, то большие массивы там вряд ли нужны. А программисты C++, по-Вашему, безответственные люди? РЖАЧ ДО СЛЁЗ!


#89

Безопасность важна всегда. Это Вам любой специалист в области защиты данных скажет. А не послушаете - будете искать работу там, где “безопасников” нет.


#90

Да Вы издеваетесь что ли? Шанс налепить ошибок гораздо выше если постоянно бояться их. Что за истерика то вообще?


#91

Давайте переведем дискуссию в более спокойное русло.

Попытка оптимизации проверки индексов - это дело интересное. Даже ускорение на 20% вполне заслуживает того.

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

Делать это в PascalABC.NET мы конечно не будем. По разным причинам. Основная - это ниша PascalABC.NET. Образовательная и академическая. Еще - небольшие проекты, разрабатываемые энтузиастами Паскаля.

Для создания высокоэффективных приложений есть другие языки и среды.


#92

А unsafe в C# значит случайно?


#93

Мы не делаем новый C#


#94

Указатели есть во всех языках, но вот их неэффективность только здесь. Есть повод задуматься…