Re[3]: Химик, что там сейчас в Дельфе?
От: loginx  
Дата: 26.01.19 17:14
Оценка:
Здравствуйте, alex_public, Вы писали:


_>Основная причина упадка Delphi в том, что эта платформа была хороша только для очень узкой категории ПО: только десктоп, только винда, желательно что-нибудь с кучей формочек и без требования производительности.


1) В Дельфи есть C++ https://www.embarcadero.com/ru/products/cbuilder

2) Дельфи прекрасно делает все что надо для Андроид, отличные очень быстрые приложения
потому что в этой RAD C++ и Паскаль компилятся в машинные коды

3) про мало библиотек это откровенный бред, на самом деле их конечно огромное гигантское необозримое кол-во.

Для десктопа на Дельфи например очень серьезная работающая в реальном времени многопользовательская сиcтема Инфинити https://www.inteltelecom.ru/
Re[4]: Химик, что там сейчас в Дельфе?
От: Khimik  
Дата: 26.01.19 17:53
Оценка:
L>2) Дельфи прекрасно делает все что надо для Андроид, отличные очень быстрые приложения
L>потому что в этой RAD C++ и Паскаль компилятся в машинные коды

Это вы про Firemonkey? Так он вроде совершенно глючный.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[6]: Химик, что там сейчас в Дельфе?
От: Teolog  
Дата: 26.01.19 19:46
Оценка:
K>Ну вот в Delphi XE8 есть рекорды с процедурами и функциями. По-моему, их можно назвать статическими классами.
K>Скажем, есть у меня рекорд — вектор (три координаты):

А теперь сравни вот с этим https://glm.g-truc.net/0.9.9/index.html
сразу все что можно и нельзя из коробки с вариациями 2,3,4 координаты double/float и поддержкой полного набора векторной алгебры включая кватернионы и SSE.
Все header only. делаешь git clone себе в подкаталог и инклудишь. Оттестированный кучей народу набор классов готов к работе.
Или потратить неделю другую чтобы получить велосипед с кривыми колесами.

По поводу Embarcadero с++ 10 Seattle/Berlin — остался один раритетный проект на нем, страшная дрянь. Чтобы было понятно- штатный линкер содержит ошибку которая рандомно вышибает его в x64 системах при сборке. И решаеться это сторонней кривой утилитой которую приспособил посторонний человек, официального фикса нет много лет.Для поддержки x64 и С++11 вкорячили clang доработанный напильником, но компоненты на версии Seattle, оно собирать не умеет, багфикс есть в рамках платной поддержки которая стоит в год как половина лицензии, а лицензия как 10 Visual Studio. В общем в этом году переписали один проект, еще через пару добьем последний, и тожественно и с плясками сожжем лицензию на этот кусок субстанции.
Re[5]: Химик, что там сейчас в Дельфе?
От: loginx  
Дата: 26.01.19 21:00
Оценка:
Здравствуйте, Khimik, Вы писали:

L>>2) Дельфи прекрасно делает все что надо для Андроид, отличные очень быстрые приложения

L>>потому что в этой RAD C++ и Паскаль компилятся в машинные коды

K>Это вы про Firemonkey? Так он вроде совершенно глючный.


это что за бред из 19 века?!
уже много лет ничего нигде не глючит и прекрасно работает, года 3 как использую для андроид не вижу никаких глюков
да и вы просто скачайте Дельфи и убедитесь что сделать средней сложности андроид апликуху займет 5 минут и ничего нигде не глючит

ну ладно не буду рекламировать, мне не платят да и в принципе меньше народу больше кислороду
Re[6]: Химик, что там сейчас в Дельфе?
От: Lazy Bear Канада  
Дата: 26.01.19 21:06
Оценка: +5
Здравствуйте, Khimik, Вы писали:

K>type

K>TVect=record
K>x,y,z:double;
K>function VectRad:double;//Длина вектора
K>function VectRad2:double;//Квадрат длины
K>function IsNil:boolean;//Равен ли нулю
K>function MinVect:tvect;//Поменять все знаки
K>end;

С некоторых пор меня стали сильно удивлять такие имена переменных, функций и классов, для которых нужно тут же писать объясняющий комментарий.
Кто такой VectRad? При чем тут радианы, если речь о длине? Или речь о какой-то радости? MinVect, судя по названию, должен возвращать какой-то минимизированный вектор

Почему бы не сделать так, например:

TVector = record
  x, y, z: Double;
  function GetLength: Double;
  function GetSquareLength: Double;
  function IsZeroLength: Boolean;
  function InvertAllSigns: TVector;
end;


И выглядит каноничненько и комментарии тут сто лет не нужны

Лучше дать хорошее имя и не экономить на его длине (никакого смысла в такой экономии давно нет), чем через пару месяцев расшифровывать свои же собственные сокращения.
Re[7]: Химик, что там сейчас в Дельфе?
От: Khimik  
Дата: 27.01.19 08:09
Оценка:
K>>type
K>>TVect=record
K>>x,y,z:double;
K>>function VectRad:double;//Длина вектора
K>>function VectRad2:double;//Квадрат длины
K>>function IsNil:boolean;//Равен ли нулю
K>>function MinVect:tvect;//Поменять все знаки
K>>end;

LB>С некоторых пор меня стали сильно удивлять такие имена переменных, функций и классов, для которых нужно тут же писать объясняющий комментарий.

LB>Кто такой VectRad? При чем тут радианы, если речь о длине? Или речь о какой-то радости? MinVect, судя по названию, должен возвращать какой-то минимизированный вектор

LB>Почему бы не сделать так, например:


LB>
LB>TVector = record
LB>  x, y, z: Double;
LB>  function GetLength: Double;
LB>  function GetSquareLength: Double;
LB>  function IsZeroLength: Boolean;
LB>  function InvertAllSigns: TVector;
LB>end;
LB>


LB>И выглядит каноничненько и комментарии тут сто лет не нужны


LB>Лучше дать хорошее имя и не экономить на его длине (никакого смысла в такой экономии давно нет), чем через пару месяцев расшифровывать свои же собственные сокращения.


You are right.
На форуме уже обсуждали
Автор: Khimik
Дата: 20.01.16
, стоит ли переписывать старый дерьмокод, и я пришёл к выводу, что обычной такой код переписывать НЕ следует.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[7]: Химик, что там сейчас в Дельфе?
От: Ops Россия  
Дата: 27.01.19 09:22
Оценка:
Здравствуйте, Lazy Bear, Вы писали:

LB>Почему бы не сделать так, например:


LB>
LB>  function GetSquareLength: Double;
LB>


Все равно непонятно.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[8]: Химик, что там сейчас в Дельфе?
От: Lazy Bear Канада  
Дата: 27.01.19 17:24
Оценка:
Здравствуйте, Ops, Вы писали:

LB>>
LB>>  function GetSquareLength: Double;
LB>>


Ops>Все равно непонятно.


Ваши предложения?
Re[9]: Химик, что там сейчас в Дельфе?
От: Ops Россия  
Дата: 27.01.19 17:53
Оценка: +1
Здравствуйте, Lazy Bear, Вы писали:

LB>Здравствуйте, Ops, Вы писали:


LB>>>
LB>>>  function GetSquareLength: Double;
LB>>>


Ops>>Все равно непонятно.


LB>Ваши предложения?


Если это квадрат длины (единственный на мой взгляд осмысленный вариант), то он внутри класса не нужен.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[10]: Химик, что там сейчас в Дельфе?
От: Khimik  
Дата: 27.01.19 18:11
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Здравствуйте, Lazy Bear, Вы писали:


LB>>Здравствуйте, Ops, Вы писали:


LB>>>>
LB>>>>  function GetSquareLength: Double;
LB>>>>


Ops>>>Все равно непонятно.


LB>>Ваши предложения?


Ops>Если это квадрат длины (единственный на мой взгляд осмысленный вариант), то он внутри класса не нужен.


Предлагаю подумать самостоятельно, для чего нужна эта функция.
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[11]: Химик, что там сейчас в Дельфе?
От: Ops Россия  
Дата: 27.01.19 18:15
Оценка:
Здравствуйте, Khimik, Вы писали:

K>Предлагаю подумать самостоятельно, для чего нужна эта функция.


Вот я и подумал, и единственное до чего по названию додумался. Все остальные варианты перевода — бред. Напиши по-человечески или выкинь.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[7]: Химик, что там сейчас в Дельфе?
От: swame  
Дата: 27.01.19 19:52
Оценка:
Здравствуйте, Lazy Bear, Вы писали:

LB>Здравствуйте, Khimik, Вы писали:



LB>С некоторых пор меня стали сильно удивлять такие имена переменных, функций и классов, для которых нужно тут же писать объясняющий комментарий.

LB>Кто такой VectRad? При чем тут радианы, если речь о длине? Или речь о какой-то радости? MinVect, судя по названию, должен возвращать какой-то минимизированный вектор

LB>Почему бы не сделать так, например:


LB>
LB>TVector = record
LB>  x, y, z: Double;
LB>  function GetLength: Double;
LB>  function GetSquareLength: Double;
LB>  function IsZeroLength: Boolean;
LB>  function InvertAllSigns: TVector;
LB>end;
LB>


LB>И выглядит каноничненько и комментарии тут сто лет не нужны


LB>Лучше дать хорошее имя и не экономить на его длине (никакого смысла в такой экономии давно нет), чем через пару месяцев расшифровывать свои же собственные сокращения.


То они требуют перегрузку операторов, то сразу убивают достигнутую с их помощью читаемость длиннющими названиями, заставляющими тратить мозг при чтении и так сложных формул на всякие мусорные GetXXXXXXXXXXXXXXXXXXX. Выучить несколько деcятсков коротких операторов на 3-4 когда копаещься в большой библиотеки матана несложно, зато разбирать потом код потом легче. Ну конечно эти короткие выражения должны нести какой то смысл.
Вот пример из моей библиотеки. Сейчас бы я сократил кое -какие операторы
  THPointF = record helper for TFloatPoint
  private
    function GetLen: Double;
    procedure SetLen(const Value: Double);
    function GetStr: string;
    procedure SetStr(const Value: string);
    function GetStrC: string;
  public
    constructor Create (const SX, SY: string); overload;
    function Px2Sx (K: single=1.0): TSxPoint; overload;
    function Sx2Px (K: single=1.0): TPxPoint; overload;
    function Px2Sp (K: single=1.0): TPoint; overload;
    function Sx2Pp (K: single=1.0): TPoint; overload;
    function Presise (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
    function IsHor (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsVert (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsOrtho (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsHor (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsVert (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function IsOrtho (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
    function Neg: TPointF;
    function DistFast(const P2 : TPointF) : Double;
    function Mul(K: single): TPointF;
    function RoundF: TPointF;
    function GP: TGPPointF;
    function AlignDif: TFloatPoint;
    function IsAligned: boolean;
    function Scalar(const P2 : TPointF): Double;
    function PseudoScalar(const P2 : TPointF): Double;
    function ColLinear(const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
    function RotateD (Angle: single; const CP: TFloatPoint): TFloatPoint; overload;
    function RotateD (Angle: single): TFloatPoint; overload;
    function RotateR (Angle: single; const CP: TFloatPoint): TFloatPoint; overload;
    function RotateOrient(Orient: integer): TFloatPoint; overload;
    function RotateOrient(Orient: integer; const CP: TFloatPoint): TFloatPoint; overload;
    function RotateR (Angle: single): TFloatPoint; overload;
    procedure Mirror;
    function MirrorTo (bMirror: boolean=true): TFloatPoint;
    function OffsetTo(const DX, DY: Single): TFloatPoint; overload;
    function OffsetTo(const Point: TPointF): TFloatPoint; overload;
    function OffsetTo(const Size: TSize): TFloatPoint; overload;
    function AngleD (const Center: TPointF): single;
    function AngleR (const Center: TPointF): single;
    function SetLenRes(const Value: Double): boolean;
    function Interpolation(const P2 : TPointF; K: single): TPointF;
    {точка на расстоянии ALength от начала}
    function VectorByLength (const P2 : TPointF; ALength: single): TPointF;
    function Middle(const P2: TFloatPoint): TFloatPoint;
    function Arctan2D (K: single = 1): single;
    function Arctan2R (K: single = 1): single;
    procedure StrXY (out SX, SY: string);
    property Len: Double read GetLen write SetLen;
    property Str: string read GetStr write SetStr;
    property StrС: string read GetStrC write SetStr;
  end;

  TFloatEllipseArc = record
  const
    YNOT_X : double = 1;
  private
    function PA (A: single): TFloatPoint;
    function GoldenDistanceP(const P: TFloatPoint; AR1, AR2: single; var NearestP: TFloatPoint): single;
    function ApproximateAngle (A1, A2: single): TPolygon;
  public
    R: TFloatRect; //границы
    P3, P4: TFloatPoint; //концы
    bClockWise: boolean; //по часововй стрелке
    constructor Create (const AR: TFloatRect; const AP3, AP4: TFloatPoint; AClockWise: boolean = false);
    constructor CreateEllipse (const AR: TFloatRect); overload;
    constructor CreateEllipse (const AR: TRect); overload;
    function Perimeter: double; //вычисление полного периметра
    function ah: double;
    function bh: double;
    function IsCircle: boolean;
    function IsZero: boolean;
    function Len: double;
    function CantrellQuater: double;
    function Salter (a, b, alpha: double): double;
    function Salter1 (a, b, alpha: double): double;
    function Len_Integral (a, b, alpha: double): double;
    function LengthP (const P: TFloatPoint): double; //длина от начала до заданной точки
    function CrossRay (const P: TFloatPoint): TFloatPoint;
    function CrossArc (const Arc: TFloatEllipseArc; var CP: TPolygon): integer;
    function CrossEllipse (const Ellipse: TRectF; var CP: TPolygon): integer;
    function CrossEllipseEllipse (const Ellipse: TRectF; var CP: TPolygon): integer;
    function CrossEllipseEllipse1 (const Ellipse: TRectF; var CP: TPolygon): integer;
    function CrossPolygonEllipse (const Polygon: TPolygon; const Ellipse: TRectF; var CP: TPolygon): integer;
    function CrossPolygonArc (const Polygon: TPolygon; Arc: TFloatEllipseArc; var CP: TPolygon): integer;
    function Tangential(const P: TFloatPoint): TFloatPoint;
    function Approximate: TPolygon;
    function ApproximateEllipse: TPolygon;
    function LengthPCircle (const P: TFloatPoint): double; //длина от начала до заданной точки в любом направлении
    function PointDistantly (D: single): TFloatPoint; //точка на расстоянии D от начала (P3) вдоль дуги
    function Contains (const P: TFloatPoint; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
    function ContainsCircle (const P: TFloatPoint; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
    function DistanceP(const P: TFloatPoint; var NearestP: TFloatPoint): single;
    function DistanceCircleP(const P: TFloatPoint; var NearestP: TFloatPoint): single;
    function Bounds: TFloatRect;
  end;
Отредактировано 27.01.2019 20:10 swame . Предыдущая версия . Еще …
Отредактировано 27.01.2019 20:07 swame . Предыдущая версия .
Отредактировано 27.01.2019 19:53 swame . Предыдущая версия .
Re[8]: Химик, что там сейчас в Дельфе?
От: Lazy Bear Канада  
Дата: 27.01.19 20:31
Оценка:
Здравствуйте, swame, Вы писали:

LB>>Лучше дать хорошее имя и не экономить на его длине (никакого смысла в такой экономии давно нет), чем через пару месяцев расшифровывать свои же собственные сокращения.


S>То они требуют перегрузку операторов, то сразу убивают достигнутую с их помощью читаемость длиннющими названиями, заставляющими тратить мозг при чтении и так сложных формул на всякие мусорные GetXXXXXXXXXXXXXXXXXXX. Выучить несколько деcятсков коротких операторов на 3-4 когда копаещься в большой библиотеки матана несложно, зато разбирать потом код потом легче. Ну конечно эти короткие выражения должны нести какой то смысл.


Речь не о длинных или коротких именах, а о понятных. Подбирать удачные имена — не важно, длинные или короткие — не такая уж простая задача.
Постоянно вижу у коллег неоднозначные названия на code review. Спрашиваю — что оно у тебя делает? — Вот это. — Так назови же соответствующим образом, например ХХХХХХХ. Так лучше? — Да, гораздо лучше!
Но в следующий раз будет опять то же самое

Меж прочим, Orient (англ) — Восток. А где тогда у тебя Occident?
А если имеется в виду Orientation, то какие допустимые возвращаемые значения? 0|1, или градусы, или радианы, или что-то свое?

S>Вот пример из моей библиотеки. Сейчас бы я сократил кое -какие операторы


Вот, сократи VectorByLength до VecByLen. Мощная экономия получится в эпоху code completion
Re[8]: Химик, что там сейчас в Дельфе?
От: Khimik  
Дата: 27.01.19 21:51
Оценка:
LB>>И выглядит каноничненько и комментарии тут сто лет не нужны

LB>>Лучше дать хорошее имя и не экономить на его длине (никакого смысла в такой экономии давно нет), чем через пару месяцев расшифровывать свои же собственные сокращения.


S>То они требуют перегрузку операторов, то сразу убивают достигнутую с их помощью читаемость длиннющими названиями, заставляющими тратить мозг при чтении и так сложных формул на всякие мусорные GetXXXXXXXXXXXXXXXXXXX. Выучить несколько деcятсков коротких операторов на 3-4 когда копаещься в большой библиотеки матана несложно, зато разбирать потом код потом легче. Ну конечно эти короткие выражения должны нести какой то смысл.

S>Вот пример из моей библиотеки. Сейчас бы я сократил кое -какие операторы
S>
S>  THPointF = record helper for TFloatPoint
S>  private
S>    function GetLen: Double;
S>    procedure SetLen(const Value: Double);
S>    function GetStr: string;
S>    procedure SetStr(const Value: string);
S>    function GetStrC: string;
S>  public
S>    constructor Create (const SX, SY: string); overload;
S>    function Px2Sx (K: single=1.0): TSxPoint; overload;
S>    function Sx2Px (K: single=1.0): TPxPoint; overload;
S>    function Px2Sp (K: single=1.0): TPoint; overload;
S>    function Sx2Pp (K: single=1.0): TPoint; overload;
S>    function Presise (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
S>    function IsHor (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
S>    function IsVert (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
S>    function IsOrtho (Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
S>    function IsHor (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
S>    function IsVert (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
S>    function IsOrtho (const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY) : boolean; overload;
S>    function Neg: TPointF;
S>    function DistFast(const P2 : TPointF) : Double;
S>    function Mul(K: single): TPointF;
S>    function RoundF: TPointF;
S>    function GP: TGPPointF;
S>    function AlignDif: TFloatPoint;
S>    function IsAligned: boolean;
S>    function Scalar(const P2 : TPointF): Double;
S>    function PseudoScalar(const P2 : TPointF): Double;
S>    function ColLinear(const P2 : TPointF; Epsilon: Single=FLOATPOINT_ACCURACY): boolean;
S>    function RotateD (Angle: single; const CP: TFloatPoint): TFloatPoint; overload;
S>    function RotateD (Angle: single): TFloatPoint; overload;
S>    function RotateR (Angle: single; const CP: TFloatPoint): TFloatPoint; overload;
S>    function RotateOrient(Orient: integer): TFloatPoint; overload;
S>    function RotateOrient(Orient: integer; const CP: TFloatPoint): TFloatPoint; overload;
S>    function RotateR (Angle: single): TFloatPoint; overload;
S>    procedure Mirror;
S>    function MirrorTo (bMirror: boolean=true): TFloatPoint;
S>    function OffsetTo(const DX, DY: Single): TFloatPoint; overload;
S>    function OffsetTo(const Point: TPointF): TFloatPoint; overload;
S>    function OffsetTo(const Size: TSize): TFloatPoint; overload;
S>    function AngleD (const Center: TPointF): single;
S>    function AngleR (const Center: TPointF): single;
S>    function SetLenRes(const Value: Double): boolean;
S>    function Interpolation(const P2 : TPointF; K: single): TPointF;
S>    {точка на расстоянии ALength от начала}
S>    function VectorByLength (const P2 : TPointF; ALength: single): TPointF;
S>    function Middle(const P2: TFloatPoint): TFloatPoint;
S>    function Arctan2D (K: single = 1): single;
S>    function Arctan2R (K: single = 1): single;
S>    procedure StrXY (out SX, SY: string);
S>    property Len: Double read GetLen write SetLen;
S>    property Str: string read GetStr write SetStr;
S>    property StrС: string read GetStrC write SetStr;
S>  end;
S>




Поясните пожалуйста, что значит helper for TFloatPoint?
А TFloatPoint — это общее обозначение для single, double, extended? Это обозначение прошито в кишках среды или где-то в конкретном коде?
"Ты должен сделать добро из зла, потому что его больше не из чего сделать". АБ Стругацкие.
Re[9]: Химик, что там сейчас в Дельфе?
От: swame  
Дата: 28.01.19 07:22
Оценка:
Здравствуйте, Khimik, Вы писали:




K>Поясните пожалуйста, что значит helper for TFloatPoint?

K>А TFloatPoint — это общее обозначение для single, double, extended? Это обозначение прошито в кишках среды или где-то в конкретном коде?

TFloatPoint это наш внутренний синоним для TPointF из System.Types,
сложился исторически из времен, когда таких типов в Delphi не было.
Re[9]: Химик, что там сейчас в Дельфе?
От: · Великобритания  
Дата: 28.01.19 14:16
Оценка: +1
Здравствуйте, Lazy Bear, Вы писали:

LB>>> function GetSquareLength: Double;

Ops>>Все равно непонятно.
LB>Ваши предложения?
Так ведь не "длина квадрата" же, а "квадрат длины" — LengthSquared, конечно.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[7]: Химик, что там сейчас в Дельфе?
От: Ops Россия  
Дата: 28.01.19 16:52
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

MD>если не считать этого мега-костыляки Synchronize, который все радостно начинают пихать сразу после прочтения мануала


А как еще? Врукопашную сообщения слать, или переделывать цикл их обработки в GUI-потоке, дополнительно проверяя кучу разных примитивов?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[9]: Химик, что там сейчас в Дельфе?
От: Ops Россия  
Дата: 28.01.19 17:00
Оценка:
Здравствуйте, Lazy Bear, Вы писали:

LB>Речь не о длинных или коротких именах, а о понятных. Подбирать удачные имена — не важно, длинные или короткие — не такая уж простая задача.

LB>Постоянно вижу у коллег неоднозначные названия на code review. Спрашиваю — что оно у тебя делает? — Вот это. — Так назови же соответствующим образом, например ХХХХХХХ. Так лучше? — Да, гораздо лучше!
LB>Но в следующий раз будет опять то же самое

Так именование сущностей да инвалидация кеша — основные проблемы, остальное все решается куда проще.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[7]: Химик, что там сейчас в Дельфе?
От: Kerk Россия  
Дата: 28.01.19 18:59
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

E>>Однако. Может там еще и стандартная библиотека нормальная появилась? Коллекции там нормальные, всякие мапы, поддержка многопоточности?


MD>Класс TThread появился ещё в Delphi2, если память не изменяет. Так что, многопоточность завезена давно и достаточно удобно (если не считать этого мега-костыляки Synchronize, который все радостно начинают пихать сразу после прочтения мануала).


Он наверно что-то более модное имел ввиду
http://docwiki.embarcadero.com/RADStudio/Rio/en/Using_the_Parallel_Programming_Library
No taxation without representation
Re[4]: Химик, что там сейчас в Дельфе?
От: alex_public  
Дата: 29.01.19 01:56
Оценка:
Здравствуйте, loginx, Вы писали:

_>>Основная причина упадка Delphi в том, что эта платформа была хороша только для очень узкой категории ПО: только десктоп, только винда, желательно что-нибудь с кучей формочек и без требования производительности.

L>1) В Дельфи есть C++ https://www.embarcadero.com/ru/products/cbuilder

А ты что называешь словом Дельфи то? ) Автор изначально писал про сравнение языков (про C++, C# и т.п.). А ты похоже имел в виду некую IDE или что? )

L>2) Дельфи прекрасно делает все что надо для Андроид, отличные очень быстрые приложения


Т.е. я могу написать одно приложение (с GUI естественно) и оно будет без проблем работать на Android/Windows/iOS/OSX? Скажем на C++ это сейчас без проблем делается...

L>потому что в этой RAD C++ и Паскаль компилятся в машинные коды


Эм, а где это сейчас C++ и Паскаль компилируются не в машинные коды? Не, ну есть конечно WebAssembly, но это отдельная тема, требующая специальных тулчейнов.

L>3) про мало библиотек это откровенный бред, на самом деле их конечно огромное гигантское необозримое кол-во.


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