Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Embarcadero RAD Studio XE3

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Открыть новую тему     Написать ответ в эту тему

XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
vcrank
а стандартный не подойдет?
http://docwiki.embarcadero.com/RADStudio/XE3/en/Formatting_Source_Code

Всего записей: 2536 | Зарегистр. 20-06-2011 | Отправлено: 00:38 24-02-2013
vcrank

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
XPerformer
Я про него читал, но найти (expand the Formatter node) не смог. Наверное из-за того, Что у меня Lite версия

Всего записей: 1067 | Зарегистр. 24-10-2005 | Отправлено: 06:52 24-02-2013
mdid

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
мне тут интересный вопрос задали, а ответа я не знаю. Может ли современная среда Embarcadero компилить флеш приложения?

Всего записей: 1298 | Зарегистр. 13-02-2006 | Отправлено: 12:09 24-02-2013
HeMet

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
mdid
Нет. Эта среда для разработки под Delphi, C++ Builder и отдельно HTML5 + JS.

Всего записей: 212 | Зарегистр. 05-09-2007 | Отправлено: 12:36 24-02-2013
vcrank

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вопрос по выравниванию кода тоже снимается. Нашёл GExperts в блоге разрабов
http://blog.dummzeuch.de/experimental-gexperts-version/

Всего записей: 1067 | Зарегистр. 24-10-2005 | Отправлено: 23:42 24-02-2013
neznayka3

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
подскажите в чем сейчас лучше писать документацию для юзеров. никогда этим не занимался.

Всего записей: 385 | Зарегистр. 07-06-2007 | Отправлено: 07:54 01-03-2013
RageSV

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
neznayka3
Для delphi лучше всего подходит Help&Manual (платная, но стоит того).
А так можно и в блокноте писать.

Всего записей: 72 | Зарегистр. 20-01-2006 | Отправлено: 13:50 01-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
нужен обобщенный контейнер очереди с приоритетами, и с поддержкой обобщенного же интерфеса к нему
  TPriorityQueue<TItem> = class( IPriorityQueue<TItem>)...
с возможностью произвольного  удаления элемента
есть ли такой?
 
Добавлено:
еще вопрос: есть ли какая нибудь либа , реализующая синхронизирующую блокировку (Critical Section) в виде функции с ключом, как функция  
lock(this)
скажем в решетках?
то есть

Код:
resourceLock(self);
try
...
finally
resourceUnlock(self);
end;

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 05:30 03-03-2013
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlekXL

Цитата:
еще вопрос: есть ли какая нибудь либа , реализующая синхронизирующую блокировку (Critical Section) в виде функции с ключом, как функция   lock(this)  скажем в решетках?  то есть

TMonitor.Enter(); TMonitor.Exit(); - одни из древнющих методов в Delphi прямиком из System.pas, которые ещё и быстрее, чем крит. секции/мьютексы;

Всего записей: 767 | Зарегистр. 18-05-2009 | Отправлено: 11:12 03-03-2013 | Исправлено: Eternal_Shield, 11:14 03-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
TMonitor.Enter(); TMonitor.Exit();  

спс. хотя не такие уж и древние. Со времен 2009, кажется.
 В-том то и беда , что у меня, как и многих , знания Delphi застыли если не на уровне D7, то на D2007
А потом некоторые из таких ренегатов жалуются, что язык умер

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 22:41 03-03-2013
RuXandr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Eternal_Shield,
 

Цитата:
TMonitor.Enter(); TMonitor.Exit(); - одни из древнющих методов в Delphi прямиком из System.pas, которые ещё и быстрее, чем крит. секции/мьютексы;

 
Захотелось проверить, быстрее ли TMonitor чем крит. секции. Увы, на XE и XE3 (Win32) крит. секции быстрее ровно в 2 раза.

Всего записей: 96 | Зарегистр. 13-10-2009 | Отправлено: 12:24 05-03-2013
Eternal_Shield

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
RuXandr

Цитата:
Захотелось проверить, быстрее ли TMonitor чем крит. секции. Увы, на XE и XE3 (Win32) крит. секции быстрее ровно в 2 раза.

Любопытно. Надо перепроверить  
 
З.Ы: Кстати, где-то я читал тред про сипны vs крит. секции. В некоторых сценариях спИны разрывают крит. секции на части. Предположу, что вы тестировали самым простым способом а-ля Подробнее...
 

Всего записей: 767 | Зарегистр. 18-05-2009 | Отправлено: 18:04 05-03-2013 | Исправлено: Eternal_Shield, 18:09 05-03-2013
RuXandr

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Так точно!
 
 
Подробнее...

Всего записей: 96 | Зарегистр. 13-10-2009 | Отправлено: 19:20 05-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
вопрос такой:
предположим у меня есть есть класс  

Код:
 
TphTaskControl=class(TInterfacedObject, IphTaskControl)
...
end;
 

так вот если извлекать интефейсную переменную IphTaskControl из экзепляра класса, одного и того же, то  
1) если извлечение идет из собственного метода , то есть из self
и
2) если извлечение идет из внешнего метода, т.е. из переменной типа TphTaskControl
то интерфейсные переменные не будут равны по значению(указателю на vmt), хотя и были извлечены из одного и того же экзепляра...
 
---
Так ли это? прокоментируйте.

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 20:29 09-03-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
нет. не должно быть.
 
Self as interface - это все равно self.
 
Можешь ради интереса сравнить TObject(var-IphTaskControl).ClassName

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 20:40 09-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
нет. не должно быть.
 
Self as interface - это все равно self.
 
Можешь ради интереса сравнить TObject(var-IphTaskControl).ClassName
 

 попробуй  
Подробнее...
Я наверное, что=то недопонимаю
 
а если изменить  

Код:
 
function TSomeType.cmp(i1, i2: IInterface): Boolean;
var o1,o2:TObject;
begin
//  result:=i1=i2;
o1:=i1 as TSomeType;
o2:=i2 as TSomeType;
result:=o2=o1;
end;

вернет true
 
Добавлено:
Еще два вопроса вопрос  
1.
мне нужно что-то вроде  

Код:
 
  IphTask=interface
    ['{42261A6A-93AE-46B8-AA87-52E8C2D65B3C}']
  end;
 
 
 
  IphSimpleTask=interface (IphTask)
   ['{DEE012F7-88B2-4BBC-9667-AB97272810CF}']
    function Execute(const args:TphMethodArgs):HRESULT;
  end;
  IphDispatchTask=interface (IphTask,IDispatch)
   ['{13E05858-E1F9-40B1-82C9-138D55B3444E}']
  end;
 

последнее объявление не скомпилится. То есть мне нужен статический constraint для типа входного параметра, который гарантировал бы реализацию обоих интерфейсов  в передаваемом экзепляре.
Это можно сделать объявив абстрактный класс-прототип, но мне не хотелось бы требовать определенное наследование, а лишь наличие concept -а.
 
 
----
2. если некоторый динамический(не open array) массив формально передается по-значению, как реально он передается? По ссылке? По-ссылке + copy-on-write? Или весь массив заталкивается в стек?

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 20:52 09-03-2013 | Исправлено: AlekXL, 22:29 09-03-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
COW у массивов нету. Скорее всего по ссылке, глянь в CPU Window и посмотри
В конце концов пустой дин.массив - это по определению nil. Так что кроме как по ссылке и не должно быть.
 
Во всяком случае при использовании const/var
 
http://delphihaven.wordpress.com/2011/07/17/things-that-make-you-go-urgh/
http://delphihaven.wordpress.com/2009/12/04/are-dynamic-arrays-half-baked/
 
http://docwiki.embarcadero.com/RADStudio/XE3/en/Internal_Data_Formats#Dynamic_Array_Types
 
