dependency hell
Sep. 10th, 2009 01:32 ambinary 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 :\
no subject
Date: 2009-09-10 07:26 pm (UTC)Использование многих копий CRT требует особой осторожности при построении межмодульных интерфейсов, накладывает дополнительные ограничения на ровном месте.
Понятно, что для того, чтобы оправдать передачу memory ownership между модулями, нужны веские причины. Но если проект такой, что передавать ownership проще, чем не передавать - то желание экономить 500 кбайт на одной из поддерживаемых ОС не должно вставлять палки в колеса и ухудшать дизайн.
Передача ownership используется довольно часто - в интерфейсе zlib, скажем, есть функции zalloc и zfree, специально для того, чтобы избежать проблем с разными кучами. Кроме того, есть функции gzopen, которые принимают хендлы, возвращаемые CRT. Т.е. библиотека построена с расчетом на то, что c одной стороны, могут использоваться несколько копий CRT с разными кучами, а с другой стороны, что все вызовы open во всех копиях CRT не используют глобальных данных.
Если, скажем, делать библиотеку абсолютно портабельной, то надо либо делать и вызовы zopen, zsocket и т д, либо ограничивать способы использования CRT клиентами. В случае zlib оказалось лучше сделать так, как сделали, а в случае, когда все модули пишутся одним вендором, отказ от статической компоновки упростит дизайн и соответственно, сократит себестоимость разработки.
Грубо говоря, если в нашем приложении 150 вариантов zlib, то не надо будет копипейстить 150 функций zalloc/zfree или придумывать хитрые способы обойти проблему без копипейста.
no subject
Date: 2009-09-10 07:47 pm (UTC)Потому, что стандарт языка ничего не знает о DLL и прочих системных заморочках. Вы с таким же успехом можете создать процесс и передавать ему адреса памяти через пайп - где-то это может и будет работать и, может быть, кто-то будет считать это "официальным поддерживаемым сценарием", но переносимым это никогда не будет.