LINUX.ORG.RU

Переход на Linux: взгляд разработчика под Windows (перевод)

 , , ,


0

0

Неслабо digg-нутая статья о том, как человек перевёл свою разработку с Windows на Linux.

Судя по написанному, автора либо очень крепко достала предыдущая его ОС, либо он осознанно далеко не беспристрастен.

Подробности.

>>> Оригинал статьи

Ответ на: комментарий от x4DA

Читай добавление - он мог использовать сам OpenMP, но это требовало пересборки библиотеки со всеми её зависимостями, на что он бы потратил несколько рабочих дней.

moradan
() автор топика
Ответ на: комментарий от x4DA

По-моему автор вполне объективен. С использованием сторонних библиотек в никсах все гораздо проще, так как для них есть стандартные расположения и не требуется объяснять компилятору, где находятся сами либы и их заголовки.

Что же касается С++, VS и G++ поддерживают практически все стандарты (в отличие, например, от OpenWatcom, популярного у нас на Химфаке МГУ), т.е. если код написан правильно, он компилилируется и в g++, и в VS.

annulen ★★★★★
()

>либо он осознанно далеко не беспристрастен
Ага. Не видел программистов пользующихся CMake и Qt, но при этом не знакомых с Линуксом.

eugene2k
()
Ответ на: комментарий от eugene2k

На Qt он перешёл уже после перехода на Линукс (две недели назад по состоянию на 15 сентября). А линукс он по его выражению "пробовал время от времени". И это в "последние несколько лет, когда он разрабатывал только под винду" - то есть до этого уже кодил под никсы.

moradan
() автор топика
Ответ на: комментарий от annulen

>С использованием сторонних библиотек в никсах все гораздо проще, так как для них есть стандартные расположения и не требуется объяснять компилятору, где находятся сами либы и их заголовки.
К линуксу с его pkg-config это не относится.

eugene2k
()
Ответ на: комментарий от eugene2k

>Ага. Не видел программистов пользующихся CMake и Qt, но при этом не знакомых с Линуксом.

Видел пользующихся CMake. Qt стал бы пользоваться любой хоть немного адекватный человек, если бы в его задачи входил GUI и ему надо было бы использовать С++.

Pavval ★★★★★
()
Ответ на: комментарий от eugene2k

>>С использованием сторонних библиотек в никсах все гораздо проще, так как для них есть стандартные расположения и не требуется объяснять компилятору, где находятся сами либы и их заголовки. >К линуксу с его pkg-config это не относится. У автора проблема была с самостоятельной пересборкой десятка+ библиотек из исходников (на это не хотелось тратить время), а не с их расположением.

moradan
() автор топика
Ответ на: комментарий от moradan

>На Qt он перешёл уже после перехода на Линукс

>установил с его помощью Kubuntu,так как KDE мне нравится больше – особенно потому что __сейчас я использую Qt__ для разработки интерфейса с пользователем.

vkos ★★
()

> Не видел программистов пользующихся CMake и Qt, но при этом не знакомых с Линуксом.

В этом месте я согласен. Когда переходишь на Linux и если ты программист, оптимальное кроссплатформенное решение (тулкиты и т.д.) находится мгновенно. Те же кто сидят на windows и пишут под него не задумываются о портируемости кода - факт. Они витают в своих мыслях о "90%, зачем нужны эти проценты-объедки" и т.д.

I-Love-Microsoft ★★★★★
()

Хорошая фраза:

«...developing on Linux means you have an extremely stable API (POSIX isn’t going to be replaced with PoseFX, for instance)...»

question4 ★★★★★
()

> Судя по написанному, автора либо очень крепко достала предыдущая его ОС, либо он осознанно далеко не беспристрастен.

Человек находился во власти FUD, а потом выяснил, что переход на Linux совсем не так страшен, как пишут в микрософте. Вот и получилось.

Aceler ★★★★★
()
Ответ на: комментарий от Aceler

А вообще, лояльность пользователей MS из-за этого и так ниже плинтуса.

