Re[18]: Чем вам всем не угодил Delphi?
От: hattab  
Дата: 30.04.08 21:48
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

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

H>>Да, были и есть в ней приблуды для веба, но нужно же понимать, что это не основное ее предназначение.
MC>Воо. Дотнету, например, ничто не мешает конкурировать с дельфи (я имею в виду дельфи как платформу: язык дельфи+VCL/CLX+тулзы от борланда) в его нише и при этом иметь не приблуды, а полноценные инструменты для веба.

WebSnap вполне себе полноценный инструмент. IntraWeb аналогично, с той разницей, что захостить IntraWeb удастся скорее всего, либо на дедике, либо на своем железе. Их направленность именно корпоративный сектор. Для простых страничек нужно использовать что нибудь другое.
Re[8]: Чем вам всем не угодил Delphi?
От: hattab  
Дата: 30.04.08 21:56
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


H>>Указатели (с побочным эффектом, в целях экономии памяти):

H>>
H>>//
H>>Function XmlUnescapeString(Const AString : AnsiString) : AnsiString;
H>> //Поскипано
H>>End;
H>>//
H>>

G>1)Такой объем кода совсем без комментов — моветон
G>2)Многовато кода для обычного replace
G>3)Нет поддержки Uincode
G>4)Разве в стандартных средствах нет такой функции?

1. Этот код будет переложен на ассемблер, если будет не лень
2. Это цена за скорость и аккуратную работу с памятью. Знаете, как в Delphi строки устроены?
3. Бай дизайн. Работаем только с однобайтовыми кодировками. Весь юникод идет в UTF-8
4. Именно такой нет. Есть StringReplace, но для моей задачи он не подходит.
Re[9]: Чем вам всем не угодил Delphi?
От: kuj  
Дата: 30.04.08 22:39
Оценка:
Здравствуйте, hattab, Вы писали:

H>1. Этот код будет переложен на ассемблер, если будет не лень

H>2. Это цена за скорость и аккуратную работу с памятью. Знаете, как в Delphi строки устроены?
H>3. Бай дизайн. Работаем только с однобайтовыми кодировками. Весь юникод идет в UTF-8
H>4. Именно такой нет. Есть StringReplace, но для моей задачи он не подходит.

Похоже на ЖИРНУЮ точку в этом топике. Все уродство Delphi на лицо... Добавить нечего.
Re[19]: Чем вам всем не угодил Delphi?
От: Mr.Cat  
Дата: 30.04.08 23:02
Оценка: +1 :)
Здравствуйте, hattab, Вы писали:
H>>>Да, были и есть в ней приблуды для веба, но нужно же понимать, что это не основное ее предназначение.
H>WebSnap вполне себе полноценный инструмент.

Вы уж это... сами определитесь, приблуда это или полноценный инструмент
Re[7]: Чем вам всем не угодил Delphi?
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 30.04.08 23:09
Оценка:
Здравствуйте, hattab, Вы писали:


H>Что объяснять? Почему проблем нет? Так все дело в руках, в чем же еще. Или ты думаешь, что никто кроме тебя DirectX из под Delphi не юзал чтоль? Я тут ссылочку давал на wiki со списком Delphi-софта, даже там есть чего-то на DX. Однозначно это не косяк Delphi (у нее была проблема с кодогенерацией на константных массивах, но к делу явно отношения не имеет).


Так всё-таки может объяснишь тогда хотя бы как надо? Напомню пример:
var pTexture : IDirect3DTextture9;
...
pTexture := nil; //тут будет аксесс виолейшн, если переменная уже nil.


H>Ага Покури чего нибудь на счет OpenGL. Что нибудь близкое к GLScene. Боюсь обкуришься


Именно его и курил по докам. В чём сложность-то?

H>Компоненты должы всегда предоставляться в исходниках. Это первое правило при использовании сторонней либы. Иначе ССЗБ.


А если всё-таки нужный мне компонент поставляется только в двоичном виде? Что делать?

K>>"Show me the code"©


H><code skipped>


В первой функции 30% кода — это приведение типов. Разве это нормально?

H>У меня сегодня круговая оборона, все нормально


Кстати, у меня до сих пор осталась привычка возвращаемую переменную называть Result — привет из прошлого дельфийского опыта Хотя на дельфях уже лет 5 ничего не писал
[КУ] оккупировала армия.
Re: Чем вам всем не угодил Delphi?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.05.08 00:04
Оценка:
Здравствуйте, misha_irpen, Вы писали:

