S>В Rust с помощью Cargo можно одновременно использовать несколько версий одной и той же зависимости — без проблем и без танцев с бубном.
S>Но это не точно.
А что будет, если компонент А хочет одну версию некоторой библиотеки, а компонент Б — другую. И при этом мы получаем через компонент А из этой библиотеки какой-то еейный объект, а потом через компонент Б передаём этот объект другой версии той же библиотеки. А они не совместимы по своему внутреннему мироустройству...
S>А что на счет других платформ?
Я так понимаю, в Rust и Go это сделано плюс-минус одинаково (конкретный синтаксис конкретных команд может немного различаться, но суть плюс-минус одна). Не берусь судить, кто был первопроходцем, но подозреваю, что Go.
Здравствуйте, Pzz, Вы писали:
S>>Но это не точно.
Pzz>А что будет, если компонент А хочет одну версию некоторой библиотеки, а компонент Б — другую. И при этом мы получаем через компонент А из этой библиотеки какой-то еейный объект, а потом через компонент Б передаём этот объект другой версии той же библиотеки. А они не совместимы по своему внутреннему мироустройству...
Ну в идеале — должны быть разные имена или пространства имен и одно к другому не будет каститься. Т.е. ручной кастинг нужен, как будто это два разных класса, пусть и часть названия и все поля совпадают.
Здравствуйте, Shmj, Вы писали:
S>Ну в идеале — должны быть разные имена или пространства имен и одно к другому не будет каститься. Т.е. ручной кастинг нужен, как будто это два разных класса, пусть и часть названия и все поля совпадают.
Здравствуйте, Shmj, Вы писали:
S>Вроде пишут что в Rust решили:
Как обычно преувеличивают.
S>А что на счет других платформ?
Там еще хуже, обычно выглядит так делайте как хотите, вас никто не ограничивает (но только матом)
Здравствуйте, Shmj, Вы писали:
S>Вроде пишут что в Rust решили:
S>
S>В Rust с помощью Cargo можно одновременно использовать несколько версий одной и той же зависимости — без проблем и без танцев с бубном.
S>Но это не точно.
S>А что на счет других платформ?
Танцы начнутся, когда вам закроют доступ к репозиторию, как это стало модно, под каким-нибудь выдуманным предлогом. Например, скажут, что у тебя глаза не того цвета
Здравствуйте, Shmj, Вы писали:
S>Ну в идеале — должны быть разные имена или пространства имен и одно к другому не будет каститься. Т.е. ручной кастинг нужен, как будто это два разных класса, пусть и часть названия и все поля совпадают.
Да какой же это ад?.. Это же рай самый настоящий с единорогами! Ад — это когда поля совпадают, но не совсем и не все.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
S>В Rust с помощью Cargo можно одновременно использовать несколько версий одной и той же зависимости — без проблем и без танцев с бубном.
S>Но это не точно.
вот именно. кроме зависимостей в сорцах есть еще сторонние бинарные зависимости. последний раз когда я интересовался (давно) там с ними было вообще никак
Здравствуйте, Marty, Вы писали:
M>Ну, то есть, всё равно ручками разруливать?
в смысле? То есть вы подложили в коде большую свинью, компилятор вместо того чтобы промолчать и потащить эту свинью в релиз, вам говорит, что типы несовместимы, а вы ещё и недовольны? В С++ не надо ручками разруливать, компилятор автоматом всё сделает, но потом кровавыми геморройными мозолями в известном месте это надо будет разруливать.
Здравствуйте, sergii.p, Вы писали:
M>>Ну, то есть, всё равно ручками разруливать?
SP>в смысле? То есть вы подложили в коде большую свинью, компилятор вместо того чтобы промолчать и потащить эту свинью в релиз, вам говорит, что типы несовместимы, а вы ещё и недовольны? В С++ не надо ручками разруливать, компилятор автоматом всё сделает, но потом кровавыми геморройными мозолями в известном месте это надо будет разруливать.
Большая часть плюсовых либ — хидер-онли. Если не хидер-онли, то обычно это тяжкое сишное наследие, и в серьёзных проектах нужную версию обычно сами собирают.
Это в языках, где тяп ляп, накидал, подтянул, и что-то даже работает, там наверное надо
Здравствуйте, Pzz, Вы писали:
Pzz>А что будет, если компонент А хочет одну версию некоторой библиотеки, а компонент Б — другую. И при этом мы получаем через компонент А из этой библиотеки какой-то еейный объект, а потом через компонент Б передаём этот объект другой версии той же библиотеки. А они не совместимы по своему внутреннему мироустройству...
Компилятор ругнется. Примерно так:
error[E0308]: mismatched types
--> ucat/src/interface.rs:28:5
|
28 | iface.ips.iter().find(|ipn| ipn.is_ipv4())
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ expected enum `ipnetwork::IpNetwork`, found a different enum `ipnetwork::IpNetwork`
|
= note: expected enum `std::option::Option<&ipnetwork::IpNetwork>` (enum `ipnetwork::IpNetwork`)
found enum `std::option::Option<&ipnetwork::IpNetwork>` (enum `ipnetwork::IpNetwork`)
= note: perhaps two different versions of crate `ipnetwork` are being used?
error: aborting due to previous error
Разобраться, ошибка это или нет, и если нет, написать функцию-мигратор из одной версии в другую. У меня в одном рабочем проекте сейчас так, вовне дается объект из стабильной версии, а внутри используется пре-релиз новой версии, т.к. там нужная мне функциональность добавлена.
Здравствуйте, koenig, Вы писали:
K>вот именно. кроме зависимостей в сорцах есть еще сторонние бинарные зависимости. последний раз когда я интересовался (давно) там с ними было вообще никак
Здравствуйте, Manticore, Вы писали:
Pzz>>А что будет, если компонент А хочет одну версию некоторой библиотеки, а компонент Б — другую. И при этом мы получаем через компонент А из этой библиотеки какой-то еейный объект, а потом через компонент Б передаём этот объект другой версии той же библиотеки. А они не совместимы по своему внутреннему мироустройству... M>Компилятор ругнется.
А компоненты всегда в исходниках что-ли распространяются?
Бардак в зависимостях может быть в каких-то либах между собой, а не в твоём проекте. Например, какой-нибудь фреймворк для логгирования может использоваться всеми либами. И каждая из них может быть скомпилена с разной версией логгера.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай