Pull to refresh
-8
0
Иван Левашев @OCTAGRAM

Удалённый программист Delphi+Ada

Send message
но как общий принцип кто не научился жить без трассирующей сборки мусора, тот идёт нафиг из технологического стека


А какова мотивация у такого принципа?


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

Трассирующая сборка — это вечный двигатель наоборот. Ему всегда есть, чем заняться, и он этим занимается. Мне бы, пожалуйста, вечный двигатель нормальный, чтоб вырабатывал, а не потреблял. А если такого нет, то пусть не будет никакого. Настрадался.

Да и foreign export в хаскеле есть и вполне успешно работает.


Когда я думаю про интероп, у меня в голове образы WinRT, COM, OLE Automation, VirtualBox XPCOM, libobjc и отчасти SOM. С уже формально решёнными вопросами владения, освобождения ресурсов, уведомления об ошибках и наследования.

А FFI — это только первая ступень лестницы, по ней ещё шагать и шагать к высокоуровневому взаимодействию. Вот, допустим, на макосе есть Oxygene/Toffee, и взять бы написать на гипотетическом избавленном от трассирующей сборки мусора Хаскелле монаду Дейкстры, заполучить её в Oxygene как значение-последовательность (sequence of), и по этому значению походить средствами LINQ. Или в языке Ада, если генератором привязок спроецировать на тип с аспектом Default_Iterator, тоже comprehension можно устроить.
В Delphi 10.3 уже добавили, правда, ключевое слово почему-то взяли не declare
Моя подпись в письмах гласит: If you want to get to the top, you have to start at the bottom

Переходил с QBasic на Turbo Pascal, и там дорвался до ассемблерных вставок. Помню, изучал: вот есть mov для чисел, а есть stos и lods, s = «строковые» инструкции. Для чисел и для строк, видимо. Какой же был шок узнать, что процессору как муравью нужно всю строку облазить, чтоб что-то с ней сделать, и эти «строковые» инструкции не для всей строки, а для шажочка по ней.

Вот эти современности рискуют закамуфлировать ещё больше деталей
Осваивать его не придётся, он часть учебной программы JetBrains, но как общий принцип кто не научился жить без трассирующей сборки мусора, тот идёт нафиг из технологического стека. Как Haskell научится, так библиотеки на нём станет приемлемо использовать из других языков.
Но ведь ось Y и вправду много, где направлена вниз, а не вверх, а популярный порядок индексов (строка, столбец) это (-Y, X)
Тут в соседней ветке пишут:

Я бы добавил, что утечка утечке рознь.

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

Куда более распространенная в си ситуация связана с «беспорядочной половой жизнью» указателей и спонтанные, неформализованные и нигде не задокументированные контракты владения вида:

  • память освобождает вызывающий
  • память освобождает вызываемый
  • указатель нужно скопировать себе, передавать его как есть (работает как дескриптор)
  • содержимое указателя нужно скопировать себе, передавать копию по значению/указателю
  • память статическая, не копировать, ссылаться напрямую


и т.д.

Притом что во всех случаях интерфейс, утрируя, может выглядеть как void foo(void* ptr).

При таком подходе утечь память, прозевав, кто же все-таки должен ее прибирать, — раз плюнуть.


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


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

Может быть, дело не в COM, а в ATL? Я иногда слышу жалобы на COM, и часто при этом всплывает какой-то ATL, наверное, одно с другим как-то коррелирует.

За что-либо путное надо платить деньги, а бесплатное, как правило, не стоит выеденного яйца.


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


И что там трудоёмкого? Берём и клепаем интерфейс за интерфейсом
Без трассирующей сборки мусора реализацию сделали уже?
Я не знаю ни одного реально практического примера, где была бы полезной технология COM

У вас часть кода на Аде, часть кода ещё на чём-то. Чем их сопрягать собираетесь?

Разновидности COM встречаются и под Mac OS. Ну не реестр там, по-другому было. Для Linux я видел и в p7zip автономный COM, и VirtualBox XPCOM с возможностью RPC.
можно сразу разобраться в алгоритме приложения

