Программирование - это просто

maxx

Активный пользователь
Punto мне не нравится, много лет использую ArumSwitcher
 

Думаю

Пользователь
Опубликован январский рейтинг языков программирования
Язык программирования Go, разработанный в Google, показывает небывалый рост популярности. Утверждается, что он поддерживает многопоточное программирование и параллелизм вычислений, позволяя эффективно нагружать современные многоядерные процессоры. Не отстает и Apple Objective-C, получивший впечатляющую поддержку разработчиков.
Ссылка
 

sami

Местный
Опубликован январский рейтинг языков программирования
Язык программирования Go, разработанный в Google, показывает небывалый рост популярности. Утверждается, что он поддерживает многопоточное программирование и параллелизм вычислений, позволяя эффективно нагружать современные многоядерные процессоры. Не отстает и Apple Objective-C, получивший впечатляющую поддержку разработчиков.
Ссылка
Здесь проводится сравнение Go с языком, который в свое время не получил должной популярности. И сравнение таки далеко не в пользу Go.
А пропиарили его очень нехило. Однако на момент анонса, он был очень и очень сыр. Незнаю, как сейчас.
 

Думаю

Пользователь
Здесь проводится сравнение Go с языком, который в свое время не получил должной популярности. И сравнение таки далеко не в пользу Go.
А пропиарили его очень нехило. Однако на момент анонса, он был очень и очень сыр. Незнаю, как сейчас.
Справедливости ради замечу, что Go в представленном рейтинге замыкает чертову дюжину, а лидеры все те же - java, c, c++...
 

sami

Местный
Справедливости ради замечу, что Go в представленном рейтинге замыкает чертову дюжину, а лидеры все те же - java, c, c++...
У гугля на этот счет, кстати, другое мнение.

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

Я полагаю, что эти рейтинги - результат пиара, и вряд ли мы увидим вскоре серьезные проекты на сыром языке. Вот через годик - вполне реально. Народ походу просто активно щупает, обсуждает и т.п.
На том же rsdn.ru активность по поводу go сошла на нет с месяц назад или более.
 

SSS

Пользователь
Опубликован январский рейтинг языков программирования
Язык программирования Go, разработанный в Google, показывает небывалый рост популярности. Утверждается, что он поддерживает многопоточное программирование и параллелизм вычислений, позволяя эффективно нагружать современные многоядерные процессоры. Не отстает и Apple Objective-C, получивший впечатляющую поддержку разработчиков.
Ссылка
интересно, почему C популярней C++?
 

sami

Местный
интересно, почему C популярней C++?
C намного проще чем C++, и отсюда следствия:
  1. Порог вхождения в язык C гораздо ниже, чем у C++. Это означает, что довольно успешно на нем программировать могут не только специализированные программисты, но так же и физики, химики, инженеры и люди других научно-технических специальностей (и не только).
  2. Компиляторы C несравнимо проще компиляторов C++. Это означает, что более-менее совместимый со стандартом компилятор C можно налабать для любого устройства, и даже для регистровых машин (как это делал Луговский), в то время как разработка компилятора C++ дело очень дорогое и долгое.
    Вообще в рамках языка C гораздо проще делать переносимые программы, чем в рамках C++. Я конечно видел переносимые программы на C++, но аспекту переносимости в них было уделено внимания едва ли не больше чем всему остальному. В общем, без высокоуровневых переносимых библиотек это очень дорого.
    Непоследнее место в аспекте переносимости кода занимает размер скомпилированного кода. У C++ он значительно больше, потому он с опаской используется при программировании устройств с ограниченными ресурсами.
  3. У языка C беспрецедентная совместимость. Код, написанный на C легче использовать из других языков программирования. В свою очередь, разработчики других языков и платформ стараются делать возможность вызывать код, написанный на этих языках из C. Таким образом, C играет роль универсального клея.
Надо сказать, что C используют далеко не только те люди, которым C++ оказался не по зубам, или не нужен. Довольно большое кол-во профильных программистов, владеющих и С++ и более высокоурвневыми языками, регулярно сталкиваются с необходимотью программировать на C.
 

Mike22

Местный
Ну и ещё сейчас наблюдается общая тенденция некоторого разочарования в объектно-ориентированном программировании в целом.
Преимущества этого подхода сейчас уже не выглядят слишком привлекательными.
ООП за собой кучу проблем тащит.
 

sami

Местный
Ну и ещё сейчас наблюдается общая тенденция некоторого разочарования в объектно-ориентированном программировании в целом.
Преимущества этого подхода сейчас уже не выглядят слишком привлекательными.
ООП за собой кучу проблем тащит.
Тем не менее, кое-что из ООП просочилось и в C. Я имею в виду моделирование виртуальных таблиц с помощью структур, состоящих из полей типа функциональных указателей, что собственно приводит к возможности использования ad-hoc полиморфизма, своего рода абстракцией и инкапсуляцией в C. Можно конечно и наследование смоделировать с помощью аггрегации, но от наследования в ООП как раз больше всего проблем.

