Обновить
-3
Иван Левашев@OCTAGRAM

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

11
Подписчики
Отправить сообщение
На счёт веб я размышлял, и мой анализ свёлся к тому, что в веб гонит потребность кроссплатформенности, для которой раньше было достаточно LCL, а теперь в веб никаких LCL нет, а только сам веб кроссплатформенным и получился. Если хотим развернуть эти потоки вспять, надо веб разровнять бульдозером и переделать в десктоп. На этом пути ждёт несколько препятствий:
image
  • Service Workers во множестве запускать из одной вкладки — моветон, так что нужны зелёные потоки, работающие в одном реальном потоке браузера.
  • Обработка исключений в WebAssembly сделана сейчас из рук вон плохо. Исключение сдирает весь стек Wasm, так что ничего ценного (читай: RAII) там хранить нельзя, и это ещё один повод делать зелёные потоки.
  • Текущие трансляторы в Wasm в гораздо большей степени следуют спецификации Wasm, чем пытаются быть конгруэнтными desktop. И вообще с ними больше шансов потерять в производительности даже по сравнению с JS, чем выиграть. Например, ВКонтакте и другие сайты грузят только модули, которые нужны, по мере необходимости, и кешируемые независимо, а EmScripten заточен под большие статически собранные модули, обновляемые, загружаемые и компилируемые целиком. С SDL2 под EmScripten экспериментировал, так там нет ожидания события, а есть только опрос. Если вкрутить опрос в быстрый таймер, нагрузка 100% CPU на перерисовку вне зависимости от того, делаю ли я что-то в UI. Если вкрутить опрос в небыстрый таймер, получается слайд-шоу. SDL2 по-любому где-то ставит свои обработчики на клавиатуру и мышь, но не даёт подкопаться к ним, делать работу только когда она появляется. Да любой Ангуляр лучше работает, чем SDL2 под EmScripten.
  • Asincify в EmScripten не поддерживается, а и раньше был как-то криво сделан, что вызывало раздутие кода до 10 раз. Предположительно, кривизна связана с тем, что EmScripten следует спецификации Wasm, то есть, принимает аргументы и размещает локальные переменные средствами Wasm. Такой контекст тяжело сохранять и воссоздавать, а ещё продолжать с любой точки останова.
  • Emterpreter же способен реализовать потоки, переживающие возврат управления браузеру, но супер тормозной. Я убеждён, что можно реализовать промежуточный вариант, не супер тормозной, но и не раздувающий код в 10 раз. В идеале можно было бы просто взять Continuation Passing C, но…
  • AdaMagic реализует адские исключения либо через setjmp/longjmp, либо через исключения C++, и оба способа не поддерживаются в CPC.
  • CPC преобразует только код, размеченный особым соглашением о вызове, о котором AdaMagic не знает, а надо, наоборот, преобразовать всё, кроме редких исключений.
  • CPC реализует асинхронизацию корректно, но очень не оптимально. Одна функция разбивается на несколько по всем возможным линиям разреза. В прологе преобразованных кусочков загрузка локальных переменных и освобождение памяти, в эпилоге выделение памяти и выгрузка локальных переменных. Это невероятное давление на менеджер памяти.
  • Кроме того, в Wasm косвенные вызовы расходуют место в таблице косвенно вызываемых функций, а CPC в силу своего принципа работы производит их в изобилии. Представляется возможным сделать преобразование вида while case, чтоб одну исходную функцию преобразовывать в одну преобразованную.
  • Динамически загружаемый модули в EmScripten есть, но с учётом всех особенностей ведут они себя совершенно неконгруэнтно desktop. Загрузка динамическая, которой на desktop нет, и надо ещё смотреть, как, например, таблицы косвенно вызываемых функций распределяются при подгрузке модулей, там наверняка ещё проблемы вскроются.


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

image

Подготовить веб — первое, что я хочу сделать для Objective PE.
За оптическими каналами не поедут
Можно через WebRTC.

Мобильные абоненты в большинстве своём не имеют белого ip-адреса


Зато на серых можно разгуляться, но про это мало, кто знает
P.S. А почему нужно писать «террористическая организация, запрещенная в РФ», а не просто «террористическая организация»? Типа в РФ есть разрешённые?


Суды с реальностью не 1:1 же совпадают. Есть запрещённые не террористические, есть террористические не запрещённые.
Налоги тогда пусть вернут на садики, в которые не пустили, и будет, на что свои садики содержать.
Мы почти непрерывно вымираем с момента развала СССР. А школы переполнены? Что-то тут в арифметике не так.
Эти распределённые платформы ещё пилить и пилить надо. Я пытался сконвертировать форум в хабзиллу. Создал учётку форума, создал несколько тысяч пользователей, которые в будущем могли бы через восстановление пароля зайти. Подписал всех пользователей на канал форума. И тут сервер начало таращить. Нагрузка на CPU 100%, база данных падает каждый день, а ведь в базе толком постов-то нет! Я же их не сконвертил. Думал, это один раз, пытался понять, оно закончится само или нет, смотрел, смотрел. Таблица workerq заняла 7 гигабайт, когда решил выкинуть с сервера эту пакость.

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

Задача государства — идентифицировать дефицитные общественные блага и восполнять их. С этим в IT некоторые затруднения, и не только у нашего государства.
Да, и их инструмент Duster стоит денег
Все статьи доступны. Для первой ссылка справа рабочая.

У нас как бы капитализм сейчас.


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

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


Этот механизм активируется вместе с указанием версии стандарта, то есть, условно всегда. И нет, разработчик не становится обязан. Может быть, pragma Restriction есть, которая бы обязала, или ключ принуждения к стилю, но я такого не видел.

та же точечная нотация при работе с объектами, насколько я знаю, появилась только в стандарте Ada 2005


И это было 15 лет назад.

Для некоторых проектов мне нужна супер переносимость, и я получаю её, используя AdaMagic, сертифицированный транслятор в Си. У него стандарт 95. Какой-то большой трагедии не усмотрел. Чисто инерция после Delphi.

Нужна ещё масса других библиотек для работы с СУБД, графикой, документами в стандартных форматах, тот же PDF, например.


То есть, не хватает некоего COM, который позволял хорошо жить на Windows самым разным языкам программирования. Или обновления p2ada, чтоб апгрейдить больше паскалевских библиотек до адских. Ясно.

Я в своей практике, бывало, садился и полные привязки делал. Но, бывало, муторно, и привязывал только те внешние функции, которыми собрался пользоваться. Например, чтоб из AWS порулить ipset в ядре, привязал самый минимум. И сверх этого так больше ничего и не понадобилось.
Причём, вроде бы WSL не столько ради линукса затевалась, сколько ради Андроида. Не получилось, выкатили чисто Линукс. И в WSL 2 Андроида всё так же нет.
В чём моральное устаревание, какая версия стандарта бралась для оценки и какие удобства имеются в виду?
Размышления на эту тему привели к тому, что использовать штуки типа Wine надо, но без WinAPI. То есть, всё тот же Win-Delphi с рабочим механизмом bpl и внешними dll. Но без тормозов файловой системы из-за перегонки всего трафика через wineserver. И нормальный GUI.

Вроде бы это надо многим, и если этих многих собрать в одном месте, можно вместе начать что-то решать в этом направлении. Но как же их собрать?

Такое в норме, в понимании, делает государство в лице своих научных институтов. А ещё у нас ведь импортозамещение. Вот только в науку финансирование импортозамещения не идёт. Там ИИ и блокчейны, инновации, а подмести в своём дворе — это же не инновационно. Поддержка импортозамещения идёт только частникам. А чтоб частник в науку вкладывался, он должен быть монополистом, и тогда у него есть средства, и его наукоёмкая деятельность критична для сохранения монополии. Но монополисты все на Западе. Так и остаётся проект на уровне идеи.
Я даже специально себе поставил полтора года назад, именно, чтоб глюки ловить и пристреливать на месте.
А почему вы думаете, что таких инструментов нет?

У этой конторы есть инструмент Duster: gdksoftware.com/services/delphi-upgrades-and-updates

Ещё вроде бы Oxygene пытается расти за счёт того, что переваривает код на Delphi. Oxygene наиболее известен как Delphi Prism для .NET, а самая популярная цель у него JVM, но и натив тоже есть. Правда, с трассирующей сборкой мусора, кроме макос. На макосе родной ARC, остальные платформы, к сожалению, обделены. Беда какая-то с ARC в Паскалях.
Я работал только с WSL1 и активно пользовался его возможностью запускать процессы между подсистемами. Скажем, я могу встроить dcclinux.exe в makefile, стартующий из WSL. И линукс32 трансляторы, стартующие из Windows IDE. Или транслятор в Си, который после того, как в Си перевёл, вызывает собственно транслятор Си и компоновщики, и эти трое исполняются в разных подсистемах. Было неприятно, что надо было с командной строки прописывать поддержку linux32 после каждой перезагрузки. WSL2 не видел, можно ли там так же туда-сюда гулять, не знаю.
Почему никто не смотрит в сторону AdaQt?
Ещё это делают на Аде, с AdaQt или GtkAda. Нативно, кроссплатформенно, вменяемый синтаксис, система модулей и типов. И аналог bpl есть и работает.

Жаль, что путь миграции с Delphi на Ada не проторен. Приходится увиливать на гораздо менее продвинутый Free Pascal.

Информация

В рейтинге
Не участвует
Откуда
Воркута, Коми, Россия
Дата рождения
Зарегистрирован
Активность