Да неужели? Все вызовы простого COM — виртуальные, по смещению в таблице виртуальных методов. Таблиц виртуальных методов COM плодит немеряно, плюс, система ещё прокси генерит даже внутри процесса, для разных apartments. Поди разберись, чей седьмой метод хотят вызвать.

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


Да прям там длительный период. COM 1995, DCOM 1996, вот и все основные события. 2 года, а потом внедрение. Это же не Swift, сменивший 5 ABI. COM+ нигде не видел в действии. Из интересного только OLE Automation и .NET интероп было, и потом надолго стабильность. Подвижки случились только в WinRT.

Учитывая, насколько плохо программисты осведомлены хотя бы о том, что есть, к каким-то подвижкам я бы и не призывал. Подвижки нужны в том, чтобы COM и VirtualBox XPCOM (под Linux) библиотеки делали почаще.
За ковидный карантин я успел перепробовать множество разных языков, остановившись в итоге на Расте.


Была ли в этом множестве Ада?
У ремейка первого СС вышла Демо, а если предзаказать выходящую этим летом полную версию, то
Customers who pre-order this version of System Shock will receive System Shock 2: Enhanced Edition for free when SS2:EE is released.


Для разработки BioShock 4 нанимали специалистов по открытому миру.

Интересующиеся этой темой собираются на канале GothenX
Думаю, многим пригодится список агентов, которые позволяют вообще НЕ покупать собственную кассу, а пробивать через агентскую:

pokupo.ru/online-kassa
arsenalpay.ru/cashbox.html
robokassa.com/robokassa/robocheck

Никогда не видел столько агентов в одном месте. Столько перерыл, чтоб найти.

Покупо вроде бы даже с физлицами самозанятыми могут работать (но не все способы оплаты доступны). И Интернет-магазин прямо на их платформе можно сварганить и для физических, и для цифровых товаров.

А тем, кто всё же собрался покупать кассу, можно поискать скидки на ОФД тут, тут и тут
Что в 90х джава тормозила, что сейчас. Божатся, клянутся, что вот теперь-то мы точно сборщик мусора не тормозящий сделали. А воз и ныне там. Тормозит как чёрт знает что. Диспетчер задач откроешь, и сразу понятно, где у нас трассирующая сборка мусора.

image

В Delphi IDE, угорев по дотнету, добавили дотнетовские компоненты, и оно затормозило. Хорошо, что нашлись умельцы, сделали Delphi Lite, и оно не тормозит, потому что всё, что со сборкой мусора, вырезано. Я сделал вывод: хочешь, чтоб не тормозило — делай без сборки мусора. Только так.

20 лет кормят завтраками, надоело до чёртиков. Так и хочется сказать: ребятки, давайте вы там где-нибудь отдельно в своей песочнице самоубеждайтесь в быстроте трассирующего сборщика мусора, а мне как пользователю дайте старый добрый счётчик ссылок, раз уж не смогли придумать ничего лучше, чем написать программу на Джаве.

Кстати, для Java есть Javolution. Он не умеет инлайнить в JIT и прочее, но он быстр. Уж не связано ли это с тем, что там счётчик ссылок вместо трассировок по свопу?

Но Javolution не поставить так просто вместо java.exe. А было бы здорово, чтоб прямо java.exe ключики в командной строке прописать, и трассирующий сборщик мусора пошёл нафиг.
Неправда. В Java можно использовать и счётчик ссылок тоже. Но статьи, в которых это описывается, сравнивается, относятся к таким древним версиям JVM, что их и не установить-то уже, наверное, 16-битные ДОС реализации, на 64-битную Windows. И не запустить на Apple M1 версию для Motorola 68k Mac OS Classic. А я хочу счётчик ссылок для современной Java.
У .NET синтаксис может быть такой же, как у JVM, если на Oxygene писать

Information

Rating
Does not participate
Location
Воркута, Коми, Россия
Date of birth
Registered
Activity