Re[19]: Goto's are evil?
От: GlebZ Россия  
Дата: 30.11.05 14:08
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:

ГА>
ГА>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).
+1

ГА>Весь ввод/вывод в ML является императивным. В стандарте языка есть библиотека функционального ввода-вывода, но реализации ее я не видел (ни в Moscow ML, ни в SML/NJ).

Все общение с железом императивно.

ГА>Кроме того, в базовых библиотеках как SML, так и OCaml есть массивы и хэш-таблицы — mutable структуры данных.

Но они передаются но не хранятся. Все что нельзя редуцировать
ГА>Ну и т.д., reference cells — это и есть, собственно, "состояние внутри функции".
Согласен.

ГА>Поэтому с одной стороны, языки семейства ML более легки в освоении для программистов-императивщиков и считаются более практичными

Вот это абсолютно точно. Не знаю про программаистов имеративщиков, но строгость SML меня поразила. После пары подходов к CLISP мне хотелось повесится.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Goto's are evil?
От: GlebZ Россия  
Дата: 30.11.05 14:27
Оценка: +4
Здравствуйте, шапокляк, Вы писали:

Ш>Я тут конешно новенькая и меня легко затоптать. Но сложите 2 и 2. Лауреаты премии Тьюринга люди не святые. Но коли с ними переходят на личности то уж никак не от большова ума. И што тут спорить? Ну а научный уровень Линуса Торвальдса можно даже не обсуждать. Хотя я не удивлюсь если его протолкнут в лауреаты Тьюринга. Такова жизнь.

Честно говоря, я бы дал премию Страуступу. Можно долго мучится вопросом насчет недостатков и достоинств языка и научной ценности, но то что его детище кардинально повлиял на все сообщество на десятилетия — отрицать нельзя. Это влияние нельзя переоценить.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Goto's are evil?
От: GlebZ Россия  
Дата: 30.11.05 14:27
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Паскаль был абсолютным хитом в свое время — хороший, продуманый, простой

C>язык. Он оказал влияние на кучу последующих языков, и до сих пор
C>используется для обучения. Одно это тянет на премию Тьюринга
+1

C>Вот только потом у Вирта начались непонятки с Модулами и Оберонами — они

C>фактически уже не добавляли ничего нового, по сравнению с уже
C>существовавшими языками.
Вирта сильно недолюбливали за то что он был наиболее последовательным и рьяным критиком Паскаля. Он его считал промежуточным звеном для построения промышленного языка.

C>Вирт успешно пропустил распространение

C>объектно-ориентированного,
Честно говоря он ничего не пропускал. Ты судишь по Паскалю. Просто он занялся компонентным программированием. И задолго до того как компонентное программирование стало промышленным. Просто человеку сложно понять что между требованиями к научным языкам и промышленными совершенно разные. И процесс внедрения тоже разный.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[20]: Goto's are evil?
От: Глеб Алексеев  
Дата: 30.11.05 14:41
Оценка:
Здравствуйте, GlebZ, Вы писали:

ГА>>Весь ввод/вывод в ML является императивным. В стандарте языка есть библиотека функционального ввода-вывода, но реализации ее я не видел (ни в Moscow ML, ни в SML/NJ).

GZ>Все общение с железом императивно.
Тут надо поосторожнее. Дело не в железе, т.к. можно докатиться до логики "раз все языки компилируются в ассемблер, они по сути императивны". Тут дело в мат. модели. В ML решили не усложнять: операции, изменяющие состояние, имеют тип unit, порядок выполнения инструкций гарантирован, но практически любая функция может иметь побочные эффекты (хотя естественно, их избегают без необходимости):
let add_with_side_effect x y =
    let ret = x + y in
    (print_int ret; ret)
        (* вызов print_int никак не влияет на тип функции,
           это по-прежнему int->int->int  *)

Как быть в чисто функциональном языке? А особенно в ленивом, в котором порядок вычислений определяется компилятором и зависимостью по данным?
Очень грубо говоря, выход такой: любая функция с побочными эффектами считается функцией, которая вычисляет новое состояние мира из старого, т.е. из императивного кода
do_smth1();
do_smth2();
do_smth3();

получается
world1 = do_smth1 world0
world2 = do_smth2 world1
world3 = do_smth3 world2

Где-то смутно ощущаю, что IO-монада и do-нотация в Хаскеле примерно это и делает, только с синтаксическим сахаром (просьба ногами не бить, с теорией категорий не знаком, с Хаскелем знаком по туториалам и паре самостоятельно выполненных "Hello cruel world" в Hugs, это мое интуитивное понимание на сегодняшний день. А т.к. Haskell is a language of choice for discriminating hackers, я с ним еще обязательно разберусь получше ).