Что же касается принципов ОО дизайна, заложенных еще Аланом Кеем в Smalltalk-е:
everything we can describe can be represented by the recursive composition of a single kind of behavioral building block that hides its combination of state and process inside itself and can be dealt with only through the exchange of messages.
- так этого никто не отменял. Многи функциональщики используют эти принципы для проектирования сложных систем.

Разочарование приходит как раз от буквальной интерпретации ООП, где "все является объектом" и "единая иерархия наследования" и т.п. В свою очередь иметь абстрактный поток данных, и уметь читать данные из любого источника (файл, кусок памяти, сокет) - это отличная идея, которая широко используется и в C тоже.
 

Mike22

Местный
sami как всегда на высоте. По делу и без воды. И без тык-мык.
Почему я так не умею? :lol:

... структур, состоящих из полей типа функциональных указателей, что собственно приводит к возможности использования ad-hoc полиморфизма ...
Самое смешное - это доступно было и ранее. Кто мешает вам соответствующую функцию в свою библиотеку написать.

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

Много ещё можно сказать.
C++ - это неплохо, но нужно хорошенько подумать прежде чем выбрать его для своего нового проекта.
 

sami

Местный
sami как всегда на высоте. По делу и без воды. И без тык-мык.
Почему я так не умею? :lol:
Это ирония, или и правду по делу? Нет, честно не понял и вполне допускаю за собой воду и не по делу.

Самое смешное - это доступно было и ранее. Кто мешает вам соответствующую функцию в свою библиотеку написать.
Ранее чего и соответствющую чему?

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

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

Много ещё можно сказать.
C++ - это неплохо, но нужно хорошенько подумать прежде чем выбрать его для своего нового проекта.
Полностью поддерживаю. Могу лишь добавить, что останавливаясь на C, тоже нужно хорошо подумать.
 

Mike22

Местный
Нет.

Ранее чего и соответствющую чему? ...
Допустим, я использую библиотеку по работе с картинками ...
Не, не.
Оставим картинки в покое.
Я про то, что объекты и наследование можно реализовать в своём собственном проекте на чистом С, и это не очень сложно.
 

Mike22

Местный
sami, на самом деле, мы говорим о вещах которые мало кому понятны.
Я уверен что большинство понимает что такое указатель на объект (функцию).
Но с введением понятия указатель на указатель - наша аудитория уменьшается раза в два.
А если заговорить о многомерном динамическом массиве указателей на массивы указателей?
Совсем мало народу осталось в аудитории.

Сам C++ написан на чистом C.
Концепция ООП была революционной, структурное программирование себя изжило т.к. в тот момент производительность процессоров ещё не была избыточной (но пользователю уже хотелось новых интерфейсов) а опыта создания таких программ ни у кого не было.
Собственно, появление производительных процессоров и идея создания интерактивных интерфейсов и привела с появлению C++
 

SCTRWD

Местный
Хочу сказать о печальном опыте применения С++ в одном из проектов в большом коллективе. Сначала казалось, что все мы только выйграем от С++, Первая же иерархия классов, действительно, позволила избавиться от многих неприятных моментов, таких как дублирование функциональности и инкапсулирование данных.

Потом всё быстро так стало не так радужно. Проект развивался, отношения между сущностями стали намного сложнее того, что можно спроецировать на С++ и, как грибы, стали расти откровенные извращения: использование инкапсуляции и виртуальных функций уже только для того чтобы соответствовать текущей системе классов. Появились какие-то промежуточные классы, ничего общего не имеющие с самой задачей(Технические так сказать :D ). Всё настолько усложнилось, что просто разобраться стало трудно. А конкретные исполнители, естественно, готовы были на что угодно, лишь бы их изменения были быстрей внесены в рабочую версию(они уже давно запутались в этой системе классов и она для них стала чем-то жутко сложным и непонятным)

Почему то начальство считало, что надо только придумать соответствующую систему классов - и тогда всё будет ОК. Мои замечания, что мол, кто Вам сказал, что такое в принципе возможно? воспринимались как откровенный саботаж и нежелание работать :D (Хуже нет начальника, прочитавшего введение к книжке по С++)

В итоге я написал проект на чистом С, простой, понятный и намного более эффективный(на 72%). Предоставил графики развития проекта, где показал, что с переходом на С++ мы только с каждым месяцем теряли на производительности проекта и большую часть времени проводили в отладке и извращениях, а не в полезном развитии.

Понятно, что я оказался только виновным, опять же, потому что не придумал ту самую мифическую систему классов, которая бы отражала нашу задачу :D

Эти поиски вынудили меня покинуть проект.


