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

» Вопросы по Embarcadero RAD Studio XE4

Автор: valgreesh
Дата сообщения: 10.06.2013 00:11
miwa

Цитата:
Кроме прочего Qt ж вроде таки выпустили под LGPL - бери да используй как тебе надо

Под LGPL вносить изменения в Qt нельзя. Ну и плюс это прямая зависимость от вендора.


Цитата:
А теперь вот все дружно плюются на обезьяну, которая этот период может и не пережить

У неё выбора нет - думаю, будут выхаживать до последнего.

Arioch1

Цитата:
Есть очень много разных тулкитов

Так-то оно так, но это ставит в прямую зависимость от вендора у которого могут быть иные взгляды на развитие фреймвока.
Автор: Arioch1
Дата сообщения: 10.06.2013 01:23

Цитата:
от вендора у которого могут быть иные взгляды на развитие фреймвока.

форкни его. это не сложнее, чем разрабатывать с нуля


Цитата:
Под LGPL вносить изменения в Qt нельзя.

Почему? и как это соотносится с идеей GPL/LGPL ?
Автор: valgreesh
Дата сообщения: 10.06.2013 02:14
Arioch1

Цитата:
форкни его. это не сложнее, чем разрабатывать с нуля

Вообще говоря, разработка фреймвока для гуя задача не бог весть какая сложная.


Цитата:
Почему? и как это соотносится с идеей GPL/LGPL ?

В википедии об этом прямо говорится:

Цитата:
Начиная с версии 4.5 Qt распространяется по 3 лицензиям (независимо от лицензии, исходный код Qt один и тот же):
Qt Commercial — для разработки ПО с собственнической лицензией, допускающая модификацию самой Qt без раскрытия изменений;
GNU GPL — для разработки ПО с открытыми исходниками, распространяемыми на условиях GNU GPL;
GNU LGPL — для разработки ПО с собственнической лицензией, но без внесения изменений в Qt.

А тут это находит подтверждение.
Автор: AlekXL
Дата сообщения: 10.06.2013 05:55

Цитата:
А тут это находит подтверждение.

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

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

Автор: AlekXL
Дата сообщения: 10.06.2013 09:12
я пытаюсь реализовать Overlapped Read, допиливая dsstreams с торри. К сожалению, документация msdn не выглядит полной.
Вот выдержка кода, ReadAsync

Код:
tries:=0;
repeat
readSuccess:=ReadFile(Handle,Buffer,Count,PCardinal(nil)^,Addr(Request.Overlapped) );
//if readSuccess==true, then operation completed synchronously
Inc(tries);
if not readSuccess then begin

err:=GetLastError();
readSuccess:= (err=ERROR_SUCCESS) or (err=ERROR_IO_PENDING) or (err=ERROR_IO_INCOMPLETE);

if (err=ERROR_WORKING_SET_QUOTA) or (err=ERROR_INVALID_USER_BUFFER) or
(err=ERROR_NOT_ENOUGH_MEMORY) or (err=ERROR_NOT_ENOUGH_QUOTA) then
(*increase quota*) IncreaseQuotaBy(count);

end;

until readSuccess or (tries>FMaxTries);

Автор: valgreesh
Дата сообщения: 10.06.2013 10:46
AlekXL

Цитата:
трудно поверить, поскольку LGPL как раз подразумевает возможность изменения, причем любым юзером

Политику лицензирования определяет владелец, поэтому не вижу ничего невозможного.


Цитата:
А Эмба экономит на спичках..

Где-то же они говорили, что только в питерском офисе у них около сорока человек. Что-то не очень похоже на экономию, если конечно все сорок не сидят на джуниорских зарплатах
Автор: Arioch1
Дата сообщения: 10.06.2013 11:08

Цитата:
Политику лицензирования определяет владелец

Точно так. Он может выбирать использовать LGPL или не использовать.
Если он не хочет изменения библиотеки - то не использует LGPL.
Потому что изменение - одно из "четырёх свобод" ради защиты которых все *GPL и затевались

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

Добавлено:

Цитата:
допускающая модификацию самой Qt без раскрытия изменений;

обратите внимание на последние три слова. Это ключевой момент. Именно это право добавлено, по сравнению с LGPL. Но и только.

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

Добавлено:

Цитата:
в питерском офисе у них около сорока человек

40 человек - это не сорок разработчиков
Автор: Senpai07
Дата сообщения: 10.06.2013 11:29
Добрый день!
Владельцы лиц XE4, поделитесь пожалуйста
FireMonkey Premium Style Pack 2 for RAD Studio XE4
_ttp://cc.embarcadero.com/item/29441
Заранее Спасибо!
Автор: deks
Дата сообщения: 10.06.2013 11:37
Senpai07

Это вопрос скорее всего в варез таки. Тут - программирование

Добавлено:
AlekXL

Цитата:
2. может ли случиться, что ReadFile вернет false, а GetLastError() - ERROR_SUCCESS?  
3. может ли ReadFile вернуть false, а GetLastError ==ERROR_IO_INCOMPLETE?


У вас в примере кода есть заветные слова Async - они означают, что началась неделя геморроя и он удваивается в десять раз))

А если серьезно - то GetLastError возвращает код ошибки в текущем потоке, поэтому если действие производилось именно в этом потоке, то все должно быть ок - то есть вернется последний код ошибки. Но ошибка именно для действий, совершенных в этом потоке. Как я понял, для выполнения асинхронного чтения заводится отдельный поток, поэтому ошибка по чтению может там и пропасть! Есть шансы перехватить ее в обработчике по завершению асинхронной операции. Но лучше гуглить StackOverflow в поисках примеров.
Автор: valgreesh
Дата сообщения: 10.06.2013 15:27
Arioch1

Цитата:
Потому что изменение - одно из "четырёх свобод" ради защиты которых все *GPL и затевались

Если мне память не изменяет, то LGPL делает послабления в части открытия кода по сравнению с GPL. Но все очень не просто. Если просто используется код под LGPL, то такой код можно использовать как угодно (конечный продукт может быть под любой проприетарной лицензией). Если код под LGPL изменяется, то либо исходники всего продукта должны быть открыты, либо должна использоваться динамическая линковка и открыть можно только измененные части.


Цитата:
40 человек - это не сорок разработчиков

Так вроде питерский офис занимается только разработкой, я слышал...
Автор: AlekXL
Дата сообщения: 10.06.2013 16:21

Цитата:

Если мне память не изменяет, то LGPL делает послабления в части открытия кода по сравнению с GPL. Но все очень не просто. Если просто используется код под LGPL, то такой код можно использовать как угодно (конечный продукт может быть под любой проприетарной лицензией). Если код под LGPL изменяется, то либо исходники всего продукта должны быть открыты, либо должна использоваться динамическая линковка и открыть можно только измененные части.
..библиотеки. На самом деле, это неверно, думается.
LGPL тебует от программиста/издателя предоставить возможность замены библиотеки на новую/модифицированную. Так что либо динамическая линковка, либо ты должен предоставить объектные файлы своей программы. Так что на деле всегда нужно использовать динамическую линковку.

Цитата:

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

это относится и к GPL v2, и к вебсервисам также, и даже к out-of-process COM, кажется это называли "GPL loophole".
А вот v3 уже просекла фишку и требует раскрывать код даже в случае вебсервиса(нет ASP loophole остался и в GPLv3)

GPLv3 это апофеоз копилефта: пока можно было Opensource "понарошку" , многие лицемерили, поддерживая его, но к 3-й версии предельно все прояснилось, так что даже Торвальдс устрашился.
Автор: deks
Дата сообщения: 10.06.2013 16:41

Цитата:
питерский офис занимается только разработкой


Да, это "гнездо" огненной обезьяны! Именно туда свалил Крюков!)
Автор: AlekXL
Дата сообщения: 10.06.2013 17:30
кстатии, вопрос по наследованию helper так и не решен в XE4?
Автор: HeMet
Дата сообщения: 10.06.2013 18:46

Цитата:
кстатии, вопрос по наследованию helper так и не решен в XE4?

Не факт, что хелперы такими и останутся. Марко Канту где-то писал, что хелперы они считают низкоуровневой фичей, которая скорее всего будет подвержена изменениям. Короче говоря, это инструмент для них, а не пользователей.
Автор: AlekXL
Дата сообщения: 10.06.2013 19:47

