LINUX.ORG.RU

[C++?] Серьезный вопрос.


3

2

Просьба ответит серьезно, желательно с аргументами за или против.

Предистория:
Когда то давным давно (я тогда еще только закончил 9-ый класс) я увидел в газете объявление о наборе в летнюю группу по изучению классического программирования. В тот момент я был с компьютером на ты и "очень" хорошо в них разбирался (переустанавливал Windows каждый месяц, хаял Microsoft просто потому, что после моих настроек W приходилось постоянно переустанавливать). Группа по классическому программированию так и не набралась, но набралось 1 человек на Visual Basik for Applications. Я соглсился быть вторым и начались занятия.
Все, что мне там объясняли я схватывал быстро. Меня пригласили продолжить обучение в сентябре на курсе "моделирование".
Там уже был Pascal, который я тогда совсем не знал. Сам курс был очень разношорстный: мы изучали и использование мыши через прерывание, готовились к различным олимпиадам. Параллельно я изучил Pascal.
Потом был Delphi. К концу 10-го класса я уже неплохо владел приемами программирования и вовсю клепал бесполезные программулины. Потом поступил в универ на программиста. Там тоже был Delphi, и я особо не напрягаясь писал все лабы (к моменту поступления я уже был знаком с логикой указателей, самописные стеки и графы, etc).
На 2-ом курсе в гостях у знакомого я разобщался с человеком, который уже насколько лет работал в нерезиновой программистом. Он мне и открыл глаза на мир: "Delphi здох. Его уже похоронили и забыли. Сейчас необходимо знание C++, C#. Необходимо занание паттернов проектирование". Вобщем много чего он мне наговорил. Книжек умных насоветовал, подкинул MSVS 2008, кучу электронных книжек. Я изучил C# по книжке Шилдта. Читал "Идеальный кол" (автора уже не помню). Потом купил(!) себе книжку Шилдта про С++. Мне понравился язык. Тем более что мне казалось, что именно он и есть общепринятый стандарт. Наиболее удобный язык для программиста.

А недавно в соседней теме за упоминание это С++ меня чуть было не съели со всем чем можно. Так-то.

Собственно вопрос: Так стоит ли изучать дальше С++ (а я уже достаточно углубился в книжку Страуструпа, подробно изучая все подводные течения)? Какой язык стоит изучать? Какие из них более востребованны?

Спасибо всем, кто осилил это многобукаф.

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

> ну то что на С куча библиотек - все знают, а как же, например, lisp( не привязки, а полноценная реализация ) ;)

NIH-синдром? У вас и ядро на крестах переписано?

> П.С. и насчет удобства - на С++ с помощью Qt такая задача решается парой десятков строчек, то что вы предложили - потребует кучу времени, чтоб скормить результат от XUL тем же poppler, librsvg и т.д., где же то самое удобство про которое кричат противники С++?


А не через биндинг к poppler'у ли qt рендерит/пишет pdf'ки? А через что оно рендерит html? Через биндинг к webkit/xul, или через свой велосипед, который рендерит не так, как в браузере будет?

Любой фреймворк должен быстро и безпроблемно делать то, на что он расчитан. Если это не так, то фреймоврк плохой, негодный. И как только за границы реализованного функционала выходишь, настаёт всё та же жопа.

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

> NIH-синдром?

неа - просто удивительно, что фанаты "кул-языков" не могут ни шагу сделать без библиотек на неправильных и опасных С и С++

> А не через биндинг к poppler'у ли qt рендерит/пишет pdf'ки? А через что оно рендерит html? Через биндинг к webkit/xul, или через свой велосипед, который рендерит не так, как в браузере будет?


дык и я о том же - только вот на С++ это на данный момент делается быстро, удобно и понятно, а на том же лиспе - нет

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

>не будем говорить про скорость( она вам все-равно не важна ), потому подскажите, например, аналоги Qt и wxWidgets с такой же интеграцией в целевых ОС, если вы скажете - что это всего-лишь библиотеки, подскажите аналоги на других языках или обоснуйте почему таковых нет