_>Постоянно читая RSDN имел возможность неоднократно убедиться что большинство участников сильно не любят Delphi. Уж очень стало интересно, а за что собственно?

Лень все ответы читать, отвечу как думаю сам.

_>Сам я от большого программинга уже отошел, хотя по прежнему могу считать себя профессионалом Delphi и ASM. И у меня приактически никогда не возникало проблем из-за каких-то ограничений языка. Я с уверенностью могу сказать, что могу написать на нем абсолютно все что угодно в рамках имеющихся API и математических моделей. При этом практически никогда не приходится изобретать велосипедов и извращаться чтобы обойти ограничения языка или стандартных библиотек. В чем по вашему мнению я заблуждаюсь? Что такого рулезного есть в новомоюдых сишарпах и иже с ними кроме монстровидных, а часто еще и тормозных RTE/виртуальных машин?


1) Язык. многословный, не всегда последовательный.
2) Сильная типизация. Сама по себе вещь хорошая, но в дельфи это такая вещь в себе. когда начинаешь юзать сторонние апи, она летит к черту.
3) Для какого то нового апи или библиотеки надо писать обертки/декларации, или искать, может уже кем-то написано. Для С/С++ это обычно в комплекте идет.
4) Наличие компонентов "на все случаи жизни". Шаг влево, шаг вправо == попытка к бегству, расстрел. гемор, если начинаешь делать что-то отличающееся.
5) Программисты дельфи. это самое мрачное. был грешок, работал долгое время на поддержке дельфевых прилад. начальнег (мегакрутой спец по дельфи и прикладной области), как то с трепетом мне показал единственный! юнит, который он сделал, оформив его для повторного использования. в юните была одна функция, разбивавшая строку по табам вроде. в коде этой функции раз пять в разных местах было сравнение с явно прописанной константой символа таб. на мое замечание, почему бы это значение не вынести в аргументы и получить более универсальную функцию, этот чел сказал — хм, интересная мысль.

Ну а так — язык как язык, есть своя ниша. Но я лично цпп предпочитаю.

_>Во время пика своей популярности Delphi занимал ту нишу, которыю ныне занимают управляемые языки программирования. Выходит что позиционирование у него верное, неужели всм оказалась так нужна эта управляемость кода? Кстати, сборка мусора для некоторых типов данных (строки и динамические массивы) у Delphi была уже тогда.


Язык кривой. Сборки мусора не было у строк. просто автоматически память выделялась под паскаль строки длинной до 255 символов. это как если бы говорить, что у std::string есть сборка мусора. Массивы, я так понимаю, подразумеваются не динамические, а автоматические.

_>Или может вам не нравиься Pascal? Но из других ваших сообщений явно следует что синтаксис -- это вторичное, да и наездов на него я вроде как не видел...

Не нравится. какашка язык.

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


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

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

самое печальное — знания дельфи, языка, компонент имхо не нужно особо. никаких фундаментальных идей там не найдешь, ничему новому не научишся. будешь ковырятся — только время зря потратишь.
Маньяк Робокряк колесит по городу
Re: Чем вам всем не угодил Delphi?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.05.08 00:15
Оценка:
Здравствуйте, misha_irpen, Вы писали:

_>Сам я от большого программинга уже отошел, хотя по прежнему могу считать себя профессионалом Delphi и ASM. И у меня приактически никогда не возникало проблем из-за каких-то ограничений языка. Я с уверенностью могу сказать, что могу написать на нем абсолютно все что угодно в рамках имеющихся API и математических моделей. При этом практически никогда не приходится изобретать велосипедов и извращаться чтобы обойти ограничения языка или стандартных библиотек. В чем по вашему мнению я заблуждаюсь? Что такого рулезного есть в новомоюдых сишарпах и иже с ними кроме монстровидных, а часто еще и тормозных RTE/виртуальных машин?


По поводу выделенного. Си-шарпом вроде занимался тот же перец, который лет пятнадцать назад дизайнил дельфи.
Маньяк Робокряк колесит по городу
Re[2]: Чем вам всем не угодил Delphi?
От: Сергей  
Дата: 01.05.08 00:18
Оценка:
Здравствуйте, Marty, Вы писали:

M>Язык кривой. Сборки мусора не было у строк. просто автоматически память выделялась под паскаль строки длинной до 255 символов. это как если бы говорить, что у std::string есть сборка мусора. Массивы, я так понимаю, подразумеваются не динамические, а автоматические.


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

