nixp.ru v3.0

26 мая 2017,
пятница,
04:54:03 MSK

DevOps с компанией «Флант»
Аватар пользователя DimkaS
DimkaS написал 5 января 2006 года в 02:55 (516 просмотров) Ведет себя как мужчина; открыл 84 темы в форуме, оставил 922 комментария на сайте.

У меня есть небольшой опыт программирования на VB и С/С++ (Borland C++ Builder) под Windows. Посоветуйте, пожалуйста, источники информации первой необходимости для освоения этих языков в Линукс. Меня интересуют:

1) Среда разработки

Я знаю про Gambas, Anjuta и Eclipse. Как сравнить, что выбрать?

2) Графический интерфейс

В винде он один, а тут вам и qt и gtk и черт знает что еще… Как разобраться, где доки искать?

myst

На самом деле, к программированию под UNIX ни один из твоих вопросов отношения не имеет.

1. Я пользуюсь VIM+pluigns+GCC+pmake.

2. Вообще не использую, потому что не надо.

Steck

1) vim/gvim

2) Выбор огромный, решать тебе

Я пользую xfce

http://www.xfce.org/

Feuerbach

xfce, емнип, на gtk сварен.

Longobard

vim/gvim это гатишна, сам использовал, но его возможности как ide уже далеко в попе. И гемора с настройкой очень много (ох да, уже слышу вопли красноглазых защитников вима :) ).

В общем я бы порекомендовал eclipse третий (см. соседний топик), или C++BuilderX, или действительно gvim.

Есть еще Kdevelop и Anjuta, но последняя произвела впечатление совсем уж сырой вещи, а Kdevelop я щупал пару лет назад, жутко не понравилось, может быть сейчас все изменилось, не знаю :)

DimkaS

Ясно. Про IDE, вроде, понял. А вот про GUI не очень. Можно сделать такой интерфейс, чтоб он одинаково выглядел и в KDE и в Gnome и в др десктопах?

И еще. Как создавать gui без ide? В винде это как-то замороченно делалось… Может кто-нить ссылки кинуть на подходящие доки или ключевые слова подсказать?

decvar

что бы одинакого в kde/gnome нету. что бы нормально на разных платформах — wxWindows/Qt.

Если писать гуй на C или Python — GTK.

Если на c++ — Qt или wxWindows.

Если есть опыт MFC — wxWindows.

KDevelop вообщем ничего так… нормально…. тока msvs все равно лучше…

Anjuta сильно на GTK/Gnome завязана,

Eclipse спасет если много памяти, много времени, ну все то, что хочет большая java app.

Gvim без\с плагинов, подцветка синтаксиса и руками писанный Makefile — стандартный путь линуксойда…

Есть еще пачка каких-то штуковин.

Но ИМХО правильный путь если надо кросс-платформенно пишешь в ms studio код, отлажываешь, а потом просто пишешь makefile, чинишь мелкие ляпы которые простил компилятор от ms, и готово.

builder выкинь на помойку истории, с портированием кода гимора в разы больше чем с каким либо другим…

Uncle Theodore

Некорректно заданный вопрос порождает мистические ответы. Что значит «сделать такой интерфейс, чтоб он одинаково выглядел и в KDE и в Gnome и в др десктопах"?

Если напишешь гуй с привязкой к QT, то он будет запускаться на машине, снабженной соответствующими библиотеками, под любым десктопом, буде это GNOME, fluxbox или twm, и везде будет выглядеть одинаково. То же верно для GTK и хЕровой тучи других тулкитов. Можно пользовать более примитивные наборы виджетов, например Motiff/Lesstiff или вообще, Athena’вые виджеты, которые в Икса встроены, аппликуха вообще никаких дополнительных библиотек просить не будет. А то можно писать на чистом Иксе (чем я иной раз развлекаюсь) — экономит память и в несколько раз быстрее (возни до хера, это таки да). Еще раз повторю, во всех вышеописанных случаях, если гуй запустится, выглядеть он будет независимо он конкретного десктопа, под которым он бегает.

