Здравствуйте, Codechanger, Вы писали:
C> Обожаю WPF — ненавистников. Просто-таки квинтэссенция чистой ненависти. По поводу кроссплатформенного UI — все это сказки.
...
C> Знаете, я бы с удовольствием посмотрел бы на реальные кроссплатформенные проекты с человеческим интерфейсом(на десктопе, естественно, а не в вебе, там как раз понятно все).
В моей сказке живут GoldenDict (Qt. Win + Lin), Lazarus (LCL. Win + Lin + Mac), Avalon (Qt. Win + Lin). VirtualBox (Qt. Win + Lin) + еще немного мелочи. У меня хорошая сказка
C> Мне такие проекты как-то не попадались. И вообще, я не понимаю, почему любители Юникс плачут о том, что дотнет не поддерживается в *nix среде? Дотнетчики же об этом не плачут. Странно это все, короче.
С чего ты взял что плачут? Из последней убунты вообще моно решили выкинуть, так что там все без истерик
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>А для RAII unsafe и не нужен. C++/CLI вполне его обеспечивает в чисто managed контексте. А в шарпе есть using, который не полностью автоматичен (но у него есть свои достоинства), а так же всякие intrinsic вещи типа SafeHandle.
Я же спрашивал уже в этой теме, в MC++ временем жизни объекта управлет GC или нет? И какой был ответ? )
_>>Конечно если заниматься только рисованием формочек ( НС>"Рисование формочек", а точнее качественный UI — одна из самых сложных задач в программировании.
Скорее задач дизайна и эргономики. ) А запрограммировать уже нарисованный интерфейс сейчас может и обезьяна. ))) Собственно говоря в современных инструментах его обычно и рисуют в спец. визуальных редакторах.
НС>А еще safe кодом можно обойтись в 99.99% серверного кода, к примеру. Это, по твоей внутренней шкале, круче формочек? Или нужно непременно драйвера писать, чтобы круто?
Серверы — это понятие растяжимое... Допустим аpache, nginx, mysql, oracle известно на чём написаны. Собственно и MS продукты тоже не на .Net или Java, как ни странно. )))
А вот для определённых неторопливых внутрикорпоративных дел... Ну да я уже писал про это. )))
НС>Пока что на фанатика больше похож ты, когда предмет не знаешь, но огульно обвиняешь.
Эщэ, вообще то я как раз отвожу каждому инструменту свою нишу. У .Net и Java она своя и я несколько раз тут подчёркивал, что в своей нише они безусловно лучшие. У C++ тоже своя ниша. А сейчас у нас наблюдается вообще появления нового игрока — html5+javascript.
А вот как раз фанатики не могут признать что их инструмент не является нужным за пределами их ниши.
НС>Расскажи, что за проблемы быстродействия на работе ты решаешь?
Например работа с видео. Хотя мы в любом случае используем C++ не только для проектов требующих высокое быстродействие.
НС>Работа на низком уровне это драйвера что ли?
Вроде уже обсуждалось) Ну например реализация защиты ПО. Хотя драйверы — это тоже хороший пример.
Здравствуйте, Ночной Смотрящий, Вы писали:
E__>>Ну, отчасти эта консервативность — плюс(джава до сих пор бинарно совместима с древними махровыми версиями).
НС>Шарп тоже, до сих пор бинарно совместим с 2.0 (а небинарно с 1.0). Только бинарная совместимость никак развитию языка мешать не должна. В частности, для using точно рантайм менять не нужно.
Дык, я о том же. Добавить небольшую конструкцию в компилятор(благо, в жабе он простой как столб), да пронаследовать от какого-нибудь Disposable все внутренние классы, использующие внешние ресурсы. А то, глядя на эти дикие конструкции, хочется плакать кровавыми слезами.
E__>>Ну, у меня были в client-mode, и кто-то скажет, что это и не драйвера вовсе
НС>alex_public, несомненно, скажет
Ну да, драйвера должны быть суровыми, сишными, и крутиться в ядре. Я бы посмотрел, как выглядела бы реализация драйвера пин-клавиатуры в ядре(там очень много криптографии в логике, если что). Вместо моего относительно красивого кода, так как мне не пришлось перертягивать в код всю реализацию шифрования — для этого либы есть.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
H>С чего ты взял что плачут? Из последней убунты вообще моно решили выкинуть, так что там все без истерик
Но при этом он ставится одной командой. Ну, или при установке того же gnome-do(ибо оно на дотнете писано; кстати, хороший пример красивой и нужной десктопной проги мало того, что на дотнете, так еще и под линух).
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
_>Вроде уже обсуждалось) Ну например реализация защиты ПО. Хотя драйверы — это тоже хороший пример.
Ну попробуй мне рассказать, что же я такое писал на джаве. Для взаимодействия с устройствами.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
V>>Да и вообще, упоминание системных вещей смешнее всего. Например, ACE/boost/libevent/ptlib и еще куче других либ пофиг тонкости отличий АПИ операционнок, а вот "кроссплатформенному" дотнету (С) — не пофиг. Цирк как он есть.
E__>Но какой ценой...
E__>
E__>И это ACE, которая еще вполне себе простая штука. В тот же буст я даже не полезу.
Полезь в STL, какие проблемы? От библиотеки требуется АПИ, а не тонкости реализации. Например STL обычно свой для каждой платформы свой, без всяких ifdef.
В общем, ACE затем и нужен, чтобы эти ifdef перенести из кода клиента в код библиотеки. Не хочешь сравнить отличия в реализации, скажем, джавы для разных платформ?
Это наверно "такой ценой"... (С)
E__>>И это ACE, которая еще вполне себе простая штука. В тот же буст я даже не полезу.
V>Полезь в STL, какие проблемы? От библиотеки требуется АПИ, а не тонкости реализации. Например STL обычно свой для каждой платформы свой, без всяких ifdef.
Этот подход мне больше нравится. Но получается, что сам код STL далек от кроссплатформенности, что и требовалось довазать.
V>В общем, ACE затем и нужен, чтобы эти ifdef перенести из кода клиента в код библиотеки.
Ага. Только хочешь глянуть на то, как код внутри реализован(абсолютно нормальная практика в жабе), открываешь, и закрываешь нафиг. Ибо читабельно очень с трудом.
V>Не хочешь сравнить отличия в реализации, скажем, джавы для разных платформ? .Это наверно "такой ценой"... (С)
Мне реализация JVM еще ни разу не пригождалась. А вот в ACE пришлось покопаться.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, Eugeny__, Вы писали:
E> H>С чего ты взял что плачут? Из последней убунты вообще моно решили выкинуть, так что там все без истерик
E> Но при этом он ставится одной командой. Ну, или при установке того же gnome-do(ибо оно на дотнете писано; кстати, хороший пример красивой и нужной десктопной проги мало того, что на дотнете, так еще и под линух).
Так там все одной командой ставится, вопрос то ведь не в этом А с линзами юнити никакой гном-до не нужен
Здравствуйте, Eugeny__, Вы писали:
E__>Ну попробуй мне рассказать, что же я такое писал на джаве. Для взаимодействия с устройствами.
Откуда мне знать? ) Хотя в любом случае если там главное работа с устройствами, то на C++ это было бы проще, т.к. без всяких костылей типа JNI. Правда если эти костыли уже написаны кем-то раньше, то тогда вполне может быть выгоднее просто дописать немного.
Здравствуйте, alex_public, Вы писали:
E__>>Ну попробуй мне рассказать, что же я такое писал на джаве. Для взаимодействия с устройствами.
_>Откуда мне знать? ) Хотя в любом случае если там главное работа с устройствами, то на C++ это было бы проще, т.к. без всяких костылей типа JNI. Правда если эти костыли уже написаны кем-то раньше, то тогда вполне может быть выгоднее просто дописать немного.
JNI там и в помине не было. Устройства подключаются к ком порту, и открываешь его просто как файл. Причем единообразно в винде и линухе(кроссплатформенные дрова получились, хехе). Ну или usb, но с эмуляцией ком порта(отличается только тем, что нужно открыть не /dev/ttySх, а /dev/ttyUSBx, в винде просто номер кома 10+). Ком-порт, если что, до сих пор стандарт в области всяких финансовых девайсов(и слава яйцам).
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, Eugeny__, Вы писали:
E__>JNI там и в помине не было. Устройства подключаются к ком порту, и открываешь его просто как файл. Причем единообразно в винде и линухе(кроссплатформенные дрова получились, хехе). Ну или usb, но с эмуляцией ком порта(отличается только тем, что нужно открыть не /dev/ttySх, а /dev/ttyUSBx, в винде просто номер кома 10+). Ком-порт, если что, до сих пор стандарт в области всяких финансовых девайсов(и слава яйцам).
Ну так значит драйвер тут у нас в самой ОС есть — ничего писать не надо. А пишем обычную прикладную программу. Если там нет больших потоков данных (ну собственно т.к. ком-порт, то уже понятно что нет), то без разницы на чём писать. Что на C++, что на Java, что на Питоне. Точнее всё зависит от квалификации сотрудников. )))
Здравствуйте, alex_public, Вы писали:
E__>>JNI там и в помине не было. Устройства подключаются к ком порту, и открываешь его просто как файл. Причем единообразно в винде и линухе(кроссплатформенные дрова получились, хехе). Ну или usb, но с эмуляцией ком порта(отличается только тем, что нужно открыть не /dev/ttySх, а /dev/ttyUSBx, в винде просто номер кома 10+). Ком-порт, если что, до сих пор стандарт в области всяких финансовых девайсов(и слава яйцам).
_>Ну так значит драйвер тут у нас в самой ОС есть — ничего писать не надо. А пишем обычную прикладную программу. Если там нет больших потоков данных (ну собственно т.к. ком-порт, то уже понятно что нет), то без разницы на чём писать. Что на C++, что на Java, что на Питоне. Точнее всё зависит от квалификации сотрудников. )))
Ну, программу, которая общается с устройством на уровне специфического бинарного протокола, я бы не назвал прикладной.
А так да, данных там немного, и я даже не парился особо с ресурсами, ибо по сравнению с тем количеством мусора(в памяти), который генерит юзеринтерфейс, сотня байт в секунду от драйвера — это сущие мелочи, по профайлингу там выходили какие-то дикие доли процентов процессора(за гранью 6 нулей с правой части от десятичной запятой).
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Здравствуйте, Eugeny__, Вы писали:
V>>Полезь в STL, какие проблемы? От библиотеки требуется АПИ, а не тонкости реализации. Например STL обычно свой для каждой платформы свой, без всяких ifdef.
E__>Этот подход мне больше нравится. Но получается, что сам код STL далек от кроссплатформенности, что и требовалось довазать.
Разве? А мне показалось, что С++ и STL составляют платформу, не? А то масло-маслянное выходит если утверждать, что "платформа не кроссплатформенна".
V>>В общем, ACE затем и нужен, чтобы эти ifdef перенести из кода клиента в код библиотеки. E__>Ага. Только хочешь глянуть на то, как код внутри реализован(абсолютно нормальная практика в жабе), открываешь, и закрываешь нафиг. Ибо читабельно очень с трудом.
А где ты видел в ACE какую-либо реализацию, коль речь о кроссплатформенной ее части, а не о прикладной? Более 80% ее кроссплатформенного кода — это просто адаптеры сигнатур и типов различных АПИ. А остальное — это эмуляция отсутствующих ср-в низлежащего АПИ другими его ср-вами. Там смотреть толком не на что. Ес-но куча ifdef, бо под каждое АПИ идёт своя ветка адаптации. А то, что уже идет уровнем повыше — там уже никаких ifdef, ACE использует собственный низлещащий АПИ. Т.е. библиотеку ACE можно поделить на две фундаментальные вещи: это адаптеры АПИ ОС и кое-какой прикладной функционал, сидящий поверх этих адаптеров.
V>>Не хочешь сравнить отличия в реализации, скажем, джавы для разных платформ? .Это наверно "такой ценой"... (С) E__>Мне реализация JVM еще ни разу не пригождалась. А вот в ACE пришлось покопаться.
Ну, да, баги там бывают порой... Но для единственного разработчика да еще и бесплатности — это весьма и весьма недурное поделие. Согласись, даже нелепо сравнивать трудозатраты на джаву и ACE. Могу лишь риторически пожалеть, что boost так поздно стал доходить до ума и даже до сих пор кое-где сырее, чем ACE.
Просто коль речь о кроссплатформенности, то пример ACE — это был пример, что кроссплатформенность дается относительно дешево в плане трудозатрат, если на эту кроссплатформенность изначально нацелиться. Я сам на дотнете активно разрабатываю с 2002-го года, еще с его бет, и там ни разу кроссплатформенностью и не пахло. Постоянно натыкаюсь на торчащие уши WinAPI (бо и на нем поработал прилично до этого, еще хорошо его помню). Очевидно же, что они не ставили задачу написать кроссплатформенный фреймворк. Да и вообще, можно сравнить весь фреймворк, необходимый для работы современных приложений vs то его подмножество, что удалось включить в стандарт. Вот тебе кроссплатформенная часть vs вся остальная.
Здравствуйте, Ночной Смотрящий, Вы писали:
V>>Да че ты так к UI привязался? Платформенно-независимого UI хоть попой ешь. Проблемы только у конкретно дотнета с их непереносимыми WinForms и WPF НС>Т.е. в случае плюсов платформонезависимую либу взять можно, а дотнета уже нельзя?
Можно, но ведь не берут, бо как-то не сложилась дотнетная культура вне VisualStudio. А без культуры не будет обратной связи и развития, т.е. не будет заметной доли кроссплатформенных аппликух.
ИМХО, что-то странное в сообществе дотнетных разработчиков происходит: тут рядом на полном серьезе на совет использовать DirectX для напрашивающейся для этого задачи отвечают в том духе, что это совсем уже за рамками привычного... И отвечает довольно сильный дотнетчик.
Это приговор, однако.
V>>Брехня опять. Моно сильно отличается от версии MS. НС>Чем конкретно?
АПИ библиотек, иногда поведением/спецификациями при том же самом внешнем АПИ (сигнатурах). В общем, отличается от спецификаций дотнета. Список отличий трекается и постоянно обновляется.
V>> Для примера, QT для разных платформ имеет одно и то же АПИ. А у меня сходу ни одно приложение для дотнета на Моно не идет. НС>А у меня кое что идет.
Замечательно.
V>> Т.е. это надо забыть про дотнет и разрабатывать под Моно даже на виндах, чтобы получилось кроссплатформенно. НС>Не обязательно. Можно просто периодически проверять на Моно, различия там не такие уж и большие.
Это одно и то же. Если ориентируемся на меньшее подмножество АПИ, то значит именно под него ведем разработку. Т.е. Visual Studio выступает уже не как целевой tool-chain, а как удобный редактор кода.
Здравствуйте, MxMsk, Вы писали:
MM>>>с точки зрения наличия программистов со знанием DirectX Т>>Пардон, освоить сабсет функций DX, нужный для рисования графиков, можно за день. MM>Прикинул, в принципе я тоже могу выучить наизусть 10 функций из любого API за один день. Жаль, что этого недостаточно для качественный разработки.
Мы всё ещё о рисовании графиков?
Нафига учить API наизусть? Сколько тебе надо времени чтоб понять какие функции тебе нужны чтобы нарисовать график?
MM>Если эта оценка, как и предыдущая, сделана "за 1 день", то наверняка по факту траблов хватит. Но можешь вычеркнуть.
Камрад, я вплотную занимался графикой на DirectX начиная с DirectX 7. И как бы знаю что там и как.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>>>А смешанные сборки — это ж Win32 бинарник, никакой кроссплатформенности без всяких вайнов. Т>>Моно смешанные сборки даже на Windows не поддерживает. НС>Естественно. Ибо незачем.
Вот поэтому когда стала задача кровь из носу дописать в проект, который заточен под mono поддержку работы с такой вот сборкой пришлось городить подпорки из говна высочайшей очистки.
Здравствуйте, Codechanger, Вы писали:
C>Знаете, я бы с удовольствием посмотрел бы на реальные кроссплатформенные проекты с человеческим интерфейсом(на десктопе, естественно, а не в вебе, там как раз понятно все).
Здравствуйте, MxMsk, Вы писали:
MM>>>с точки зрения наличия программистов со знанием DirectX Т>>Пардон, освоить сабсет функций DX, нужный для рисования графиков, можно за день. MM>Прикинул, в принципе я тоже могу выучить наизусть 10 функций из любого API за один день. Жаль, что этого недостаточно для качественный разработки.
Для тех дебрей, куда вы уже залезли в WPF, и пары лет мало. Даже если мало одного дня (согласен, надо два минимум)... ну выдели в команде самого сообразительного и любознательного и дай ему неделю на эксперименты. Он продвинется за эту неделю дальше, чем вы всей остальной командой за пару месяцев, если уж тяжеловесные графики или схемы рисовать надо (из дестяков/сотен тыщ элементов). Technology evaluation — это нормальный и обязательный процесс в современных конторах... чтобы однажды не встрять надолго всей командой из-за какой-нить ерунды.
Здравствуйте, vdimas, Вы писали:
V>Здравствуйте, мыщъх, Вы писали:
М>>лис, хром -- у всех них довольно жесткие требования к компиляторам. сборка новых версий это как бы не проблема (раз смогли собрать они -- смогу и я). а вот если хочешь собрать какую-то древность -- то нужной версии компилятора не найти, особенно если это не gcc, а коммерческий компилятор.
V>Эээ.. пролема обычно ровно наоборот, более новую версию невозможно собрать на более старом компиляторе.
так это как раз не проблема. во всяком случае для меня как сотрудника коммерческой компании. а вот в бытность свою фрилансером очень раздражало, что "каждой программее -- по компилятору".
V> Но это, ИХМО, нормально: новые версии разрабатываются на новых инструментах, т.е. хочешь всё новое — переходи на новое.
рабочая среда для разработки ПО должна быть предсказуема и крайне нежелательно переходить на новый компилятор в процессе "пусконаладки" текущего проекта. а под виндой нет легальных средств ставить зоопарк компиляторов. "нелегально" у меня от ms vc 6 до последних версий. но ставил "руками" и там не обошлось без махинаций и хакерства. можно, конечно, юзать виртуалки, но это ж какую производительность иметь надо
V>А насчет давности: все старые ходовые версии gcc вроде как доступны.
про gcc я и писал, что доступны. как на счет того, чтобы найти багдад или ms? конкретный пример -- стоит задача собрать firefox версий раньше чем 2.х (надо для секьюрных экспериментов). ms vc 6 выдает "внутреннюю ошибку компиляции", ms vc 9 выдает просто ошибки компиляции. ну ладно, проехали (выкинув часть функционала, который не копилировался). оказывается еще masm нужен. причем новые версии ему не нравятся, а старые (найденные на файлопомойках) они как бы _слишком_ старые, а истории масма ms не ведет и получить нужную версию было возможно только потому что я работаю в большой компании у которой в заначках можно и черта найти.
вот как собирать старые приложения, а? так что никакой это не кросс-платформ...
недавно базарил с одним PhD из штатовского универа. мы оба сокрушались о том как мало людей знают ANSI C. в универе дают плюсы с питоном, про си -- ни слова. но все выпускники пишут си/си++. один такой кадр на вопрос написать простую программу на си написал bool foo(). а на вопрос -- что это за хпуе с горы дите ответило -- а що, не компилируется? мы с Ph.D должны были его собеседовать, но между нами вспыхнула драмма. PhD -- ну с C99 вообще-то есть. я -- во-первых, оно там через stdbool, который тут отсутствует. во-вторых, на фига юзать такую фичу C99, отсекая кучу компиляторов? чем int не устроил? дите -- но ведь компилируется!!! мы (хором) мальчик, не встревай в разговоры взрослых.
но это мелочи по сравнению с тем как я писал свою первую программу на жабе. программа -- чуть сложнее "привет, люди". я же win guy. скачал JDK, собрал, запустил (а там консольный вывод один), убедился, что работает и заюзал на линухе. а на линухе оно не работает. выдает кучу исключений в самых непонятных местах. конечно, это я во всем виноват. собирал 1.7, а на линухе стояла 1.6, но помилуй боже, за что мне такие кары?! я ж никаких фич 1.7 не юзал. самая простая программа.
про руби -- это вообще песня. меня на него коллеги пытаются посадить, чтобы ехать со свистом на рельсах. только на моей винде эти рельсы нихрена не едут и мне быстрее работать на уровне SQL запросов, чем пытаться заставить эту муть работать под виндами. а переходить на линух как на основное средство разработки -- не предлагать, ибо слишком много привычек придется менять.
питон тоже ни фига не совместим. как глянул в стандартные библиотеки (в частности, в HTMLParser.unescape) так и ужоснулся и пришлось самому писать, потому как оно даже документированные особенности не учитывает и работает только в самых тривиальных случаях. такой подлости я не ожидал. тем более, что библиотека поставляется вместе с языком, а, значит, должна быть крепка как фундамент. ну или хотя бы явно указывать на то, что она чисто для красоты.
что там у нас осталось-то? нету у нас кросс-платформенных языков. в JavaScript -- это вообще песня олега. попробуйте выполнить следующее eval("var super = 'super';") под виндой и никсами. о результатах можно не докладывать -- я их знаю. и это относится к ядру языка, так сказать к ECMAScripting, в который DOM модель не входит.
разве что в AS пока не нашел больших различий на разных платформах, но его и не копал глубоко...
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Здравствуйте, alex_public, Вы писали:
_>Кстати, а MC++ вообще кто-то использует?
Я видел как использовали для заворачивания сторонней .lib чтоб заюзать как .net сборку.
Больше ничего не попадалось.