M>самое печальное — знания дельфи, языка, компонент имхо не нужно особо. никаких фундаментальных идей там не найдешь, ничему новому не научишся. будешь ковырятся — только время зря потратишь.


Применив делфи правильно и вовремя — можно время здорово сэкономить, как раз благодаря скорости формошлепства.
Re[3]: Чем вам всем не угодил Delphi?
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 01.05.08 00:35
Оценка:
Здравствуйте, Сергей, Вы писали:

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


M>>Язык кривой. Сборки мусора не было у строк. просто автоматически память выделялась под паскаль строки длинной до 255 символов. это как если бы говорить, что у std::string есть сборка мусора. Массивы, я так понимаю, подразумеваются не динамические, а автоматические.


С>Нет, подразумеваются именно динамические массивы и именно сборка мусора.

Напомните как они созданются и используются, а то что-то не могу вспомнить.

M>>самое печальное — знания дельфи, языка, компонент имхо не нужно особо. никаких фундаментальных идей там не найдешь, ничему новому не научишся. будешь ковырятся — только время зря потратишь.


С>Применив делфи правильно и вовремя — можно время здорово сэкономить, как раз благодаря скорости формошлепства.

можно. но это скорее относится к штучно изготавливаемым программам. в серийных обычно имеет смысл потратить время на оттачивание интерфейса
Маньяк Робокряк колесит по городу
Re[14]: Чем вам всем не угодил Delphi?
От: OCTAGRAM Россия http://octagram.name/
Дата: 01.05.08 01:18
Оценка:
gandjustas пишет:
> Еще раз повторяю, все современные языки полны по тьюрингу.
> Спорить об этом смысла нет.
Нет, есть. Достаточно вспомнить, что такое эта машина Тьюринга. Число
занимает столько места, сколько оно есть. О производительности никогда
не встаёт вопроса. Вся эта машина Тьюринга — это чисто академические
заморочки. На практике тьюринг–полнота как таковая ещё имеет какой–то
смысл, но уравнивать ею языки не получится.

> То есть то что сделано на одном языке — может быть сделано на другом.

А вот физики говорят, что все поля эквивалентны, и при сверхбольших
энергиях становятся неотличимы (или что они там говорят?). В реальной
жизни это знание очень помогает, я заметил.

--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re: Чем вам всем не угодил Delphi?
От: Niemand Австралия  
Дата: 01.05.08 01:18
Оценка: 7 (3) +4
Здравствуйте, misha_irpen, Вы писали:

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


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

Самое первое, что хотел бы заметить — это то, что мы живем в жестоком мире, где главное не качество, а маркетинг и продвижение. Сколько прекрасных технологий не выжило из-за более баблистых конкурентов? А сколько просто не вышло на рынок? А сколько авторов даже не начали работу из-за боязни конкурентов?

Короче все это — cruel world.

Сколько раз MS делала подлянки с частичным выполнением стандарта или недокументированым API? И в результате у конкурентов выходили несовместимые продукты, которые не могли предоставить весь функционал продуктов мс. ессно заказчики просили писать на технологии, которую "рекомендует" мс.
Как удается в таких условиях выжить джаве — мне непонятно, но sun держиться и они молодцы.

Потому уход делфи из рынка я считаю на 60% по маркетинговым причинам, а не техническим.

Теперь техническая часть.
Сразу оговорюсь — я с самых пеленок (в переносном смысле) ориенторовался на продукты MS исходя из простой как сало истины "бабло побеждает зло", но дальшие мысли попытаюсь сделать максимально объективными.
И еще: опыта в разработке на делфи у меня немного, использовал его когда только преподы заставляли писать именно на нем.

1. Делфи в некоторых вещах даже опередило свое время: в частности в datatable/gridview (может называется по-другому, но думаю все поняли). Такого уровня легкость работы с источниками данных и их отображением появилась только в .net 1.1/2.0 (2003/2005). НО при желании сделать "чуть влево-чуть вправо" надо было потратить намного больше усилий, чем сделать "по прямой". Это отталкивало и казалось что решение нерасширяемо (еще раз повторюсь, что это все ИМХО). Очень много механизмов в делфи скрыто от глаз девелопера, а вообще-то прятать надо их от юзера, а не девелопера.
2. Оптимизация. Я начинал писать любой модуль с {$O-}.
Один раз у меня был цикл
for i:=0 to 8 do
...