По мне так очевидно что Страуструп ничего гуевого никогда не писал и про гуевые парадигмы ничего не знает. Вкратце, логика в гуйне - всегда асинхронная, с долгоживущими объектами разделяющими владельцев. Чаще всего это обсерверы, машины состояний или листенеры у каких-то фоново выполняющихся процессов. В С++ наиболее натуральный стиль это когда вся логика синхронная, с короткоживущими объектами на стеке. В плане объектной модели С++ тоже подходит ля гуйни плохо, т.к для гуйни наиболее оптимальна смаллталковская модель ОО с посылкой сообщений. А нормальные GUI библиотеки есть в том же Дельфи или на Маке в ObjC.

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

> неа - просто удивительно, что фанаты "кул-языков" не могут ни шагу сделать без библиотек на неправильных и опасных С и С++

Ты кресты к величию Си не подмазывай. К библиотеки на Си любая сволочь ffi-биндинг сделает, а вот с крестами нужно сношаться, привязываясь к конкретной версии ABI конкретного компилятора.

> дык и я о том же - только вот на С++ это на данный момент делается быстро, удобно и понятно, а на том же лиспе - нет


Ололо. Во-первых, предложенные дотнет и жвм куте по части наличия всякого уделают просто одним пальцем, а, во-вторых, ты не помнишь, чем закончился прошлый спор кресты vs лисп?

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

> Вкратце, логика в гуйне - всегда асинхронная, с долгоживущими объектами разделяющими владельцев

согласен, скоро предоставлю на суд общественности свой тулкит на с++ - там все изящно и очень просто решается

> А нормальные GUI библиотеки есть в том же Дельфи


я не в курсе - там самые базовые вещи, вроде сайзеров, уже появились? ( последний раз видел 7.0 - там вроде как не было )

> для гуйни наиболее оптимальна смаллталковская модель ОО с посылкой сообщений

> или на Маке в ObjC.


что касается практического использования - cocoa только для mac, а "смаллталковская модель ОО" - не так удобна как использование развитых и мощных библиотек с другим подходом

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

> Ты кресты к величию Си не подмазывай

доо, это ж я предложил "жвм куте" использовать ;)

> Ололо. Во-первых, предложенные дотнет и жвм куте по части наличия всякого уделают просто одним пальцем,


ну сколько повторять - обертки это только обертки, а насчет "дотнет" - сами на нем пишите

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

> ну сколько повторять - обертки это только обертки,

Ok, расскажи нам, как qt работает с pdf и картинками в разных форматах.

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

> Ok, расскажи нам, как qt работает с pdf и картинками в разных форматах.

qt в части работы с pdf и картинками - это сложная надстройка, которая скрывает от нас работу с библиотеками и дает новый уровень абстракции, а не простая обертка, которая копирует оригинал, я думал это очевидно

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

> qt в части работы с pdf и картинками - это сложная надстройка, которая скрывает от нас работу с библиотеками и дает новый уровень абстракции, а не простая обертка, которая копирует оригинал, я думал это очевидно

Т.е. биндинг? А лисповый биндинг, который делает оверрайд доступа к слотам объекта-обёртки через метаобъектный прокотол - это простая надстройка, ничего не скрывающая, и не дающая новый уровень абстракции?

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

> Т.е. биндинг? А лисповый биндинг, который делает оверрайд доступа к слотам объекта-обёртки через метаобъектный прокотол - это простая надстройка, ничего не скрывающая, и не дающая новый уровень абстракции?

ну покажи как ты с помощью такого "биндинга" будешь экспортировать html в pdf

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

> ну покажи как ты с помощью такого "биндинга" будешь экспортировать html в pdf

В чём проблема то?

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

это чтоб тебе было понятно в чем разница между "биндингом" в qt и тем что ты написал

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

> да нет проблемы - просто приведи пример кода на lisp

Воспользуюсь jvm с ворохом готового кода и одной из реализаций лиспа для jvm (kava, abcl, clojure).

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

> Воспользуюсь jvm с ворохом готового кода и одной из реализаций лиспа для jvm (kava, abcl, clojure).

а не проще тогда на Java это дело написать?

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

> а не проще тогда на Java это дело написать?

Не проще тогда в маш.коде программы писать, раз процессор всё равно только их исполняет?

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

> Не проще тогда в маш.коде программы писать, раз процессор всё равно только их исполняет?

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

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

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

Бохх с тобой. Лисперы лезут в спор доказывать, что язык XYZ для этой конкретный задачи - унылое говно, потому что <список преимуществ Лиспа>. Скрипач свидетель.