ГА>>Кроме того, в базовых библиотеках как SML, так и OCaml есть массивы и хэш-таблицы — mutable структуры данных.

GZ>Но они передаются но не хранятся. Все что нельзя редуцировать
Вот здесь не уверен, что понял тебя.

ГА>>Поэтому с одной стороны, языки семейства ML более легки в освоении для программистов-императивщиков и считаются более практичными

GZ>Вот это абсолютно точно. Не знаю про программаистов имеративщиков, но строгость SML меня поразила. После пары подходов к CLISP мне хотелось повесится.
Надо, Федя, надо . Если интересуешься ФП, без SICP никуда, а там не обойтись без Лиспа (точнее, Scheme).
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[18]: Goto's are evil?
От: Cyberax Марс  
Дата: 30.11.05 14:44
Оценка:
GlebZ wrote:

> C>Вот только потом у Вирта начались непонятки с Модулами и Оберонами —

> они
> C>фактически уже не добавляли ничего нового, по сравнению с уже
> C>существовавшими языками.
> Вирта сильно недолюбливали за то что он был наиболее последовательным
> и рьяным критиком Паскаля. Он его считал промежуточным звеном для
> построения промышленного языка.

И тем не менее, именно Паскаль (с небольшими добавлениями в виде
break/continue, типизированых констант и т.п.) стал промышленным языком.
Модулы и Оберон уже не имели даже близкого по масштабу влияния на индустрию.

> C>Вирт успешно пропустил распространение

> C>объектно-ориентированного,
> Честно говоря он ничего не пропускал. Ты судишь по Паскалю. Просто он
> занялся компонентным программированием.И задолго до того как
> компонентное программирование стало промышленным.

Промышленное КОП появилось с появлением VB. И фактически в области
визуального программирования и осталось. Влияния Вирта тут я уже не вижу
— скорее развитие логически шло от визуальных контролов на формах к их
представлению в виде отдельных пакетов.

--
С уважением,
Alex Besogonov (alexy@izh.com)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[11]: Goto's are evil?
От: Трурль  
Дата: 30.11.05 14:47
Оценка:
Здравствуйте, reductor, Вы писали:

R>Вообще в чем проблема, квалифицированному программисту выучить любой язык, если очень нужно — полдня максимум


Тут недавно на смех подняли человека, который утверждал что знает C++, попрограммировав на нем всего год.
Где же правда
Re: Goto's are evil?
От: Banch  
Дата: 30.11.05 14:58
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>For example, it is quite common to have conditionals THAT DO NOT NEST.


я так и не понял где тут место goto, можно пример написать?
Re[21]: Goto's are evil?
От: reductor  
Дата: 30.11.05 15:04
Оценка: 6 (1)
Здравствуйте, Глеб Алексеев, Вы писали:

ГА>world1 = do_smth1 world0

ГА>world2 = do_smth2 world1
ГА>world3 = do_smth3 world2
ГА>[/code]
ГА>Где-то смутно ощущаю, что IO-монада и do-нотация в Хаскеле примерно это и делает, только с синтаксическим сахаром (просьба ногами не бить, с теорией категорий не знаком, с Хаскелем знаком по туториалам и паре самостоятельно выполненных "Hello cruel world" в Hugs, это мое интуитивное понимание на сегодняшний день. А т.к. Haskell is a language of choice for discriminating hackers, я с ним еще обязательно разберусь получше ).

Нет-нет, в случае IO Monad все совсем не так, все гораздо проще
я чуть попозже напишу поподробнее почему ни состояния ни ввод-вывод не являются никакой проблемой в хаскеле вообще и в любом языке в принципе, поддерживает он императивный ввод вывод или нет. Сейчас времени нет — там немного длинно получится.
Тема безумно интересная и важная.
Re[12]: Goto's are evil?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 30.11.05 15:04
Оценка:
Здравствуйте, Трурль, Вы писали:

R>>Вообще в чем проблема, квалифицированному программисту выучить любой язык, если очень нужно — полдня максимум


Т>Тут недавно на смех подняли человека, который утверждал что знает C++, попрограммировав на нем всего год.

Т>Где же правда

Тут есть люди, которые понимают, о чем идет речь в топике Стагнация?
Автор: Dmi_3
Дата: 13.11.05

