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

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

Модератор: Olej

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

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

Непрочитанное сообщение Olej » 26 мар 2013, 16:52

Olej писал(а): - Если проект создаётся "с нуля" - вы закладываете изначально требования кроссплатформенности, и всё у вас будет ОК. Сейчас для этого уже существует достаточно инструментов, и такая разработка не более трудоёмкая, чем моноплатформенная (во! "термин" дал ;-) ).
...
- Но если проект уже завершён, на него затрачены время, усилия и ресурсы... Тогда нужно искать пути динамической переносимости и дать ему 2-ю жизнь. Так, например, весь xUSSR эксплуатирует 1С:Бухгалтерия : и тратиться на покупки не надо, и налоговая инспекция с проверками лицензионной чистоты не нагрянет ... ну, почти ;-)
Есть, правда, ещё один аспект, не прямо связанный, но очень близко лежащий: ребилдинг старого проекта (будем говорить о С++), когда нужно сделать "римэйк" проекта, скажем: был под Windows - стал под Linux ;-) (или всеплатформенным).

Здесь тоже есть новинки...
Связанные с проектом LLVM (Low Level Virtual Machine) и компилятором Clang (проект идёт с 2007г., но очень активно).

Возможности анализа кода разбираемого проекта сильно возрастают при использовании парсеров Clang - Clang API. Начало:
Сейчас с уверенностью можно утверждать, что времена самописных C++-парсеров постепенно отходят в прошлое. На сцену медленно, но неумолимо выходит clang — полноценный C++-фронренд и компилятор, предоставляющий своим пользователям богатое API. С помощью этого API можно распарсить исходный текст на C/C++/Objective C, и вытащить из него всю необходимую информацию — от простого лексического значения токенов, до таблицы символов, AST-деревьев и результатов статического анализа кода на предмет всяких разных проблем.
Примеры кода реализации приведены там же.

P.S. Но это только примеры, со сборкой его придётся сильно повозиться! :-(

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

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

Непрочитанное сообщение Olej » 26 мар 2013, 19:50

Olej писал(а): Здесь тоже есть новинки...
Связанные с проектом LLVM (Low Level Virtual Machine) и компилятором Clang (проект идёт с 2007г., но очень активно).
Тенденции те же:
- создаётся компилятор, который один и тот же сможет генерировать исполнимый код (из C/C++ и других языков) на а). UNIX, б). MacOS (Apple и есть инициатором этой затеи), в). Windows.
- и этим компилятором планируют заменить GCC (в FreeBSD - уже заменили, ядро Linux в порядке экспериментов - уже компилировали с помощью Clang).

Как уже сегодня Clang собирается с помощью MS Visual C, а после этого генерит .exe Windows приложения - читать здесь: Getting Started with the LLVM System using Microsoft Visual Studio.
(рекомендую попробовать это всё проделать! ;-) )

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

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

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

Olej писал(а):... Давайте посмотрим чем расширяют возможности кроссплатформенности крупнейшие пакеты такого сорта:

...

2. Boost ... Огромный пакет (и постоянно расширяющийся своими "разделами").
Но если посмотреть текущее состояние дел: Boost 1.53.0 Library Documentation - то обаружим, что:
- в составе большое число прикладных разделов, безусловно полезных и безусловно нужных, таких как: большое число разделов Math (включающих матстатистику, линейную алгебру и др.), механизмы функционального (LISP) программирования (Lambda) ... таких разделов в Boost большинство...
- а из собственно машинных, IT механизмов Boost расширяет функциональность С++ только в тех разделах, которые а). радикально отличаются по реализации в разных ОС и б). которые не покрываются стандартами C++ ... и их совсем не так много, и это те немногие разделы Boost, которые используют когда стремятся к кроссплатформенности: потоки, управление памятью, службы времени и хронометрирования...

...
Большое число математических разделов в boost объясняется стремлением прикладных математиков к стандартизации интерфейса к своим разработкам, использование конструктивной типизации данных, вроде как, может быть и немножко субъективно.... По той же причине теперь в моде метаязыки над Java - Scala, Groovy...

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

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

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

