Spread the love

Условная компиляция в Delphi

Условная компиляция в Delphi, по сути, очень полезная и удобная возможность, которая позволяет Delphi компилировать или не компилировать код в зависимости от определенных символов условной

Читать на сайте автора.

Стандартные действия (TActions) FireMonkey (FMX, FM2)

Впервые библиотека FireMonkey появилась в качестве официальной («из коробки») библиотеки Delphi в релизе Delphi XE2. Однако, поддержка действие (Actions) и, соответственно, списка действий (TActionList) появилась

Читать на сайте автора.

"У нас нет ресурсов для ревью кода" (с)

Последнее время часто слышу «у нас нет ресурсов на ревью кода» или «Нет времени вводить ревью сейчас, у нас много багов, надо их править. Вот

Читать на сайте автора.

Почему компилятор генерирует операции с памятью для полной переменной, даже если задействован только один байт?

Это перевод Why does the compiler generate memory operations on the full variable even though only one byte is involved? Автор: Реймонд Чен.

Когда-то я помогал

Читать на сайте автора.

Поддержка классического оборудования эмуляцией

Это перевод Keeping classic hardware alive through emulation. Автор: Реймонд Чен.

На конференции и выставке Windows 2000, которая совпала с запуском операционной системы, я посетил стенд

Читать на сайте автора.

Зачем нужна красная зона? Я же могу просто использовать стек?

Это перевод Why do we even need to define a red zone? Can’t I just use my stack for anything? Автор: Реймонд Чен.

В Windows стек

Читать на сайте автора.

Ответ на задачку №25

Ответ на задачку №25.
Сначала можно подумать что утверждение — не верно. Действительно:

begin
TMyThread.Create.Start;
end.

Эта программа завершится немедленно, не дав потоку выполниться. Иными словами, программа завершается, когда в ней есть работающие потоки.

Однако, если вы читаете документацию (MSDN) или, например, Рихтера, то заметите, что там говорится о завершении процесса при выходе или завершении всех его потоков. Это явно противоречит ситуации выше.

В чём же дело?

Дело в том, что MSDN и Рихтер говорят о ситуации в «голой» системе, но мы рассматриваем случай, когда поверх системы накладывается ещё код поддержки языка — RTL. Система, действительно, не делает различий между главным и фоновыми потоками и закроет процесс только тогда, когда завершится каждый из потоков — вне зависимости от того, главный он или нет.

Но для RTL разница есть — главный поток выделяется особо. В частности, RTL с помощью «магии компилятора» вставляет скрытый вызов Halt(0) сразу после выполнения главного блока программы (т.е. в строке «end.»). Вот и получается, что при нормальном выходе программы вызывается Halt(0), который, в свою очередь, вызывает ExitProcess, которая завершает все потоки и, следовательно, процесс.

RTL не одинока в таком поведении. Большинство библиотек поддержки языков поступают так же. Почему они это делают? Потому что в современном мире программа понятия не имеет, какие потоки в ней выполняются.

Читать на сайте автора.

Старомодная матчасть по завершению процессов

Это перевод The old-fashioned theory on how processes exit. Автор: Реймонд Чен.

В былые времена жизнь была намного проще.

В прежние времена считалось, что процессы контролируют свои

Читать на сайте автора.

Релиз RAD Studio 10.3 Rio, Delphi 10.3 Rio и C++Builder 10.3 Rio

Релиз RAD Studio 10.3 Rio. Подробности: Что нового в RAD Studio 10.3 Rio Release Notes for Rio Installation Notes for Rio Новые возможности и список

Читать на сайте автора.

Релиз RAD Studio 10.3 Rio, Delphi 10.3 Rio и C++Builder 10.3 Rio

Релиз RAD Studio 10.3 Rio. Подробности: Что нового в RAD Studio 10.3 Rio Release Notes for Rio Installation Notes for Rio Новые возможности и список

Читать на сайте автора.