wizzard: (Default)
[personal profile] wizzard

binary versions of win-psycopg2 are built against latest DEBUG version of MSVCRT that ships ONLY with VS2005 SP1 ATL Security Update 2

and they don’t have sources readily buildable on Windows, either – only the Linux ones :\

Date: 2009-09-10 07:26 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
Почему это "никогда не будет переносимо"? Религия не позволяет? Это официально поддерживаемый сценарий - как раз путем динамической компоновки с одной копией CRT. Вдобавок не только память - но и другие объекты, пример с FILE* я ж не случайно привел.

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

Понятно, что для того, чтобы оправдать передачу memory ownership между модулями, нужны веские причины. Но если проект такой, что передавать ownership проще, чем не передавать - то желание экономить 500 кбайт на одной из поддерживаемых ОС не должно вставлять палки в колеса и ухудшать дизайн.

Передача ownership используется довольно часто - в интерфейсе zlib, скажем, есть функции zalloc и zfree, специально для того, чтобы избежать проблем с разными кучами. Кроме того, есть функции gzopen, которые принимают хендлы, возвращаемые CRT. Т.е. библиотека построена с расчетом на то, что c одной стороны, могут использоваться несколько копий CRT с разными кучами, а с другой стороны, что все вызовы open во всех копиях CRT не используют глобальных данных.

Если, скажем, делать библиотеку абсолютно портабельной, то надо либо делать и вызовы zopen, zsocket и т д, либо ограничивать способы использования CRT клиентами. В случае zlib оказалось лучше сделать так, как сделали, а в случае, когда все модули пишутся одним вендором, отказ от статической компоновки упростит дизайн и соответственно, сократит себестоимость разработки.

Грубо говоря, если в нашем приложении 150 вариантов zlib, то не надо будет копипейстить 150 функций zalloc/zfree или придумывать хитрые способы обойти проблему без копипейста.

Date: 2009-09-10 07:47 pm (UTC)
From: [identity profile] kunaifusu.livejournal.com
Почему это "никогда не будет переносимо"?
Потому, что стандарт языка ничего не знает о DLL и прочих системных заморочках. Вы с таким же успехом можете создать процесс и передавать ему адреса памяти через пайп - где-то это может и будет работать и, может быть, кто-то будет считать это "официальным поддерживаемым сценарием", но переносимым это никогда не будет.

Profile

wizzard: (Default)
wizzard

January 2019

S M T W T F S
  12 345
6789101112
1314 1516171819
202122 23242526
2728293031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 22nd, 2026 07:23 pm
Powered by Dreamwidth Studios