каково было мое удивление когда он после 8 шел в 9, 10 и так до 12, где вылезала ошибка доступа. Тогда я отнес код преподу, который слегка о*[удивился]*л с таких дел.
И это не единственный случай.
2.1. "Inaccessible due optimization". Кто знает, тот поймет.
3. IDE. Это самое слабое место всей цепочки.
3.1. Ошибка работы с чем-то.
Наверное все попадали в ситуацию когда Delphi IDE нарывалось на какую-то ошибку. Тогда оно начинало об этом гласить через какое-нить окно с единственной кнопкой "OK", часто еще с паузой в 2-3 с, с зависанием среды и в цикле. Например если что-то случилось с БД или компонент не найден.
3.2. Intellisense (ну или как там его) — мелочь, но неприятно.
Не прикалывало то что подсветка фильтрует следующий идентификатор согласно типа. Т.е., если я хочу написать

 iSomeVal := getString().Length;


то метод getString() не высветится, т.к. он возвращает string а не integer.
3.3. Совсем мелочь, но задолбало. Удаление пустых обработчиков.
Лично я (потеряв из-за сбоев не один кусок кода) нажимаю Ctrl+S через каждые 5-10 с. А делфи "оптимизирует" код и удаляет пустые обработчики (в т.ч. и новосозданные). А еще когда не находит какой-то контрол норовит удалить его с формы. Такое впечатление, что из формы можно удалить контрол и все будет ОК — прога запашет. Типа девелоперы могут просто так кидать контролы.
4. "Закон один для всех". В делфи часто встречаются исключения. Например writeln — чуть ли не единственная функция, куда можно передать переменное к-во параметров. А вот простым смертным — низза. Похожая ситуация с массивами.

Остальные замечания еще меньше, потому даже писать не буду.

Резюме
Спрос на любую технологию формируется с двух сторон:
1. Заказчик.
1.1. Есть уже готовач инфраструктура на некой технологии. Отсюда некоторая инертность рынка.
1.2. Есть удачный опыт работы с технологией.
1.3. Просто скзали/услышая, что эта технология — круто.
2. Программист.
2.1. Опыт работы с технологией.
2.2. Удобство.
2.3. Библиотеки.
и т.д.

именно п.2. формируется из этих многих ИМХО которые перечислены в этой ветке (сила мелочей в том, что их много). Каждая мелочь (приятная и не очень) формирует ИМХО, которое потом формирует ИМХО коллективное, а в последствии — рынок. А еще на ИМХО влияет реклама и усилия по продвижению.

Вывод

Задача IT — предоставление сервисов в других областях народного хозяйства. Потому если вы можете сделать своего заказчика счастливым на delphi — делайте, ему скорее всего абсолютно пофиг что вы используете. Коллективное ИМХО отодвинуло delphi на второй план, но это абсолютно никому не мешает использовать его в своем проекте — главное чтобы закачик был счастлив.
If the message above is in English — means I'm wasting my work time and work computer to post here. No hard feelings
Re[2]: Чем вам всем не угодил Delphi?
От: OCTAGRAM Россия http://octagram.name/
Дата: 01.05.08 03:38
Оценка:
machine3000 пишет:
> Также C++ даёт возможность размещать классы не только в куче, но и в
> стеке и в глобальной памяти.
В C++ нельзя возвращать из функции объекты размера, не известного на
этапе компиляции.
а) строки
б) экземпляры потомка класса

C++ позволяет часть вещей сместить на стек, но не до конца. В этих
случаях будет динамическая память. IIRC в C++ нельзя конструировать
результат прямо на месте.

C++ — это полумера. Подход "сделаем наполовину".

--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re[3]: Чем вам всем не угодил Delphi?
От: Cyberax Марс  
Дата: 01.05.08 04:02
Оценка:
Здравствуйте, OCTAGRAM, Вы писали:

OCT>C++ позволяет часть вещей сместить на стек, но не до конца. В этих

OCT>случаях будет динамическая память. IIRC в C++ нельзя конструировать
OCT>результат прямо на месте.
То есть?

Существует in-place new и RVO (return value optimization). В следующем Стандарте RVO станет более мощной из-за move constructors.
Sapienti sat!
Re[6]: Чем вам всем не угодил Delphi?
От: OCTAGRAM Россия http://octagram.name/
Дата: 01.05.08 04:08
Оценка:
gandjustas пишет:
> Я больше всего работал в Delphi7 — большенитсво впечатлений оттуда.
Delphi7 — это 2001й год. С тем же успехом можно ругать Windows за
дырявость, а IE — за отсутствие табов.

