воскресенье, 28 апреля 2013 г.

Delphi Language для мобильной разработки

Изначальная ссылка тут - http://feedproxy.google.com/~r/Delphi2010ru/~3/b0xK9-SfJZ8/

http://embt.co/DelphiWP или вот - https://sourceforge.net/p/rumtmarc/code-0/HEAD/tree/trunk/Doc/delphilanguagemobiledevelopmentwhitepaper170413.pdf

Говорят "будет один строковый тип, с подсчётом ссылок и immutable". Ну в общем - знакомо. И в общем - правильно. Для сравнения - NSString и Il3CString. immutable! Ещё раз - это правильно. Атомарные объекты не должны менять своё состояние.

Только вот стратегию перехода ещё бы они более/менее правильную избрали бы. А не как с String/AnsiString/WideString. ShortSring vs. String - по-моему - помягче было. Или я забыл уж?

И zero-based. Т.е. индекс - с нуля, а не с единицы. Наконец-то! Я уж давно свой комплект функций написал.
Плавная замена API и RTL на helper'ы. Правильно в общем-то.

(+) - ARC - Automatic Reference Counting.

"In summary, reference counting is triggered as you assign an object to a variable and when a variable goes out of scope, regardless of the fact it is a local stack-based variable, a temporary one added by the compiler, or a field of another object. The same holds for parameters: When you pass an object as parameter to a function, the object’s reference count is incremented and when the function terminates and returns, it is decremented.
Note: Optimizing Parameters Passing: Exactly as it happens for strings, you can optimize parameters passing by using the const modifier. An object passed as a constant, doesn’t incur in the reference counting overhead. Given the same modifier can be used also on Windows, where it is useless, it is a good suggestion to update your code to use const object parameters, and const string parameters. Don’t expect a very significant speed improvement, though, as the reference counting overhead is very limited."

Слабые ссылки! Ну наконец то:

"A weak reference is a reference to an object that doesn’t increase its reference count. Given the previous scenario, if the reference from the second object back to the first one is weak, as the external variable goes out of scope, both objects will be destroyed.
Let’s look at this simple situation in code:
type
TMyComplexClass = class;
TMySimpleClass = class
private
[Weak] FOwnedBy: TMyComplexClass;
public
constructor Create();
destructor Destroy (); override;
procedure DoSomething(bRaise: Boolean = False);
end;
TMyComplexClass = class"

Интересно мне до кучи - додумались сделать СЛАБЫЕ ссылки на интерфейсы - или нет? Или надо продолжать "хоккей" с Pointer и приведением к нужному типу?

Ну и "синтаксический сахар". Перегрузка операторов для классов. Понятное дело, что она напрямую связана с подсчётом ссылок:
"3.8: BONUS FEATURE: OPERATOR OVERLOADING FOR CLASSES
There is a very interesting side effect of using ARC for memory management: the compiler can handle the lifetime of temporary objects returned by functions. One specific case is that of temporary objects returned by operators. In fact, a brand new feature of the new Delphi compiler is the ability to define operators for classes, with the same syntax and model that has been available for records since Delphi 2006."

"Смешение" интерфейсов и объектов (давно я об этом говорил):
"3.9: MIXING INTERFACES AND CLASSES
In the past, given that interface variable and standard object variables used different memory management models, it was generally suggested to avoid mixing the two approaches (like using an interface and an object variable or parameter to refer to the same object in memory).
With the new ARM compilers with ARC, the reference counting between object and interface variables is unified, so you can mix the two easily. This makes using interfaces more powerful and flexible on Delphi ARC platforms than it is on Delphi non-ARC platforms."

А вот это кстати ПРАВИЛЬНО:
"Sooner or later, the with statement is going to be deprecated and removed from the Delphi language. You can easily start removing it now from your code, and most Delphi developer will agree this is a good idea anyway, given some of the hidden pitfalls of this keyword."

with - давно напрашивается к убиению. Его бы на "переменные блока" заменить. Иначе с отрицательной устойчивостью - беда. Тот же Caption все наверное уже по сто раз не тому объекту присвоили.
------

Не удержусь. В целом всё это напоминает нашу библиотеку L3 - подсчёт ссылок, контейнеры, мапы, "юникодные"-строки. Файлеры те же кстати.

Ну и - "чем более кросс-платформенную вещь" вы хотите сделать, тем более сильно придётся "давать по рукам" собственным разработчикам.

-----
Update. Обзор от Gunsmoker'а - http://www.gunsmoker.ru/2013/05/modern-delphi.html

Комментариев нет:

Отправить комментарий