Aceler ★★★★★
()

> он осознанно далеко не беспристрастен

не вижу в чём он "не беспристрастен" -- сейчас программы даже для win удобнее писать в линуксе, если не завязываться на win api

vadiml ★★★★★
()
Ответ на: комментарий от question4

>Хорошая фраза:...

И первый комментарий, вполне разумный, - как раз критика этой фразы:-)

moradan
() автор топика
Ответ на: комментарий от eugene2k

>Ага. Не видел программистов пользующихся CMake и Qt, но при этом не знакомых с Линуксом.

я пользовался в 1999/2000

scaldov ★★
()
Ответ на: комментарий от vkos

>>На Qt он перешёл уже после перехода на Линукс

>>установил с его помощью Kubuntu,так как KDE мне нравится больше – особенно потому что __сейчас я использую Qt__ для разработки интерфейса с пользователем.

Автор, ИМХО, сам путается со временем - я так понял, до перехода на линукс он таки не использовал Qt. Тем более программирование на Qt, находясь в GNOME, логичнее, чем находясь в мастдае, опять же ИМХО.

moradan
() автор топика
Ответ на: комментарий от vadiml

>не вижу в чём он "не беспристрастен" -- сейчас программы даже для win удобнее писать в линуксе, если не завязываться на win api

Хотя бы в том, что программист, пользующийся почти исключительно кроссплатформенным софтом, не может быть назван "программистом под какую-то конкретную платформу". А он себя так назвал. У него из платформозависимого была только студия.

moradan
() автор топика
Ответ на: комментарий от madcore

>А как он так быстро перешел на QT + OpenGL? Что использовал до этого?

Я так понимаю winapi+OpenGl... Но по легкости перехода от winapi к Qt и OpenMP и можно судить о предвзятости автора (программа явно разрабатывалась с прицелом на кроссплатформенность). ИМХО, нельзя за 10 минут вычистить весь winapi код, если ты изначально не проектировал его так, что это сделать.

moradan
() автор топика

Когда попробовал пересобрать свою приложение под Линукс 6-7 лет назад - обнаружил тоже самое - оно работало в несколько раз быстрее, чем под Windows, я когда-то здесь об этом писал.

OpenMP хорошо работает с циклическим параллелизмом?! А можно хороший пример кода, когда цикл с кучей вычислений можно хорошо распараллелить с этим инструментом? Кто может привести, если не сложно?!

GladAlex ★★★★★
()
Ответ на: комментарий от moradan

winapi там было не настолько много, судя по статье.

Deleted
()
Ответ на: комментарий от GladAlex

>OpenMP хорошо работает с циклическим параллелизмом?!
Я так понял, это когда на каждой итерации цикла создаётся новый поток. Может быть, неправильно понял.

moradan
() автор топика

>Проект, над которым я работаю, написан на C++ с использованием небольшого числа утилит на Python

>Python

Это был не настоящий вендузятник. У настоящего были бы батфайлы с windows(r) script host(tm) плавно перетекающие в powershell(tm).

legolegs ★★★★★
()
Ответ на: комментарий от legolegs

>Это был не настоящий вендузятник.
Вот и я о том же.

moradan
() автор топика

бред какой-то.

с пеной у рта скулить про платформу - не дело программера, пусть этим занимаются подростки-максималисты с протестом в крови, дальше пары строк запуска cdrecord на шеле не продинувшихся... цена студии - день работы программера, смешно.

PIV
()
Ответ на: комментарий от GladAlex

>OpenMP хорошо работает с циклическим параллелизмом?! А можно хороший пример кода, когда цикл с кучей вычислений можно хорошо распараллелить с этим инструментом? Кто может привести, если не сложно?!

Распараллель сперва математику, после этого положить все это на код тебе покажется детской забавой.

void_ptr ★★★★
()
Ответ на: комментарий от moradan

Я как бы не проблему автора комментировал, а пост в котором было сказано что в никсах проще с разделяемыми библиотеками потому что все они в известных местах :)

