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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.