Смысл такой. GTK, QT и прочие прибамбасы придуманы для облегчения написания гуя и для того, чтобы внешний вид (стиль) сразу всех гуев, написанных с использованием данного тулкита, можно было изменить параметрами настройки соответствующего десктопа. Если ты напишешь гуй под QT, он будет выглядить в соответствии с текущими настройками KDE.

decvar
Но ИМХО правильный путь если надо кросс-платформенно пишешь в ms studio код, отлажываешь, а потом просто пишешь makefile, чинишь мелкие ляпы которые простил компилятор от ms, и готово.

Компилятор в MS прощает «ляпы» типа

int array[5];

array[8]=25;

или

int *array = new int;

for(int i=0;i<5;i++) array=i;

и еще столько всего, что в ms studio пусть бабушка твоя код пишет. Я еле-еле отучил студентов пользоваться этим монстром. Для кросс-платформенности, как и для изучения программирования — только gcc. А в Винде исправишь мелкие параноидальные заскоки MS’овского компилятора, как например, отсутствие понятия области действия переменной-счетчика цикла.

Good Luck,

UT

decvar
Компилятор в MS прощает «ляпы» типа

int array[5];

array[8]=25;

ну да…. и такое прощает… тока почему он должен бить тут по рукам?

пользуйте std::vector и всего делов…

отсутствие понятия области действия переменной-счетчика цикла

это включается и выключается опциями компиляции…

только gcc

обоснуй? а что icc уже низя?

взять например ту же eclipse + icc и вперед… будет крутая ide с крутым компилятором :)

Uncle Theodore

Ха! Клюнул-таки, а? :-)

decvar
ну да…. и такое прощает… тока почему он должен бить тут по рукам?

пользуйте std::vector и всего делов…

Компилятор — ладно. Но прога с такими ошибками еще и работать будет под Виндой, а это уже плохо с точки зрения отладки.

это включается и выключается опциями компиляции…

А оно не должно включаться и выключаться, это синтаксис языка. Кросс-платформенности несоблюдение стандартов несколько вредит, ты не находишь? :-)

обоснуй? а что icc уже низя?

взять например ту же eclipse + icc и вперед… будет крутая ide с крутым компилятором :)

Я же сказал — для обучения. Для изучения надо что-нибудь а) бесплатное; б) строго соблюдающее стандарты; в) неглючное. Всем трем требованиям удовлетворяет только gcc.

Good Luck,

UT

decvar
а это уже плохо с точки зрения отладки

блин. а в чем проблема-то? ну не сказал тебе компилятор что ты дурак. ну линкер тоже решил, раз ты дурак не дам твоему коду обрушиться. то что ты привел — это глупость, а защита от дурака не самая плохая весчь:)

Не соблюдение стандартов — это когда код, отвечающий станадрту не_компилируеться. Я что-то ни разу не слышал, что бы такое было в ms cl…

а) бесплатное; б) строго соблюдающее стандарты; в) неглючное

a)studio tools и ms cl 7.1 бесплатны.

б)«стандартный» код работает

в)мне известен всего один существующий глюк, но до него ни один студент не добереться…

а про-девелопер знает как эту ситуацию обходить…

ЗЫ

область видимости чего-либо — это ниразу не синтаксис :)

Uncle Theodore
decvar
Не соблюдение стандартов — это когда код, отвечающий станадрту не_компилируется.

Не согласен. Это еще и когда компилируется код, не отвечающий стандарту.

область видимости чего-либо — это ниразу не синтаксис :)

Сделать синтаксисом? Откомпилируй

for(int i=0;i<5;i++){cout << i <<endl;}
for(i=0;i<5;i++){cout << i <<endl;}

в gcc.

Good Luck,

UT

decvar

не вопрос…

вот что сделала студия c выключеной опцией «Force Confirmance In for Loop Scope ( /Zc:forScope- )»

по умолчанию опция вклчена, и код не собираеться, сообщая что i в втором «for» не определена.

0

1

2

3

4

0

1

2

3

4

думаю что gcc скажет ровно тоже самое, тока вот незнаю какой ключик у нее это включает\отключает…

Какое поведение считаеться «правильным» по стандарту?

Я считаю, что такой код не должен собираться…

скрин где не собралось

а здесь собралось

Uncle Theodore

Я просил скомпилить это под gcc и получить синтаксическую ошибку. То, что это собирается в студии я знаю. Сей факт есть грубое нарушение стандарта С++, о чем можно почитать в CD2 и FCD:

for(for-init-statement; condition; expression) statement

«If the for-init-statement is a declaration, the scope of the name(s) declared extends to the end of the for-statement»

То же самое, другими словами — в сноске 124 к параграфу 6.8.5.3 Финального Драфта (FCD)

http://home.att.net/~jackklein/c/standards.html

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

Good Luck,

UT

decvar
То, что это собирается в студии я знаю

Дык ведь не собираеться! :)

Именно синтаксическая ошибка.

НО

Есть возможность заставить собраться расширив область видимости.

Может твои студенты подкрутили свою студию прежде чем тебе что-то сдавать? ;)

Uncle Theodore
decvar
Дык ведь не собираеться! :)

Именно синтаксическая ошибка.

НО

Есть возможность заставить собраться расширив область видимости.

Может твои студенты подкрутили свою студию прежде чем тебе что-то сдавать? ;)

У меня собиралось на совершенно девственной инсталляции студии (не помню версии, 6.0, кажется). Как, например, и работали векторы, которые забыли ресайзить, и много еще чего. В конце концов, мы добились того, что код моими студентами писаный стал действительно портабельным, когда для переноса программы на Юникс стало достаточно изменить один хедер (мы OpenGL’ные аппликухи писали). MS’ные глюки очень мешали процессу, тогда как код написанный изначально для gcc переходил на Виндозу гладко и чисто.

Мы несколько отвлеклись, ты не находишь? :-)

Good Luck,

UT

decvar
Мы несколько отвлеклись, ты не находишь? :-)

нахожу…. тока по делу имхо сказать уже особо нечего…

:)

не помню версии, 6.0, кажется

ха-ха-ха….год выпуска сказать или сам посмотришь?

интересно умел ли тогда gcc например c99(edit: а его тогда и не было, не знаю какой стандарт c тогда быд) не говоря уж о final draft :)

UT, ну ешкин кот, ты оказываеться пользовал кашки мамонта от мелософта и свежак от gnu, и расстоился что ms в те времена налабала такой кривой компилятор?

А я то думал…

Лана забили… UT если есть время возьми где-нить винду и посмотри на современные студии от микрософта, скачай express версии чего-нить….

А то как-то голословно получается…

векторы, которые забыли ресайзить

это в смысле? это ты для чего принудительно ресайзишь векторы?

Uncle Theodore

Хорошо, я сейчас гляну точно, что это было.

Good Luck,

UT

Нашел!

Visual Studio 6.0 и Visual Studio .NET

Последняя была выпущена в 2002 году. Да и вообще, если MS выпускает програмы раз в четыре года, ей следовало бы заботиться о вылавливании багов и выпуске патчей.

Good Luck,

UT

decvar

а 2002 вела себя точно так же? Я это перепроверить не могу, так как 2002 мне нигде не доступна.

у меня дома есть тока 2005, она не собрала, что и ожидалось.

на работе есть 2003 — так что могу в понедельник посмотреть как она компилит это. Точно знаю, что у нее есть такой ключ, но включен он или выключен по умолчанию не знаю.

PS

По скоку циклы я пользую :) и for(int i…. часто бывает внутри одного метода, то подозреваю, что включено, т.е. твой пример не соберется с синтаксической ошибой.

DimkaS

Спасибо Uncle Theodore за внятное объяснение:

Uncle Theodore
Если напишешь гуй с привязкой к QT, то он будет запускаться на машине, снабженной соответствующими библиотеками, под любым десктопом, буде это GNOME, fluxbox или twm, и везде будет выглядеть одинаково. То же верно для GTK и хЕровой тучи других тулкитов. Можно пользовать более примитивные наборы виджетов, например Motiff/Lesstiff или вообще, Athena’вые виджеты, которые в Икса встроены, аппликуха вообще никаких дополнительных библиотек просить не будет. А то можно писать на чистом Иксе (чем я иной раз развлекаюсь) — экономит память и в несколько раз быстрее (возни до хера, это таки да). Еще раз повторю, во всех вышеописанных случаях, если гуй запустится, выглядеть он будет независимо он конкретного десктопа, под которым он бегает.

Good Luck,

UT

Последний (надеюсь) вопрос: где искать доки и по каким словам?

Uncle Theodore
DimkaS
Спасибо Uncle Theodore за внятное объяснение:

Последний (надеюсь) вопрос: где искать доки и по каким словам?

В Гугле, вестимо.

Слова --

qt programming

gtk programming

xlib programming

athena widgets

linux gui programming

хватит для начала.

Good Luck,

UT

rgo
decvar

у меня дома есть тока 2005, она не собрала, что и ожидалось.

на работе есть 2003 — так что могу в понедельник посмотреть как она компилит это. Точно знаю, что у нее есть такой ключ, но включен он или выключен по умолчанию не знаю.

PS

По скоку циклы я пользую :) и for(int i…. часто бывает внутри одного метода, то подозреваю, что включено, т.е. твой пример не соберется с синтаксической ошибой.

умный да? вот достучался тут до меня студент, чего-то у него там не работало… компилировал он есесссно в vc++. Дык я, чтоб это скомпилировать компилятором соответствующим стандарту, задолбался править программу. а студентик даже и не подозревает где кончается стандарт и начинается vc++. И когда я попытался ему объяснить, на будущее что объявление main, должно начинаться со слова `int’, а не `void' он по-моему так и не понял зачем…

decvar
умный да?

да. очень.

компилировал он есесссно в vc++.

повезло. был бы borland — познал бы страсть в избытке

а студентик даже и не подозревает где кончается стандарт и начинается vc

компилятор виноват что студент — дурак? тока ответь на свой собственный первый вопрос.

И когда я попытался ему объяснить, на будущее что объявление main, должно начинаться со слова `int’, а не `void' он по-моему так и не понял зачем…

а ты в следующий раз не объясняй больше чем спросили -будешь спокойней спать :)

PS

Если проболжим обсуждать на скока g++ соблюдает стандарты, разворачивает template-ты, и особенно хорошо расскажу как быстро он это делает…

а может он умеет базу edit & continue отлаживания? а давно ли он научися precompiled headers, да так что бы совместимо с остальными?

Причем возьму версию за 1998 год :) ну или за 2002 :)

Longobard
decvar
Причем возьму версию за 1998 год :) ну или за 2002 :)

Ок, а я возьму шестую студию и раскрою тему ее соответствия стандартам :)

Короче holywar пора ацтавить :) Или сделать ветку «g++ vs vc++».

DimkaS
Uncle Theodore
В Гугле, вестимо.

Слова --

qt programming

gtk programming

xlib programming

athena widgets

linux gui programming

хватит для начала.

Good Luck,

UT

Спасибо! Может, в топку эту ветку? А то тут лишь пара постов по теме…

Longobard

Нет, просто переименовать ее в vs vs gcc :)

myst

На сколько знаю я, VC++7.1 — единственный в мире компилятор, который поддерживает C++ стандарт на 100%.

decvar
VC++7.1 — единственный в мире компилятор, который поддерживает C++ стандарт на 100%.

во-во… :)