Есть задачи, которые просто идеально ложаться на ООП. Но их - абсолютное меньшинство. В примерах книжек именно эти случаи и приводятся. Правда, авторы не предупреждает, что этими примерами всё, собственно и ограничивается :D
 

Touareg

to kalon epieikes
sami, на самом деле, мы говорим о вещах которые мало кому понятны.
Я уверен что большинство понимает что такое указатель на объект (функцию).
Но с введением понятия указатель на указатель - наша аудитория уменьшается раза в два.
А если заговорить о многомерном динамическом массиве указателей на массивы указателей?
Так и появляются утечки памяти)

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

sami

Местный
Оставим картинки в покое.
Я про то, что объекты и наследование можно реализовать в своём собственном проекте на чистом С, и это не очень сложно.
Безусловно. Но объекты и наследования счастья не приносят, в отличие от повышения абстракции.
 

sami

Местный
sami, на самом деле, мы говорим о вещах которые мало кому понятны.
Я уверен что большинство понимает что такое указатель на объект (функцию).
Но с введением понятия указатель на указатель - наша аудитория уменьшается раза в два.
А если заговорить о многомерном динамическом массиве указателей на массивы указателей?
Совсем мало народу осталось в аудитории.
Честно говоря, меня тоже смущает обилие звездочек в типах C/C++. Особенно какие-нибудь ботанические примеры из букварей без привязки к реальной жизни.
Сам уже давно не использую указатели и предпочитаю работать в языках, где их нет.

Сам C++ написан на чистом C.
Это часть правды. Когда я ходил на горшок, так и было. Сейчас давно уже не грех разрабатывать компиляторы C++ на C++. Да и вообще на C++ очень много компиляторов написано.

Концепция ООП была революционной, структурное программирование себя изжило т.к. в тот момент производительность процессоров ещё не была избыточной (но пользователю уже хотелось новых интерфейсов) а опыта создания таких программ ни у кого не было.
Собственно, появление производительных процессоров и идея создания интерактивных интерфейсов и привела с появлению C++
Немного не так. C++ был как раз балансом между ООП парадигмой, представленной симулой и смолтоком, и производительностью "C". Причем C++ до сих пор удерживает лидерство по производительности среди ООП языков.
А появление производительных процессоров дала волю динамическим, функциональным языкам, виртуальным машинам и прочему, что требует дополнительные ресурсы на выполнение. Но все это произошло уже после того как на C++ выросло не одно поколение программистов.
 

sami

Местный
Хочу сказать о печальном опыте применения С++ в одном из проектов в большом коллективе. Сначала казалось, что все мы только выйграем от С++, Первая же иерархия классов, действительно, позволила избавиться от многих неприятных моментов, таких как дублирование функциональности и инкапсулирование данных.

...

В итоге я написал проект на чистом С, простой, понятный и намного более эффективный(на 72%). Предоставил графики развития проекта, где показал, что с переходом на С++ мы только с каждым месяцем теряли на производительности проекта и большую часть времени проводили в отладке и извращениях, а не в полезном развитии.
Спасибо за поучительный пример. Но мне кажется что роль С++ в нем преувеличена.
Соображения простые: "С" это есть подмножество С++. Потому оставаясь в рамках С++ но проводя сдержанность в выборе технических средств, можно было (теоретически) достичь того же результата. Т.е. заслуга в достигнутом именно Ваша, а не языка "C". Хотя он и играл роль сдерживающего фактора. Уверен в том что сейчас, используя свой опыт с "С", Вы смогли бы сделать не менее эффективный код на C++.

Есть задачи, которые просто идеально ложаться на ООП. Но их - абсолютное меньшинство. В примерах книжек именно эти случаи и приводятся. Правда, авторы не предупреждает, что этими примерами всё, собственно и ограничивается :D
В реальных задачах вообще встает проблема положить их на что-нибудь. Естественно, что при ограничении выбора "на что класть" задача будет решаться еще сложнее. ООП в этом плане не лучше и не хуже любой другой парадигмы программирования. И т.к. серебрянной пули нет, то фора будет у тех, кто владеет множеством парадигм программирования и, более того, умеет их комбинировать. Соответственно инструментальные средства должны позволять это.
К сожалению, на практике приходится искать компромиссы между "красиво положить на подходящую парадигму", производительностью решения, производительностью написания кода, возможностями команды разработчиков, взглядами на проблему начальства, прытью продажников и т.п.

Естественно, примеры в книжках по ООП преследуют лишь одну цель - продемонстрировать преимущества ООП в конкретных ситуациях, да и нередко на конкретных языках. При этом история происхождения ОО костыля зачастую остается за кадром повествования. Так например часть ОО паттернов в GoF можно охарактеризовать фразой "моделирование отсутствующих в языке функций высших порядков с помощью подручных средств".
 
Сверху