Кстати, куте написали на Емаксе. Емакс написан на Лиспе =)

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

> Кстати, куте написали на Емаксе. Емакс написан на Лиспе =)

наверное не "на", а "в"? :) ну так кроме емакса лисперам и похвастаться нечем - чуть что так "Емакс и Qt", "Емакс и линукс", "Емакс и холокост"..., хотя думаю просто на момент написания qt в Linux просто не было альтернативы

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

> Лисперы лезут в спор доказывать, что язык XYZ для этой конкретный задачи - унылое говно, потому что <список преимуществ Лиспа>. Скрипач свидетель.

ну а сейчас ты что доказывал, что c++ и qt не годятся для предложенной задачи?

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

> ну а сейчас ты что доказывал, что c++ и qt не годятся для предложенной задачи?

Сейчас я доказываю, что авторы qt не занимаются велосипедостроительством и используют готовые библиотеки. Так же, как и все остальные.

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

Что из вышеперечисленного умеет из коробки работать с таким же количеством языков, как и емакс? Обладает таким же количеством фишек? Позволяет за две минуты дополнить редактор своим кодом?

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

> Что из вышеперечисленного умеет из коробки работать с таким же количеством языков, как и емакс?

Eclipse и NetBeans, да и думаю авторам qt хватило бы С++

> Обладает таким же количеством фишек?


посмотри плагины к Eclipse - думаю их количество и, что главное, качество намного выше аналогичных в емакс. Сомневаюсь, что, например, в emacs можно встроить что-то вроде jasper reports

> Позволяет за две минуты дополнить редактор своим кодом?


которые делает ... ?

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

>> Вкратце, логика в гуйне - всегда асинхронная, с долгоживущими объектами разделяющими владельцев

>согласен, скоро предоставлю на суд общественности свой тулкит на с++ - там все изящно и очень просто решается

Я на эту тему много спорил с tailgunner-ом. По мне так чужеродные парадигмы в языках никогда не приживаются из-за тотального NIH для того чтобы завраппить весь родной для языка код в новую парадигму.

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

> По мне так чужеродные парадигмы в языках никогда не приживаются из-за тотального NIH для того чтобы завраппить весь родной для языка код в новую парадигму.

наглядный пример - Qt

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

т.к для гуйни наиболее оптимальна смаллталковская модель ОО с посылкой сообщений

Да там эта посылка сообщений равнозначна вызову методов для объектов, по сути одно и то же.

Другое дело, можно писать сигналы, которые принимают блоки кода и исполняют их, тогда возможны конструкции

btn := MyFancyButton new.
btn onClick: [ "тут код, который делает мне хорошо" ].

^_^ прелесть же

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

>> По мне так чужеродные парадигмы в языках никогда не приживаются из-за тотального NIH для того чтобы завраппить весь родной для языка код в новую парадигму.

>наглядный пример - Qt

Я хотел привести Qt и KDE как наглядный пример тотального NIH - синдрома, но поскольку я никогда серьезно не изучал Qt оставил сие svu и JB.

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

Хотя да, припоминаю что в биндинге gtk-gst сигнал, посылаемый на событие, вешался символом, типо

window connectSignal: 'destroy' to: self selector: #destroy:data: userData: nil.

и уже сигнал destroy вызывался для того, кто указан в to:.

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

>Да там эта посылка сообщений равнозначна вызову методов для объектов, по сути одно и то же.

Да не одно и тоже. Таблицы виртуальных функций не позволяют расширять код с одной стороны без ведома другой. Оконные среды часто посылают окнам сообщения о которых окна не знают, например.

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

>хотя думаю просто на момент написания qt в Linux просто не было альтернативы

vim ;-)

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

В питоне(PyQt)

в Tcl/Tk, внезапно, то же самое. с другой стороны, там можно сделать кое-что вот эдакое:

$m.edit.m add command -label "Copy" -underline 0 -command {event generate [focus] <<Copy>>}

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

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

>$m.edit.m add command -label "Copy" -underline 0 -command {event generate [focus] <<Copy>>}

фак мой мозг, я не распарсил этот язык инопланетян

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

>$m.edit.m add command -label "Copy" -underline 0 -command {event generate [focus] <<Copy>>}