Для открытых массивов есть замечание "не взорви стек" - http://docwiki.embarcadero.com/RADStudio/XE/en/Parameters_(Delphi)#Open_Array_Parameters
Для динамических массивов такой заметки нет
 
Добавлено:

Цитата:
        ReadLn(c);

Между прочим, по определению  это эквивалентно

Цитата:
Read(c); ReadLn;

Так нас учат книжки по Паскалю. Дурацкий вопрос - зачем тут Read(c) ?
 
А вообще у меня XE2, но классы, которые возвращают Self я делал, и использовал готовые так же (из JCL и OTL например)
 
попробуй сделать равные условия
 

Цитата:
cmp(cmpI  as TsomeType, cmpO as TsomeType);

 
Добавлено:
https://www.google.ru/search?client=opera&q=delphi+interface+equality&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest
 
даёт нам среди прочего http://blog.excastle.com/2008/05/10/interfaces-and-reference-equality-beware/
 
читай секцию "A failed workaround"
 
и не используй IInterface, потому что все интерфейсы наследуются от него
 
Добавлено:

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

 
Generics ? в XE2 констрейнты с интерфейсами ненадежно работает, но в XE3 обещали поправить
http://qc.embarcadero.com/wc/qcmain.aspx?d=111211
http://docwiki.embarcadero.com/RADStudio/XE3/en/Constraints_in_Generics
 
а так ты хочешь множественное наследование (через общий IInterface - привет проблема ромба), а его в Delphi нет.
http://docwiki.embarcadero.com/RADStudio/XE3/en/Object_Interfaces
 
Добавлено:
Ну и как всегда есть одно место... https://www.google.ru/search?client=opera&q=delphi+multiple+interface+inheritance&sourceid=opera&ie=utf-8&oe=utf-8&channel=suggest
 
http://edn.embarcadero.com/article/29779
http://delphi.uservoice.com/suggestions/2700516
http://www.progtown.com/topic340552-multiple-inheritance-of-interfaces-in-delphi.html

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 00:07 10-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Arioch1

Цитата:
даёт нам среди прочего http://blog.excastle.com/2008/05/10/interfaces-and-reference-equality-beware/

(ISomeInt as IInterface)<>Obj as Iinterface. видимо, каждая иерархия реализованных интерфейсов имеет собственную заглушку даже для аналогичных базовых интерфейсов.  
А Obj as Iinterface  давал мне  VMT  IInterface , взятую у TInterfacedObject
 

Цитата:
попробуй сделать равные условия
Цитата:
cmp(cmpI  as TsomeType, cmpO as TsomeType);
 

Там все сложнее. Классы с подчетом ссылок заталкиваются в контейнер, и обратно, сложная логика, которая приводило к AV или зависанию. Ну да я уже поправил.
 
 
 

Цитата:
В конце концов пустой дин.массив - это по определению nil. Так что кроме как по ссылке и не должно быть.  
Да, определенно. Динамический массив - это ссылочный тип, и с подсчетом ссылок, но без семантики Copy-On-Write, хотя что им мешало сделать как в строках?

Цитата:
Generics ? в XE2 констрейнты с интерфейсами ненадежно работает, но в XE3 обещали поправить
http://qc.embarcadero.com/wc/qcmain.aspx?d=111211

там в QC и не дожно компилится. Чел указывает констрайнт class, а пихает интерфейс. Там констрайнт как раз должен быть IInterface.
Но в целом, учитывая долгое время не правленные баги, Out-Of-Memory, AV, и даже ошибки в кодегене = генерики крайне хреново сделаны во всех версиях. Я уже подумываю соскочить на C++ Builder, благо,
 там есть  уже нормальный компилятор для 64, и уже не такой тупорылый диалект C++ (кстати, есть ли обзоры о степени реализации стандарта 11 в компиляторах билдера и МС?)
 
 
 
 
 
 

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 03:03 10-03-2013
Arioch1



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
это мой QC, принятый и якобы исправленный
не путайте class и TClass а равно Interface и IInterface
насчет же "пихает интерфейс" - прочитайте справку по вышеприведенной ссылке.
Это не более "неправильно", чем делать  record helper для строк и множеств
 