Цитата:
Марко Канту где-то писал, что хелперы они считают низкоуровневой фичей, которая скорее всего будет подвержена изменениям. Короче говоря, это инструмент для них, а не пользователей.
для них должно быть важно, что думают пользователи, а не что они себе думают.
Надеюсь, у них хватит ума не вводить всякие регрессивные изменения, вроде immutable stings. Я даже написал в блоге Канту, "типа ненадо", да. Там практически все отзывы по поводу immutable стрингс негативные. Вот и поглядим, какой стороной к нам Эмба повернется.

--
и да, наследование record хелперов(а в class helpers вроде работает) все еще не реализовано в XE4
Автор: valgreesh
Дата сообщения: 10.06.2013 19:48
HeMet
Чего-то революционный настрой этих чудозвонов меня пугает...

Добавлено:

Цитата:
и да, наследование хелперов все еще не реализовано в XE4

Зато реализовано в FPC
Автор: AlekXL
Дата сообщения: 10.06.2013 20:00

Цитата:
Зато реализовано в FPC

вот как? мне все нравится в FPC, кроме отсутсвия анонимов. Их ведь даже в транке нет.
Я , грешным делом, считал анонимы тяжелым, медленным и избыточным "сахаром", но как дело дошло до многопотока - свое мнение изменил.
что же до record helper, то нафиг их тогда. В конце концов, можно использовать "черную магию" old objects

Код:
TmyOverlapped=object
fAncestor:Windows._Overlapped;
procedure amethod();virtual;
end;

TmyOverlapped2=object(TmyOverlapped)
procedure amethod();override;
end;
Автор: valgreesh
Дата сообщения: 10.06.2013 20:12
AlekXL

Цитата:
мне все нравится в FPC, кроме отсутсвия анонимов

Сейчас они в дельфях все равно неполноценные - этакие недокложуры. На компиляторах с ARC'ом другое дело, но вроде бы ARC пока только для мобильных ОС.


Цитата:
что же до record helper, то нафиг их тогда. В конце концов, можно использовать "черную магию" old objects

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

Код:
Type

Rec1 = Record
End;

Rec2 = Record
End;

Rec1Helper = Record Helper for Rec1
Procedure Proc(AValue : Rec2);
End;
Автор: AlekXL
Дата сообщения: 10.06.2013 20:29

Цитата:
Сейчас они в дельфях все равно неполноценные - этакие недокложуры. На компиляторах с ARC'ом другое дело, но вроде бы ARC пока только для мобильных ОС.

поясните.. Что с ними не так?

И кстати вопрос, существует ли какой-нибудь TWebbrowser для OSX на Delphi? Вроде для ios есть какой-то, хотя там методов и событий - с гулькин нос...
Автор: valgreesh
Дата сообщения: 10.06.2013 20:34
AlekXL

Цитата:
поясните.. Что с ними не так?

Автоматического управления временем жизни объектов нет.


Цитата:
И кстати вопрос, существует ли какой-нибудь TWebbrowser для OSX на Delphi?

Из коробки нет, но помнится была обертка над хромиумом для FMX.
Автор: X11
Дата сообщения: 10.06.2013 20:48
http://stackoverflow.com/questions/9327111/is-there-a-web-browser-component-for-use-in-firemonkey-application

Добавлено:
http://www.webdelphi.ru/2013/03/delphi-for-ios-komponent-twebbrowser-dlya-firemonkey/

Добавлено:
https://webfmx.thinrdp.net/

Добавлено:
https://forums.embarcadero.com/thread.jspa?threadID=85701
Автор: AlekXL
Дата сообщения: 10.06.2013 20:55

Цитата:
Автоматического управления временем жизни объектов нет.
ну сам объект-аноним как раз использует подсчет ссылок, разве нет?
Что же ARC в общем, то сдается мне, это грабли. Ибо утечка памяти - проблема гораздо меньшая, чем неправильное(скажем, двойное) ее освобождение. Я сам использую TInterfacedObject и интерфейсы и подсчет ссылок. Но - не везде. А нубам и вовсе бы это запретил под страхом расстрела.


Цитата:
Из коробки нет, но помнится была обертка над хромиумом для FMX.
Есть даже две обертки :
DCEF3 и DCEF1 aka delphiChromiumEmbedded. Второй упомянутый поддерживает FMX, работы ведутся, ага. Вот только OSX поддержки вроде бы нет.
А ведь это идеальное решение проблем с тормозами FMX - ты просто используешь jquery и Webkit для построения интерфейса, который ни разу не тормозит ни на какой платформе. И в ж.. FireMonkey
X11

Цитата:
http://stackoverflow.com/questions/9327111/is-there-a-web-browser-component-for-use-in-firemonkey-application

устарело, да и см. выше в этом посте

Цитата:
http://www.webdelphi.ru/2013/03/delphi-for-ios-komponent-twebbrowser-dlya-firemonkey/
да, я тоже использую гугл. Но этот TWebbrowser для IOS, а не OSX

Цитата:
Добавлено:
https://webfmx.thinrdp.net/

Добавлено:
https://forums.embarcadero.com/thread.jspa?threadID=85701

это все не то. Там нет встроенного клиента. Это просто сервер+обвязка, то бишь Danasnap REST, что я уже делал, и что можно сделать самому, используя фришные компоненты, насколько я знаю.
Это часть решения, причем наиболее простая.

Автор: X11
Дата сообщения: 10.06.2013 20:58
ну и вот http://www.cybelesoft.com/webfmx/
Автор: valgreesh
Дата сообщения: 10.06.2013 21:01
AlekXL

Цитата:
ну сам объект-аноним как раз использует подсчет ссылок, разве нет?

Разумеется, но объекты захваченные в контекст все равно нужно руками освободжать. Вот и получается, вроде бы как кложура - создал и забыл, все само-собой разруливается, а на деле еще и согласовывать время жизни "кложуры" и захваченных объектов нужно. Не, без автоматического управления временем жизни объектов анонимные методы это мина замедленного действия.


Цитата:
И в ж.. FireMonkey

Вот именно
Автор: Arioch1
Дата сообщения: 10.06.2013 22:45

Цитата:
Если код под LGPL изменяется, то либо исходники всего продукта должны быть открыты, либо должна использоваться динамическая линковка и открыть можно только измененные части.


Как-то это казуистикой попахивает. Следи за руками:

Левой рукой форкаем Qt, меняем что надо, и выкладываем как отдельный публичный LGPL-проект.
Правой рукой скачиваем релиз этого проекта и линкуем его в проприетарный код.
ЧЯДНТ?

Кстати, на англо-форумах меня уверяли, что с научной(?) точки зрения статическая или динамическая линковка не важна для определения, является ли проект чем-то цельным (т.е. derivative), или симбиозом (т.е. mere aggregation).

Видимо линковки быть не должно вообще, делай ручками через LoadLibrary и пойнтеры



Цитата:
но объекты захваченные в контекст

в смысле копии объектов? в Дельфи нет конструктора копирования. Захвачиваются не объекты, а ссылки на них, копии пойнтеров.

В типовом дельфийском однопоточном коде


Код:
Создать;
try
...
Вызвать (кложу);
...
finally
Освободить;
Автор: valgreesh
Дата сообщения: 10.06.2013 23:21
Arioch1

Цитата:
Как-то это казуистикой попахивает

Не претендую на истинность, в этих лицензиях сам чертСтолман ногу сломит...


Цитата:
в смысле копии объектов?

Копии указателей разумеется.


Цитата:
В типовом дельфийском однопоточном коде

Этот код слишком примитивен Он не демонстрирует ценность кложур, а ценность именно в сохранении контекста. А там, где кложура будет применяться по назначению, вопрос о жизни объектов будет возникать постоянно. Вот и получается, что смысла использовать кложуры в нынешнем виде не очень то много, разве что в совсем простых случаях.
Автор: AlekXL
Дата сообщения: 10.06.2013 23:50

Цитата:
Левой рукой форкаем Qt, меняем что надо, и выкладываем как отдельный публичный LGPL-проект.
Правой рукой скачиваем релиз этого проекта и линкуем его в проприетарный код.
ЧЯДНТ?
все верно. Если QT под LGPL без изъятий и дополнений.


