2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4, 5, 6  След.
 
 Разные языки. Преимущества и недостатки
Сообщение13.07.2006, 16:03 
Экс-модератор
Аватара пользователя


23/12/05
12047
Навеяно некоторыми высказываниями в этой теме.

В этой теме я хочу обратиться к людям, которые считают, что владеют каким-либо языком(языками) программирования более-менее сносно, с предложением кратко высказаться о тех языках, которые они знают. Основные преимущества по сравнению с другими языками (именно не другим, а другими - вообще) или же недостатки. Красивые (компактные и эффективные) коды в качестве иллюстративных примеров очень приветсвуются. В идеале ответ строится так:
"Язык такой-то нацелен в основном на применение там-то, в связи с этим обладает такими-то преимуществами. Например, вот такая непростая задачка решается здесь легко и красиво, смотрите... Далее небольшой код этой программки... Однако проблемы возникают при...

Но это так - только пожелание, а как пойдет обсуждение, будет видно. Только, чур, не спорить, какой язык лучше, какой хуже.

 Профиль  
                  
 
 
Сообщение13.07.2006, 20:19 


21/03/06
1545
Москва
Предлагаю к вниманию страничку моего знакомого, знающего в разной степени если не все, то очень многие языки, и сделвшего этот интересный ресурс. К сожалению, сейчас он доступен только на англ. языке. На страничке представлены различные алгоритмы нахождения чисел Фибоначчи, на многих, в т.ч. экзотических языках. Приведено сравнение скорости работы конечных программ, скомпилированных(транслированных и т.п.) в различных средах разработки. Исходные тексты написаны с использованием максимально родных, специфичных данному языку, средств. Посмотрите исходные коды, сравните длину реализаций. В общем, мне было в свое время интересно это почитать, подумать.

http://www.cubbi.org/serious/fibonacci.html

 Профиль  
                  
 
 
Сообщение13.07.2006, 23:00 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Я посмотрел немного, и вывода два -- во первых, огромная работа, и весьма любопытная притом. Во-вторых, лично у меня результаты вызывают недоверие -- ну, хотя бы потому, что на Ассеблере автор либо программирует плохо, либо намеренно пользовался псевдо-ЯВУ соглашениями о связях. Я готов предоставить куда более шустрые программы... (по крайней мере, 1A).

 Профиль  
                  
 
 
Сообщение14.07.2006, 13:33 
Экс-модератор
Аватара пользователя


23/12/05
12047
e2e4 писал(а):
Предлагаю к вниманию страничку моего знакомого...

Спасибо. Действительно, любопытная страничка и знакомый действительно провел большую работу, НО: я не хотел бы сравнивать разные языки на одной и той же задаче - разные языки имеют разное назначение; мне как раз интересно выявить, какой язык для чего предназначен, - в какой области его можно эффективно использовать. Я, как наверное большинство уже поняло, предпочитаю MatLAB, хотя немножко владею и некоторыми другими языками. Как-нибудь дойдут руки - напишу, что я думаю о MatLAB-е.

незваный гость писал(а):
готов предоставить куда более шустрые программы

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

 Профиль  
                  
 
 
Сообщение14.07.2006, 20:01 


21/03/06
1545
Москва
незванный гость писал(а):
Во-вторых, лично у меня результаты вызывают недоверие -- ну, хотя бы потому, что на Ассеблере автор либо программирует плохо, либо намеренно пользовался псевдо-ЯВУ соглашениями о связях. Я готов предоставить куда более шустрые программы... (по крайней мере, 1A).

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

 Профиль  
                  
 
 
Сообщение15.07.2006, 15:09 
Заслуженный участник
Аватара пользователя


16/03/06
406
Moscow
Джава.

На языке очень хорошо реализована модель объектно-ориентированного программирования (ООП).

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

Недостатки: сравнительная нелаконичность.

Но зато из-за этого: для Джавы сравнительно легко создавать системы автоматизированного программирования, всякие визуальные Билдеры и тому подобное.

 Профиль  
                  
 
 
Сообщение15.07.2006, 15:54 