"имя виджета" добавить комманду "Копировать" -подчеркнуть-символ 0 -комманда {сгенерировать событие [виджет в фокусе] - Копировать}

>фак мой мозг, я не распарсил этот язык инопланетян

какое именно слово тебе непонятно?

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

Слова-то знакомые, теперь более менее вкурил =) Просто очень непривычно это для моих глаз

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

>У нас, по-видимому, разные представления о числодробилках

Числодробилка -- это такая штука, которая перемалывает множество чисел. А ты тут пытаешься числодробилку (например, решение множества однотипных дифуров, различающихся только коэффициентами) подменить "инструментом для исследования гипотез с возможностью решения систем дифуров".

>Вы ещё предложите учёному самому расчитывать блобы в вашем алгоритме и читать эрраты на процессоры

Ученые для этого держат студентов/аспирантов. Лично я для одного кандидата математических наук вообще на ассемблере фигачил символьные вычисления, поскольку maple для него был слишком медленным, плюсы/си -- недостаточно быстрыми. Разумеется, эти числодробильные функции вызывались из красивого интерфейса на более высокоуровневом C, однако я с этим кандидатом временами обсуждал, а не просираем ли мы такты в этом цикле.

Эта история имела место быть в 2003-2004 годах.

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

>А сегфолт простят?

Если ты пишешь с сегфолтами/"белыми экранами", то тебе не место в этом треде, где собрались профессионалы.

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

Если ты пишешь с сегфолтами/«белыми экранами», то тебе не место в этом треде, где собрались профессионалы.

1. Явно не тебе решать, где мне быть, а где нет.

2. Я не пишу с сегфолтами. Совсем.

3. 2-3 профессионала в треде я вижу, а вы кто?

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

>Ну тогда навскидку предложу Haskell

А давай выключим дурачка и немного пораскинем мозгами:

1) где математические библиотеки, поддерживающие быстрое перемножение матриц, вычисление коэффициентов преобразования Фурье и т.п.?

2) где поддержка математических типов данных (комплексные числа, вещественные числа различной точности и т.п.)?

3) где прозрачный синтаксис для описания арифметических действий? Лютый ужас, нагугленный мною по запросу "haskell complex numbers" поверг меня в состояние, близкое к прострации.

4) где компиляторы, эффективно оптимизирующие математические операции? Напомнию, что существуют Intel Fortran Compiler и Intel C/C++ Compiler, производящие нетривиальные оптимизации, приводящие к увеличению производительности _в разы_.

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

>Контраргументация будет, почему сишарп с впф не годится для написания формочек?

У меня в линаксе не компилиццо :(

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

>Числодробилка -- это такая штука, которая перемалывает множество чисел

Скотт Мейерс в "More Effective C++" APL хвалил за более интеллектуальный подход к перформансу, который позволял совершать чудеса с большими матрицами на очень древней технике.

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

>Ну тогда навскидку предложу Haskell

Кстати, Хаскель - наследник APL.

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

с 13:36 kemm не появлялся, видимо всё еще пишет умножение матриц на хаскеле, языке, который "лучше подходит для этой задачи" :)

Был у нас на прошлой работе такой хаскелист, 3 месяца задачу делал, потом слился и уволился, хотя аргументировать умел хорошо о "рулезах" хаскела. Вместо него посадили человека на с++ ваять, дык он за 2 недели сделал то что надо и работало оно в разы быстрее.

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

Чтобы творить чудеса с большими матрицами надо уметь хорошо работать с кешем. Никакой чудодейственный компилятор тут не поможет.

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

> У меня в линаксе не компилиццо :(

В моём линуксе даже скомпиленные кутешные проги не запускаюца :(

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

>1. Явно не тебе решать, где мне быть, а где нет.

Если ты за свою жизнь не написал ни одного не сегфолтящегося приложения на олдскульных C/C++/Pascal, то с чего же ты взял, что нет таких людей, которые пишут на C и без сегфолтов?

>2. Я не пишу с сегфолтами. Совсем.

Это следует понимать как: "Я совсем ничего не пишу, поэтому сегфолтится нечему"? Специально для похапешников я еще "белые экраны" упомянул.

>3. 2-3 профессионала в треде я вижу, а вы кто?

Теперь нас 3-4.

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