Как стать автором
Обновить
-8
0
Иван Левашев @OCTAGRAM

Фрилансер

Отправить сообщение
А кому-то штрафы за SEO опасны, за сайты, на которые простой человек даже войти не может
Хочу предложить тыжпрограммистам изначально закладывать возможность подключения из JavaScript, и поэтому чтоб в основе был WebRTC. Но при этом чтоб адреса были ipv6.

Предлагаемая схема: нарезаем в приватном пространстве ipv6 кусок, резервируем часть оставшихся битов под верхний домен. Берём publicsuffixlist, нумеруем tld и прочее его содержимое, а дальше предлагаем желающим получить место в этом пространстве регать домены вида base32.tld и поднимать там сервер WebRTC и/или WebSocket. Для обычных программ делаем движок, который через драйвер tuntap умеет установить подключение.
Я имел в виду: строки, размер которых известен динамически, но не статически, в языке Ада могут быть на стеке. Я имел в виду случай, когда выделяется не максимальный объём, а сколько надо.

Да, в Расте строки делали по подобию адских
почему декларация класса вынесена отдельно от имплементации в Delphi


Возможно, вам бы понравился Оберон. А мне не понравился. Мусорка.

Мне нравится вот так:

package Ada.Real_Time
  with Nonblocking is

  type Time is private;
  Time_First : constant Time;
  Time_Last : constant Time;
  Time_Unit : constant := implementation-defined-real-number;

  type Time_Span is private;
  Time_Span_First : constant Time_Span;
  Time_Span_Last : constant Time_Span;
  Time_Span_Zero : constant Time_Span;
  Time_Span_Unit : constant Time_Span;

  Tick : constant Time_Span;
  function Clock return Time;

  function "+" (Left : Time; Right : Time_Span) return Time;
  function "+" (Left : Time_Span; Right : Time) return Time;
  function "-" (Left : Time; Right : Time_Span) return Time;
  function "-" (Left : Time; Right : Time) return Time_Span;


То есть, вот есть Time и Time_Span. Если к Time прибавить Time_Span, получим Time. Time можно получить у функции Clock, а Time_Span можно получить как разность двух Time. Самая суть выражается, читать одно удовольствие. А детали выносятся в «примечания» (private).

Delphi, хоть и не такой мусорный язык, но там уже is private нет. Вынь да положь содержимое всех кишков на всеобщее обозрение вперемешку с действительно интересными методами.

Вот аналог на Delphi.

unit System.Diagnostics;

interface
{$HPPEMIT LEGACYHPP}

uses System.Classes, System.TimeSpan;

type
  TStopwatch = record
  strict private
    class var FFrequency: Int64;
    class var FIsHighResolution: Boolean;
    class var TickFrequency: Double;
  strict private
    FElapsed: Int64;
    FRunning: Boolean;
    FStartTimeStamp: Int64;
    function GetElapsed: TTimeSpan;
    function GetElapsedDateTimeTicks: Int64;
    function GetElapsedMilliseconds: Int64;
    function GetElapsedTicks: Int64;
    class procedure InitStopwatchType; static;
  public
    class function Create: TStopwatch; static;
    class function GetTimeStamp: Int64; static;
    procedure Reset;
    procedure Start;
    class function StartNew: TStopwatch; static;
    procedure Stop;
    property Elapsed: TTimeSpan read GetElapsed;
    property ElapsedMilliseconds: Int64 read GetElapsedMilliseconds;
    property ElapsedTicks: Int64 read GetElapsedTicks;
    class property Frequency: Int64 read FFrequency;
    class property IsHighResolution: Boolean read FIsHighResolution;
    property IsRunning: Boolean read FRunning;
  end;

implementation


Ну что, приятно такое читать? А со встроенными телами методов ещё больший кошмар.
GNAT и GNOGA бесплатные
А с чего бы ему не мочь?

Другое дело, позор тем, кто для nginx выбрал не Аду или хотя бы Паскаль. Фу таким быть
В C++ ублюдочная модульность. Пространства имён с исходниками не связаны, кто угодно может подкладывать куда угодно.

Ещё типично, когда на одной операционке #include сделал вроде бы для всего, а эти #include потащили другие #include, а на другой целевой платформе не потащили. И вот, значит, в неподходящий момент мы узнаём об этом. Сильнейшее желание свалить из этого дурдома.
Строки на стеке — это Ада, но не Delphi
PDF вывод есть в Cairo, а привязки к Cairo стараниями Мигель де Каза (GNOME) я бы ожидал найти в Mono
Любой продакшн же с чего-то начинался
Вот тут ещё движок блога сделали
Поддержка WebAssembly есть в GNAT и FPC
Если у нас можно дампить методы и аргументы любых классов и записей с расширенным RTTI, то и сам класс пробрасывается.

В dfm я видел, как это делается для органов управления:

      class MyForm(Form):
        def __init__(self, Owner):
          self.Caption = 'Subclassed form'
          self.btnClose = Button(self)
          self.btnClose.Parent = self
          self.btnClose.Caption = 'Close'
          self.btnClose.SetBounds(10, 10, 120, 30)
          self.btnClose.OnClick = self.btnCloseClick
      
          self.chkCanClose = CheckBox(self)
          self.chkCanClose.Parent = self
          self.chkCanClose.Caption = 'Can close?'
          self.chkCanClose.SetBounds(10, 50, 120, 30)
      
          self.grdTest = DrawGrid(self)
          self.grdTest.Parent = self
          self.grdTest.SetBounds(10, 100, 300, 250)
          self.grdTest.OnDrawCell = self.grdTestDrawCell
          self.grdTest.OnSelectCell = self.grdTestSelectCell
      
          self.OnCloseQuery = self.MyFormCloseQuery
          self.OnClose = self.MyFormClose
          self.Width = 400
          self.Height = 400


Как минимум Button и CheckBox здесь динамически созданы

писать com библиотеки вместо нормального кода


А с чего вдруг нормальным кодом не считается COM? Какой смысл делать кучу привязок под отдельные языки программирования, когда можно осчастливить всех разом. Я вот для Visual DialogScript сделал мост в OLE и получил возможность качать файлы по SFTP. И всё остальное, что можно делать через OLE библиотеки. 2ГИСом рулить. А так стали бы в 2ГИС делать модуль для VDS? Очень сомневаюсь.

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

+ это к сожалению только для винды


На ущербных операционках вполне пашет PyXPCOM.

Вообще, конечно, это мощный камень в огород государства. Кто как не государство должно строить недостающую инфраструктуру. На примере Jabber мы уже увидели, как коммерсы неспособны договориться.
Ну или как IBM с Apple тянули на своих плечах кроссплатформенный IBM System Object Model (Windows, OS/2, Mac OS, UNIX AIX, мэйнфреймы с OS/390). Компилятор C++ модифицировали, чтоб SOM классы генерил вместо обычных C++ классов. И интеграцию в скрипты REXX всего этого дела. Object COBOL ещё получил SOM как единственный способ делать объекты. Сторонние разработчики запилили DirectToSOM Modula-2, и стало как минимум три языка нативного программирования, между которыми работает наследование классов, есть выход в скрипты, удалённый вызов методов и все остальные прелести Middleware. Но потом пришла Java, и вроде как натив стал не нужен, а когда поняли, что нет, нужен, про былые достижения натива забыли.

Коммерсам это вспомнить будет выгодно, если у раковины будет один слив. То есть, никогда или
только для винды

или если всё запечатать в проприетарный ЯП.

Подходящее место — это университеты, как бы только их отучить смотреть в рот коммерсам, а самим творить историю.
А я не вижу. Смотрю в описание класса
  procedure SetMeUp(S: string; I : Integer);
  function DescribeMe(): string;


Смотрю как заворачивается:

  p := PyDelphiWrapper.Wrap(TTestClass.Create, soOwned);
  PythonModule.SetVar( 'DVar', p );
  PyEngine.Py_DecRef(p);


И я почитал, с TTestRTTIAccess чуть ниже более прямой пример, только на современный RTTI опирается.

Питон не умеет использовать напрямую ком объекты, для этого их оборачивают при помощи С или С++


Единый для всех win32com этим и занимается. Ну а также oleaut32.dll, в которой движок, читающий библиотеку типов из ресурсов и реализующий IDispatch для бинарных интерфейсов.
В комментариях к модулю-обёртке, в истории изменений был указан номер демо 31. Открыл и вижу:

github.com/pyscripter/python4delphi/blob/master/PythonForDelphi/Demos/Demo31/Unit1.pas#L74

Использование из Python:

github.com/pyscripter/python4delphi/blob/master/PythonForDelphi/Demos/Demo31/Unit1.dfm#L112

Да только это обёртка над ком, там используется не сама ком библиотека, она завраплена скорее всего через тот же С++.


Не понял
zabaykin.ru/?p=53 вот нашёл работу с OLE из Python

А это через RTTI:
github.com/pyscripter/python4delphi/blob/master/PythonForDelphi/Components/Sources/Core/WrapDelphi.pas

Причём, как я вижу по истории, они там с 2005го года ещё через старенький неудобный RTTI умели работать.
Ну и вы UI мессенджера на 1млн пользователей на ядрах своих серверов собрались крутить?

Надо научиться побеждать ограничения WebAssembly. Зелёные потоки, сегментированные стеки, а поверх этого RAII. Вот тогда веб станет интересным местом.
Ну вообще-то они оба происходят от языка структурного программирования Алгол, и происходило это годах очень близких, 1970 и 1971. Это Си или BCPL изуродовал Алгол, а в Паскале синтаксис просто унаследован.

Если посмотреть, допустим, на какие ЯП ГОСТы есть, там Си или чего-то с фигурными скобками в принципе нет, не смотря на одинаковый возраст Паскаля и Си. Нафиг не падали эти скобки никому, жили и жили без них.
Зато на планшетах электронная клавиатура автоматом показывается
Для нативного кода нет хорошей платформы запуска, не зависящей от OS. А у Electron вездесущий HTML5

Информация

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