Не удивлюсь, если для них действительно выучить любой язык -- задачка на полдня, максимум.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[22]: Goto's are evil?
От: Глеб Алексеев  
Дата: 30.11.05 15:08
Оценка:
Здравствуйте, reductor, Вы писали:

R>Нет-нет, в случае IO Monad все совсем не так, все гораздо проще

R>я чуть попозже напишу поподробнее почему ни состояния ни ввод-вывод не являются никакой проблемой в хаскеле вообще и в любом языке в принципе, поддерживает он императивный ввод вывод или нет. Сейчас времени нет — там немного длинно получится.
R>Тема безумно интересная и важная.
Ждем-с с нетерпением.
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[12]: Goto's are evil?
От: reductor  
Дата: 30.11.05 15:19
Оценка: 80 (4) +2
Здравствуйте, Трурль, Вы писали:

Т>Здравствуйте, reductor, Вы писали:


R>>Вообще в чем проблема, квалифицированному программисту выучить любой язык, если очень нужно — полдня максимум


Т>Тут недавно на смех подняли человека, который утверждал что знает C++, попрограммировав на нем всего год.

Т>Где же правда


Правда и там и там.


Человек, для которого С++ — первый или второй язык программирования в жизни действительно не будет знать его хорошо даже за год (особенно, если не будет стараться проникнуть в язык поглубже).
Человек же, который знает необходимый набор классических (оказавших фундаментальное влияние на развитие других) языков + знаком с одним/двумя суперсовременными, выучит с++ очень быстро. Причем глубина его понимания запросто может оказаться побольше, чем у человека, который на с++ программировал 10 лет, но никаких языков больше не знает.
Ни один язык не является замкнутой системой — идеи и способы реализации кочуют туда-сюда и то, на понимание чего в случае первого знакомства требуется два месяца, человек эрудированный просто отметит про себя — ага, это как в языке x, а это как в x', но через механизм z из языка y

То же справедливо и для естественных языков. профессиональные лингвисты учат их очень быстро и так же забывают, когда отпадает необходимость.
Re[13]: Goto's are evil?
От: Глеб Алексеев  
Дата: 30.11.05 15:28
Оценка:
Здравствуйте, reductor, Вы писали:

R>Правда и там и там.

R>Человек, для которого С++ — первый или второй язык программирования в жизни действительно не будет знать его хорошо даже за год (особенно, если не будет стараться проникнуть в язык поглубже)...Ни один язык не является замкнутой системой — идеи и способы реализации кочуют туда-сюда и то, на понимание чего в случае первого знакомства требуется два месяца, человек эрудированный просто отметит про себя — ага, это как в языке x, а это как в x', но через механизм z из языка y

Все так, но для продуктивного программирования нужно еще и "руку набить", и о распространенных граблях знать, и не лезть поминутно в справку, а еще есть (стандартная) библиотека, которую изучать и изучать.

Потому переход с более сложного С++ на (вроде бы) более простые C# или Java — вовсе не минутное дело.

з.ы. Я очень надеюсь, что изучение Лиспа и Хаскелла откроет мне третий глаз, и с чакрами все станет в порядке, но новый язык за полдня — ИМХО, преувеличение.
... << RSDN@Home 1.2.0 alpha rev. 619>>
Re[13]: Goto's are evil?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 30.11.05 15:31
Оценка: :)
Здравствуйте, reductor, Вы писали:

R>Человек, для которого С++ — первый или второй язык программирования в жизни действительно не будет знать его хорошо даже за год (особенно, если не будет стараться проникнуть в язык поглубже).

R>Человек же, который знает необходимый набор классических (оказавших фундаментальное влияние на развитие других) языков + знаком с одним/двумя суперсовременными, выучит с++ очень быстро. Причем глубина его понимания запросто может оказаться побольше, чем у человека, который на с++ программировал 10 лет, но никаких языков больше не знает.

Сразу вспоминаются две цитаты: Best of Vim Tips

David Rayner (zzapper) 15 Years of Vi + 3 years of Vim and still learning


и Re[6]: Теперь у Оберонщиков есть своя "песочница"
Автор: sch
Дата: 26.11.05

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


Никогда не поверю, что C++ можно выучить очень быстро и начать на нем грамотно программировать. Особенно с сегодняшним уклоном в шаблоны, метапрограммирование и expression templates...

Я и сам "13 Years of C++ and still learning"
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[14]: Goto's are evil?
От: GlebZ Россия  
Дата: 30.11.05 17:00
Оценка:
Здравствуйте, eao197, Вы писали:

E>Никогда не поверю, что C++ можно выучить очень быстро и начать на нем грамотно программировать. Особенно с сегодняшним уклоном в шаблоны, метапрограммирование и expression templates...

Да легко. Видел достаточно много примеров. Достаточно хороший код но с достаточно узким кругом инструментов. Ну например метапрограммирования, за последние 13 лет я никогда не использовал. И вообще когда встречаюсь с ним(а встречался только на rsdn), пугаюсь.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[14]: Goto's are evil?
От: Дарней Россия  
Дата: 30.11.05 17:20
Оценка:
Здравствуйте, GlebZ, Вы писали:

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


+1
жаль, что позднее его страсть к упрощению пошла совсем не туда, куда надо
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[16]: Goto's are evil?
От: Дарней Россия  
Дата: 30.11.05 17:20
Оценка:
Здравствуйте, eao197, Вы писали:

E>Давай определимся с критериями успешности.


успешность — это востребованность продукта сообществом
ведь не для марсиан же он работал, верно?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[4]: Goto's are evil?
От: Дарней Россия  
Дата: 30.11.05 17:20
Оценка:
Здравствуйте, GlebZ, Вы писали:

GZ>Имеет право. Он Оберон-то лучше знает.


давай не будем начинать спор по новой, ок?
чтобы иметь право разбрасываться такими откровенно оскорбительными обвинениями, нужно иметь объяснения — "а почему, собственно?" и доказательства сего факта
ни того, ни другого у него нет
если уж прослеживать параллели, то Смоллток имеет куда больше права называться прародителем Явы. Но разработчики Смоллтока почему-то не жалуются про это на лекциях.

GZ>Где он такое говорил? Ссылку. Я слышал от него другие слова.


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

GZ>Это я тоже не слышал в его исполнении.


там же

Д>>Потому что его синтаксис очень простой, и это одним махом решает все существующие проблемы программирования.

GZ>Почти так была информация. Только откуда взялось все существующие проблемы?

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

GZ>Ты сам своими словами пытаешься сделать из него идола.


я? это как?

Д>>4. Оберон никто не использует, потому что ему нигде не обучают. И вообще, все вокруг сговорились, чтобы вытеснить Оберон с рынка.

Д>>и так далее, и тому подобное
GZ>1. Вообще-то Оберон кое-где изучают.

значит, еще один камень в огород Вирта

GZ>2. Лично я ему такое высказывание прощу(хотя дословно оно было другое). Обидно человеку.


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

GZ>Но вот невежественными их назвать не могу.


то, что он говорит про ФЯ, по другому я назвать не могу

GZ>Не идолопоклончество. А уважение. Это разные вещи.


банить за любую критику в адрес какого-то человека — это просто уважение?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[23]: Goto's are evil?
От: GlebZ Россия  
Дата: 30.11.05 17:23
Оценка:
Здравствуйте, Глеб Алексеев, Вы писали:

ГА>Ждем-с с нетерпением.

Аналогично.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[19]: Goto's are evil?
От: GlebZ Россия  
Дата: 30.11.05 17:23
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>И тем не менее, именно Паскаль (с небольшими добавлениями в виде

C>break/continue, типизированых констант и т.п.) стал промышленным языком.
C>Модулы и Оберон уже не имели даже близкого по масштабу влияния на индустрию.
+1

C>Промышленное КОП появилось с появлением VB.

Вопрос на засыпку, а ты можешь описать разницу между модульностью и компонентностью? Этот вопрос настолько узкий, что я подчас сам не понимаю этой разницы.
C>И фактически в области
C>визуального программирования и осталось.
Нет. В честь чего? COM объекты, которые безусловно компонентны не являются областью компонентного программирования. Так же как и на их основе DCOM.
C>Влияния Вирта тут я уже не вижу
C>- скорее развитие логически шло от визуальных контролов на формах к их
C>представлению в виде отдельных пакетов.
Да нет. Тут как раз именно Вирт был впереди планеты всей. На вопрос является ли наш постылый Oberon компонентным языком, можно ответить что да, является. Правда в несколько интересном формате, но это факт.

С уважением, Gleb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Goto's are evil?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 30.11.05 17:24
Оценка:
Здравствуйте, Дарней, Вы писали:

E>>Давай определимся с критериями успешности.


Д>успешность — это востребованность продукта сообществом

Д>ведь не для марсиан же он работал, верно?

Кажется, где-то проскакивала информация, что систему управления метрополитеном в какой-то европейской столице толи на Modula-2, толи на Oberon реализовали. Так что продукт востребован.

БелАЗы, например, ты крайне редко увидишь. И выпускается их мало. Но ведь это не означает, что они не востребованы.
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.