--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re[5]: Чем вам всем не угодил Delphi?
От: OCTAGRAM Россия http://octagram.name/
Дата: 01.05.08 04:13
Оценка:
hattab пишет:
> Vendor.App.Lib1.Class1? Это есть.
Delphi 2007?

>> > OCT>автоматическая финализация;

>> >
>> > Есть, для управляемых типов.
> OCT>Самые обычные объекты — управляемые?
>
> Нет конечно Advanced records (class-like) финалятся
тоже 2007? в 2006 не помню такого

> Чем это будет отличаться от:

>
> Var
> Buffer : Array Of ...;
>
> Begin
>
> SetLength(Buffer, NeededLength(...));
Быстродействием.

--
ISO/IEC 8652:1995/Amd 1:2007
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Чем вам всем не угодил Delphi?
От: wallaby  
Дата: 01.05.08 04:30
Оценка: -4 :)
Здравствуйте, Niemand, Вы писали:

N>Один раз у меня был цикл

N>
N>for i:=0 to 8 do
N>...
N>

N>каково было мое удивление когда он после 8 шел в 9, 10 и так до 12, где вылезала ошибка доступа. Тогда я отнес код преподу, который слегка о*[удивился]*л с таких дел.

Скорее всего хреновый был препод. Тема с оператором for постоянно всплывает в разных форумах по Delphi, проблема в том что отладчик неправильно показывает значение счётчика цикла for (если бы он его вообще не показывал, было бы меньше вопросов). На практике это часто выглядит так: пишется for-цикл с неочевидной ошибкой, начинают его отлаживать и обнаруживают, что ошибка проявляется когда счётчик цикла находится вне допустимого диапазона. Самое интересное начинается, если эта ошибка исчезает при отключении оптимизации или при замене for на while (и такое бывает ). У меня самого однажды было такое, для поиска ошибки пришлось неспешно изучать ассемблерный код в отладчике, и в результате for был оправдан.
---
The optimist proclaims that we live in the best of all possible worlds; and the pessimist fears this is true
Re[8]: Чем вам всем не угодил Delphi?
От: Privalov  
Дата: 01.05.08 04:56
Оценка:
Здравствуйте, goto, Вы писали:

G>В той конторе, где начинал я, мэйнфреймы и т. наз. мини-эвм, жили подольше. Парк был очень разнообразным. Собирались еще ставить Эльбрус. Да, формально отмечу, что забыл про относительно стандартный PL/1, приходилось его использовать для переносимости из-за личной нелюбви к Фортрану 4.


А можно подробнее о переносимости? У нас как раз код на Фортране работал примерно на 6-7 разных платформах без переделки. И, если не ошибаюсь, работал быстрее PL/1. А в условиях дороговизны машинного времени с этим тоже нужно было считаться.
Re[10]: Чем вам всем не угодил Delphi?
От: hattab  
Дата: 01.05.08 05:43
Оценка:
Здравствуйте, kuj, Вы писали:

H>>1. Этот код будет переложен на ассемблер, если будет не лень

H>>2. Это цена за скорость и аккуратную работу с памятью. Знаете, как в Delphi строки устроены?
H>>3. Бай дизайн. Работаем только с однобайтовыми кодировками. Весь юникод идет в UTF-8
H>>4. Именно такой нет. Есть StringReplace, но для моей задачи он не подходит.

kuj>Похоже на ЖИРНУЮ точку в этом топике. Все уродство Delphi на лицо... Добавить нечего.


Я уже привык вести тут неконструктивные споры. Ты про фризы давай растолкуй.
Re[20]: Чем вам всем не угодил Delphi?
От: hattab  
Дата: 01.05.08 05:46
Оценка:
Здравствуйте, Mr.Cat, Вы писали:

H>>>>Да, были и есть в ней приблуды для веба, но нужно же понимать, что это не основное ее предназначение.

H>>WebSnap вполне себе полноценный инструмент.

MC>Вы уж это... сами определитесь, приблуда это или полноценный инструмент


Ну вообще, для Delphi, это приблуда, ибо нифига не основную задачу решает на которую Delphi точилась. А так вообще инструмент, как инструмент...
Re[8]: Чем вам всем не угодил Delphi?
От: hattab  
Дата: 01.05.08 05:58
Оценка:
Здравствуйте, koandrew, Вы писали:

H>>Что объяснять? Почему проблем нет? Так все дело в руках, в чем же еще. Или ты думаешь, что никто кроме тебя DirectX из под Delphi не юзал чтоль? Я тут ссылочку давал на wiki со списком Delphi-софта, даже там есть чего-то на DX. Однозначно это не косяк Delphi (у нее была проблема с кодогенерацией на константных массивах, но к делу явно отношения не имеет).