eugene2k
()
Ответ на: комментарий от Bohtvaroh

Костыль же. Потому что разработчики дистрибутивов не могут договориться о том какой путь к библиотеке должен быть /usr/lib/gtk+-2.0/... или просто /usr/lib/...

eugene2k
()
Ответ на: комментарий от moradan

>>OpenMP хорошо работает с циклическим параллелизмом?! >Я так понял, это когда на каждой итерации цикла создаётся новый поток. Может быть, неправильно понял.

А можно пример кода, пожалуйста: обычный цикл/распараллеленый?

GladAlex ★★★★★
()
Ответ на: комментарий от eugene2k

> Костыль же. Потому что разработчики дистрибутивов не могут договориться о том какой путь к библиотеке должен быть /usr/lib/gtk+-2.0/... или просто /usr/lib/...

Ты путаешь --libs и --cflags. Ключ --libs возвращает что-то вроде "-lglib-2.0 -lgtk-x11-2.0" и никаких путей тут нету. Благодаря pkg-config меньше срача в /usr/include, не уверен, что разработчики дистрибутивов вообще имеют к этому отношение.

Bohtvaroh ★★★★
()
Ответ на: комментарий от void_ptr

>>OpenMP хорошо работает с циклическим параллелизмом?! А можно хороший пример кода, когда цикл с кучей вычислений можно хорошо распараллелить с этим инструментом? Кто может привести, если не сложно?!

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


В этом то и проблема, если код - это:
цикл
вложенный цикл
внутри вычисление типа a+b*c

как это распараллелить?!

GladAlex ★★★★★
()
Ответ на: комментарий от GladAlex

Если одна итерация не влияет на другую, то каждую запустить в отдельном треде. )) Сорри, если глупость сказал. :D

Bohtvaroh ★★★★
()

Статья небезлюбопытная, хотя некоторые вещи с первого прочтения понять относительно трудно.

> Судя по написанному, автора либо очень крепко достала предыдущая его ОС, либо он осознанно далеко не беспристрастен

Скорее, и то, и другое, однако винда действительно может не слабо достать.

Mercenary_Mercury
()
Ответ на: комментарий от annulen

> Что же касается С++, VS и G++ поддерживают практически все стандарты (в отличие, например, от OpenWatcom, популярного у нас на Химфаке МГУ), т.е. если код написан правильно, он компилилируется и в g++, и в VS.

Стандарты в теории одни, а код на практике... сильно разный может быть.

sv75 ★★★★★
()

Ничего удивительно. Под виндой удобнее использовать только DotNet.

sv75 ★★★★★
()
Ответ на: комментарий от Bohtvaroh

>Если одна итерация не влияет на другую, то каждую запустить в отдельном треде. )) Сорри, если глупость сказал. :D

Интересная мысль и очень простая, почему-то раньше в голову не приходила: запусти себе всё по отдельным потокам и не беспокойся. Надо будет попробовать. Но зачем тогда OpenMP?! Тут наверное любым инструментом можно?! Например, запустить потоки, средствами Qt?! Тут я так понимаю, что тут OpenMP никто не владеет?

GladAlex ★★★★★
()
Ответ на: комментарий от GladAlex

>Интересная мысль и очень простая, почему-то раньше в голову не приходила: запусти себе всё по отдельным потокам и не беспокойся.

Только одно но: вычислений внутри цикла относительно немного: 3 суммы с умножением. Не будут ли накладные расходы на запуск нитей сильно тормозить процесс в целом?! Кроме того идёт обращение к общей переменной - сумме, получается семафоры нужно реализовывать?!

GladAlex ★★★★★
()
Ответ на: комментарий от GladAlex

> Но зачем тогда OpenMP?! Тут наверное любым инструментом можно?! Например, запустить потоки, средствами Qt?!

OpenMP местами состоит из прагм. Например, когда имеем 2 вектора (массива), которые нужно покомпонентно сложить, то можно написать перед кодом цикла соответствующую прагму. При этом о создании потока задумываться не очень-то и надо.