21/03/06
1545
Москва
C, C++:
Что важно для меня - возможность с минимальными добавлениями к стандарту (несколько директив препроцессора, один-два специальных оператора) приспособить эти языки для программирования встраиваемых систем (embedded C, C++).
Язык C позволяет получить наиболее компактный/быстрый код, уступая только ассемблеру. Налавчившись, можно довольно точно оценивать кол-во тактов процессора, требуемых для исполнения той или иной конструкции. 90% переносимость кода на другие системы/компиляторы.
Язык C++ немного уступает C по эффективности программного кода, зато дает гораздо более гибкие возможности, особенно проявляющиеся при написании сложных программ, включающих интерфейс с пользователем, быза данных и т.п. Множество языковых лексем дает необычайно инетерсные возможности написания кода, защищенного от возможных ошибок, например конецепция "умных указателей". Одна из наиболее полной реализаций принципов ООП.

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

Недостатки языка C++: совместимость с C на урвоне синтаксиса привела к огромной путанице в языке. Чтобы определеть четко, как интерпретировать ту или иную конструкцию языка, необходимо иметь большой опыт проб и ошибок, обращаться к стандартам и руководству по среде программирования. Некоторый дополнительный относительно языка C объем программного кода/кода данных в конечной программе для реализации концепции ООП. Но по относительным затратам ресурсов грамотный компилятор C++ конечно с лихвой обставит иные ООП-языки, отчасти благодаря тому, что совершенствование компиляторов C++ происходит гораздо чаще.

Общий вывод, ИМХО:
язык C - хорошая замена ассемблеру в случае реализации критичных к эффективности задач.
язык C++ - огромная гибкость, наряду с совместимостью со стандартом C, позволяет его применять во всех областях, где применим C, с возможностью дальнейшего развития проекта, написания программы несколькими программистами, возможностью, как было отмечено выше, легко разрабатывать под данный язык среды быстрого программирования, как например Borland Builder.

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

 Профиль  
                  
 
 
Сообщение16.07.2006, 01:15 


13/07/06
68
Интересный вопрос, хотя и очень запутанный. К сожалению, вокруг этого вопроса традиционно собирается черезвычайно много суеверий, необъективных мнений и откровенно маркетингового бреда. Например, известный миф о преимуществах ООП. Повторное использование кода при его применении нисколько не выше, чем при процедурном подходе, зато ООП предполагает намного более квалифицированный дизайн проекта.

С - сравнительно прост для изучения, но из-за довольно низкого уровня очень сложен в работе. Идеально подходит для написания малых кусков кода, в частности в системном программировании. В 99% случаев его использования (прикладые задачи) применён явно не по назначению.

С++ - скудый, зато очень запутанный и сложный для изучения и для работы. Дело осложняется ещё и тем, что далеко не каждая задача легко и просто выражается в терминах объектов. Худо-бедно может применяться в объектных средах, но низкий уровень, всюду торчащие уши совместимости с С и вопиющие нелепости архитектуры не позволяют хоть в сколько-нибудь полной мере использовать ООП и даже свойства самого языка. Практическая ценность близка к 0.

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

Erlang - вролне годится для построения высоконадёжных программ. Особенно эффективен ИМХО в программах с активным взаимодействием по сети. Сложную логику на нём реализовать ИМХО было бы трудновато. Наверное хорошо подхошёл бы для прикладных программ.

Common Lisp - универсальный язык высокого уровня. Благодаря своему основному недостату - необычному синтаксису, крайне прост в изучении и работе. Остальные недостатки - куча несовместимых реализаций и малая распространённость. Достоинства - высокий уровень, существование как интерпретируемых так и компилируемых реализаций, развитые средства метапрограммирования.

Pascal (Delphi), Basic - первоначально задумывались как языки для обучения программированию. Крайне неудачная мысль создавать специально для этого упрощённые языки: нормально по ним всё равно ничему не научишся, а для работы слишком скудны. Добавленные впоследствии костыли одновременно сделали их чуть более приемлемыми для работы, подняли по сложности выше "полновесных" С, С++, и придали ряд уродливых черт. Для любой задачи самые плохие альтернативы. Добропорядочному джентльмену пристало держаться от них подальше.

FORT - пригоден для создания программ управления аппаратурой. Низкая читаемость программ не очень предрасполагает использовать этот язык, мощный и эффективный, ни в системном ни в прикладном программировании.

Lua, Scheme - встроенные языки написания сценариев. Один С-подобен по синтаксису, второй - диалект Lisp. Хорошая практика - создавать малые но эффективные части программ на специализированных языках и связывать их чем-то вроде этого, но к сожалению о такой практике мало кто слышал.

PHP - на этом можно слабать страничку-другую динамического HTML. Большинство практических задач ему вполне по силам, но тому, кто захочет делать на нём сколько-нибудь крупный проект нужно сразу выдавать медаль героя труда и рубашку с рукавами до улицы.

С# - Отличный пример отвратного дизайна языка прграммирования. Кто-то недобрый решил, что труд программиста слишком лёгок и решил собрать в одном языке все существующие костыли и подпорки. Может применяться в кунсткамерах уровня не ниже областной, балаганах, в качестве мишени для метания дротиков, и ещё в ряде случаев, только не в программировании.

Brainf*ck - Название говорит само за себя. Язык для тех, кто хочет хорошо поразвлечься. Значительно проще в изучении, чем Delphi и Visual Basic, и ненамного удобнее их в работе. Случаи практического использования однако лично мне неизвесны.

 Профиль  
                  
 
 Re: Разные языки. Преимущества и недостатки
Сообщение16.07.2006, 09:30 


14/07/06
1
Long Island
незваный гость писал(а):
:evil:
Я посмотрел немного, и вывода два -- во первых, огромная работа, и весьма любопытная притом.

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

Вот e2e4 уже ответил за меня, но я добавлю для аудитории что основной результат той веб-странички - это демонстрация того в рамках одной идеологии все языки, по большему счёту, одинаковы. А тесты на скорость - это бесплатное развлекательное приложение.

photon писал(а):
"Язык такой-то нацелен в основном на применение там-то, в связи с этим обладает такими-то преимуществами. Например, вот такая непростая задачка решается здесь легко и красиво, смотрите... Далее небольшой код этой программки... Однако проблемы возникают при...

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

А для развлечения, вот вам язык в коллекцию:

Язык APL нацелен в основном на применение в задачах, требующих выполнения сложных математический операций над многомерными массивами разнородных данных. В настоящее время активно используется инвестиционными банкирами, экономистами, нефтяниками, и где-то в медицине.
Например все простые числа от 1 до R получаются вот так (это не самый оптимальный способ, просто пример того как выглядит функция на APL): Изображение
(здесь сначала строится вектор от 2 до R (R, стрелка влево, 1, стрелка вниз, йота, R), потом строится матрица произведений его компонентов (R, кружочек, точка, крестик, R), потом строится булевый вектор в котором true стоит на месте тех элементов R, которые присутствуют в матрице (R, значёк принадлежности), над булевым вектором делается отрицание (тильда), и из вектора от 2 до R выбираются элементы, стоящие на тех местах, в которых в булевом векторе стоит true.)

 Профиль  
                  
 
 
Сообщение17.07.2006, 12:28 
Экс-модератор
Аватара пользователя


23/12/05
12047
MatLAB.
На мой взгляд, это очень неплохая комбинация математического пакета и языка программирования - нацелен преимущественно на численное моделирование, хотя поддерживает и много чего другого.
Среди неоспоримых преимуществ: а) простота в освоении его азов - не требует каких-то сложных подготовительных операций, объявлений переменных и т.д.; б) хорошая эффективная работа с матрицами; в) удобный help с примерами, некоторой теоретической информацией, ссылками на литературу; г)колоссальное количество готовых функций для самых разнообразных мат.(и не только) задач; д) большое количество toolbox-ов для решения специфических задач; е) Хорошие средства для построения графиков и даже анимашек, если сравнивать с др. мат.пакетами; ж) открытый код многих готовых функций (но не всех); з) Возможность стыковки с С и с FemLAB; и) работа с комплексными числами к) возможность нормально работать с переменными, значения которых равны inf (бесконечность)и NaN (не число) и л) удобные средства отладки, мне в частности нравится опция "Stop if error" - выполняет функции пока не дойдет до строки, где ошибка, и на ней остановится - можно посмотреть значения всех переменных в этой точке без использования инструментов типа watch и многое-многое другое.

Из недостатоков: 1) хотя код и открыт, в готовых стандартных "чужих" кодах порой весьма сложно разобраться; 2) иногда бывают проблемы с типами данных: для чисел используется double, что для больших массивов требует много памяти, даже если double-точность нам не нужна, с другой стороны - есть уникальный и часто используемый в данном языке тип "ячейка".

Например задача: перемножить матрицы $\left[ {\begin{array}{*{20}c}
   1 & 2 & 3 & 4 & 5  \\
   6 & 7 & 8 & 9 & {10}  \\
   1 & 2 & 3 & 4 & 5  \\
   6 & 7 & 8 & 9 & {10}  \\
   1 & 2 & 3 & 4 & 5  \\

 \end{array} } \right]\left[ {\begin{array}{*{20}c}
   1 & 2  \\
   1 & 2  \\
   1 & 2  \\
   1 & 2  \\
   1 & 2  \\

 \end{array} } \right]$. Результат транспонировать и каждый элемент разделить на сумму всех элементов, затем отобразить графически. Код можно записать в одну строку, но я нарисую в две:
Код:
a=([1:5;6:10;1:5;6:10;1:5]*[1 2;1 2;1 2;1 2;1 2])';
bar3(a/sum(sum(a)));

И получим вот такую картинку:
Изображение

 Профиль  
                  
 
 
Сообщение18.07.2006, 04:34 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Позволю себе пару наблюдений общего характера о процедурных языках, которые на данный момент они составляют основное направление в коммерческом программировании:

C++ (и C) устарели, и будут вытесняться из практики современного программирования подобно ассемблеру в 70-80-е годы. Примерами современных языков (при всем их различии и сходстве, достоинствах и недостатках) с моей точки зрения являются C#, Java, Visual Basic (включая, как это не странно, VB6) и Python. Всем им (в большей или меньшей степени) свойственны общие черты:
  • доступ к объектам строго по ссылке (и невозможность создания объекта на стеке);
  • наличие синтаксически интегрированных в язык контейнеров и итераторов;
  • сборка мусора (и отсутствие явного освобождения памяти);
  • интегрирование построения UI (user interface) программой.
Следует заметить, что выбор интерпретации или компиляции является абсолютно несущественным с концептуальной точки зрения; неслучайно C# и Java допускают компиляцию. Интеграция же UI порождает весьмя своеобразную картину, когда автор перестает работать с текстом программы. В некотором смысле, начинается авторское манипулирование програмными объектами в момент разработки. Автор зачастую даже нее осознает, что его манипуляции кнопками, списками, меню и прочим -- всего лишь изощренный способ неявного редактирования более или менее скрытого текста программы. Мне представляется, это начало существенного направления в развитии. С другой стороны, развитие языков, компиляции логично приводит к желанию спросить систему разработки, как она поняла написанную (или, точнее, разработанную) программу. Увы, это далеко не всегда ясно из текста. Предлагамые изменения языка С++ (такие, как auto) лишь усугубят это желание. С другой стороны, рудимент этой возможности спросить уже появился в immediate view VB (а впрочем, теперь и других языков MS).

~~~
Mathematica -- входной язык одноименной системы Wolfram Research. "Плоть немощна, но дух силен". Так и в этом случае, привлекательной стороной является мощь back-end'а -- повидимому, едва ли не лучшей системы символьных вычислений на данный момент. Но вот язык безнадежно отстал. Концепции сохранились с 80-х и многие вещи выглядят уже не просто архаично, а неестественно (а для новичка, не знающего истории программирования и вовсе странно).

 Профиль  
                  
 
 
Сообщение18.07.2006, 05:38 


13/07/06
68
Цитата:
C++ (и C) устарели

С - не может устареть. В своей нише ему пока замены нету. И наверное уже не будет. С++ из-за кучи врождённых дефектов никогда особо широко не использовался.
Цитата:
# доступ к объектам строго по ссылке (и невозможность создания объекта на стеке);
# наличие синтаксически интегрированных в язык контейнеров и итераторов;
# сборка мусора (и отсутствие явного освобождения памяти);

Это всё есть уже в лиспе, которому от роду лет 50 наверное. Там кстати, есть и то, чего в перечисленных просто нету.
Цитата:
# интегрирование построения UI (user interface) программой.

А вот это есть только в самых примитивных навроде VB, и это правильно. Потому что 1) это сугубо дело библиотеки 2) весьма неразумно не отделять логику от интерфейса.

Цитата:
В некотором смысле, начинается авторское манипулирование програмными объектами в момент разработки.

Эту мысль я несколько недопонял честно говоря... В любом случае, до окончания этапа разработки манипулировать чем-то - напрасная потеря времени. Можно "доманипулироваться" до того, что процесс разработки придётся начать заново.
Цитата:
спросить систему разработки, как она поняла написанную (или, точнее, разработанную) программу

Это как? Программа в принципе не может допускать двоякого толкования. Несоответствие понятий машины и разработчика о том, что должна делать программа, выявляется в процессе отладки.

Цитата:
Mathematica -- входной язык

ИМХО это всё-таки слишком узкоспециализированная система, чтобы считаться полноценным языком программирования.

Цитата:
Примерами современных языков (при всем их различии и сходстве, достоинствах и недостатках) с моей точки зрения являются C#, Java, Visual Basic (включая, как это не странно, VB6) и Python.

Так что это всё скорее модные на каком-то этапе языки. Реально они не несут никаких новых концепций.

Основное назначение ЯП - это представление возможности выразить прикладную задачу в терминах, которые может адекватно воспринимать вычислительная техника. Для этого есть несколько принципиально разных подходов:

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

- на предыдущем принципе создать узкоспециализированную систему, изначально работающую в терминах прикладной задачи. Был бы хороший подход, если бы разнообразие прикладных задач не было бы так велико. Для ряда наиболее частоупотребимых задач это всё-таки работает, и работает хорошо. MatLab, Autocad...

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

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

Мне кажется очевидным, что наиболее перспективны два последних принципа. Перечисленные модные языки справляются с ними из рук вон плохо. Извесно, в программировании не появилось ничего принципиально нового за последние 50-60 лет, но практический интерес к большей эффективности начинает появляться только сейчас, ведь мощность вычислительной техники выросла, и соотвественно вырос и спрос с неё. Продолжать использовать подход, предлагаемый модными ЯП - это примерно то же самое, что пытаться вскипятить цистерну воды на том же костерке, который давно уже и вполне исправно служил нам для кипячения чайника.

 Профиль  
                  
 
 
Сообщение18.07.2006, 06:46 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
bugmaker писал(а):
С - не может устареть. В своей нише ему пока замены нету. И наверное уже не будет. С++ из-за кучи врождённых дефектов никогда особо широко не использовался.

Ну-ну. Ассемблер, следуя этой логике, тоже не может устареть. :wink: А то, что С++ никогда особо широко не использовался -- это просто замечательно :lol:

bugmaker писал(а):
Это всё есть уже в лиспе, которому от роду лет 50 наверное. Там кстати, есть и то, чего в перечисленных просто нету.

Ничто не ново под Луной. Ни объекты в Лиспе, ни контейнеры там же... Между прочим, утверждение касалось не новизны этих черт в истории программирования, а характерности их присутствия в современном языке. (Например, того, как развивались механизмы распределения памяти -- common в Фортране, controlled в PL/1, malloc() в С, new в С++, и сборка мусора сейчас.)

bugmaker писал(а):
А вот это есть только в самых примитивных навроде VB,..

Люблю снобизм! А между прочим, в ряде отношений VB был революционным решением, фактически установившим новый стандарт...

bugmaker писал(а):
Цитата:
В некотором смысле, начинается авторское манипулирование програмными объектами в момент разработки.

Эту мысль я несколько недопонял честно говоря... В любом случае, до окончания этапа разработки манипулировать чем-то - напрасная потеря времени. Можно "доманипулироваться" до того, что процесс разработки придётся начать заново.

Поясняю. Когда Вы задаете через IDE аттрибуты кнопки, Вы фактически конфигурируете программный объект времени выполнения программы. Он может быть статическим (если кнопка существует в одном экземпляре) или клонироваться (например, несколько экземпляров формы). Более того, многие из задаваемых характеристик могут модифицироваться на лету. И все вместе это чем-то напоминает self (язык программирования). Немного продолжая, можно представить себе подобное конфигурирование и других объектов в программе. Отчасти, и оно уже реализовано (например, такие contol'ы как таймер или БД).

bugmaker писал(а):
Цитата:
спросить систему разработки, как она поняла написанную (или, точнее, разработанную) программу

Это как? Программа в принципе не может допускать двоякого толкования. Несоответствие понятий машины и разработчика о том, что должна делать программа, выявляется в процессе отладки.

Ну, во-первых, до отладки еще дожить надо. А пока программа не компилируется, а компилятор выдает что-то нечленораздельное, лично мне очень хочется задать ему вопрос: "ну хорошо, объясни мне, как ты понял эту конструкцию? Что я имел в виду, я знаю, теперь скажи, как ты ее разобрал..." Например, это весьма актуально с мнгоуровневыми template'ами и передачей/переопределением типов. (И все это станет еще интереснее, когда мы начнем писать auto ix = container.begin() )

bugmaker писал(а):
Извесно, в программировании не появилось ничего принципиально нового за последние 50-60 лет

Когда известно, дальше не доказательно :). Можно пожелать Вам пописать даже не на Фортране, а хотя бы на Алголе-58.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Я тоже считаю перспективными направлениями функциональное программирование и метапрограммирование, включая смешанные вычисления, generics всех сортов и многое другое. Вам нравиться красить "мир людей в черно-белый цвет", развешивать ярлыки "модный" et cetera -- Бог с Вами. Я наблюдаю, как в удачных языках господствует смешение парадигм. Например, в Python немало элементов функционального стиля, и они все больше усиливаются. И это обогащает палитру программиста (по сравнению с чисто ОО языками вроде Ruby). Абстрагирование же не обязательно ведет к функциональному подходу, скорее generic / template программированию, позднему связвыанию (binding).

(Полнота lambda-исчисления, как и полнота машины Тьюринга не убеждают меня что за функциональным программрованием светлое будущее. Вопрос не в том, можно ли выразить, вопрос -- как удобно выражать. Я же по душевной простоте предпочитаю инфиксный + многоместной add(). А много ли Вы видели языков с правильно определенным сравнением? ($a < b = c \leqslant d < f$) И ведь встречается в жизни...)

В конце концов, ЯП -- всего лишь инструмент для решения задачи. Соответственно, он и выбирается под задачу. И одна из них -- увеличение читаемости, понятности программ. write-only languages типа Forth могут существовать в весьма узких экологических нишах, когда компактность и быстродействие важнее всего остального.Там -- они короли (в стране слепых и кривой король). Можно, наверное, сказать, что ЯП лишь зеркало, в котором мы хотим отразить предметную область.

С этой точки зрения становятся видны недостатки чисто функционального подхода. Слишком уж во многих задачах мы имеем дело со структуризацией объекта (определеие К-алгебры или формального языка через грамматику тому пример). Но строго объектная парадигма тоже не выход. Мы начинаем спотыкаться о нее как только нам нужно определить, скажем, групповую операцию -- вдруг выясняется, что инфикный плюс -- эта аттрибут пары, а совсем не одного из объектов, как учит Smalltalk. """Nothing is ever easy."""

 Профиль  
                  
 
 
Сообщение18.07.2006, 08:55 
Экс-модератор
Аватара пользователя


23/12/05
12047
незваный гость писал(а):
Ассемблер, следуя этой логике, тоже не может устареть
А он, как мне кажется, и не устарел - нашел свою нишу и там остался еще надолго - для всяких контроллеров и т.п., например.


Что-то в стороне остались языки баз данных. Никто не раскроет это направление? Я немножко программирую на FoxPro, но мне не с чем сравнивать его, потому что не владею другими языками БД, да и тут уровень у меня не очень высокий, чтобы делать серьезные выводы.

 Профиль  
                  
 
 
Сообщение18.07.2006, 09:17 


21/03/06
1545
Москва
Ассемблер не может устареть по определению, это единственно реализованный в железе процессора язык :). Другое дело, что для написания программ он используется все меньше и меньше.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 84 ]  На страницу 1, 2, 3, 4, 5, 6  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group