K>Так всё-таки может объяснишь тогда хотя бы как надо? Напомню пример:

K>
K>var pTexture : IDirect3DTextture9;
K>...
K>pTexture := nil; //тут будет аксесс виолейшн, если переменная уже nil. 
K>


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

H>>Ага Покури чего нибудь на счет OpenGL. Что нибудь близкое к GLScene. Боюсь обкуришься


K>Именно его и курил по докам. В чём сложность-то?


До уровня GLScene. Сложность в том, что никакое готовое API тебе такого (как GLScene) высокого уровня не даст.

H>>Компоненты должы всегда предоставляться в исходниках. Это первое правило при использовании сторонней либы. Иначе ССЗБ.


K>А если всё-таки нужный мне компонент поставляется только в двоичном виде? Что делать?


Я не встречал коммерческих компонентов без исходного кода. Даже Delphi и та идет с полными исходниками VLC и прочих либ. Если исходников нет -- искать у конкурентов, благо выбор есть всегда.

K>>>"Show me the code"©


H>><code skipped>


K>В первой функции 30% кода — это приведение типов. Разве это нормально?


Вполне. Мне так нравится. Можно было переписать с использованием типизированных указателей, но зачем? Я уже писал, что эта функция кандидат на полное переписывание на асме. Могу дать еще один пример с указателями:

//
Procedure XmlRpcVarDispInvoke(Dest : PVariant; Const Source : Variant; CallDesc : PCallDesc; Params : Pointer); Cdecl;
Const

 atTypeMask = $7F;
 atByRef    = $80;

Var

 PIndex   : Integer;
 Strings  : Array Of WideString;
 StrLen   : Integer;
 ArgPtr   : Pointer;
 ArgType  : Integer;
 ArgByRef : Boolean;

 //
 Procedure _IncArgPtr;
 Begin

  {$REGION ' Контроль размера типов '}

   {$IF SizeOf(Pointer) <> 4}

    {$MESSAGE FATAL 'Проверить алгоритм расчета смещений (см. ComObj.DispatchInvoke)'}

   {$IFEND}

  {$ENDREGION}

  If ArgType <> varError Then
   Begin

    If Not ArgByRef Then
     Case ArgType Of

      //
      varVariant :
       If PVarData(ArgPtr)^.VType <> varString Then
        Inc(Cardinal(ArgPtr), SizeOf(TVarData) - SizeOf(Pointer));
      //

      //
      varDouble .. varDate, varInt64 :
       Inc(Cardinal(ArgPtr), 8 - SizeOf(Pointer));
      //

     End;

    Inc(Cardinal(ArgPtr), SizeOf(Pointer));

   End;

 End;
 //

Begin

 // Если кодирование юникода не блокировано и происходит вызов метода...
 If (EncodingLocks = 0) And (CallDesc.CallType = DISPATCH_METHOD) Then
  Begin

   StrLen := 0;
   ArgPtr := Params;

   // Перебираем все параметры...
   For PIndex := 0 To CallDesc.ArgCount - 1 Do
    Begin

     // Получаем тип параметра и способ его передачи
     ArgType  := CallDesc.ArgTypes[PIndex] And atTypeMask;
     ArgByRef := CallDesc.ArgTypes[PIndex] And atByRef <> 0;
     //

     // Если параметр является юникод-строкой...
     If ArgType = varOleStr Then
      Begin

       // Увеличиваем размер массива перекодированных строк
       SetLength(Strings, StrLen + 1);

       // Если параметр передается по ссылке...
       If ArgByRef Then
        Begin

         // Перекодируем строку и обновляем ссылку в параметре
         Strings[StrLen]  := Utf8Encode(PWideString(ArgPtr^)^);
         Pointer(ArgPtr^) := Pointer(@Strings[StrLen])

        End
       Else
        // ... по значению...
        Begin

         // Перекодируем строку и обновляем ссылку в параметре
         Strings[StrLen]  := Utf8Encode(PWideString(ArgPtr)^);
         Pointer(ArgPtr^) := Pointer(Strings[StrLen]);

        End;

       // Увеличиваем счетчик перекодированных строк
       Inc(StrLen);

      End;

     // Считаем смещение следующего параметра
     _IncArgPtr;

    End;

  End;

 // Вызываем старую процедуру диспетчеризации вызова 
 OldVarDispProc(Dest, Source, CallDesc, Params);

End;
//
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.