Olej писал(а):
Виктория писал(а):Если придерживаться такого стиля создание кроссплатформенного ПО будет тяжеловесным.
Это нельзя называть стилем.
Это просто естественное проявление того, что уровень абстракций С++ выше С:
- вместо примитивов понятий С: файл, файловый дескриптор, open(), close()...
- ... вводятся замещающие понятия (другая система примитивов): буферизированные потоки, >>, <<, и т.д.
- эта укрупнённая система понятий уже может быть сделана независимой от платформы.
...
Кроссплатформенность вновь разрабатываемого или "модифицируемого" промышленного приложения типа viewtopic.php?f=22&t=2353 это ведь и

1. модель GUI,
2. модель потоков и их взаимодействия
3. модель БД
4. сетевые сервисы
5. нестандартное оборудование для ввода/вывода информации с технического объекта

Если приложение разрабатывается с нуля, то напрашивается прежде всего использование Java. Но чаще всего у любого промышленного проекта уже целая куча "воплощений" и "предыдущих жизней", с этим я тоже разбираюсь...
Последний раз редактировалось Виктория 30 мар 2013, 15:04, всего редактировалось 2 раза.

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

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

Непрочитанное сообщение Olej » 30 мар 2013, 14:44

Виктория писал(а):
Olej писал(а):... Давайте посмотрим чем расширяют возможности кроссплатформенности крупнейшие пакеты такого сорта:

...

2. Boost ... Огромный пакет (и постоянно расширяющийся своими "разделами").
Но если посмотреть текущее состояние дел: Boost 1.53.0 Library Documentation - то обаружим, что:
- в составе большое число прикладных разделов, безусловно полезных и безусловно нужных, таких как: большое число разделов Math (включающих матстатистику, линейную алгебру и др.), механизмы функционального (LISP) программирования (Lambda) ... таких разделов в Boost большинство...
- а из собственно машинных, IT механизмов Boost расширяет функциональность С++ только в тех разделах, которые а). радикально отличаются по реализации в разных ОС и б). которые не покрываются стандартами C++ ... и их совсем не так много, и это те немногие разделы Boost, которые используют когда стремятся к кроссплатформенности: потоки, управление памятью, службы времени и хронометрирования...

...
Большое число математических разделов в boost объясняется стремлением прикладных математиков к стандартизации интерфейса к своим разработкам, использование конструктивной типизации данных, вроде как, может быть и немножко субъективно.... По той же причине теперь в моде метаязыки над Java - Scala, Groovy...
Boost интересен сам по себе (как технология, как пакет, ...) даже безотносительно к деталям темы переносимого кода.
Поэтому стоит завести отдельную тему в разделе об инструментах программирования, относительно именно особенносей Boost ... как вы на это смотрите? ;-)

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

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

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

Наверно, надо попробовать

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

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

Непрочитанное сообщение Olej » 30 мар 2013, 15:04

Виктория писал(а):Наверно, надо попробовать
Вот ;-)

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

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

Непрочитанное сообщение Olej » 05 апр 2013, 09:32

Виктория писал(а):Если приложение разрабатывается с нуля, то напрашивается прежде всего использование Java. Но чаще всего у любого промышленного проекта уже целая куча "воплощений" и "предыдущих жизней", с этим я тоже разбираюсь...
С Java - это совсем особая песня ;-) ...

1. Java - это способ решения проблемы из области динамической переносимости:
- переносится не исходный код .java, а откомпилированные файлы (готовые к исполнению) .class;
- исполнение обеспечивается Java-машиной, которая интерпретирует байт код (даже если эта интерпретация производится способом JIT, компиляции "в лёт", ... но JIT есть и в Perl и т.д.);
- это в чём-то близко тому как Wine в Linux исполняет .exe, "пропуская" их через свои DLL, или CygWin, готовящий исполнимые приложения исполняться в Windows через промежуточный слой своих разделяемых библиотек.

2. Такой же точно переносимостью обладают все интерпретирующие языки: Perl, Python и мн. др. Но призывать писать все прикладные проекты на Perl было бы с моей стороны ... как-то странно. Точно так же Java уместен в одних случаях (замечательный пример здесь: Eclipse) и совершенно не уместен в других.

3. Проекты на Java будут переносимы тоже только в случае, когда этой переносимости уделяется определённое внимание ... например в вопросах локализации под русский язык.

4. Ну и наконец ... слухи о переносимости Java оказались сильно преувеличены :lol:
- До определённого времени существовало 2 реализации: JDK & OpenJDK...
- JDK как "классика" под присмотром Sun Microsystems, и OpenJDK постоянно догоняющий на совместимость...
- Они использовали совместимую с JRE (из JDK) Java-машину...
- Но тут появился Android со своей виртуальной Java-машиной Dalvik и "абсолютная" переносимость накрылась:
Программы для Dalvik пишутся на языке Java. Несмотря на это, стандартный байт-код Java не используется, вместо него Dalvik VM исполняет байткод собственного формата.

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

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

Непрочитанное сообщение Olej » 05 апр 2013, 09:43

Виктория писал(а): Кроссплатформенность вновь разрабатываемого или "модифицируемого" промышленного приложения типа viewtopic.php?f=22&t=2353 это ведь и

1. модель GUI,
2. модель потоков и их взаимодействия
3. модель БД
4. сетевые сервисы
5. нестандартное оборудование для ввода/вывода информации с технического объекта
А вот по поводу статической переносимости, переносимости исходного кода ... (когда говорят о коде платформенно независимом), то все темы и обсуждения последних ... 2-х - 3-х - 4-х (?) недель в форуме и были прямо или завуалировано увязаны с такой многоплатформенностью:
независимый от платформы код
переносимость Lin<=>Win консольных приложений
исполнение Windows промышленных проектов под Wine
локализация строк в C-коде
Boost
Clang
сборка Clang

А в отношении вами перечисленных пунктов (а их должно быть принято во внимание ещё больше ;-) ), то:

1. модель GUI - используйте независимые Qt, wxWidgets ... не используйте MFC ;-) ... да и GTK+ (?)

2. модель потоков и их взаимодействия - оберните их с помощью Boost

3. модель БД - используйте клиент-серверные SQL (MySQL, PostgreSQL) без привязки к реализации ... да и статически прикомпоновываемый SQLite, по моему, везде есть? (я очень давно не пересекался с БД ;-) )

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

5. ... я этого не сильно понял (хотя и предполагаю ;-) ).

6. а ещё ;-) :
- отдайте языковую локализацию на откуп установкам ОС, не используйте явную локализацию в коде...
- C++ реализация будет более переносимой, чем C
- а для C++ - компилятор Clang будет более предпочтительным, чем GCC (CygWin, MinGW) или MS компилятор ... и другие т.п.
- библиотека libc++ из LLVM будет (когда будет доведена до ума!) предпочтительнее библиотеки libstdc++ (GCC) ... но за счёт совместимости можно отрабатывать с libstdc++, а потом пересобрать с libc++
- из IDE (кому нужно IDE) учитесь пользовать Eclipse, а не KDevelop, SunStudio, MS Visual Studio, C++ Builder, MinGW ... - переучиваться меньше будет нужно :lol:
и т.д.

Вообще, переносимость кода - это какая-то явная тенденция последних лет 5-ти, видимая из развития многих и разных публичных проектов, причём происходящая довольно тихо, подспудно, без рекламы, без рыночной истерии (как Windows 8, Android, iOS/iPad и т.д.).

Достали, наверное, всех: "программисты Windows", "программисты Linux"... ;-)

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

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

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

Olej писал(а): Вообще, переносимость кода - это какая-то явная тенденция последних лет 5-ти, видимая из развития многих и разных публичных проектов, причём происходящая довольно тихо, подспудно, без рекламы, без рыночной истерии (как Windows 8, Android, iOS/iPad и т.д.).

Достали, наверное, всех: "программисты Windows", "программисты Linux"... ;-)
Я это всё не от скуки пишу :lol: ... а сложилось так, и без всяких на то предпосылок, что обратились ко мне несколько (независимо) людей, с предложением "натаскать" их (их, их конторы и т.п. ... не важно):
- на независимость от "спроса-предложения"...
- навязываемого (и "качающегося") всякими IT-рекрутинговыми конторами и аутсорсинговыми производителями ;-) ...
- см. Программисты: работа и оплата

"... как барин с нами - так и мы с барином ..." ;-)

А в ВУЗах народ учат всё больше и больше привязывая их к какой-то специализации: Windows, OLE/COM/DCOM всякие ... где-то (много!) учат программированию на PASCAL ...

А девизом дня должно стать: "хотите зарабатывать - откажитесь от специализации" (Программисты: работа и оплата).

Ответить

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

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

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