ISomeInt as IInterface == ISomeInt
 

Цитата:
каждая иерархия реализованных интерфейсов имеет собственную заглушку даже для аналогичных базовых интерфейсов

1) иерархия одна единственная - IInterface и все, что из него выросло. Других иерархий нет по определению.
2) Заглушек в интерфейсах нет - есть только указатели на процедуры
3) Соответсвенно там ничего нет "для базовых интерфейсов" - а только все более наращиваюися список указателей на методы.
 
Вы понимаете чем virtual-методы классов отличаются от dynamic-методов?
Так вот, интерфейсы  - они не dynamic, они virtual.
 
Учитывая политику Эмбы, если соскакивать на C++ - то лучше сразу брать от какой-то надежной фирмы (MS, Intel), или же изначально общий floss-проект (CLang? GCC?)
 
А Эмба уже столько начудила, что если ее вообще перестанут покупать и она закорется через пару лет - не удивлюсь. Хотя и слегка пожалею.
 
 
Добавлено:

Цитата:
но без семантики Copy-On-Write, хотя что им мешало сделать как в строках?

 
Вообще говоря, строки - это не только COW
 

Цитата:
 @StringVar[20]  
уже приводит к вызову UniqueString
(когда-то раньше не приводило - и люди бегали по граблям, а потом собирали расколотый череп)
 
Теперь представим array of TSomeObj
Допустим, мы копируем этот массив. Как копировать объекты в отсутствие в Дельфи copy constructor ?
А если каждый объект монопольно блокирует какой-то файл - как его вообще копировать ?
А если этот массив занимает 1,5 ГБ памяти - как его копировать ? И сколько времени это займёт?
 
А копировать придется при любом взятии адреса любого элемента.
 
Далее, представим array of record o: TSomeObj; i: ISomeIntf; end;
Как такое копировать ?

Всего записей: 904 | Зарегистр. 03-03-2010 | Отправлено: 03:47 10-03-2013
AlekXL



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
не путайте class и TClass а равно Interface и IInterface
насчет же "пихает интерфейс" - прочитайте справку по вышеприведенной ссылке.  

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

Цитата:
2) Заглушек в интерфейсах нет - есть только указатели на процедуры  
указатели на заглушки, там они непрямые же. Ну и саму таблицу именую - заглушка.
 

Цитата:
3) Соответсвенно там ничего нет "для базовых интерфейсов" - а только все более наращиваюися список указателей на методы.  

ну если
 TSomeObj=class(TInterfacedObject, ISomeInt)  
то списка будет два. Первый принадлежит TInterfacedObject, там таблица на IInterface, и второй список для ISomeInt. Унаследованная таблица, от TInterfacedObject, я считаю, не соглашаясь с вами, как раз и не наращивается. Создается новая. Вот отсюда и пример вышеприведенный.

Цитата:
Цитата:
 
каждая иерархия реализованных интерфейсов имеет собственную заглушку даже для аналогичных базовых интерфейсов
 
1) иерархия одна единственная - IInterface и все, что из него выросло. Других иерархий нет по определению.  

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

Цитата:
Цитата:
 @StringVar[20]  
уже приводит к вызову UniqueString  

хуже того, PChar(Str) тоже приводит. Так что я часто делаю PChar(Pointer(str)) для api - это срабатывает на ура. и для WideString тож
 

Цитата:
Теперь представим array of TSomeObj<...> Как такое копировать ?
соглашусь.
 
хотя разве нет копирующих ctor сейчас в Delphi?  
 
.
 
 
 

Всего записей: 792 | Зарегистр. 24-04-2008 | Отправлено: 04:50 10-03-2013 | Исправлено: AlekXL, 04:50 10-03-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Вопросы по Embarcadero RAD Studio XE3


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru