независимый от платформы код

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: независимый от платформы код

Непрочитанное сообщение Olej » 08 апр 2013, 10:31

Olej писал(а): 3. а Boost - инструмент в C++ ... так же, как во многих вещах ему может быть эквивалентным Qt;
Ещё один инструмент, заточенный под C++ - Juce. Здесь вот у "ИНТУИТ" даже отдельный учебный курс есть
Опубликовано: 04.10.2012 | Уровень: для всех | Стоимость: 600.00 руб. | Длительность: 72 часа (14 дней)
Juce (Jules' Utility Class Extensions) — кроссплатформенная библиотека для создания приложений для Linux, Windows, Mac OS X, iOS и Android.
Он даже со своим графическим фреймворком (на манер Qt).
Целевая заточенность: проекты обработки аудио-видео потоков.

Ещё из C++ кросс-платформенных инструментов хвалят U++ / Ultimate++
Можете здесь посмотреть с примерами: Ultimate++ против Qt (R)
И здесь: Ultimate++
Ultimate++ (известен также как U++ и UPP) — кросс-платформенный инструментарий разработки ПО на языке программирования C++. Целью U++ является уменьшение сложности типичных десктопных приложений за счёт интенсивного использования особенностей C++. Работает под Linux/X11, BSD/X11 и Windows.
Проект развивается с 1999 года, ядро Ultimate++ team составляют чешские программисты.
Итого, из тех инструментальных средств кросс-программирования, мы уже упомнили из тех, которые активно используются (не беря во внимание всякую экзотику):
- для C : APR, Glib;
- для C++ : Qt, Boost, Juce, Ultimate++;
- каждый из этих инструментов в своей группе (C или C++) - это полная альтернатива другим (т.е. Qt не заменяет Boost во многих аспектах, как и Boost не заменяет Qt в других аспектах ... но с точки зрения переносимости - они альтернативы).

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: независимый от платформы код

Непрочитанное сообщение Olej » 08 апр 2013, 14:12

Olej писал(а):просто удивляет то, как редко программисты-разработчики код именно так и пишут. Я могу отнести это только:
- к нежеланию разработчиков;
- некомпетентности их руководства и неумению заставить, потребовать;
- и низкой квалификацией преподавателей (не поспевающих за тенденциями IT) которые не научили;
Есть, правда, ещё один фактор, 4-й ... относящийся тоже к руководству проекта, как и п.2:
- необходимость одновременного тестирования проекта, по ходу его развития, на нескольких платформах ... да ещё хорошо бы на нескольких разных инсталляциях каждой платформы (где-то установлен какой-то интерфейсный слой, а где-то нет ... где-то 32 бит, а где-то 64...).

А это а). дополнительная инфраструктура, которую нужно поддерживать в состоянии готовности + б). управление всем этим процессом.

А то получается так, что много публикаций о кросс-переносимости показывают примеры кода, в которых отрабатываются корректно механизмы потоков и синхронизаций ... но "торчит" где-то в диагностике printf() или getc() на вводе ... т.е. явно этот иллюстрирующий пример теоретически переносимый ;-), но по всему видно, что сам файл из в ОС в ОС не копировали, и там, в другой среде, не проверяли.

Аватара пользователя
Виктория
Писатель
Сообщения: 113
Зарегистрирован: 28 дек 2012, 14:05
Откуда: Самара
Контактная информация:

Re: независимый от платформы код

Непрочитанное сообщение Виктория » 08 апр 2013, 14:49

Учи матчасть, но основная фишка всегда в рутине. Но и основное творчество там же, в мелких рутинных деталях. Надо распечатать себе этот баннер.

Аватара пользователя
Виктория
Писатель
Сообщения: 113
Зарегистрирован: 28 дек 2012, 14:05
Откуда: Самара
Контактная информация:

Re: независимый от платформы код

Непрочитанное сообщение Виктория » 08 апр 2013, 20:05

