Неправда. В Java можно использовать и счётчик ссылок тоже. Но статьи, в которых это описывается, сравнивается, относятся к таким древним версиям JVM, что их и не установить-то уже, наверное, 16-битные ДОС реализации, на 64-битную Windows. И не запустить на Apple M1 версию для Motorola 68k Mac OS Classic. А я хочу счётчик ссылок для современной Java.
Я говорю про Служение Пользователю, а не самоудовлетворение разработчика.
И Ада ещё больше, чем Delphi, про Служение Пользователю.
достаточный объем платформы для Ады под ПиСи
Не понял. Чего не хватает. Вот есть задачи, которые надо решать. На шарпе будет дико тормозить, особенно, на офисных компах старинных, закупленных сотнями, в которые ещё принудительно антивирус воткнут. На плюсах будет дико глючить. На Аде и Делфи будет работать хорошо.
ЧСХ писать на Аде под писюк наверное станет только псих (когда есть элитный шарп)
Помню, Delphi сначала начали делать под .NET. Настоящее унижение, что моё любимое число 8, в долгожданной версии Delphi 8 стало проклятьем, эта Delphi ничего другого не умела. Потом какая-то муха покусала многих разработчиков, они к мёду нативных программ начали подмешивать дёготь дотнета. И МатКАД, и АвтоКАД, и не обошла беда стороной RAD Studio. Подсказки кода почему-то надо было сделать в дотнетовской части. К счастью, нашлись народные умельцы. В Delphi 10 Lite вырезано всё, что связано с дотнетом.
Вот так нативной частью программы, без трассирующей сборки мусора, народ с удовольствием пользуется, а дотнетовскую дрянь отпилит первый же риппер. А какую часть хотите писать вы?
Применительно к таблице из [EFF], раз уж мы доказали отсутствие исключений, то можно исключать проверки из кода, и тогда скорость повыше. По такому пути шли в проекте CubeSat, попутно решая другую проблему. Родного транслятора Ады для National Instruments нет, взяли AdaMagic.
Но AdaMagic из коробки для Linux и Windows, а на других надо что-то думать с механизмом исключений, портировать рантайм. Нет исключений — нет рантайма — нет проблем.
Язык Mesa по-своему интересен. После того, как Хоар изобрёл мониторы, начались реальные попытки встраивания мониторов в язык программирования. Например, в книге «Операционные системы» Танненбаума используется несуществующий Pidgin Pascal со встроенными в язык мониторами. А из реальных языков это Active Oberon и Ada. И в Pidgin Pascal, и в AO мониторы явные. Отличие от Ады можно увидеть в том, что, например, в AO можно, будучи в мьютексе в глубине защищённой монитором процедуры, атомарно выйти и ждать условную переменную. А в языке Ада все такие ожидания навешиваются только на вход в entry, но никак не в середину, а если надо из середины отпустить мьютекс и чего-то ждать, то для этого можно сделать requeue в другой entry.
Mesa — ещё один паскалеподобный язык программирования, в котором мониторы были встроенными. Или, наверное, лучше сказать, алголоподобный. Потому что я его смотрел, и после адско-обероновского чистописания Mesa довольно загрязнена спецсимволами. Когда Вирт делал Modula-2, он вдохновлялся Mesa, но, как можно убедиться, виртовские языки сильно почище. Я изучал материалы по Мезе из исторического интереса. Интересно поузнавать немного про отбракованные ветви. Например, сейчас почти нигде не осталось векторных обработчиков исключений. В Common Lisp Condition System тоже была возможность обрабатывать исключительную ситуацию с восстановлением. Казалось бы, почему бы и нет. Оказывается, эта особенность языка причудливо сталкивается с мониторами. Оказывается, векторный обработчик исключения запросто может вешать программу, не в силах войти в мьютекс или дождаться условной переменной. В Мезе этому пытались противостоять, на языковом уровне делая у защищённых процедур что-то типа предбанников, в которых мьютекс не взят, и доступа ко внутренним данным нет. Сейчас в языках программирования как бы надпись «Здесь живут драконы», и только через язык Меза можно на этих драконов посмотреть. Убедиться.
Другой интересной особенностью Мезы был упор на обильную многозадачность. То есть, Меза тогда — как Go сейчас.
Взгляд вверх-вниз там был сделан как прокрутка кадра. То есть, это как если бы монитор был не 4:3 формата, а 4:9, но все 3 монитора 4:3 не видно, а показывается одна треть на выбор игрока. Вертикальные линии остаются параллельными.
Маловато они наэкспериментировали. Поделюсь своими находками.
В зазеркалье можно войти по dnclip, но если его выключить, игрок застревает на месте. При попытке ходить игрок судорожно дёргается на одном месте.
В движке Билд всё состоит из секторов, границами у которых служат либо стены (белые), либо границы соседних секторов (фиолетовые). Зазеркалье всегда делают как одну комнату с белыми стенами, и только само зеркало — фиолетовая стенка. Я не видел, чтобы пробовали в зазеркалье делать соседние сектора, то есть, фиолетовые стенки, отличные от самого зеркала. Я сделал, и вот, что получилось. Эти соседние сектора уже не считаются зазеркальем. По этим секторам становится возможным ходить без читов. У этих секторов рисуется пол и потолок. Можно рядом с зеркалом или не очень рядом сделать дверь или просто проход. Идём по туннелю и приходим в зазеркалье без читов. Конечно, можно ещё телепорт сделать туда или обратно.
Движок рисует зазеркалье крайне примитивно. Скажем, я сильно растягивал комнату зазеркалья, чтоб было, где побродить. И вот стою я в зазеркалье снаружи кинотеатра, смотрю на отражённый кинотеатр и сквозь все стены вижу вдалеке зеркало, через которое я пришёл. Это если с читами ходить. Если себе тропинку сделать, то я вижу эту тропинку сквозь все стены реального мира. Например, в самом первом уровне если зазеркальная тропинка огибает здание с секретной комнатой на углу, то тропинку видно сквозь угол здания. Нашёл решение. В зазеркалье можно поставить внутренние стены (белые), и тогда при трассировке лучей эти объекты будут загораживать. На всех твёрдых (белых) стенах текстура отражения реального мира, что и хотелось добиться. Если сидеть с калькулятором, белые стены рисовать в точности в тех местах, где отражение стен реального мира, то ура, ура! Стены реального мира начинают загораживать тропинки в зазеркалье. Игрок становится жителем как бы тонкого плана, наложенного поверх обычного плотного. Трёхмерный оверлей. А если нам хочется в зазеркалье стену или столб, которые будет видно только в зазеркалье, огораживаем белую стену тончайшим слоем фиолетовой границы сектора. Всё, это уже не стена в зазеркалье, а стена в обычном секторе, она отрисуется как положено.
Я мечтал сделать карту, где бы это полностью эксплуатировалось. Из зазеркалья можно нажатиями кнопки включать ракетницу в реальном мире, стреляя по пробегающим противникам. Или самому отправлять ракетницу в телепорт. Ты их видишь, они тебя — нет. В зазеркалье можно поставить камеры и наблюдать из обычного мира. Конечно, и само зеркало можно не прятать, а сделать большое на всю улицу. По-разному можно распорядиться переходом между мирами. Можно разные команды рождать в разных мирах. Можно всех рождать в одном мире, а переход в другой мир сделать односторонним. Из реального мира в зазеркалье в один конец. Или наоборот. Можно, как в Pollen, переплести миры системой телепортов, чтоб постоянно между ними надо было прыгать. Можно сделать транспорт синхронно в зазеркалье и обычном мире. Скажем, заходим в метро, жмём кнопку, нас перевозит в зазеркалье. А в реальном мире синхронно в точку назначения приезжает пустой вагон и по прибытии открывается дверь. Из неё никто не выходит, но ясно же, что кто-то «приехал». Ещё, может быть, можно заскриптовать создание в реальном мире спрайтов отпечатков подошв, пока игроки ходят по зазеркалью.
Там нет никакой магии. Чтобы отрисовать картинку в зеркале, делается снимок камеры из зеркально отражённого ракурса изнутри зеркальной комнаты. Отражается и рисуется поверх текстуры зеркала. И это та причина, почему с маленькой зеркальной комнатой глюки. В зазеркалье неоткуда снимок сделать. В 2,5D движке Build выход за границы карты был фатален. В Build всё существует внутри секторов, а сектора соединяются. Вне секторов не просто вакуум, там ничто (астрофизики называют это текстурой).
docs.elementscompiler.com/Compiler/BackEnds/Island/LifeTimeStrategies
А как же ВШи?
Как раз напротив одного из офисов JetBrains расположены, и рядом композиция, изображающая пословицу «хуже дурака только дурак с инициативой»
Рука поднята, головы нет
Я говорю про Служение Пользователю, а не самоудовлетворение разработчика.
И Ада ещё больше, чем Delphi, про Служение Пользователю.
Не понял. Чего не хватает. Вот есть задачи, которые надо решать. На шарпе будет дико тормозить, особенно, на офисных компах старинных, закупленных сотнями, в которые ещё принудительно антивирус воткнут. На плюсах будет дико глючить. На Аде и Делфи будет работать хорошо.
Помню, Delphi сначала начали делать под .NET. Настоящее унижение, что моё любимое число 8, в долгожданной версии Delphi 8 стало проклятьем, эта Delphi ничего другого не умела. Потом какая-то муха покусала многих разработчиков, они к мёду нативных программ начали подмешивать дёготь дотнета. И МатКАД, и АвтоКАД, и не обошла беда стороной RAD Studio. Подсказки кода почему-то надо было сделать в дотнетовской части. К счастью, нашлись народные умельцы. В Delphi 10 Lite вырезано всё, что связано с дотнетом.
Вот так нативной частью программы, без трассирующей сборки мусора, народ с удовольствием пользуется, а дотнетовскую дрянь отпилит первый же риппер. А какую часть хотите писать вы?
Но AdaMagic из коробки для Linux и Windows, а на других надо что-то думать с механизмом исключений, портировать рантайм. Нет исключений — нет рантайма — нет проблем.
alastairreid.github.io/rust-verification-tools
Mesa — ещё один паскалеподобный язык программирования, в котором мониторы были встроенными. Или, наверное, лучше сказать, алголоподобный. Потому что я его смотрел, и после адско-обероновского чистописания Mesa довольно загрязнена спецсимволами. Когда Вирт делал Modula-2, он вдохновлялся Mesa, но, как можно убедиться, виртовские языки сильно почище. Я изучал материалы по Мезе из исторического интереса. Интересно поузнавать немного про отбракованные ветви. Например, сейчас почти нигде не осталось векторных обработчиков исключений. В Common Lisp Condition System тоже была возможность обрабатывать исключительную ситуацию с восстановлением. Казалось бы, почему бы и нет. Оказывается, эта особенность языка причудливо сталкивается с мониторами. Оказывается, векторный обработчик исключения запросто может вешать программу, не в силах войти в мьютекс или дождаться условной переменной. В Мезе этому пытались противостоять, на языковом уровне делая у защищённых процедур что-то типа предбанников, в которых мьютекс не взят, и доступа ко внутренним данным нет. Сейчас в языках программирования как бы надпись «Здесь живут драконы», и только через язык Меза можно на этих драконов посмотреть. Убедиться.
Другой интересной особенностью Мезы был упор на обильную многозадачность. То есть, Меза тогда — как Go сейчас.
В зазеркалье можно войти по dnclip, но если его выключить, игрок застревает на месте. При попытке ходить игрок судорожно дёргается на одном месте.
В движке Билд всё состоит из секторов, границами у которых служат либо стены (белые), либо границы соседних секторов (фиолетовые). Зазеркалье всегда делают как одну комнату с белыми стенами, и только само зеркало — фиолетовая стенка. Я не видел, чтобы пробовали в зазеркалье делать соседние сектора, то есть, фиолетовые стенки, отличные от самого зеркала. Я сделал, и вот, что получилось. Эти соседние сектора уже не считаются зазеркальем. По этим секторам становится возможным ходить без читов. У этих секторов рисуется пол и потолок. Можно рядом с зеркалом или не очень рядом сделать дверь или просто проход. Идём по туннелю и приходим в зазеркалье без читов. Конечно, можно ещё телепорт сделать туда или обратно.
Движок рисует зазеркалье крайне примитивно. Скажем, я сильно растягивал комнату зазеркалья, чтоб было, где побродить. И вот стою я в зазеркалье снаружи кинотеатра, смотрю на отражённый кинотеатр и сквозь все стены вижу вдалеке зеркало, через которое я пришёл. Это если с читами ходить. Если себе тропинку сделать, то я вижу эту тропинку сквозь все стены реального мира. Например, в самом первом уровне если зазеркальная тропинка огибает здание с секретной комнатой на углу, то тропинку видно сквозь угол здания. Нашёл решение. В зазеркалье можно поставить внутренние стены (белые), и тогда при трассировке лучей эти объекты будут загораживать. На всех твёрдых (белых) стенах текстура отражения реального мира, что и хотелось добиться. Если сидеть с калькулятором, белые стены рисовать в точности в тех местах, где отражение стен реального мира, то ура, ура! Стены реального мира начинают загораживать тропинки в зазеркалье. Игрок становится жителем как бы тонкого плана, наложенного поверх обычного плотного. Трёхмерный оверлей. А если нам хочется в зазеркалье стену или столб, которые будет видно только в зазеркалье, огораживаем белую стену тончайшим слоем фиолетовой границы сектора. Всё, это уже не стена в зазеркалье, а стена в обычном секторе, она отрисуется как положено.
Я мечтал сделать карту, где бы это полностью эксплуатировалось. Из зазеркалья можно нажатиями кнопки включать ракетницу в реальном мире, стреляя по пробегающим противникам. Или самому отправлять ракетницу в телепорт. Ты их видишь, они тебя — нет. В зазеркалье можно поставить камеры и наблюдать из обычного мира. Конечно, и само зеркало можно не прятать, а сделать большое на всю улицу. По-разному можно распорядиться переходом между мирами. Можно разные команды рождать в разных мирах. Можно всех рождать в одном мире, а переход в другой мир сделать односторонним. Из реального мира в зазеркалье в один конец. Или наоборот. Можно, как в Pollen, переплести миры системой телепортов, чтоб постоянно между ними надо было прыгать. Можно сделать транспорт синхронно в зазеркалье и обычном мире. Скажем, заходим в метро, жмём кнопку, нас перевозит в зазеркалье. А в реальном мире синхронно в точку назначения приезжает пустой вагон и по прибытии открывается дверь. Из неё никто не выходит, но ясно же, что кто-то «приехал». Ещё, может быть, можно заскриптовать создание в реальном мире спрайтов отпечатков подошв, пока игроки ходят по зазеркалью.