Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Вопросы по Embarcadero RAD Studio XE5-XE8,10.x(Seattle, Berl

Автор: Frodo_Torbins
Дата сообщения: 02.02.2016 11:53
AlexCoRu
А зачем там SyncAppMain.pas?
Размер 10Мб намекает на то, что в файле присутствует отладочная информация. Откройте откомпилированный файл каким-нибудь анализатором PE-файлов, и гляньте, что внутри. Список вкомпилированных юнитов в ресурсах тоже стоит глянуть.
А вообще директивы удаления RTTI на откомпилированые юниты не действуют. То есть всякие ShlObj нужно ложить в папку вместе с проектом, и вставлять туда эти директивы.
Автор: AlexCoRu
Дата сообщения: 03.02.2016 08:47
Frodo_Torbins, SyncAppMain.pas случайно туда попал. Отладочной инфы нет, а вот если самому импортировать вызовы, не юзать стандартные модули, то в RS10 размер значительно уменьшается.

Нашёл вот что:
_http://www.delphibasics.info/home/delphibasicsarticles/smallapplicationsindelphibyn0v4
_http://www.delphibasics.info/home/delphibasicssnippets/smallestsystempasandsysinitpas-windowsxpvista7

На delphi 7 замена system и sysinit проходит и проект работает. А RS10: SysInit.pas(1) Fatal: E2272 Cannot use reserved unit name 'SysInit'. Это можно как-то обойти?

И ещё проблемка, на RS10 со "своими" импортами 64 разрядное приложение собирается, но при выполнении ошибки. Например, RegisterClassA - ошибка 87 неверный параметр. 32х - без ошибок. Это что-то с типами данных, покопаю.
Автор: Tulnov
Дата сообщения: 03.02.2016 20:13
У кого-нибудь запускается Rad Studio 10 Seattle (лицензия или крякнутая) на Windows 10 x64 build 14251? У меня после установки этого билда слетела лицензия (точнее, при запуске сразу выкидывает на страницу "Product or License Validation Error"). Удаление, чистка и переустановка не помогли. В саппорте ответили:

We are aware of the issue but we cannot guarantee a correct behavior of the IDE on a preview insider build of Windows. We have an internal bug report (id: RS-74494) and we are working on a possible fix (if it applies). Other software applications (as Github and ownCloud clients or Kaspersky antivirus) are having the same kind of issues with this build so we still don't know if this is actually a Microsoft Windows bug. Other customers have reported than downgrading to the previous Windows 10 build solves the problem. Nowadays that is the only solution we can provide.

К слову, откатится у меня уже не получится
Автор: Frodo_Torbins
Дата сообщения: 03.02.2016 21:03
AlexCoRu
Юниты system и sysinit для каждой версии делфи, и для каждого ее сервиспака, свои. Нельзя взять юниты пятилетней давности, и надеяться, что они заработают со свежими Делфями.
На счет отладочной информации я сильно сомневаюсь, у вас в батниках маловато запрещающих ключей для этого. А сам бинарник вы не выложили.
64-битный компилятор был бажный в релизе Сиэтла, нужно ставить сервиспак.
Автор: AlexCoRu
Дата сообщения: 04.02.2016 08:31

Цитата:
Нельзя взять юниты пятилетней давности, и надеяться, что они заработают со свежими Делфями.
system.pas и sysinit.pas - пустые. Дело в том, что RS10 не даёт скомпилировать sysinit.pas, поэтому речи о том, что "заработают, не заработают" нет. Но system.pas можно уменьшить.
У меня RS10 SP1. Определил так
Код: type
ATOM = Word;
BOOL = LongBool;
PBOOL = ^BOOL;
DWORD = LongWord;
PDWORD = ^DWORD;
LCID = DWORD;
LONGLONG = Int64;
UINT = LongWord;
ULONG = Cardinal;
ULONGLONG = UInt64;
WCHAR = WideChar;
{$IFDEF VER300}
INT_PTR = NativeInt;
UINT_PTR = NativeUInt;
HWND = type UINT_PTR;
HICON = type UINT_PTR;
HMENU = type UINT_PTR;
HBRUSH = type UINT_PTR;
WPARAM = UINT_PTR;
LPARAM = INT_PTR;
LRESULT = INT_PTR;
{$ELSE}
INT_PTR = Integer;
UINT_PTR = Cardinal;
HWND = type LongWord;
HICON = type LongWord;
HMENU = type LongWord;
HBRUSH = type LongWord;
WPARAM = Longint;
LPARAM = Longint;
LRESULT = Longint;
{$ENDIF}
HCURSOR = HICON;
Автор: protoror
Дата сообщения: 04.02.2016 08:56
AlexCoRu
возьму на заметку, спасибо
Автор: VadimLou
Дата сообщения: 04.02.2016 19:02
Для сборки системных модулей нужен спец ключ "-y" для компилятора (см. source\rtl\RTL.Build.targets).
Я успешно пересобираю System,SysInit так:
dcc64.exe -q system -m -y -z -$D+,L+,O-,B-,C- ...
Для сборки других модулей этот ключ нужно убрать.
Автор: AlexCoRu
Дата сообщения: 05.02.2016 09:08
А, понял. В D7 прокатывало dcc32.exe system.pas sysinit.pas, в RS10 уже не прокатывает, нужно по-отдельности dcc32.exe system.pas, dcc32.exe sysinit.pas.
Автор: VadimLou
Дата сообщения: 05.02.2016 14:45
-m поможет пересобрать и sysinit:
dcc32.exe system -y -m
Автор: AlexCoRu
Дата сообщения: 06.02.2016 15:23
Alexey_Gawrilow, VadimLou большое спасибо за помощь. Пока работает так:
Delphi 7 [more=sysinit.pas]unit SysInit;

interface

procedure _InitExe;

var
TlsIndex: Integer = -1;
TlsLast: Byte;
HInstance: LongWord;

const
PtrToNil: Pointer = nil;

implementation

function GetModuleHandle(ModuleName: PAnsiChar): Integer; stdcall; external 'kernel32.dll' name 'GetModuleHandleA';

procedure _InitExe;
begin
TlsIndex := 0;
HInstance := GetModuleHandle(nil);
end;

end.
[/more], [more=system.pas]unit System;

interface

const
S_OK = 0;
S_FALSE = $00000001;

type
THandle = LongWord;
HRESULT = type Longint;
PByte = ^Byte;
HINST = THandle;
HMODULE = HINST;

TGUID = record
D1: Cardinal;
D2: Word;
D3: Word;
D4: array [0..7] of Byte;
end;

IInterface = interface
['{00000000-0000-0000-C000-000000000046}']
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;

IUnknown = IInterface;

var ExitCode: Integer = 0;

procedure _Halt0;
procedure _HandleFinally;
function _IntfClear(var Dest: IInterface): Pointer;
procedure _FinalizeArray(p: Pointer; typeInfo: Pointer; elemCount: Cardinal);

implementation

const
tkLString = 10;
tkWString = 11;
tkVariant = 12;
tkArray = 13;
tkRecord = 14;
tkInterface = 15;
tkDynArray = 17;

procedure ExitProcess(ExitCode: Integer); stdcall; external 'kernel32.dll' name 'ExitProcess';

procedure _Halt0;
begin
ExitProcess(ExitCode);
end;

procedure _HandleFinally;
asm
end;

function _IntfClear(var Dest: IInterface): Pointer;
asm
MOV EDX,[EAX]
TEST EDX,EDX
JE @@1
MOV DWORD PTR [EAX],0
PUSH EAX
PUSH EDX
MOV EAX,[EDX]
CALL DWORD PTR [EAX] + VMTOFFSET IInterface._Release
POP EAX
@@1:
end;

procedure _FinalizeArray(p: Pointer; typeInfo: Pointer; elemCount: Cardinal);
asm
CMP ECX,0
JE @@zerolength
PUSH EAX
PUSH EBX
PUSH ESI
PUSH EDI
MOV EBX,EAX
MOV ESI,EDX
MOV EDI,ECX
XOR EDX,EDX
MOV AL,[ESI]
MOV DL,[ESI+1]
CMP AL,tkInterface
JE @@Interface
JMP @@exit
@@Interface:
MOV EAX,EBX
ADD EBX,4
CALL _IntfClear
DEC EDI
JG @@Interface
@@exit:
POP EDI
POP ESI
POP EBX
POP EAX
@@zerolength:
end;

end.
[/more]
Studio 10 [more=sysinit.pas]unit SysInit;

interface

procedure _InitExe;

var
TlsIndex: Integer = -1;
TlsLast: Byte;
HInstance: LongWord;
ImageBase: Pointer;
__ImageBase: Pointer;

const
PtrToNil: Pointer = nil;

implementation

function GetModuleHandle(ModuleName: PAnsiChar): Integer; stdcall; external 'kernel32.dll' name 'GetModuleHandleA';

procedure _InitExe;
begin
TlsIndex := 0;
HInstance := GetModuleHandle(nil);
end;

end.
[/more], [more=system.pas]unit System;

interface

{$IF defined(CPUX86) and defined(ASSEMBLER)}
{$DEFINE X86ASMRTL}
{$ELSE}
{$DEFINE PUREPASCAL}
{$ENDIF}

const
S_OK = 0;
S_FALSE = $00000001;

vtInteger = 0;
vtBoolean = 1;
vtChar = 2;
vtExtended = 3;
vtString = 4;
vtPointer = 5;
vtPChar = 6;
vtObject = 7;
vtClass = 8;
vtWideChar = 9;
vtPWideChar = 10;
vtAnsiString = 11;
vtCurrency = 12;
vtVariant = 13;
vtInterface = 14;
vtWideString = 15;
vtInt64 = 16;
vtUnicodeString = 17;

type
THandle = NativeUInt;
HRESULT = type Longint;
HINST = THandle;
HMODULE = HINST;
PByte = ^Byte;

TDateTime = type Double;
PExtended = ^Extended;
PShortString = ^ShortString;
PCurrency = ^Currency;
PVariant = ^Variant;
PInt64 = ^Int64;

PVarRec = ^TVarRec;
TVarRec = record
case Integer of
0: (case Byte of
vtInteger: (VInteger: Integer);
vtBoolean: (VBoolean: Boolean);
vtChar: (VChar: AnsiChar);
vtExtended: (VExtended: PExtended);
vtString: (VString: PShortString);
vtPointer: (VPointer: Pointer);
vtPChar: (VPChar: PAnsiChar);
vtObject: (VObject: Pointer);
vtClass: (VClass: Pointer);
vtWideChar: (VWideChar: WideChar);
vtPWideChar: (VPWideChar: PWideChar);
vtAnsiString: (VAnsiString: Pointer);
vtCurrency: (VCurrency: PCurrency);
vtVariant: (VVariant: PVariant);
vtInterface: (VInterface: Pointer);
vtWideString: (VWideString: Pointer);
vtInt64: (VInt64: PInt64);
vtUnicodeString: (VUnicodeString: Pointer);
);
1: (_Reserved1: NativeInt;
VType: Byte;
);
end;

TGUID = record
D1: Cardinal;
D2: Word;
D3: Word;
D4: array [0..7] of Byte;
end;

IInterface = interface
['{00000000-0000-0000-C000-000000000046}']
function QueryInterface(const IID: TGUID; out Obj): HResult; stdcall;
function _AddRef: Integer; stdcall;
function _Release: Integer; stdcall;
end;

IUnknown = IInterface;

TTypeKind = (tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat,
tkString, tkSet, tkClass, tkMethod, tkWChar, tkLString, tkWString,
tkVariant, tkArray, tkRecord, tkInterface, tkInt64, tkDynArray, tkUString,
tkClassRef, tkPointer, tkProcedure);

var ExitCode: Integer = 0;

procedure _Halt0;
procedure _HandleFinally;
function _IntfClear(var Dest: IInterface): Pointer;
{$IF not defined(X86ASMRTL)}
function _FinalizeArray(P: Pointer; TypeInfo: Pointer; ElemCount: NativeUInt): Pointer;
{$ELSE}
procedure _FinalizeArray(P: Pointer; TypeInfo: Pointer; ElemCount: NativeUInt);
{$ENDIF}
{$IF defined(CPUX64)}
function _DelphiExceptionHandler(ExceptionRecord: Pointer; EstablisherFrame: NativeUInt; ContextRecord: Pointer; DispatcherContext: Pointer): LongInt; stdcall;
procedure _UnhandledException;
procedure _DestroyException(ExceptionPointers: Pointer; EstablisherFrame: NativeUInt);
{$ENDIF}

implementation

type
PPTypeInfo = ^PTypeInfo;
PTypeInfo = ^TTypeInfo;
TTypeInfo = packed record
Kind: TTypeKind;
Name: ShortString;
end;

TFieldInfo = packed record
TypeInfo: PPTypeInfo;
case Integer of
0: ( Offset: Cardinal );
1: ( _Dummy: NativeUInt );
end;

PFieldTable = ^TFieldTable;
TFieldTable = packed record
X: Word;
Size: Cardinal;
Count: Cardinal;
Fields: array [0..0] of TFieldInfo;
end;

procedure ExitProcess(ExitCode: LongWord); stdcall; external 'kernel32.dll' name 'ExitProcess';

procedure _Halt0;
begin
ExitProcess(ExitCode);
end;

procedure _HandleFinally;
asm
end;

function _IntfClear(var Dest: IInterface): Pointer;
{$IFDEF PUREPASCAL}
var
P: Pointer;
begin
Result := @Dest;
if Dest <> nil then
begin
P := Pointer(Dest);
Pointer(Dest) := nil;
IInterface(P)._Release;
end;
end;
{$ELSE !PUREPASCAL}
{$IFDEF CPUX86}
asm
MOV EDX,[EAX]
TEST EDX,EDX
JE @@1
MOV DWORD PTR [EAX],0
PUSH EAX
PUSH EDX
MOV EAX,[EDX]
CALL DWORD PTR [EAX] + VMTOFFSET IInterface._Release
POP EAX
@@1:
end;
{$ENDIF CPUX86}
{$ENDIF !PUREPASCAL}

{$IF not defined(X86ASMRTL)}
function _FinalizeArray(P: Pointer; TypeInfo: Pointer; ElemCount: NativeUInt): Pointer;
begin
Result := P;
if ElemCount = 0 then Exit;
case PTypeInfo(TypeInfo).Kind of
tkInterface:
while ElemCount > 0 do
begin
_IntfClear(IInterface(P^));
Inc(PByte(P), SizeOf(Pointer));
Dec(ElemCount);
end;
end;
end;
{$ELSE X86ASMRTL}
procedure _FinalizeArray(P: Pointer; TypeInfo: Pointer; ElemCount: NativeUInt);
asm
CMP ECX,0
JE @@zerolength
PUSH EAX
PUSH EBX
PUSH ESI
PUSH EDI
MOV EBX,EAX
MOV ESI,EDX
MOV EDI,ECX
XOR EDX,EDX
MOV AL,[ESI]
MOV DL,[ESI+1]
CMP AL,tkInterface
JE @@Interface
JMP @@exit
@@Interface:
MOV EAX,EBX
ADD EBX,4
CALL _IntfClear
DEC EDI
JG @@Interface
@@exit:
POP EDI
POP ESI
POP EBX
POP EAX
@@zerolength:
end;
{$ENDIF X86ASMRTL}

{$IF defined(CPUX64)}
function _DelphiExceptionHandler(ExceptionRecord: Pointer; EstablisherFrame: NativeUInt; ContextRecord: Pointer; DispatcherContext: Pointer): LongInt; stdcall;
begin
Result := 0;
end;

procedure _UnhandledException;
begin
end;

procedure _DestroyException(ExceptionPointers: Pointer; EstablisherFrame: NativeUInt);
begin
end;
{$ENDIF}

end.
[/more]
Дефайнами можно будет сделать по одному модулю для любой Делфи.
Работа с СОМ-объектами тоже поддерживается, т.е. CoCreateInstance создаёт объект и потом он автоматом освобождается.
И вот оно: как создать сом-объект средствами winapi?
Например, имеется интерфейс
Код: IFileSyncProviderCallback = interface(IUnknown)
['{73EA7945-1251-4466-A19C-DAEAF5EEBD05}']
function OnChangeDetectionProgress(
{ [in] } pcszDirectoryPath: PWideChar): HRESULT; stdcall;
function OnDetectFileSkipped(
{ [in] } pcszSourceFilePath: PWideChar;
{ [in] } dwReason: DWORD;
{ [in] } hrErrorCode: HRESULT): HRESULT; stdcall;
function OnChangeDetectionCompleted(
{ [in] } llTotalFilesFound: LONGLONG;
{ [in] } llTotalDirectoriesFound: LONGLONG;
{ [in] } llTotalFileSize: LONGLONG): HRESULT; stdcall;
function OnApplyingChange(
{ [in] } pcszNewDirectoryPath: PWideChar;
{ [in] } pcszCurrentDirectoryPath: PWideChar;
{ [in] } pNewFileInfo: PWin32FindDataW;
{ [in] } pCurrentFileInfo: PWin32FindDataW;
{ [in] } dwChangeType: DWORD;
{ [out] } out pfSkipChange: BOOL): HRESULT; stdcall;
function OnFileCopyProgress(
{ [in] } pcszNewFilePath: PWideChar;
{ [in] } dwPercentCopied: DWORD): HRESULT; stdcall;
function OnChangeApplied(
{ [in] } pcszNewFilePath: PWideChar;
{ [in] } pcszOldFilePath: PWideChar;
{ [in] } dwChangeType: DWORD): HRESULT; stdcall;
function OnChangeSkipped(
{ [in] } pcszNewFilePath: PWideChar;
{ [in] } pcszCurrentFilePath: PWideChar;
{ [in] } dwChangeType: DWORD;
{ [in] } dwReason: DWORD;
{ [in] } hrErrorCode: HRESULT): HRESULT; stdcall;
end;
Автор: funnyman
Дата сообщения: 06.02.2016 15:38
В Delphi 2007 использовал sptbx библиотеку для главного меню и тулбаров. Сейчас подумываю о переходе на более свежую версию делфей. Использовать родные дельфовые или есть что-нибудь другое?
Автор: Frodo_Torbins
Дата сообщения: 06.02.2016 17:30
funnyman
Если sptbx нужен был только для скинов, то скины теперь есть родные.

AlexCoRu
Вот пример: https://sergworks.wordpress.com/2012/04/01/interfaces-without-objects/ Можно еще в TVirtualInterface заглянуть.
Автор: AlexCoRu
Дата сообщения: 06.02.2016 20:45
Frodo_Torbins
Автор: Alexey_Gawrilow
Дата сообщения: 06.02.2016 22:17
AlexCoRu
жму руку


Автор: funnyman
Дата сообщения: 06.02.2016 22:56
Frodo_Torbins

Цитата:
Если sptbx нужен был только для скинов, то скины теперь есть родные.

Ну собственно да, темы использовались. Надо будет присмотреться к скинам.
Автор: VadimLou
Дата сообщения: 07.02.2016 01:13
AlexCoRu

Цитата:
а как не имея TObject?

Перестарался однако. TObject TInterfacedObject я бы вернул в system.
Автор: AlexCoRu
Дата сообщения: 07.02.2016 11:41
VadimLou, это ж сколько за собой потянет... Хотя, наверно, можно реализовать TInterfacedObject = object или TInterfacedObject = record, похоже RS10 object и record одно и то же. Но мне пока не надо.
Другая проблема нарисовалась. По ссылке, что дал Frodo_Torbins на Interfaces without objects, работает для RS10, для D7 не работает - не знает D7 про class function и static.

Автор: Alexey_Gawrilow
Дата сообщения: 07.02.2016 16:10
AlexCoRu
VadimLou
Раз пошёл такой разговор


Цитата:
похоже RS10 object и record одно и то же

record в крайних версиях Delphi это фактически реанимация object'ного типа
в смысле
type TSomeObjType = object[(..)]..
вместо введенного именно Delphi(как Object Pascal)
type TSomeObjType = class[(..)]..

А основная причина такого расширения:
- другая работа с памятью, н-р запись передается по ссылке наоборот, по значению конечно ;
- перегрузка операторов.


Цитата:
Interfaces without objects

интерфейсы могут быть реализовыны и старыми добрыми записями и даже массивами.

в стандартных примерах Delphi есть пример реализации расширения оболочки(по моему, меню) безо всяких классов.
.\DelphiWin32\VCLWin32\ActiveX\ShellExt\PureContextMenu.pas

можно вспомнить времена Delphi 2, когда интерфейсов еще не было, а программы с OLE2/COM уже были.
для dispinterface в язык даже ключевое слово automated ввели.
Так, automated, можно было пометить метод, доступный через dispatch

ещ ссылка, если интересно
http://www.deltics.co.nz/blog/?p=644
..
их много у меня, если что

напоминаю про Странника

Цитата:
Самые маленькие EXE, что я пробовал, только BlackBox и Странник генерировал.
Он раньше здесь жил  а теперь, через  веб архив вытаскивать надо.

Проблема не мэйнстриймовых средств в отсутсвии инфраструктуры.
В данном, случае, как понимаю, тебе она не нужна.
Автор: VadimLou
Дата сообщения: 07.02.2016 17:24
AlexCoRu

Цитата:
не знает D7 про class function и static

"class function" - таки знает и даже с полиморфизмом (virtual, которого мне не хватает во всяких java и dotnet-ах ).
"static" - в D2007 активно заюзан (без него можно и обойтись)

Цитата:
это ж сколько за собой потянет

не так и много (для новых dcc tmonitor можно выбросить).
.
Автор: Alexey_Gawrilow
Дата сообщения: 07.02.2016 21:45
VadimLou
class function BlaBla; static;

эквивалентно простому указателю на функцию.

static не передает Self
class привязывает метод к типу, а не к истансу.
Автор: VadimLou
Дата сообщения: 07.02.2016 22:44
Но если так припёк static перепрыгивай c D7 на D2007 - тоже ансишный компилер.
Но всё равно не вижу смысла выбрасывать копеешную реализацию tobject/tintefacedobject из system.
Смотри, я взял твой вариант system для D7 и впихнул туда tobject/tinterfacedobject/ansistring. Итого exe 7kb для D7 или D2007.
Немного поправил exception-ы, а то при сбое оно у тебя зацикливалось. Так хоть "красиво" падает
Но вообще то exception-ы лучше полностью перенести. Оно думаю критично будет для интерфейсов, особенно через com/ole.
#
Автор: AlexCoRu
Дата сообщения: 09.02.2016 10:07
В данном случае большой разницы между D7 и RS10 не вижу, разница в 32-разрядном приложении 400 байт, 64-разрядное плюс ещё 5К. Просто упёрся в Interfaces without objects без static. Не пойму как сделать, интересно ведь. Да и зачем этот прокси-код, сначала создаём структуру в которой где-то среди прочего таблица итерфейса, а потом её ищем. Можно ж сразу создать то что нужно. Если б мне нужен был TObject или приходилось бы создавать много интерфйсов, тогда - да. Но уменя всего один интерфейс и тот не очень нужен, только для лога, включается опционально.
Кстати, приложение использует Sync Framework, так 64-разрядное выполняет синхронизацию заметно дольше 32-разрядного. Может дело в Sync Framework, конечно.
Екценпшны оставлю. Памятью управляешь через Global, а не через Heap по привычке?
Цитата:
The global functions are slower than other memory management functions and do not provide as many features. Therefore, new applications should use the heap functions. However, the global functions are still used with DDE, the clipboard functions, and OLE data objects.
Автор: AlekXL
Дата сообщения: 15.02.2016 20:48
Alexey_Gawrilow


Цитата:
record в крайних версиях Delphi это фактически реанимация object'ного типа

это не так. Нет в рекордах наследования и полиморфизма. А в object нету обобщений. Так что record далеко не object.
-----
Speaking of that, друзья, предположим, у вас есть волшебная палочка, и вы можете заставить Абракадабру заставить реализовать любую фичу в студии(компиляторе, и т.д.), -- при условии, что такое требование реализуемо посредством имеющихся у компании ресурсов, и реализация займет не больше года...

Можно назвать не более трех фич, по убыванию приоритета. Итак, что бы попросили?



Добавлено:
я бы попросил:
1. полноценный отладчик Android -- быстрый, bullet-proof robust, и желательно вообще без gdb
2. возможность полного отключения arc на мобильных платформах, либо включение его на десктопе
3. llvm backend for Delphi desktop compilers
Автор: V1s1ter
Дата сообщения: 15.02.2016 21:07
AlekXL
1. Нормальные и удобные отладчики для всех поддерживаемых платформ.
2. Убрать как можно больше багов.
3. Поддержка Linux.
Автор: kaz_av
Дата сообщения: 15.02.2016 22:28
AlekXL


Цитата:
Итак, что бы попросили?

https://quality.embarcadero.com/browse/RSP-12527 (тут собраны ссылки на QC). Не дождемся никак.


Цитата:
2. возможность полного отключения arc на мобильных платформах, либо включение его на десктопе
3. llvm backend for Delphi desktop compilers

Новый роадмап не читал чтоли? Обещают это в 2016, как и линукс. В смысле не отключение ARC, а включение его в линуксовом LLVM based компиляторе.
Автор: Alexey_Gawrilow
Дата сообщения: 15.02.2016 22:41
AlekXL

Цитата:
это не так. Нет в рекордах наследования и полиморфизма.  А в object нету обобщений. Так что record далеко не object. -----

Да это так.
И, да, я в курсе, если что.
И что(дальше)?
Кроме поддержки перегрузки операторов каков смысл?
Передача по значению?

Ну совсем укуренные варианты "облегчения", чего-либо опустим.

Pro & Contra ?

PS. Отсутсвие разумного обоснования, есть сильнейший демотиватор.
Я не говорю, что это не нужно.
Я не говорю, что это плохо.
Я не говорю, что одного while достаточно для всех..

PS/2. К тому что есть много других прикольных штук, которых бы хотелось.


Цитата:
Можно назвать не более трех фич, по убыванию приоритета. Итак, что бы попросили?  

- делегаты
- откопайте Kylix
- убейте ARC, кому было нужно, давно перешли на интерфейсы
..
- купите <Some Library Provider>
- слейтесь в экстазе/не обижайте FreePascal
- верните Modula в стек
- выпустите VCL для Oberon
...
давайте жить дружно..

Добавлено:
- откопайте IntraBuilder

Добавлено:
ну если серьезно..
то кросплатформенный иннтерфейс - вещь опциональная
а вот одни правила игры:
- строки, массивы(ZERO-based)
- объекты, управление памятью(ARC)
- rtl
- etc...
это важнее.

FM не станет стандартом....
вернее ее заменит более другая библиотека.
нр, также как BDE сменила DB-Lib
также как ADO сменила BDE
также как DBX сменила ADO+BDE
также как AnyDac заменил их всех.

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

И, с грустью, тысячами библиотек, с "фатальным недостатком".

Стоит "повзрослеть", тут же пояляется, "молодой", который пусть чуть, да лучше...
н-р OmniXML & OXML

Главное:
- не стать очередным Object Windows
- не стать очередным Clipper
- не стать очередным FoxPro
- не сдохнуть..

И не говорите, что это нельзя сделать.
RemObjects обладают сильно меньшими ресурсами.
Однако присутствуют в экосистемах:
- NET
- JAVA
- Apple

извините за возможный оффоп.
в силу неопределенности времени жизни данного форума...
Автор: kaz_av
Дата сообщения: 15.02.2016 23:15
Alexey_Gawrilow

Цитата:
RemObjects обладают сильно меньшими ресурсами.
Однако присутствуют в экосистемах:
- NET
- JAVA
- Apple

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

Добавлено:
Им настолько "нефиг делать", что пилят свой C# и Swift...
Автор: Frodo_Torbins
Дата сообщения: 16.02.2016 12:32
AlekXL
1. Пусть откроют FMX, RTL и компилятор под лицензией типа Qt. И чтобы принимали патчи от сторонних разработчиков.
2. Нормальный современный компилятор с возможностью интеграции в IDE, LLVM бекендом, поддержкой многопоточности в языке и пр.
3. Развитие FMX, что бы на нем не позорно было сделать прогу для винды, поддержку WinRT, Linux (наверно уже Wayland).
Автор: AlekXL
Дата сообщения: 16.02.2016 13:58
Alexey_Gawrilow

Цитата:
Кроме поддержки перегрузки операторов каков смысл?
Передача по значению?

Ну совсем укуренные варианты "облегчения", чего-либо опустим.

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

Умный тип - должен быть полиморфным. Этого требует культура программирования, практика повторного использования кода.

Здесь sealed реализации, каковыми являются типы record -- это вообще не то. Они годятся для описания лишь примитивных сущностей, а также для системных, --- нет, __системных , реализаций.

Я использую object для описанных в начале поста целей -- но как же не хватает мне обобщений! Пох3р на перегрузку операторов -- это сахар, но обобщения -- это хлеб насущный!

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



Добавлено:

Цитата:
FM не станет стандартом....
вернее ее заменит более другая библиотека.

откуда она возьмется?
И неужели FMX -- beyound repair?

Я думаю, что одной из причин низкого качества FMX -- является как раз грехи несовместимости компиляторов и несовершенство отладчика.

Это же боль -- отлаживать даже свой код под андроидом! В FMX даже лезть не хочется, хотя надо.

Будут эти два пункта -- и FMX починят, даже если нам самим придется это делать. А если не будет -- не будет ничего, кроме fail.



Frodo_Torbins

Цитата:
1. Пусть откроют FMX, RTL и компилятор под лицензией типа Qt. И чтобы принимали патчи от сторонних разработчиков

они и компилятор должны открыть так же. Это реально уже нетерпимо, когда вот такие баги в компиляторе.


Автор: AlekXL
Дата сообщения: 16.02.2016 17:53
---
а так, если подумать, а может, ну его?

Я ненавижу языки со сборкой мусора, эту детскую песочницу, но есть ведь кресты.. Не такой уж он уродливый в свете стандартов 11-14. Мощный, гибкий, со вменяемыми компиляторами..

Проблема была лишь в виджетсете под андроид. Полгода назад я пробовал QTCreator, и там были проблемы со сборкой под Windows, но вот сегодня я загрузил свежую версию -- и оно работает!

Я в этих грэдлах и QT не разбираюсь от слова "совсем", но после нескольких несложных манипуляций -- удалось запустить и билд, и отладку приложения-примера на устройстве.

Блин, официально на Seatle нет даже поддержки GB, а QT-widget приложение установилось и запустилось на этом древнем девайсе с 256метров памяти(как и на планшете JB)..
[more=Вот скриншот]

[/more]
Отладчик работает четче, на первый взгляд.

Размер apk -7 с копейками, из них 90 процентов - это libQt5Core,libQt5Widgets,libQt5Gui - по 3-4 метра каждый. Наверно, для ускорения отладочного билда можно было бы запулить их /system/bin

Но главное -- обратите внимание -- использование RAM -- всего 10 мегабайт!
Delphi, cцуко, в три раза больше жрет!

Да есть и проблемы -- министро в маркете протух, и QT5.5.1(речь о нем) не поддерживается, 3б-й стыд.
Пребилд-либы QT вроде без отладочной инфы -- кто станет такое использовать?

Сам QT-creator -- это lame duck,игрушка, более подошедшая бы питонщику.
Неплохо бы всё это хозяйство перести под лучшую среду (правда, не знаю, есть ли такая -- на хабрах об этом не пишут)
[more="..."]VS2015, падла, не отлаживает андроид ниже 4.2 -- это я уже выяснил на своём горьком опыте. [/more]
Но это же решаемо, наверное..
--
Так что, п-3дец, может мне пора повзрослеть?

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129

Предыдущая тема: Отмена встречи в Outlook из Excel VBA


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.