Olej писал(а): А то получается так, что много публикаций о кросс-переносимости показывают примеры кода, в которых отрабатываются корректно механизмы потоков и синхронизаций ... но "торчит" где-то в диагностике printf() или getc() на вводе ... т.е. явно этот иллюстрирующий пример теоретически переносимый ;-), но по всему видно, что сам файл из в ОС в ОС не копировали, и там, в другой среде, не проверяли.
Использование printf не противоречит локализации строк в Си?

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: независимый от платформы код

Непрочитанное сообщение Olej » 08 апр 2013, 21:46

Виктория писал(а):
Olej писал(а): А то получается так, что много публикаций о кросс-переносимости показывают примеры кода, в которых отрабатываются корректно механизмы потоков и синхронизаций ... но "торчит" где-то в диагностике printf() или getc() на вводе ... т.е. явно этот иллюстрирующий пример теоретически переносимый ;-), но по всему видно, что сам файл из в ОС в ОС не копировали, и там, в другой среде, не проверяли.
Использование printf не противоречит локализации строк в Си?
Не знаю ;-) . Но если всё вокруг пишется с использованием Glib, функций вида g_*(), и среди них есть и такие, как g_printf(), g_sscanf() и т.д., то именно они должны использоваться в переносимом коде, раз уж мы выбрали этот инструмент (Glib).

Кстати, вот исчерпывающее руководство : GLib Reference Manual.
Здесь все вопросы: о составе, как использовать ... какие известные проекты в этой технике выполнены...

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: независимый от платформы код

Непрочитанное сообщение Olej » 08 апр 2013, 21:58

Olej писал(а): Есть, правда, ещё один фактор, 4-й ... относящийся тоже к руководству проекта, как и п.2:
- необходимость одновременного тестирования проекта, по ходу его развития, на нескольких платформах ... да ещё хорошо бы на нескольких разных инсталляциях каждой платформы (где-то установлен какой-то интерфейсный слой, а где-то нет ... где-то 32 бит, а где-то 64...).

А это а). дополнительная инфраструктура, которую нужно поддерживать в состоянии готовности + б). управление всем этим процессом.
А вот это совсем не такое простое занятие.
Потому что одно дело - написать свой код проекта независимый от платформы, а другое:
- каким компилятором и каким образом его там собирать?
- и что (библиотеки и т.д.) там должно стоять для поддержки?
- и откуда это "что" брать и как его устанавливать?
- и в каждой ОС это будет делаться по-своему ... и если для Windows хоть как-то описано, то это же нужно, возможно, делать для Solaris...
- а в Solaris 10 была старая пакетная система .pkg, а в Solaris 11 они перешли на пакетную систему pkgsrc из NetBSD...
- и для каждой системы инсталляции нужно искать tools соответствующего формата + каждая система требует совершенно разных действий по инсталляции.
Это всё не так и просто.
Olej писал(а): доступны совместимые варианты Glib и для Windows:
- Win32
- Win64
Доступны то они доступны ... только их ещё установить надо, и сделать пригодными к применению.

P.S. Я сейчас попробовал перенести в Windows приложения под Glib и GTK+, так создание среды сборки и исполнения там - задача "ещё та". Настолько, что отдельную тему я создам для памятки ... чтобы здесь частностями не засорять.

Аватара пользователя
Виктория
Писатель
Сообщения: 113
Зарегистрирован: 28 дек 2012, 14:05
Откуда: Самара
Контактная информация:

Re: независимый от платформы код

Непрочитанное сообщение Виктория » 09 апр 2013, 07:31

Olej писал(а): P.S. Я сейчас попробовал перенести в Windows приложения под Glib и GTK+, так создание среды сборки и исполнения там - задача "ещё та". Настолько, что отдельную тему я создам для памятки ... чтобы здесь частностями не засорять.
Сборка в Visual Studio 2008 или можно использовать clang?

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: независимый от платформы код

