Как стать автором
Поиск
Написать публикацию
Обновить
0
2.1

Пользователь

Отправить сообщение

сообщили в Ассоциации туроператоров России (АТОР).

Это та ассоциация, члены которой дальше Турции с Египтом не дотягиваются уже года 4 как?
С тем же успехом можно было рекомендации ассоциации больных находящихся в коме перепостить.

Это лекция для колхозников. Не мешайте, товарищ дачник!

Будучи вырванным из контекста, это звучит прекрасно:

ЯНДЕКС: Приходите поработать — это бесплатно.

«Булат» — к нам хрен пробьёшься!

Люди живут в 3д симуляции, ИИ агенты эмулируют для них обычное общество (виртуально увеличивая сообщество)

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

Хаб «Java» вижу, ни единой строчки на жабе не вижу. Оффтоп, однако!

если программа запущена в Windows с кодировкой 866

Какой-то неправильный виндовс, в правильном для кириллицы кодировка 1251. 866 это для DOS.

Ну что, как, похоже это на язык мечты?

Зато название оправдывает полностью! )

Мне вспоминается ещё минимум один эпизод, когда совместимость сломали.

В какой-то момент в record добавили поддержку свойств. Заодно покорёжили некоторые старые типы, TRect в частности.

И работавший раньше код вида

var
  R: TRect;
  Width: Integer;
...
  with R do
  begin
    Width := Right - Left;
...

Превратился в тыкву.

Из более нового вот это тоже прекрасно: https://docwiki.embarcadero.com/RADStudio/Athens/en/Floating_Point_Operation_Exception_Masks

Стоило указать версию дельфей и параметры компиляции, а то знаете ли:

From RAD Studio Athens (R120), all of the floating-point-related exception masks will be turned ON. The applications will no longer raise Floating Point exceptions on all platforms as default.

https://docwiki.embarcadero.com/RADStudio/Athens/en/Floating_Point_Operation_Exception_Masks

Дельфю такие альтернативно одарённые гении развивают, что волосы дыбом.

Результат будет 2.

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

О выделении или не выделении памяти это не говорит ровным счётом ничего.

Если бы память под правую часть строке 6 не выделялась, то было 15 — результат сложения до возникновения ошибки при вычислении ln(0). А так получается, что выделена память под новое значение x. Начались расчеты, 5 записали, 10 прибавили, а потом — бах! — исключение.

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

Вычисления в вещественных числах на уровне ассемблера не очень читаемы, поэтому заменим код примера на его функциональный аналог:

{$OVERFLOWCHECKS OFF}
program HABR935234;

uses
  System.SysUtils,
  System.Math,
  Vcl.Dialogs;

function RaiseDivByZero(): Integer;
var
  Zero: Integer;
begin
  Zero := 0;
  Result := 1337 div Zero;
end;

procedure Foo();
var
    X: Integer;
begin
  X := 2;
  try
    X := 5 + 10 + RaiseDivByZero() + 1;
  except
    on E: Exception do
      ShowMessage(IntToStr(X));
  end;
end;

begin
  Foo();
end.

Посмотрим, во что скомпилировалось наше выражение (View > Debug Windows > CPU Windows > Entire CPU во время отладки):

Как видите, вызов RaiseDivByZero() в виде call $00c42ab4 происходит до того, как будут вычислены 5 + 10 + (add eax, $0f) и + 1 (inc eax).

Временное значение хранится в регистре eax и записывается в память (mov [ebp-$04], eax) только в самом конце, после всех вычислений.

Никаких дополнительных выделений памяти.

внезапно стало WideString

Я ведь даже отдельно подчеркнул, что не WideString.

«Э» вместо «з», «выюбросы», я видел подобного стиля тексты на сферических китайских товарах в вакууме ещё много лет тому назад. Получается, у китайских трудящихся были нейросети задолго до шумихи на западе. )

и нарисовал инфографику.

Сразу в печь, не читая.

на первом месте у меня по многословности и громоздкости - это XSLT 1.

Предлагаете добавить в Delphi на уровне языка ограничение в одно присвоение на переменную? )

Экономия на спичках, локальные/временные переменные обычно в регистрах.
И Result в том числе.

Такое впечатление, что обработкой текста вы не занимались никогда.
Однобайтовые кодировки это боль и страдания, юникод это благо. Из-за суррогатных пар благо не идеальное, но всё же благо.

Когда закончили миграцию на Delphi XE и получили юникодный VCL и RTL, код стал значительно чище.

Замечу, что WideString и UnicodeString не эквивалентны, хоть и там и там UTF-16 внутри.

и обиндусивания языка.

Осталось только уговорить индусов тратить время на язык, доля которого на рынке сильно меньше C# и Java и за который дают меньше денег.

Чем вам объекты не нормальный тип?

Что же до неявных преобразований, то у Delphi тут тоже рыльце в пушку.
Когда вводили UnicodeString в язык впилили неявные преобразования между UnicodeString, UTF8String и AnsiString и при миграции нужно было быть весьма внимательным.

Приходилось патчить в рантайме функции конвертации и после прогонов разгребать логи в поисках неучтённых конвертаций.

И?

David is an Australian developer, currently living in far-north Europe. He a former senior product manager for C++ at Idera where he looked after C++Builder and Visual Assist.

Работник Идеры-Эмбаркадеры завёл тикет и описал там то, с каким синтаксисом эту конструкцию решили делать. Это ничего не говорит о предпочтениях большинства желавших эту конструкцию.

эту конструкцию просило множество людей из сообщества.

Подозреваю, что большинство просило (A > B) ? GetStr1() : GetStr2(), а не вот эти вот простыни с if-then.

1
23 ...

Информация

В рейтинге
2 631-й
Зарегистрирован
Активность