Здравствуйте, GlebZ, Вы писали:
R>>Во-первых, раз и навсегда — идея противопостовления структурного и функционального программирования — это крайне дикая идея. Функциональные языки, надо полагать, не вписываются в языки "структурные"? GZ> представь себе если в SML или лиспе уберут списки и разрешат использовать состояние внутри функции.
В SML можно использовать состояние внутри функции
Здравствуйте, AVC, Вы писали:
AVC>Конечно, "оберонщики" на rsdn.ru во многом сами виноваты. Нас здесь всего пара человек (Сергей да я), а такой стойкий негативный эффект. AVC>Но некоторая "антипатия к Вирту" существует давно, и с нашими проделками на rsdn.ru не связана.
По-моему, Вирт все же больше относиться к академикам (где его достижения
действительно весьма большие), а не к практикам.
Паскаль был абсолютным хитом в свое время — хороший, продуманый, простой
язык. Он оказал влияние на кучу последующих языков, и до сих пор
используется для обучения. Одно это тянет на премию Тьюринга
Добавлю, что, возможно, именно Паскаль помог уйти от разработки монстров типа PL/1. Иначе, был бы сейчас какой-нибудь PL/3, объединяющий все самое худшее из всех течений в программировании.
AVC>Возможно, здесь какая-то (бессознательная) неприязнь к "конкуренту", или что-нибудь другое.
Вирт учит делать то, что можно так, как нужно. Однако в жизни большинство программистов делают то, что нужно так, как можно (сроки поджимают, из бюджета вываливаемся и т. д.). Вот именно с этим противоречием и связана критика его работ. (В скобках заметим, что сторонники Вирта в долгу не оставались. В прессе одно врема такой флейм шел — Священнъе войны отдыхают)
AVC>Главное, присоединяюсь к призыву критиковать не личности, а поступки и высказывания.
Здравствуйте, Игoрь, Вы писали:
И>Здравствуйте, minorlogic, Вы писали:
M>>Так вот в том то и дело что метку можно назвать хорошо а МОЖНО ПЛОХО , а return не допускает вольной интерпретации, логика его работы прозрачна. И>Ну и что из этого следует? Я же выше сказал, что и функцию МОЖНО ПЛОХО назвать, но главное что можно и хорошо.
Метки для goto гораздо сложнее назвать хорошо. Наиболее часто используемые имена выглядят так: end_if, end_loop, exit, start_loop, else_branch. А с учетом того, что метки в определенной области видимости должны быть уникальны, приходится извращаться с добавлением суффиксов. Это также создает проблемы при переносе какого-то участка кода в другое место: часто приходится переименовывать метки, из-за чего могут вноситься ошибки. Например,
во-втором goto exit1; может действительно подразумевался выход из двух вложенных циклов, а может кто-то просто забыл (при переносе кода) exit1 заменить на exit2.
Здравствуйте, eao197, Вы писали:
R>>В моей обычной практике я использую около 30 языков программирования. Среди них хватает и императивных и функциональных и логических и стековых и гибридов всего этого смешанных вместе.
E>Можно ли развить эту тему по-подробнее? E>Это действительно интересно, т.к. недавно я утверждал, что сложно одновременно использовать в проекте 3-5 языков (Re[2]: Предагаю мир!
). E>Но здесь цифра просто на порядок большая . Можно ли подробнее, что это за языки, для каких целей используются, как применяются, какие замечены достоинства/недостатки использования такого количества языков, используется ли это все в рамках одного проекта, какова численность команды и пр.?
E>Я думаю, что это будет интересно не только мне.
30 одновременно используемых в проекте — это явное преувеличение, ИМХО. Наверно имелось ввиду, что в разное время использует много языков, всего до 30 различных.
А вообще, у меня тоже практически каждый проект "разношерстный". Обычно 2 "главных" языка, и затем практически в любой проект автоматически добавляются SQL, HTML, JavaScript/DHTML, VBA, XML, Perl.
Иногда прикручиваются еще всякие скриптовые или специфические, типа Пролог, MatLab, Forth и т.д.
------
С подачи Редуктора заинтересовался Хаскелем, найти бы время на эксперименты с ним...
Здравствуйте, vdimas, Вы писали:
V>А вообще, у меня тоже практически каждый проект "разношерстный". Обычно 2 "главных" языка, и затем практически в любой проект автоматически добавляются SQL, HTML, JavaScript/DHTML, VBA, XML, Perl.
Если считать SQL, XML и HTML за языки программирования, то тогда счет может идти на сотни
V>Иногда прикручиваются еще всякие скриптовые или специфические, типа Пролог, MatLab, Forth и т.д.
А зачем? Можно ли примеры?
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
reductor wrote:
> C>Хороший программист о них, конечно, должен знать, но это скорее просто > C>background knowledge (как мат.анализ или алгебра). > Да ладно. Конечно не должен! > Хороший программист — это когда в слюнявчике, утка, детское питание по > катетеру, мышь без колеса и клавиатура с одной кнопкой — для вызова > сиделки с проджект менеджером.
А если серьезно, где теория необходима прикладному программисту?
Например, я не помню, чтобы мне где-то понадобилось использовать
алгоритмы быстрой факторизации чисел или доказывать правильность алгоритма.
Полезного из теории могу вспомнить O-нотацию для оценки скорости, но я
до нее еще в школе сам додумался Я даже трехмерной графикой вполне
успешно занимался без знаний подробностей работы алгоритма триангуляции
Делоне или критериев оптимальности разбиения.
Бывают задачи (типа цифровой обработки сигналов, например), где без
теории — никуда. Но это уже исключения, подтверждающие правило.
Здравствуйте, eao197, Вы писали:
E>Здравствуйте, reductor, Вы писали:
R>>А Вирт? Язык Оберон. Даже не смешно. R>>То есть реально я вообще затруднюсь сказать что сделал Вирт в CS после своего участия в группе алгола. R>>40 лет одна и та же песня.
E>Блин, ну как же много желающих кинуть в Вирта камень! Извините за ненормативную лексику, но это просто офигеть можно (с заменой офигеть на соответствующий нецензурный термин по вкусу).
E>И главное кто?
E>Кто такой reductor? Кто такой AVC? Кто такой eao197?
E>Кто про нас знает за пределами RSDN?А ведь про Вирта знают...
Герострат тоже известен.
E>Если кому-то кажется, что Вирт оставил малый след в программировании, то это его личное дело. Но вот смеятся над ним пусть будут те, кто создал что-нибудь аналогичное Паскалю, с выросшими из него Modula-ми, Oberon-ми, и выросшими из всего этого Object/Component Pascal-ями, Delphi-ями и Ada-ми.
Если бы я был создателем Паскаля, я бы не стал этим гордится.
Здравствуйте, Дарней, Вы писали:
Д>Я просто предположил.
Да ладно, бывает. Однако в этом топике идет, в общем-то, нормальная дискуссия. Не хотелось бы превращать ее в очередную священную войну, плавно переходящую в виртуальный мордобой.
Здравствуйте, Privalov, Вы писали:
P>Да ладно, бывает. Однако в этом топике идет, в общем-то, нормальная дискуссия. Не хотелось бы превращать ее в очередную священную войну, плавно переходящую в виртуальный мордобой.
Здравствуйте, eao197, Вы писали:
E>Здравствуйте, reductor, Вы писали:
R>>В моей обычной практике я использую около 30 языков программирования. Среди них хватает и императивных и функциональных и логических и стековых и гибридов всего этого смешанных вместе.
E>Можно ли развить эту тему по-подробнее?
Это был ответ на предположение, что я не знаю "императивных" языков.
Я буквально ответил, что знаю и много. Речь не про "в одном проекте"
E>Это действительно интересно, т.к. недавно я утверждал, что сложно одновременно использовать в проекте 3-5 языков (Re[2]: Предагаю мир!
Сложно, если кто-то в команде не знает какого-то языка и не желает его осваивать, а это необходимо.
Иногда это можно уважать и что-то придумать, иногда — изменяется состав команды.
В любом случае, у меня нет оснований считать, что количество языков в проекте каким-то образом влияет на его "сложность" при разработке. Хотя, возможно, более вероятно, что проблем будет больше при поддержке, если в ней участвует малое количество не очень восококвалифицированных программистов.
E>Но здесь цифра просто на порядок большая . Можно ли подробнее, что это за языки, для каких целей используются, как применяются, какие замечены достоинства/недостатки использования такого количества языков, используется ли это все в рамках одного проекта, какова численность команды и пр.?
Ничего, если я не буду перечислять все 30, что могут быть?
Одновременно в одном коммерческом проекте могут использоваться 3-5 полноценных, тьюринг-полных языков, особенно в клиент-серверном случае.
Как пример — Java/Prolog/Scheme/Python (Все могут быть и в пределах одной java-машины) на сервере и Smalltalk, Javascript, Tcl на клиенте. + еще VB на клиенте внутри Ms Office
Это конечно не считая кучи domain specific языков для конфигурации, интеропа, DB, GUI и тп
Вообще в чем проблема, квалифицированному программисту выучить любой язык, если очень нужно — полдня максимум
Команды 2-5 человек
Еще замечу, что количество человек в команде не такую уж и большую роль играет. 2 опытных человека используя правильные инструменты сделают работу быстрее, чем 20 не таких опытных с неподходящими инструментами.
Здравствуйте, reductor, Вы писали:
R>Как пример — Java/Prolog/Scheme/Python (Все могут быть и в пределах одной java-машины) на сервере и Smalltalk, Javascript, Tcl на клиенте. + еще VB на клиенте внутри Ms Office
В чем преимущество связки Java+Prolog?
В каких задачах это может потребоваться?
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, Дарней, Вы писали:
Д>насколько я помню, EBNF не добавляет к возможностям BNF ничего нового, кроме небольшого количества синтаксического сахарка Д>в общем, не то это достижение, которым стоит гордиться
Во первых я хотел показать роль. Я не знаю насколько сам Вирт гордится таким достижением, но то что это сделал он — это факт. Я тоже не стану говорить насколько это было важно. Для меня важнее было, что оно есть. Во-вторых, Вирт с его страстью к упрощению здесь сыграл положительную роль. И я сомневаюсь что кто-то меня опровергнет.
Здравствуйте, Глеб Алексеев, Вы писали:
GZ>> представь себе если в SML или лиспе уберут списки и разрешат использовать состояние внутри функции. ГА>В SML можно использовать состояние внутри функции
Конкретнее.
ГА>>В SML можно использовать состояние внутри функции GZ>Конкретнее.
В SML и (особенно) в O'Caml есть императивные конструкции (в OCaml есть даже for- и while- циклы).
Вот пример как не надо, но можно делать:
fun imperative fact (n:int) =
let
val result = ref 1
val i = ref 0
fun loop () =
if !i = n then
()
else
(i := !i + 1;
result := !result * !i;
loop ())
in
loop (); !result
end
Конечно, все это выглядит достаточно некрасиво и неудобно, чтобы в таком духе писать программы полностью, но в низкоуровневом коде встречается (в реализации массивов, хэш-таблиц, потоков I/O).
Весь ввод/вывод в ML является императивным. В стандарте языка есть библиотека функционального ввода-вывода, но реализации ее я не видел (ни в Moscow ML, ни в SML/NJ).
Кроме того, в базовых библиотеках как SML, так и OCaml есть массивы и хэш-таблицы — mutable структуры данных. Ну и т.д., reference cells — это и есть, собственно, "состояние внутри функции".
Что характерно, при этом клиентский код, который пользуется потоками, массивами и т.д., становится императивным без явного использования ref cells и оператора :=. Поэтому с одной стороны, языки семейства ML более легки в освоении для программистов-императивщиков и считаются более практичными, т.к. ввод-вывод нужен везде, и интерактивность, из которой следует глобальное изменяемое состояние, нужна очень часто; с другой стороны, нужна дисциплина, чтобы не перечеркнуть разом все преимущества ФП (в Хаскеле IO живет в гетто, выйти из которого не позволяет система типов).
Здравствуйте, Дарней, Вы писали:
Д>на самом деле, Вирт сам вызывает антипатию к себе своими резкими, необоснованными и порой просто невежественными высказываниями Д>в частности, что Д>1. Ява — это Оберон, испорченный сишным синтаксисом
Имеет право. Он Оберон-то лучше знает. Д>2. Функциональные языки никому не нужны, и вообще, они — просто подмножество императивных языков
Где он такое говорил? Ссылку. Я слышал от него другие слова. Д>3. Все современные языки ни на что не годятся, и только Оберон рулит неимоверно.
Это я тоже не слышал в его исполнении. Д>Потому что его синтаксис очень простой, и это одним махом решает все существующие проблемы программирования.
Почти так была информация. Только откуда взялось все существующие проблемы? Ты сам своими словами пытаешься сделать из него идола. Я сомневаюсь что он такого мнения о себе. Он достаточно интересный старикашка с весьма интересными мнениями, но бреда от него я не заметил. Д>4. Оберон никто не использует, потому что ему нигде не обучают. И вообще, все вокруг сговорились, чтобы вытеснить Оберон с рынка. Д>и так далее, и тому подобное
1. Вообще-то Оберон кое-где изучают.
2. Лично я ему такое высказывание прощу(хотя дословно оно было другое). Обидно человеку. Но вот невежественными их назвать не могу.
GZ>>Поэтому предложил бы объявить людей, которые являются Нобелевскими лауреатами и лауреатами премии Тьюринга священными коровами. И баннить наезды на них по полной так же как и наезды на личности на rsdn. То есть добавить правило что личности из списка Премии Тьюринга священны, и личные нападки на этих людей есть нападки на все IT сообщество. Можно наезжать на поступки, нельзя наезжать на личность. Д>Может быть, все-таки не станем устраивать идолопоклонничество?
Не идолопоклончество. А уважение. Это разные вещи.
Вот это и мне непонятно. С одной стороны, разбирая ту или иную задачу, Вирт прежде всего думает о правильной организации данных, т. е. такой, чтобы их было как можно проще обрабатывать. Т. е. данные первичны, программный код — вторичен. (См. например, "Алгоритмы + структуры данных"). И тут же требование писать служебные слова в Обероне большими буквами. По этому поводу я высказался как-то здесь
. Явное противоречие.
Д>Может быть, все-таки не станем устраивать идолопоклонничество?
Можно обобщить изречение, услышанное мною на еще на 1-м курсе: "Не сотвори себе кумира из начальника. Знай, что ты и сам не дурак". Однако, я против личных нападок.