Непрочитанное сообщение Olej » 05 ноя 2013, 19:54

Виктория писал(а):
Olej писал(а): P.S. Я сейчас попробовал перенести в Windows приложения под Glib и GTK+, так создание среды сборки и исполнения там - задача "ещё та". Настолько, что отдельную тему я создам для памятки ... чтобы здесь частностями не засорять.
Сборка в Visual Studio 2008 или можно использовать clang?
Нет, насколько я понял, все порты GNU (Glib, GTK+, и др. ) для Windows делаются под компиляцию с помощью MinGW (там, где нужна сборка, а не устанавливается готовая бинарная инсталляция).
Так что приходится начинать с MinGW ... и далее.
В принципе, насколько я понял, можно компилятор MinGW (mingw32-gcc, например) пристроить компилятором проекта в Visual Studio...

Но я пока не всё понимаю как ... давненько я в руках Windows не держал ;-) ... ох и гаденько там всё :lol:
Как станет понятно - опишу... ощущения.

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: независимый от платформы код

Непрочитанное сообщение Olej » 22 ноя 2013, 17:16

На IBM developerWorks опубликован перевод большущей статьи : Создание программного обеспечения для нескольких UNIX-платформ.

Как платформенно-независимый подход её, скорее, нельзя считать ... это больше вопрос "портирования ПО" между POSIX OS (и "статическая переносимость" как я раньше называл), это - хорошее руководство по средствам подготовки ./configure ... autotools и т.д.

Аватара пользователя
Olej
Писатель
Сообщения: 13446
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: независимый от платформы код

Непрочитанное сообщение Olej » 18 фев 2016, 03:23

Olej писал(а):Я уже объяснил вот здесь Инструменты Linux:
И должно бы быть в таком обзоре переносимости 3, как минимум, главы-направления ... о которых здесь в форуме много писалось и обсуждалось:

1. Переносимость кода (статическая).
ARP: Apache Portable Runtime (APR)
Boost: библиотеки под C++
Qt: Создание графических приложений
... да и просто многие стороны программирования в C++ ...

2. Динамическая переносимость.
исполнение Windows промышленных проектов под Wine

3. Русскоязычная локализация.
переносимость Lin<=>Win консольных приложений
локализация строк в C-коде
Опять был случай повозиться с приложениями не зависящими от платформы (переносимостью).
Реально оказывается всё ещё "разнообразнее" :-( .
Сами приложения можно делать переносимыми в 3-х (а не 2-х) смыслах:

1. Динамическая переносимость - переносимость готового к исполнению кода: бинарного, байт-кода, исходного интерпретируемого - это уже где как, в зависимости от технологии языка и исполняющей системы... .exe под Wine, .class Java, Python код ...

2. Текстуальная переносимость, переносимость кода - когда код один и тот же может быть скомпилирован с любой из систем. В простейших случаях, это использование более переносимого языка - C++ по сравнению с C, например, или не использование C#. Но этого хватит только для достаточно простых приложений. В случае комплексных проектов здесь нужно обеспечить ещё и выбор и применение переносимого инструментария: библиотек + фреймворков, т.е., например, что уже называлось:
ARP: Apache Portable Runtime (APR)
Boost: широченный круг библиотек под C++
Qt, GTK+, wxWidget: Создание графических приложений
... да и просто многие стороны программирования в C++ ...

Но появляется ещё один вид переносимости (ещё одна сторона), которую нужно учитывать:
3. Файловая переносимость. Т.е. когда неизменными копируются файлы исходного кода, и потом могут быть скомпилированы в новой системе. Это больше, чем текстуальная переносимость, потому что редакторами текст программного кода может представляться по-разному, в разных кодировках:
- UTF-8 в современных Linux
- KOI-8 в старых Linux
- CP-866 консольные Windows
- CP-1251 GUI Windows
- UTF-16 для представления UNICODE в Windows

Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя