четверг, 28 апреля 2011 г.

портирование под linux

закончил например сегодня порт одного мелкого проекта - либа для парзинга некоторых форматов файлов, большей частью на C++, размером около 20 kloc. Изначально она была написана под windows с поддержкой 32 и 64 бит.

Процесс портирования был адово отвратен. У меня сложилось совершенно четкое ощущение что разработчика под linux рассматривают как врага и относятся к нему соотв-но
Отладчик gdb - уровня debug.com, добро пожаловать в старые недобрые восьмидесятые.
IDE нет в принципе (потому что доступ к серверу linux только через ssh). vim & emacs - дичайшая упячка, как этим убожеством можно пользоваться в здравом уме - я не могу себе вообразить.
make по сравнению с нормальной visual studio с ее возможностью легко и просто прописать dependecies - каменный век.
gcc весьма своеобразно поддерживает стандарт C++ - например для всех template specialized методов пришлось явно прописывать template <>. Visual C++ например ничего такого не требовал. Пришлось написать perl script для вставки нужного
Да чо там templates - у них в заголовочных файлах даже не нашлось готовых min, max & _countof !
Дальше - я например не представляю себе как писать более-менее безопасные программы без SEH & security enhanced ф-ций типа strcpy_s. Угадайте с трех раз есть ли они под этой самой передовой в мире os ?
Меньше всего проблем как ни странно возникло с некоторым количеством кода, написанного для скорости на asmе - видимо потому что в обоих os использовался yasm

Осталось еще прикрутить это дело к perlу и ноги моей в вашем отсталом linuxе не будет я надеюсь никогда

4 комментария:

  1. Дело не в линуксе, а в вашем опыте работы с ним. SEH вам не нужен, потому что в C++ есть исключения. SSH тоже, потому что есть VirtualBox. А в нем есть и IDE и все, что угодно.

    Стандарт C++ (конкретно стандарт) gcc поддерживает прекрасно. Другое дело, если вы использовали возможности, присущие именно студии.

    И в идеале, если планируется писать кроссплатформенное приложение, нужно писать его сразу, а не портировать. То есть сразу использовать MinGW, wxWidgets и так далее. Немного самопиара по теме: http://eax.me/wxwidgets/

    ОтветитьУдалить
  2. фраза "XYZ не нужен" в переводе на обычный русский должна читаться как "у нас XYZ нету и потому я считаю что XYZ не нужен"

    > в идеале, если планируется писать кроссплатформенное приложение, нужно писать его сразу, а не портировать
    эта фраза выдает человека, который ни разу в жизни не получал деньги за кодинг например

    ОтветитьУдалить
  3. Что говорить о стандартах в гцц когда сорцы часто компилятся лишь определённой версией оного

    ОтветитьУдалить
  4. "который ни разу в жизни не получал деньги за кодинг например"
    Фраза выдает студента, который зелен и толст :)

    ОтветитьУдалить