Цитата:
Кстати, на англо-форумах меня уверяли, что с научной(?) точки зрения статическая или динамическая линковка не важна для определения, является ли проект чем-то цельным (т.е. derivative), или симбиозом (т.е. mere aggregation).
это не вопрос науки, а вопрос правоприменения, а прецедентов мало.
В сущности, как говорят британские ученые "англо-форумы" можно безнаказанно воровать даже GPL код, если только с этого не рубить огромную кучу бабок.
А если у тебя куча бабок, ты get sued за любой чих.


Цитата:
Видимо линковки быть не должно вообще, делай ручками через LoadLibrary и пойнтеры
позднее связывание все равно является связыванием. Но лицензия мутная, причем ее намеренно такой сделали.
valgreesh

Цитата:
. Вот и получается, что смысла использовать кложуры в нынешнем виде не очень то много, разве что в совсем простых случаях.
вовсе нет. Просто нужно использовать интерфейсы, динамические массивы, и строки.
Если уже дорос до многопотока, причем не в додНете, а в нативе, будь любезен соответсвовать. Если хотите большей безопасности, то идите в доднет. Там как раз по росту песочница, причем - навечно.
Я не хочу, чтоб мне навязывали, что и как делать.



Добавлено:

Цитата:
в отличие от DisposeOf в XE4 - вот от этой придумки мне страшно. Новичков просто жалко, дай бог их не будет :-D
а вообще можно выключить ARC на ios? Потому что мой код вызовет проблемы с этой фичей.
Автор: valgreesh
Дата сообщения: 11.06.2013 00:07
AlekXL

Цитата:
Просто нужно использовать интерфейсы, динамические массивы, и строки

Именно, как раз из-за неумения дельфей рулить жизнью объектами и приходится извращаться с интерфейсами/интерфейсными обертками.


Цитата:
Если уже дорос до многопотока, причем не в додНете, а в нативе, будь любезен соответсвовать

Если это ко мне, смею заверить, что дорос и очень давно. Именно опыт позволяет видеть недостатки реализаций тех или иных вещей. И именно опыт дает возможность оценить преимущества управляемого жизненного цикла объектов. Это объективная оценка. А вообще, я паскали люблю, иначе не сидел бы в дельфийской теме, однако - "Платон мне друг, но истина дороже".
Автор: AlekXL
Дата сообщения: 11.06.2013 00:26

Цитата:
Именно, как раз из-за неумения дельфей рулить жизнью объектами и приходится извращаться с интерфейсами/интерфейсными обертками.
нет, это неверно. Я использую интерфейсы в том числе и для того, чтобы ослабить связь между частями проекта. Более того, при помощи интерфейса я устанавливаю контракт, ясно читаемый, между этими частями. И используя Delphi Spring, я абстагирую реализацию некоторых классов.


Цитата:
Именно опыт позволяет видеть недостатки реализаций тех или иных вещей. И именно опыт дает возможность оценить преимущества управляемого жизненного цикла объектов
управляемого не тобой, не так ли? Впрочем концепцию strong vs weak link я бы не назвал простой, тем более что weak link, как я понял, может указывать на что попало. Так что будут и залоченные в памяти взаимно ссылающиеся объекты, и попытки дерефенса освобожденной памяти.
А если нужно запихнуть ссылку на объект в Pointer или NativeInt?
Такая магия бывает необходима, скажем, для WinApi, или TVirtualDrawTree. Логика работы ARC в этом случае может быть еще сложнее, чем в обычном случае: сначала нужно сделать явный инкремент, а потом всюду следить,чтобы нигде не произошел неявный декремент.

ARC это благо, если нам дадут выбор, где и как его использовать. А насильно навязанный ARC - мне не нужен, я против. Я хочу _полной обратной совместимости.
Автор: HeMet
Дата сообщения: 11.06.2013 08:35

Цитата:
для них должно быть важно, что думают пользователи, а не что они себе думают.

А пользователи должны читать документацию и если там написано "не используйте это в своем коде - оно не для вас" (вольный перевод: "Class and record helpers provide a way to extend a type, but they should not be viewed as a design tool to be used when developing new code."), значит так оно и есть.
Пользователи могут извращаться на тысячу и один лад, вплоть до использования трижды упразднённого object, потому что инструмент, который они не должны были использовать не работает так, как им хочется. А разрабам Delphi потом тяни лямку.

Страницы: 1234567891011121314151617181920212223242526

Предыдущая тема: cxDBPivotGrid выгрузка в excel


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