Pull to refresh
20
0.4
Геннадий Малинин @HemulGM

Программист Delphi

Send message

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

Что ж вы за ерунду-то несете? const перед аргументом строки ставить пробовали?

Накидано на вентилятор, если честно.

Mozilla давно Rust разрабатывает. И Delphi тут не при чем. На нём они его и делают. Это раз.

Два, Delphi не только быстро компилирует, но и работает не хуже, чем C++. Медленнее, местами, не спорю, т.к. не все новые инструкции поддерживает компилятор (например, векторные), но то ли ещё будет.

А тяп-ляп и в продакшен - это вы про современный веб.

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

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

Чистых исходников Chromium на Delphi (как и на любом языке, кроме плюсов), нет. Есть просто Cef (обертки).

В современном "Паскале" (Delphi) есть это всё, кроме, наверно, LINQ (имеется ввиду именно особый синтаксис LINQ, а не только особая работа со списками как с датасетами) и срезов.

Не Шарп, а в дополнение к стандартным конструкциям Паскаля, некоторые конструкции, которые есть в C#. Типа лямбд, LINQ, срезов.

Одной строкой нет, предикат может быть анонимной функцией, но не лямбдой. Лямбд пока нет. Т.е. в любом случае будет на 3 сроки больше. Но да, "одной" строкой можно.

Какой несуществующий код? Это тип определяет ограничения на количество

TArraySlice = array[0..4] of integer;

Чтоб к нему можно было привести указатель. И по этому указателю передавать. Мы говорим тому, кто принимает такой параметр, что указатель на данные - это всего 5 элементов интов, а с какого места начинать указываем в передаче параметра.

Это и будет без копирования) главное передавать по ссылке, а не присваивать в переменные. Передача и чтение будет как надо. Не переживай)

Всм не гуглится, этот тип я выше сам придумал

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

Enumerator - сам как предикат, класс, который его реализовал принимает твой предикат, а енумератор генерируется на его основе (твоего предиката). Enumerator - используется как результат работы списка с предикатом

Если мы впихнули в переменную, то уже копия. А задача стояла в передаче как параметр без копирования.

В моем примере я присвоил переменной значение, а не передал как указатель.

При передаче резолвить указатель не надо, а привести после к типу

Ты просто не понимаешь, что такое TEnumerable. Это просто абстрактный класс, который позволяет сверху реализовать методы Current и MoveNext. И более ничего. Сам он ничего не хранит

var ArrSource := [1, 2, 3, 4, 5, 6, 7, 8, 9, 0];

type
  TArraySlice = array[0..4] of integer;

var ArrSlice: TArraySlice;
ArrSlice := TArraySlice((@ArrSource[3])^); //4, 5, 6, 7, 8

//Будет требоваться любой record
TType1<T: record> = class     

//Будет требоваться любой класс
TType2<T: class> = class     

//Будет требоваться любой класс, в котором реализован коснтруктор Create
TType3<T: class, constructor> = class     

//Будет требоваться класс TMyClass или наследники и поддерживается интерфейс ISomeIntf
TType4<T: TMyClass, ISomeIntf> = class     

//Будет требоваться класс TMyClass или наследники и TList<T> где T - TMyClass
TType5<T: TMyClass; T2: TList<T>> = class     

И так далее. Пример из боевого проекта:

type
  TProcEntityList<TItem: TEntity, constructor; TList: TPageEntityList<TItem>;
  TParams: TJSONParamList, constructor> = reference to function(out List: TList;
    Params: TParams; out Error: TErrorMessage): Boolean;

  TProcBasicList<TItem: TEntity, constructor, IBasicItemList;
  TList: TEntityList<TItem>; TParams: TJSONParamList, constructor> = reference
    to function(out List: TList; Params: TParams;
    out Error: TErrorMessage): Boolean;

Ну по твоей задаче достаточно просто передать указатель и длину, или привести указатель к массиву длинной 30-5. Копирования не будет, будет указатель на память.

TEnumerable<T> - абстракция, которая позволяет создать последовательность, даже не из последовательных данных. На его основе созданы все списки. В частности TList<T> который является предком многих других. И вот TList<T> имеет возможность задать предикат для поиска и сортировки.

Если честно, я не уверен, что Delphi отстает от C++ в RTL, но однозначно отстает в кол-ве сторонних библиотек. При чем отстает не столько по библиотекам решающим современные проблемы, сколько по тем, что создавались между 2005-2015 годами для C++. А это значительный пробел. И приходится эти библиотеки брать из C++.

Посмотрел почти весь список (конечно, только по названиям заголовков). Могу сказать, что Делфи вообще не отстает в этом. Возможно, даже обгоняет.

Очевидно, конечно, что полного пересечения всего что есть в плюсах в std и в delphi RTL нет. Но. В Делфи тоже очень много обобщенного программирования, работа с итераторами, диапазонами и прочим.

Вот тут кусочек по обобщенным спискам разного рода

Тут часть методов для работы с датой и временем

Там прям очень дохрена

Работа с символами

Со строками

А так же с сетью, регулярками, масками, аналитикой, хешем, json, файлами и фс, с кодировкой, объектами синхронизации, архивацией и ещё много-много всего.

Глянуть можно тут https://docwiki.embarcadero.com/Libraries/Athens/en/System

1
23 ...

Information

Rating
1,675-th
Location
Екатеринбург, Свердловская обл., Россия
Date of birth
Registered
Activity

Specialization

Software Developer, Fullstack Developer
Senior
From 180,000 ₽
Delphi
SQL
Database
Git
REST
C#
Python
OOP
MySQL
PHP