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

Фрилансер

Send message
Вообще говоря, у Delphi был неплохой задел. Но Delphi — это два языка в одном. Есть один язык, в котором и есть те самые неплохие заделы, и есть язык, который поддерживается.

В первом языке проверка целочисленных переполнений и диапазонов. В первом языке открытые массивы (в терминах ISO Pascal согласованные массивы, conformant arrays). В первом языке отличные от чисел перечисления. В первом языке ARC существует пусть хотя бы на COM интерфейсах.

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

Второй язык развивается и продвигается, а первый язык прозябает в стагнации и безвестности. Вот, например, как были со времён Турбо Паскаля проверки целочисленного переполнения и диапазонов, так и остались почти без изменений. Ну разве что Assert добавились. А что, больше проверять нечего стало? nil можно было бы не ломиться разыменовывать, чтоб упереться в EAccessViolation, а проверить. А ещё, как в Ada 2005, можно дать синтаксис, чтоб запретить nil. В Ada 2005 not null может стоять везде, хоть в record. Это возможно сделать, потому что в языке Ada есть три фичи, которые делают возможным и удобным обращаться с такими структурами данных.

  1. Во-первых, при объявлении record можно сразу же и задать значение по умолчанию. Скорее всего, так не будет сделано, но возможность есть.
  2. Во-вторых, есть агрегаты, которые можно использовать везде, не только при инициализации глобальных переменных. И если значение по умолчанию не задано, а null невозможно принять по умолчанию, потому что он запрещён not null, разработчик может использовать агрегат.
  3. В-третьих, можно инициализировать любую переменную, не только лишь глобальную. В языке Ада это с первых версий, с 1983го года, в Delphi это появилось только в этом 2019м году, в версии 10.3 (Rio).


За счёт этого компилятору Ады есть, к чему принудить разработчика. Если же в Delphi всего этого не было, то пропустив азы, сразу в мир надёжности не вскочишь, но хотя бы в аргументах функций можно было бы nil запрещать. Могли. Но не сделали.

Идём далее. В ISO Pascal есть такая возможность, как conformant array parameters. В языке Ada она специального имени не имеет, но unconstrained arrays, если их принимать формальным аргументом, так себя ведут. Существует изначально, с 1983го года. В языке Delphi это называется open arrays. Существует с 90х, версия Delphi 4 или около того. В C++ что-то похожее появилось только в C++20, std::span. Можно такие параметры из обычных массивов делать, можно из динамических. Можно передать по цепочке принятый формальный аргумент такого типа. А ещё можно сузить, можно передать поддиапазон значения. Дебилизм в Delphi состоит в том, что псевдофункция Slice, единственный способ скрафтить суженное значение, может обрезать справа, но не слева, в отличие от Copy, создающей новое значение. Какого-то обоснования такому положению вещей я не вижу. Манипулируя с указателями, я могу добиться того, чтобы в функцию-таки передать обрезанный с другой стороны подмассив, но тогда компилятор не вполне способен проверить, не было ли выхода за границы диапазона. Это выглядит, будто тёмный угол, в который давно никто не заглядывал.

Ещё по мелочи хотелось бы, чтоб Boolean(5) не работал, а бросал исключение.

У меня есть опыт, как я устраивался на работу, включал в проекте проверки ошибок, и каааак повсплывало. Даже то немногое, что есть в Delphi, показало себя очень полезным.

С Адой им не тягаться, но у производителя по разным фичам была фора лет в пятнадцать прежде, чем они дойдут даже до жирафов C++. Всё это время могли бы выезжать на этой волне. И даже когда доходят, могли бы на конференциях выступить, типа

А вот вы знаете, когда вашего Rust ещё даже в проекте не было, у тех, кто программировал на Delphi, уже были и проверки диапазонов, и отлов целочисленных переполнений, и даже с барского стола перепали open arrays. Мы, правда, будучи кусками дебилов, забыли включить их по умолчанию, и чтоб уж дебилизм был последовательным, прорекламировать включить тоже забыли, но теперь-то мы исправимся. И по умолчанию включим, и Slice починим, и всё это последовательно будет, а не спонтанными подачками.


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

Языки программирования. Концепции и принципы
Кауфман В.Ш.

О книге
Рассмотрены фундаментальные концепции и принципы, воплощенные в современных и перспективных языках программирования. Представлены разные стили программирования (операционный, ситуационный, функциональный, реляционный, параллельный, объектно ориентированный). Базовые концепции и принципы рассмотрены с пяти различных позиций (технологической, авторской, математической, семиотической и реализаторской) и проиллюстрированы примерами из таких языков, как Паскаль, Симула-67, Смолток, Рефал, Ада, Модула-2, Оберон, Оккам-2, Турбо Паскаль, С++ и др. Сложность выделена как основополагающая проблема программирования, а абстракция-конкретизация и прогнозирование-контроль – как основные ортогональные методы борьбы со сложностью. На этой общей базе в книге впервые представлена цельная система концепций и принципов, создающая чёткие ориентиры в области языков программирования. На основе этой системы сформулированы оригинальные положения, указывающие перспективы развития в этой области (модули исключительных ситуаций, модули управления представлением, входовые типы и др.). Многие из них в последние годы стали реальностью. Новые подходы применены при изложении известных фактов (пошаговая модификация нормальных алгоритмов Маркова сначала до Рефала, а затем до реляционных языков, сопоставление принципов «сундука» и «чемоданчика» при создании Ады, Модулы-2 и Оберона, развитие концепции наследуемости от модульности до объектной ориентации, систематическое сопоставление концепции параллелизма в Аде и Оккаме-2, и др.). Для всех, серьёзно интересующихся программированием, в том числе научных работников, программистов, преподавателей и студентов.
Там был старый Паскаль, видимо, никаким боком не Турбо, и старая Ада 83. А сейчас актуальнее с Delphi и Free Pascal на 2020ю Аду примеры давать.
Хорошая книга


Есть опыт ознакомления?
Как давно это было

Как насчёт освежить?
Блокировка чтоб race condition не было. Что-нибудь вроде «обновить timestamp и проверить, удалось ли это сделать». Какому потоку удалось, тот и делает регулярную задачу. Для того, чтобы по HTTP API дёргать DynDNS или Яндекс.ПДД, нужно только право на исходящий HTTP.

Про хостинги


Правда, вместо былого 500Гб за 7 евро теперь 300 за 4 или 700 за 8.

И отечественный OpenVZ минимально не с 250 начинается, а с 150.
Если A запись можно поменять, то должно годиться. На что поменять, в API есть. В локалке Мегафона 10е DynDNS IP при этом работали, и 192м почему бы не работать тоже.

VPS — от 380-400 сейчас (самый фиговый, отечественный).


Самый-самый фиговый 90, а не так, чтобы очень фиговый 200-250 начинается. OpenVZ вполне доступные.

И для чего нормальные? Если жырную джаву гонять, ну да, джависты должны страдать. Платить и платить. С OpenVZ джаву попрут. Что трасирующая сборка мусора, что майнинг, одинаково расточительное использование вычислительных ресурсов. Софт, который тут уже успели насоветовать, этой проблеме не подвержен, ему роутеров хватает, не то, что современных хостингов.

У зарубежных хостингов именно самых дешёвых, кажется, нет, но те, которые у них самые дешёвые, временами предлагают сказочные характеристики. Есть один латвийский OpenVZ с 512Мб RAM (на OpenVZ нельзя ходить в своп), но 1Тб HDD. Есть германский за 7 евро в месяц с 6Гб RAM, 2 ядра, KVM, 500Гб HDD. Оверселлинг, да, но, кажется, всё работает вот уже который год. Со всеми скачками курса не знаю отечественного, чтоб мог так же, и чтоб как-то это всё же работало.

Вот это не понял. Каким образом?


Если сайт не оставляют надолго в покое посетители или хотя бы поисковики, то сделать блокировку через базу данных и выполнить код в примерно необходимое время возможно. Куча движков это умеет.
Очень непривычно, когда обычным хостингом называют shared. Самые дешёвые VPS уже не 100MHz с 16Мб памяти как 10 лет назад. VPS и есть обычный хостинг IMHO.

На shared, кажется, любой форум и любой WordPress научились cron симулировать, но если есть работающий в браузере скрипт, то проще XHR из браузера сделать.

К услугам нищебродов DynDNS, в котором можно явно указать IP, а также Яндекс.ПДД и т.п.
Типа не должно, но тема-то всплывает, значит, с какими-то ухищрениями всё же работает. Кажется, последний раз, навешивая картинку и отслеживая, загрузилась ли она, можно было отследить.

И юзер ходит по IP, а через a:visited, поняв, на какой IP, можно его-то как раз сразу и забиндить.
У старого IE и у HTML5 IFRAME есть какие-то флаги, чтоб он заткнулся и молчал в тряпочку, не мог ни window.top.location поменять, ни alert'ом бомбануть, ни пароль спросить.
proxy.pac, отбривающий домены, резолвящиеся в нехорошие IP, может быть, чуть поможет
Дофига сайтов отказываются работать, если не могут домогаться до LAN?
Да, есть. dnsmasq по дефолту, кажется, так настроен. Но он точно это умеет. И во многих нестандартных прошивках стоит именно он.

И могу сразу предложить антидот. Во всяких TP-LINK есть волшебные адреса, которые типа заменяют IP. И у TP-LINK их домены прокисают, а они ещё новые покупают, надо список поддерживать постоянно, если прямо хочется заморочиться. Также за счёт всяких NetBIOS есть шанс отрезолвить dlink.workgroup, но это не точно.

Так вот, если вместо A 192.168.0.1 отдать CNAME, дальше оно отрезолвится на роутере «куда надо» в обход безопасного, стоящего после роутера DNS.
Проверка заголовка Host устройством (и, между прочим, даже обычным сайтом) снимает кучу проблем, в том числе эту. Видел хорошие роутеры, которые отдают 302, чтоб по IP к ним заходили, а не как-то иначе.
Кажется, можно ещё через a:visited css относительно быстро пропалить, куда в админку ходит админ. Хотя если он туда хоть иногда ходит, то, наверное, с паролем дело не заладится.
Если на один и тот же ресурс зайти через день-два, когда кончится DNS провайдера, всё равно сработает. Вероятность чуть меньше, да.

Information

Rating
3,472-nd
Location
Барнаул, Алтайский край, Россия
Date of birth
Registered
Activity