К.О. также отмечал где-то, что когда отсутствует поддержка OpenMP, то код будет просто выполняться последовательно, с минимумом вмешательств.

yintu
()
Ответ на: комментарий от GladAlex

мсье, почитайте книжечку по OpenMP, а ;)

Если кратко - OpenMP разрабатывалось там же где и OpenGL (в SGI), служит для реализации shared-memory паралелизма посредством внесения pragmas в обычный, serial code.

Если угодно - пишите, синхронизируйте и ловите затыки сами, средствами raw threads.

nikitos ★★★
()
Ответ на: комментарий от GladAlex

> Только одно но: вычислений внутри цикла относительно немного: 3 суммы с умножением. Не будут ли накладные расходы на запуск нитей сильно тормозить процесс в целом?! Кроме того идёт обращение к общей переменной - сумме, получается семафоры нужно реализовывать?!

Нити не обязательно запускать - можно их держать спящими на condition, а когда надо - установить данные и толкнуть condition. Это недорого, хотя на 3 суммы с умножением может и не дать выигрыша.

HappySquirrel
()
Ответ на: комментарий от GladAlex

OpenMP хорошо работает с циклическим параллелизмом?! А можно хороший пример кода, когда цикл с кучей вычислений можно хорошо распараллелить с этим инструментом? Кто может привести, если не сложно?!

// Potential energy part matrix (colomn-major <Fortran> order)
   printf("# Forming potential energy part... "); fflush(NULL);
#pragma omp parallel for private(abspos) 
   for(abspos_prime=1; abspos_prime<=size; abspos_prime++)
   {
    for(abspos=abspos_prime; abspos<=size; abspos++) // fill only lower triangle of the full matrix
    {
      PotentialEnergy(abspos, abspos_prime) =  // Coulomb ME for L=1 case
        2.0*(          primitive_coulomb_int(multiindex_arr(abspos).ftyp+2*multiindex_arr(abspos_prime).ftyp,
                                             multiindex_arr(abspos_prime).n,
                                                                       multiindex_arr(abspos_prime).r,  multiindex_arr(abspos_prime).k,
                                                                       multiindex_arr(abspos_prime).s,  multiindex_arr(abspos_prime).l,
                                             multiindex_arr(abspos).n,
                                                                       multiindex_arr(abspos).r,        multiindex_arr(abspos).k,
                                                                       multiindex_arr(abspos).s,        multiindex_arr(abspos).l) // "Direct"
                       +
             SPIN_SYMM*primitive_coulomb_int(multiindex_arr(abspos).ftyp+2*multiindex_arr(abspos_prime).ftyp+(1-PARITY), // (1-PARITY) is use to indicate exchange-type integral for the case PARITY==0
                                             multiindex_arr(abspos_prime).n,
                                                                        multiindex_arr(abspos_prime).r,  multiindex_arr(abspos_prime).k,
                                                                        multiindex_arr(abspos_prime).s,  multiindex_arr(abspos_prime).l,
                                             multiindex_arr(abspos).n,
                                                                        multiindex_arr(abspos).s,        multiindex_arr(abspos).l,
                                                                        multiindex_arr(abspos).r,        multiindex_arr(abspos).k) // "Exchange"
            );
    }
   }
   printf("done!\n"); fflush(NULL);

annoynimous ★★★★★
()
Ответ на: комментарий от HappySquirrel

Ничего (ну и переменные циклов). Все вычисления -- а их много и они сложные, сосредоточены в primitive_coulomb_int

Я постарался применить "функциональный" стиль: все вычисления -- применение последовательности функций к входным данным.

annoynimous ★★★★★
()
Ответ на: комментарий от PIV

>цена студии - день работы программера, смешно.

хм... я конечно не знаю, где вы з/п добываете, но цена Visual Studio Pro 2008 Win32 около 1k$. Если ваш годовой доход на кодинге 250-300k$ - мой вам респект :)

Linfan ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.