На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
  
> Функциональное програмирование , Что за зверь такой
    Это Я о новых языках Scala, F#, Хекель, я так понял их идея это програмировать без стэйта,
    ибо последний являеться источником багов, в теории все понятно , а на практике как оно
    кто нидь реальный опыт не в гараже ;)
      Сильно непривычно. Часто функциональные языки позволяют присвоить значению имя, и использовать его в нескольких местах по ходу счёта. Фактически это обычная переменная. И вот, всё время тянет использовать эти переменные как в привычных императивных языках программирования.
        Цитата settler @
        Scala, F#

        Это гибридные языки. Грубо говоря, scala - ООП с примесями функциональщины, F# - наоборот.
        В продакшене вполне пригодные, хорошо интегрированы в JVM(scala) и .NET(F#), что позволяет использовать многочисленные библиотеки и фреймворки из мира явы и дотнета, соответственно.

        Не знаю, как там F#, но Scala вполне распространена. На ней написаны такие штуки, как Akka и Spark, ее используют в twitter'е и т.п.

        Цитата
        Хекель

        Это что?

        Цитата

        а на практике как оно
        кто нидь реальный опыт не в гараже ;)

        Зависит от задачи. Отсутствие стейта хорошо сказывается на распараллеливании и распределенности вычислений. В первую очередь.
        С другой стороны, в чистом(в scala/f# не так) функциональном стиле неэффективно работать с вводом/выводом, системным программированием, с задачами, где иммутабельные структуры данных проигрывают классическим.
          Цитата settler @
          Хекель
          Хаскель, Сирожа, хаскель!

          Добавлено
          Цитата D_KEY @
          С другой стороны, в чистом(в scala/f# не так) функциональном стиле неэффективно работать с вводом/выводом, системным программированием, с задачами, где иммутабельные структуры данных проигрывают классическим.

          Поэтому
          Цитата Ксеноцефал
          Хаскель — это как ламборджини в деревне. Немного подрочил — и пошел работать на тракторе.
            Ну так потому и распространение получают гибриды, а не "тру" функциональщина.
            На scala вполне приятно работать. С тем же Spark, где все тоже фактически функциональное.
              Цитата D_KEY @
              Цитата settler @
              Scala, F#

              Это гибридные языки. Грубо говоря, scala - ООП с примесями функциональщины, F# - наоборот.

              Так в Яве-8 есть фунции,лямды с потом чем функция вне класса отличаеться от static метода ?
              Про стейт вопще не понял, ну не используй его где не надо, причем язык , ?
              тогда и С++ это ООП с с примесями функциональщины ? Хочешь пиши классами , не хочешь
              строй функции . Или как ?


              F# - нас на рынке отсутсвует, в Штатах с Канадой вроде тоже,
              scala - очень мало, зато Питон вдруг резко стал популярен не понимаю с чего ,
                settler, я думаю, что тебе поможет гугл и/или пара книг по функциональному программированию.
                Объяснять тут какие-то основы не интересно. Тут раздел холиваров.
                  Немного в тему и не в тему. Сегодня слушал доклад, в котором автор в том числе рассказывал про использования функций второго порядка в С++ при шаблонном метапрограммировании. Это у него называлось template lists (в это время этажом ниже Александреску проводил мастер-класс по D).
                    И где было больше народу?
                      Цитата Flex Ferrum @
                      Сегодня слушал доклад, в котором автор в том числе рассказывал про использования функций второго порядка в С++ при шаблонном метапрограммировании.

                      Что-нибудь применимое на практике было?

                      Добавлено
                      Цитата settler @
                      Так в Яве-8 есть фунции,лямды

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

                      Цитата
                      с потом чем функция вне класса отличаеться от static метода ?

                      Попробуй понять разницу между функциональным и процедурным программированием

                      Цитата

                      тогда и С++ это ООП с с примесями функциональщины ? Хочешь пиши классами , не хочешь
                      строй функции . Или как ?

                      Так и в чистом Си можно писать в ООП стиле. В разных языках разный уровень поддержки той или иной парадигмы. Так же есть языки, которые полностью заточены под какую-то парадигму.
                        Вот, на мой взгляд, интересная статья по теме.
                          Цитата Qraizer @
                          И где было больше народу?

                          А ты как думаешь? :) Не знаю, сколько народу было у Александреску, но у Steve Dewhurst, доклад которого я и слушал, была самая большая аудитория, забитая полностью.

                          К сожалению, самые интересные (для меня) куски своего шестичасового доклада он проскипал.

                          D_KEY, из полезного - как обычно. Как нам замутить концепты, пока их нет в языке. Он на базе этих списков шаблонов констрейнты (через SFINAE) на методы накладывал, комбинируя трейтсы.
                            Цитата Flex Ferrum @
                            Немного в тему и не в тему. Сегодня слушал доклад, в котором автор в том числе рассказывал про использования функций второго порядка в С++ при шаблонном метапрограммировании. Это у него называлось template lists (в это время этажом ниже Александреску проводил мастер-класс по D).

                            Это ты про конференцию ACCU 2016?
                              Ага.
                                Цитата settler @
                                Так в Яве-8 есть фунции,лямды с потом чем функция вне класса отличаеться от static метода ?

                                Ага, сделанные, как обычно, через жопу.

                                https://dzone.com/articles/whats-wrong-java-8-currying-vs
                                https://dzone.com/articles/whats-wrong-java-8-part-ii
                                  korvin, используй scala :)
                                    Цитата D_KEY @
                                    используй scala

                                    :bad: https://dzone.com/articles/scala-–-good-bad-and-very-ugly

                                    Плюс к тому, я пишу код не сам для себя, у нас по поводу Java-кода споры возникают, а тут ещё б Scala внесла свои 57 копеек.
                                      Цитата D_KEY @
                                      korvin, используй scala :)

                                      Ты уверен что это жава? у меня оно даже не конпилируеться, и там вообще на писано Let's see an example in Java 5/6/7: у меня 8, или у меня какая то другая жава ;)
                                      А ты заметил что код, вообще написан на жава-4 ?
                                      Сообщение отредактировано: settler -
                                        Цитата korvin @
                                        Плюс к тому, я пишу код не сам для себя, у нас по поводу Java-кода споры возникают, а тут ещё б Scala внесла свои 57 копеек.

                                        Ну так если скала такая крутая а жава отстой, ;) почему она банально не вытесняеться
                                        и не отмирает как в свое время например Visual Basic ?
                                        Не знаю как в 1/6 у нас на 25-30 обьявлений на жава програмеров на скалу примерно одно обьявление ,
                                        тоже самое F# в сравнение с С# . Про Хескель вообще не слышал что бы кто-то реально работал,
                                        а за Питон или Node.js програмисту платят примерно 2/3 от програмиста жавы/С# ?
                                            Цитата korvin @
                                            Нет, прости, ты не наркоман, тебе голову Буком повредили. Вали обратно в политику, программист из тебя, как из говна лопата.

                                            Mда серьезный ответ, заслуживающий расммотрения,
                                            Главное типичный для все знающего человека ;) тут уже есть парочка таких,
                                            лучших так сказать представителей 1/8 части суши ;) , тебе я вижу к ним в клуб
                                            не терпиться :D ,
                                              Цитата settler @
                                              Не знаю как в 1/6
                                              Цитата settler @
                                              лучших так сказать представителей 1/8
                                              :blink: Сколь быстро мы мелеем, однако! :D
                                                эээ. Чот какой-то ресурс неудовлетворённых :D
                                                  Цитата negram @
                                                  эээ. Чот какой-то ресурс неудовлетворённых :D
                                                  Как и сам Korvin, почитай его подпись - http://harmful.cat-v.org/software/
                                                  Жизнь ужасна!
                                                    Цитата settler @
                                                    Mда серьезный ответ, заслуживающий расммотрения,

                                                    Дык какой вопрос…

                                                    Цитата settler @
                                                    Главное типичный для все знающего человека

                                                    Ого, даже я не знал, что я всезнающий. Как ты пришёл к такому заключению?

                                                    Цитата negram @
                                                    Чот какой-то ресурс неудовлетворённых

                                                    Обычный ресурс, с обычным, довольно простым рассмотрением недостатков Java, например. Эти недостатки довольно давно и широко известны, некоторые описаны и людьми, участвовавшими в проектированием Java, типа Гослинга и Стила.

                                                    Цитата applegame @
                                                    Как и сам Korvin, почитай его подпись - http://harmful.cat-v.org/software/
                                                    Жизнь ужасна!

                                                    А ты из тех, кто готов жрать любое гавно, улыбаться и делать вид, что это норма?
                                                      Цитата korvin @
                                                      А ты из тех, кто готов жрать любое гавно, улыбаться и делать вид, что это норма?

                                                      Ты внятно можешь обьяснить что с твоей точки зрения в яве не так,и в сравнении с чем ?
                                                      без использования специальных слов, ;)
                                                      Cколько лет ты реально пишешь на яве и сколько на скале? Дома пару вечеров с книжкой или
                                                      пять/десять лет реальных проэктов?
                                                      Хочется обсуждать вещи более предметно, тот же С++ не имеет GC а функии в нем не виртуальны ,
                                                      что осложняет писать большиие системы, из этого не следует что пишуший на С++ готов жрать
                                                      то что ты сказал.
                                                        Цитата korvin @
                                                        Цитата applegame @
                                                        Как и сам Korvin, почитай его подпись - http://harmful.cat-v.org/software/
                                                        Жизнь ужасна!

                                                        А ты из тех, кто готов жрать любое гавно, улыбаться и делать вид, что это норма?

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

                                                        А ты, значит, из тех, кто готов жрать любое говно, плакать и не делать вид, что это норма?
                                                          Цитата applegame @
                                                          благо у меня есть возможность самостоятельно выбирать еду.

                                                          Мы рады ;) если охота кидаться гнилыми помидорами - большая просьба - пиши ему в личку,


                                                          Лучше скажи что тебе непривычно в FP, ; желательно с примерами ,
                                                            Цитата settler @
                                                            Мы рады ;) если охота кидаться гнилыми помидорами - большая просьба - пиши ему в личку,
                                                            Я не кидаюсь. На самом деле я планировал свою фразу как беззлобное подтрунивание, но korvin в последнее время какой-то агрессивный стал.
                                                            Цитата settler @
                                                            Лучше скажи что тебе непривычно в FP, ; желательно с примерами ,
                                                            Если честно, то мне лень. Когда я задался таким же вопросом, то просто пошел и прочитал Learn You a Haskell for Great Good!, после чего немного поахал-поохал и пошел работать на тракторе.
                                                              Цитата applegame @
                                                              поахал-поохал

                                                              Негативно поахал, или как в той цитате про Ламборджини в деревне?
                                                                Цитата OpenGL @
                                                                Негативно поахал, или как в той цитате про Ламборджини в деревне?
                                                                Как в той цитате.

                                                                Добавлено
                                                                Вот моя темка о ФП - Сломать шаблон
                                                                  Цитата applegame @
                                                                  Когда я задался таким же вопросом, то просто пошел и прочитал Learn You a Haskell for Great Good!, после чего немного поахал-поохал и пошел работать на тракторе.

                                                                  Бегло просмотрел напоминает логические языки типа пролога, с примесями embeded sql.
                                                                  У меня у одного такое ощущение,? Ну и разницы с явой-8 лямдами не увидел,
                                                                  таже дама только с другой прической , ;)
                                                                  Ну и пока непонятно что с этим языком делать на практике,
                                                                    Цитата settler @
                                                                    Цитата applegame @
                                                                    Когда я задался таким же вопросом, то просто пошел и прочитал Learn You a Haskell for Great Good!, после чего немного поахал-поохал и пошел работать на тракторе.

                                                                    Бегло просмотрел напоминает логические языки типа пролога, с примесями embeded sql.
                                                                    У меня у одного такое ощущение,? Ну и разницы с явой-8 лямдами не увидел,
                                                                    таже дама только с другой прической , ;)
                                                                    Ну и пока непонятно что с этим языком делать на практике,

                                                                    Императивный язык + элементы функционального программирования - это совсем не то же самое, что чистый функциональный язык. И никогда не будет тем же самым. Функциональный подход - это совершенно иной взгляд на структуру программы. На, тот же Haskell и Prolog чем-то похожи, но общего у них - это декларативный подход. В остальном они разные.
                                                                      Цитата Flex Ferrum @
                                                                      И никогда не будет тем же самым. Функциональный подход - это совершенно иной взгляд на структуру программы.

                                                                      Это когда нету состояния обьекта, так я под веб пишу лет 10, там тоже нет состояние,
                                                                      У меня функциональный подход? , Да и где граница между новым подходом и тем что его придумали?
                                                                      как глобальное потепление ;)
                                                                      Сообщение отредактировано: settler -
                                                                        Цитата settler @
                                                                        Это когда нету состояния обьекта, так я под веб пишу лет 10, там тоже нет состояние,
                                                                        У меня функциональный подход? , Да и где граница между новым подходом и тем что его придумали?
                                                                        как глобальное потепление ;)
                                                                        Господи, Сирожа, не неси ерунды. ФП это не только иммутабельность и лямбды. Попробуй написать что-нибудь без циклов и без ветвлений.
                                                                          Цитата applegame @
                                                                          Цитата settler @
                                                                          Это когда нету состояния обьекта, так я под веб пишу лет 10, там тоже нет состояние,
                                                                          У меня функциональный подход? , Да и где граница между новым подходом и тем что его придумали?
                                                                          как глобальное потепление ;)
                                                                          Господи, Сирожа, не неси ерунды. ФП это не только иммутабельность и лямбды. Попробуй написать что-нибудь без циклов и без ветвлений.

                                                                          Вот да. У прожжённого императивщика вроде меня функциональные языки просто взрывают мозг. Два часа программирования - и мозги сворачиваются в трубочку.
                                                                            Пффф. Пять лет шаблонного метапрограмминга без буста, и вуаля.
                                                                            Ну или пять лет Лиспа, кому как.
                                                                              Цитата Qraizer @
                                                                              Пффф. Пять лет шаблонного метапрограмминга без буста, и вуаля.
                                                                              Ну или пять лет Лиспа, кому как.

                                                                              А на каком языке ты пишешь функциональщину? Мне опыт с шаблонами мало помогает. Я использую scala. Для себя редко играюсь с haskell'ем
                                                                                Цитата D_KEY @
                                                                                Цитата Qraizer @
                                                                                Пффф. Пять лет шаблонного метапрограмминга без буста, и вуаля.
                                                                                Ну или пять лет Лиспа, кому как.

                                                                                А на каком языке ты пишешь функциональщину? Мне опыт с шаблонами мало помогает. Я использую scala. Для себя редко играюсь с haskell'ем

                                                                                Мне вот тоже мало помог. Одно дело писать так строго определённую часть программы, совсем другое - всю. В конце концов на шаблонах серьёзная логика не наворачивается.
                                                                                Правда сейчас, с новым и будущим стандартом и продвинутыми constexpr'ами всё может несколько поменяться.
                                                                                  Цитата applegame @
                                                                                  ФП это не только иммутабельность и лямбды. Попробуй написать что-нибудь без циклов и без ветвлений.

                                                                                  А что только ? как ты это понимаешь? , только сам ,без ссылки на гугль или вики,

                                                                                  Добавлено
                                                                                  Цитата Flex Ferrum @
                                                                                  Правда сейчас, с новым и будущим стандартом и продвинутыми constexpr'ами всё может несколько поменяться.

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

                                                                                  Если пишешь свой компилятор, как Александреску для Фейсбука, тогда шаблоны - мощный инструмент,

                                                                                  Добавлено
                                                                                  Цитата D_KEY @
                                                                                  Я использую scala. Для себя редко играюсь с haskell'ем

                                                                                  И много на ней систем крупный видел,? Какие сервера ее поддерживают ?
                                                                                    Цитата Flex Ferrum @
                                                                                    Мне вот тоже мало помог. Одно дело писать так строго определённую часть программы, совсем другое - всю. В конце концов на шаблонах серьёзная логика не наворачивается.
                                                                                    Дык речь-то не о программе целиком была, а о "без циклов и ветвлений". Плюс полная иммутабельность на чистых функциях. Сначала жёстко, со временем привыкаешь.
                                                                                    А вообще, и целиком программы тоже были. Детские, конечно, но всё-таки.

                                                                                    Добавлено
                                                                                    P.S. А "серьёзная логика" – это какая?
                                                                                      Цитата Qraizer @
                                                                                      Цитата Flex Ferrum @
                                                                                      Мне вот тоже мало помог. Одно дело писать так строго определённую часть программы, совсем другое - всю. В конце концов на шаблонах серьёзная логика не наворачивается.
                                                                                      Дык речь-то не о программе целиком была, а о "без циклов и ветвлений". Плюс полная иммутабельность на чистых функциях. Сначала жёстко, со временем привыкаешь.
                                                                                      А вообще, и целиком программы тоже были. Детские, конечно, но всё-таки.

                                                                                      Добавлено
                                                                                      P.S. А "серьёзная логика" – это какая?

                                                                                      Ну, я ломал себе мозг парсингом текста и генерацией на базе полученного AST другого текста. Всё это на Haskell.
                                                                                        Прикольно. А я – построением Matlab-моделей. Исполнение было, конечно, в рантайм.
                                                                                          Цитата applegame @
                                                                                          На самом деле я планировал свою фразу как беззлобное подтрунивание, но korvin в последнее время какой-то агрессивный стал.

                                                                                          Это всё из-за Джавы и Политики =)

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

                                                                                          Добавлено
                                                                                          Цитата settler @
                                                                                          Ну и разницы с явой-8 лямдами не увидел,
                                                                                          таже дама только с другой прической


                                                                                          Функция compose в Хаскелле:

                                                                                          ExpandedWrap disabled
                                                                                            compose :: (a -> b) -> (b -> c) -> a -> c
                                                                                            compose f g = \x -> f (g x)

                                                                                          где запись
                                                                                          ExpandedWrap disabled
                                                                                            \x -> f (g x)

                                                                                          аналогичен Java'вской
                                                                                          ExpandedWrap disabled
                                                                                            x -> f(g(x))


                                                                                          Покажи пример реализации этой функции на Java-8 с лямбдами. Ты можешь попробовать написать что-то вроде
                                                                                          ExpandedWrap disabled
                                                                                            public static <A, B, C> Function<A, C> compose(Function<A, B> f, Function<B, C> g) {
                                                                                                return x -> f(g(x));
                                                                                            }

                                                                                          но этого будет сильно не достаточно, т.к.
                                                                                          Consumer<T> — это не Function<T, Void>
                                                                                          Supplier<R> — это не Function<Void, R>
                                                                                          BiFunction<T1, T2, R> — это не Function<Pair<T1, T2>, R>
                                                                                          Predicate<T> — это не Function<T, Boolean>
                                                                                          IntBinaryOperator — это не Function<Integer, Integer>
                                                                                          и так далее.

                                                                                          Этих разных типов в java.util.function 21 штука, ЕМНИП. У каждого свои методы, не всегда совместимые друг с другом, поэтому писать обощённый функциональный код для всего этого зоопарка весьма затруднительно.
                                                                                          Всё это подробно описано в статьях, ссылки на которые я давал ранее.

                                                                                          С тем же успехом можно сравнивать ООП в Си и в каком-нибудь SmallTalk'е или Eiffel'е.

                                                                                          Вот ещё про ФП:

                                                                                          https://www.youtube.com/watch?v=E8I19uA-wGY
                                                                                            P.S. Чуть не забыл: ссылки на методы, бросающие статически проверяемые исключения нельзя использовать в Stream API, потому что проверяемые исключения являются частью сигнатуры метода, а методы интерфейсов из java.util.function не бросают проверямые исключения, соответственно не совместимы с ними. Т.е., например, OutputStream.this::write — это не Consumer<byte[]>.
                                                                                              Цитата korvin @
                                                                                              Этих разных типов в java.util.function 21 штука, ЕМНИП. У каждого свои методы, не всегда совместимые друг с другом, поэтому писать обощённый функциональный код для всего этого зоопарка весьма затруднительно.
                                                                                              Всё это подробно описано в статьях, ссылки на которые я давал ранее.

                                                                                              Зачем писать имеено функциональный код, или у тебя самоцель чтобы код был функциональный, это код как раз наборот позволяет
                                                                                              стандартизировать систему написанную в стиле ООП, если раньше каждый изобретал свой интерфес ,
                                                                                              то сейчас эти интерфесы станут стандартными, нужен тебе один имплементируй его ,
                                                                                              нужно больше пользуй хоть все 21, мало их расширяй хоть до посинения ;) ,
                                                                                              вот накидал сходу
                                                                                              ExpandedWrap disabled
                                                                                                 class CustomPredicate implements Predicate<Person>, BiConsumer<Person, String>{
                                                                                                   private Person person;
                                                                                                   List<Set<Person>> persons= new ArrayList<>(3);
                                                                                                  
                                                                                                  
                                                                                                    public  CustomPredicate() {
                                                                                                        persons.set(0, new HashSet<>());
                                                                                                        persons.set(1, new HashSet<>());
                                                                                                        persons.set(2, new HashSet<>());
                                                                                                    }
                                                                                                    @Override
                                                                                                    public boolean test(Person p) {
                                                                                                        if(p.getFirstName().compareTo(this.person.getFirstName())==-1)
                                                                                                          return false;
                                                                                                        return true;
                                                                                                    }
                                                                                                    public Person getPerson() {
                                                                                                        return person;
                                                                                                    }
                                                                                                    public void setPerson(Person person) {
                                                                                                        this.person = person;
                                                                                                    }
                                                                                                    @Override
                                                                                                    public void accept(Person p, String u) {
                                                                                                         String phoneCode=null;
                                                                                                         switch (u) {
                                                                                                        case "us":
                                                                                                            phoneCode="001";
                                                                                                            break;
                                                                                                        case "gb":
                                                                                                            phoneCode="041";
                                                                                                            break;
                                                                                                        case "il"   :
                                                                                                            phoneCode="972";
                                                                                                        default:
                                                                                                            break;
                                                                                                        }
                                                                                                        
                                                                                                         p.setPhone(phoneCode+p.getPhone());        
                                                                                                    }


                                                                                              потом эти стандартный интерсейсы при желании очень легко можно настротить в IOC сontener ,
                                                                                              Да еще тех ликах ничего не говориться о кривости жава,
                                                                                                Цитата settler @
                                                                                                Зачем писать имеено функциональный код, или у тебя самоцель чтобы код был функциональный,
                                                                                                В цитате корвина ключевое слово "обобщенный".
                                                                                                  Цитата applegame @
                                                                                                  Цитата settler @
                                                                                                  Зачем писать имеено функциональный код, или у тебя самоцель чтобы код был функциональный,
                                                                                                  В цитате корвина ключевое слово "обобщенный".

                                                                                                  не уловил смысла, поясните
                                                                                                    Цитата settler @
                                                                                                    Зачем писать имеено функциональный код

                                                                                                    Затем, что он в большинстве случаев проще и удобней.

                                                                                                    Цитата settler @
                                                                                                    если раньше каждый изобретал свой интерфес ,
                                                                                                    то сейчас эти интерфесы станут стандартными, нужен тебе один имплементируй его ,
                                                                                                    нужно больше пользуй хоть все 21

                                                                                                    Достаточно одного интерфейса: (a -> b).

                                                                                                    Цитата settler @
                                                                                                    вот накидал сходу

                                                                                                    И что за кашу ты накидал? Я просил провести пример реализации функции compose.

                                                                                                    BTW, твоё «творчество» из-за мутабельности автоматически становится непригодным к использованию в Stream API, т.к. parallelStream приведёт к непредсказуемым результатам. А добавление synchronized к методам — к тормозам. Хватает тормозов из-за боксинга (угадай на кой чёрт нужны IntConsumer вместо Consumer<Integer> и прочие Stream::mapToLong), а тут ещё synchronized.

                                                                                                    Правда у Fork/Join Framework свои особенности.

                                                                                                    И нафига мне вооще в одной функции (или ХЗ как назвать CustomPredicate) предикат, маскирующий компаратор, и какой-то невнятный BiConsumer. Такое ощущение, что ты просто чего-то от балды нафигачил. Ты же понимаешь, что повторный вызов accept с одним и тем же объектом Person приведёт к повторному добавлению кода к телефону?


                                                                                                    И в довершении 40 строк против 12?

                                                                                                    ExpandedWrap disabled
                                                                                                      byFirstName :: Person -> Person -> Bool
                                                                                                      byFirstName x y = firstName x < firstName y
                                                                                                       
                                                                                                      withPhoneCode :: Person -> String -> Person
                                                                                                      withPhoneCode (Person fn (code, phone)) newCode = Person fn (newCode, phone)
                                                                                                       
                                                                                                      countryToPhoneCode :: String -> String
                                                                                                      countryToPhoneCode country = case country of
                                                                                                          "us" -> "001"
                                                                                                          "gb" -> "041"
                                                                                                          "il" -> "972"
                                                                                                          _    -> ""


                                                                                                    Действительно, никакой разницы.
                                                                                                    Сообщение отредактировано: korvin -
                                                                                                      Цитата settler @
                                                                                                      Зачем писать имеено функциональный код, или у тебя самоцель чтобы код был функциональный, это код как раз наборот позволяет
                                                                                                      стандартизировать систему написанную в стиле ООП, если раньше каждый изобретал свой интерфес ,
                                                                                                      то сейчас эти интерфесы станут стандартными, нужен тебе один имплементируй его ,
                                                                                                      нужно больше пользуй хоть все 21, мало их расширяй хоть до посинения ;)

                                                                                                      Так зачем эти 21 нужны? :)
                                                                                                      Не костыли ли это, случаем?
                                                                                                        Цитата korvin @
                                                                                                        Такое ощущение, что ты просто чего-то от балды нафигачил. Ты же понимаешь, что повторный вызов accept с одним и тем же объектом Person приведёт к повторному добавлению кода к телефону?

                                                                                                        любой повторный вызов функции изменит стэйт обьеста, ты ж соображать должен что делаешь ,
                                                                                                        а если на 0 поделить ??

                                                                                                        Где в документации Хасkеля гарантия на защиту при много поточности?, если она есть
                                                                                                        то это тоже мутекс, и соотвесвеено те же торомоза, другого еще не придумали,
                                                                                                          settler, ты, похоже, опять плохо понимаешь, о чём берёшься спорить...
                                                                                                            Цитата settler @
                                                                                                            любой повторный вызов функции изменит стэйт обьеста

                                                                                                            При соблюдении функционального стиля этого не будет происходить(или будет происходить редко, в строго ограниченных местах).

                                                                                                            Цитата
                                                                                                            Где в документации Хасkеля гарантия на защиту при много поточности?, если она есть
                                                                                                            то это тоже мутекс, и соотвесвеено те же торомоза, другого еще не придумали,

                                                                                                            Если стейт не меняется, то мьютексы не нужны. Распределенные и параллельные вычисления сейчас очень часто организуются так, чтобы состояния не было. Ибо это как раз позволяет легко распараллеливать вычисления без синхронизации.
                                                                                                              Цитата D_KEY @
                                                                                                              Так зачем эти 21 нужны? :)
                                                                                                              Не костыли ли это, случаем?

                                                                                                              Что был был стандарт, и возможность расширения , включая множесвенное наследование как и по интерфейсу так и по реализации, все знают что для сравнения обьетов есть метод test.На крупных проэктах очень сильно облегчает
                                                                                                              проэктирование и поддержку там же сказано
                                                                                                              Represents an operation that accepts two input arguments and returns no result,
                                                                                                              то есть когда надо два аргумета то вместо велосипеда типа
                                                                                                              ExpandedWrap disabled
                                                                                                                  public void foo(int x, Person p){
                                                                                                                  }

                                                                                                              у тебя есть стандартное
                                                                                                              ExpandedWrap disabled
                                                                                                                 public interface BiConsumer<T,U>

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

                                                                                                              Добавлено
                                                                                                              Цитата D_KEY @
                                                                                                              При соблюдении функционального стиля этого не будет происходить(или будет происходить редко, в строго ограниченных местах).

                                                                                                              У меня и в обьектном такого не случалось,
                                                                                                                Цитата settler @
                                                                                                                Цитата D_KEY @
                                                                                                                При соблюдении функционального стиля этого не будет происходить(или будет происходить редко, в строго ограниченных местах).

                                                                                                                У меня и в обьектном такого не случалось,

                                                                                                                У тебя не меняется стейт при повторном вызове? Ну так хорошо. В чем тогда проблема?

                                                                                                                Добавлено
                                                                                                                settler, мне кажется, ты не понимаешь, что тебе пишут :)
                                                                                                                  Цитата Flex Ferrum @
                                                                                                                  settler, ты, похоже, опять плохо понимаешь, о чём берёшься спорить...

                                                                                                                  Возможно 12лет на яве + 5 лет на той самой фунциональщине, хотя и в LS в видимо не достаточно, ;)
                                                                                                                  Тогда это не называли особым словом,да еще в C# d 2009 эти фичи уже были, но названия также пока не было,
                                                                                                                  маркетологи его еще не придумали, ;)
                                                                                                                  Не обратил внимание что на вопрос о частоте применимости ФП пока никто не ответил, ?

                                                                                                                  Добавлено
                                                                                                                  Цитата D_KEY @
                                                                                                                  мне кажется, ты не понимаешь, что тебе пишут :)

                                                                                                                  Возможно, ;)
                                                                                                                    Цитата settler @
                                                                                                                    Где в документации Хасkеля гарантия на защиту при много поточности?, если она есть
                                                                                                                    то это тоже мутекс, и соотвесвеено те же торомоза, другого еще не придумали,
                                                                                                                    :facepalm: Зачем синхронизировать иммутабельные сущности? Они же не меняются, от самого рождения до своей смерти в уборщике мусора. Не нужно никакой "защиты от многопоточности".
                                                                                                                    Сообщение отредактировано: applegame -
                                                                                                                      Цитата settler @
                                                                                                                      Цитата Flex Ferrum @
                                                                                                                      settler, ты, похоже, опять плохо понимаешь, о чём берёшься спорить...

                                                                                                                      Возможно 12лет на яве + 5 лет на той самой фунциональщине, хотя и в LS в видимо не достаточно, ;)
                                                                                                                      Тогда это не называли особым словом,да еще в C# d 2009 эти фичи уже были, но названия также пока не было,
                                                                                                                      маркетологи его еще не придумали, ;)
                                                                                                                      Не обратил внимание что на вопрос о частоте применимости ФП пока никто не ответил, ?

                                                                                                                      Добавлено
                                                                                                                      Цитата D_KEY @
                                                                                                                      мне кажется, ты не понимаешь, что тебе пишут :)

                                                                                                                      Возможно, ;)

                                                                                                                      Не "возможно", а совершенно определённо.
                                                                                                                        мое мнение о функциональщине - она хороша, но хорошо когда она строго ограниченая, типа LINQ для C#. Что бы по серьёзке использовать Хаскель.. ну... как то не хотелось бы :)
                                                                                                                        Сообщение отредактировано: Бобёр -
                                                                                                                          Цитата Бобёр @
                                                                                                                          мое мнение о функциональщине - она хороша, но хорошо когда она строго ограниченая, типа LINQ для C#. Что бы по серьёзке использовать Хаскель.. ну... как то не хотелось бы :)

                                                                                                                          Хаскель или F# - это ещё по-божески. У них достаточно programner-friendly синтаксис...
                                                                                                                            хочу как нибудь попробовать F#, можт понравится.
                                                                                                                            Хаскель пробовал - как то не пошёл.
                                                                                                                            Лисповые вообще как то пришлось исправлять, один деятель, любитель емакса, кхм.. имплементировал чтение конфигов в виде лисп программ (и чтение, и сами конфиги). Ну и оно периодически не работало как надо, а деятель бывал в это время недоступен.

                                                                                                                            Добавлено
                                                                                                                            в общем, дети, не делайте так :), если хотите слушать только добрые слова от коллег :)
                                                                                                                            Сообщение отредактировано: Бобёр -
                                                                                                                              Цитата settler @
                                                                                                                              Возможно 12лет на яве

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

                                                                                                                              Цитата
                                                                                                                              + 5 лет на той самой фунциональщине, хотя и в LS

                                                                                                                              Что такое LS?

                                                                                                                              Цитата
                                                                                                                              Тогда это не называли особым словом,да еще в C# d 2009 эти фичи уже были, но названия также пока не было,
                                                                                                                              маркетологи его еще не придумали, ;)

                                                                                                                              Функциональное программирование появилось раньше ООП.

                                                                                                                              Добавлено
                                                                                                                              Цитата Бобёр @
                                                                                                                              хочу как нибудь попробовать F#

                                                                                                                              Говорят, что годен в проде.
                                                                                                                              Материалы, лекции есть в том числе и на русском. Поддержка от MS тоже многое решает.

                                                                                                                              Цитата
                                                                                                                              Хаскель пробовал - как то не пошёл.

                                                                                                                              Я вот не знаю, чего бы на нём более-менее полезное сделать...
                                                                                                                              Не могу применения найти.

                                                                                                                              Цитата
                                                                                                                              Лисповые

                                                                                                                              Лисп вполне себе императивен.
                                                                                                                              И сила его в "код как данные", макросах и пр. таком, а не в функциональщине. ИМХО.

                                                                                                                              Добавлено
                                                                                                                              Цитата Бобёр @
                                                                                                                              в общем, дети, не делайте так :), если хотите слушать только добрые слова от коллег :)

                                                                                                                              Ну тут от коллег и качества исполнения зависит.
                                                                                                                              Помню, на одной из работ, в одном проекте подсистема конфигурации была больным местом и как раз один из коллег за пару недель встроил в систему лисп, реализовал на нем данную подсистему и написал тулзу для перевода конфигов в s-expr. Работало как часы, было невероятно гибко и всех устраивало.

                                                                                                                              Добавлено
                                                                                                                              Там еще было управление конфигурациями, генерация меню управления для различных устройств и терминалов.
                                                                                                                              Сообщение отредактировано: D_KEY -
                                                                                                                                Парни! По моему весьма скромному имху :lol: ... вы за деревьями набыли смареть на лес! Последние -дцать страниц "ой нормальненько", "да не, хреновенько", "да это было оч раньше ваших пап и мам", "да пофик...". Зачем столько ВОДЫ?!!!

                                                                                                                                1) Реальные проекты на функциональщине??? (список)
                                                                                                                                2) Сравнение реальных проектов на функциональщине vs прочие парадигмы => выводы

                                                                                                                                Я уверен, по качеству - программирование в оп-кодах под конкретный камень рвет все! ... Кроме производительности программера. Добавим Цэ - уже гораздо лучче. А если добавим функциональщину, в каких областях начнем выигрывать? GUI, математика, системные операции, где??? Имя сесчра, имя! (С)
                                                                                                                                  Цитата JoeUser @
                                                                                                                                  1) Реальные проекты на функциональщине??? (список)

                                                                                                                                  Что считать функциональщиной? На Scala много что пишут, например. Я уже приводил пример Twitter, да и Spark тот же и другие похожие вещи. LinkedIn вроде тоже на ней. Как и их очереди - Kafka.
                                                                                                                                  Фреймворки, которые используют в том числе и в Java, часто пишут сейчас на Scala. Тот же Akka. Насколько там много функционального подхода в коде - не знаю.

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

                                                                                                                                  Добавлено
                                                                                                                                  Цитата JoeUser @
                                                                                                                                  Я уверен, по качеству - программирование в оп-кодах под конкретный камень рвет все! ... Кроме производительности программера.

                                                                                                                                  А так же числом багов. Так что про качество я бы поспорил...

                                                                                                                                  Цитата
                                                                                                                                  А если добавим функциональщину, в каких областях начнем выигрывать?

                                                                                                                                  В параллельных и распределенных вычислениях(это и обуславливает относительный рост популярности функционального подхода).
                                                                                                                                  В корректности кода.
                                                                                                                                  Как правило, в объеме кода.
                                                                                                                                  Мне кажется уже достаточно, чтобы хотя бы ознакомиться с подходом.

                                                                                                                                  Добавлено
                                                                                                                                  Цитата JoeUser @
                                                                                                                                  Добавим Цэ - уже гораздо лучче. А если добавим функциональщину...

                                                                                                                                  Функциональщина - это подход. Теоретически, можно и на Си писать в функциональном стиле, как и в ООП. Хотя поддержки языка нет.
                                                                                                                                  Но будут некоторые трудности и часть преимуществ, которые обеспечивает поддержка функциональшины в языке, мы потеряем.
                                                                                                                                    Я, когда пишу на D, активно применяю элементы ФП при обработке различного рода списков. Мне нравится. Ну и шаблончеги очень часто оказывается чистым ФП.
                                                                                                                                    Сообщение отредактировано: applegame -
                                                                                                                                      Цитата settler @
                                                                                                                                      любой повторный вызов функции изменит стэйт обьеста, ты ж соображать должен что делаешь ,
                                                                                                                                      а если на 0 поделить ??

                                                                                                                                      Где в документации Хасkеля гарантия на защиту при много поточности?, если она есть
                                                                                                                                      то это тоже мутекс, и соотвесвеено те же торомоза, другого еще не придумали,

                                                                                                                                      https://en.wikipedia.org/wiki/Referential_transparency

                                                                                                                                      Добавлено
                                                                                                                                      Цитата settler @
                                                                                                                                      Тогда это не называли особым словом,да еще в C# d 2009 эти фичи уже были, но названия также пока не было,
                                                                                                                                      маркетологи его еще не придумали,

                                                                                                                                      Ага…
                                                                                                                                      Цитата
                                                                                                                                      An early functional-flavored language was Lisp, developed by John McCarthy while at Massachusetts Institute of Technology (MIT) for the IBM 700/7000 series scientific computers in the late 1950s
                                                                                                                                        Цитата korvin @
                                                                                                                                        Цитата settler @
                                                                                                                                        любой повторный вызов функции изменит стэйт обьеста, ты ж соображать должен что делаешь ,
                                                                                                                                        а если на 0 поделить ??

                                                                                                                                        Где в документации Хасkеля гарантия на защиту при много поточности?, если она есть
                                                                                                                                        то это тоже мутекс, и соотвесвеено те же торомоза, другого еще не придумали,

                                                                                                                                        https://en.wikipedia.org/wiki/Referential_transparency

                                                                                                                                        Добавлено
                                                                                                                                        Цитата settler @
                                                                                                                                        Тогда это не называли особым словом,да еще в C# d 2009 эти фичи уже были, но названия также пока не было,
                                                                                                                                        маркетологи его еще не придумали,

                                                                                                                                        Ага…
                                                                                                                                        Цитата
                                                                                                                                        An early functional-flavored language was Lisp, developed by John McCarthy while at Massachusetts Institute of Technology (MIT) for the IBM 700/7000 series scientific computers in the late 1950s

                                                                                                                                        Что ага? кто из тут присутсвующих слышал термин функциональное програмирование
                                                                                                                                        5 лет назад, 3 года назад, 2года назад?
                                                                                                                                        И почему Лисп а не Пролог?, тогда и TL/SQL это ФП ? не путать с процедурным ,

                                                                                                                                        Лень вникать в твой линк ,
                                                                                                                                        вот код оттуда, два потока изменяют globalValue, синхронизация не нужна?
                                                                                                                                        какая разница какой яп?

                                                                                                                                        ExpandedWrap disabled
                                                                                                                                          globalValue = 0;
                                                                                                                                           
                                                                                                                                           integer function rq(integer x)
                                                                                                                                           begin
                                                                                                                                             globalValue = globalValue + 1;
                                                                                                                                             return x + globalValue;
                                                                                                                                           end
                                                                                                                                           
                                                                                                                                           integer function rt(integer x)
                                                                                                                                           begin
                                                                                                                                             return x + 1;
                                                                                                                                           end
                                                                                                                                          Цитата settler @
                                                                                                                                          Что ага? кто из тут присутсвующих слышал термин функциональное програмирование
                                                                                                                                          5 лет назад, 3 года назад, 2года назад?
                                                                                                                                          Я слышал лет эдак 15 назад, еще в институте. Еще вопросы?
                                                                                                                                          Цитата settler @
                                                                                                                                          вот код оттуда, два потока изменяют globalValue, синхронизация не нужна?
                                                                                                                                          Тут вообще-то только одна функция меняет globalValue. А ты походу просто не умеешь читать, это же пример двух подходов. В чистом ФП никаких мутабльных переменных нет. А глобальные иммутабльные - это суть константы их не нужно синхронизировать.
                                                                                                                                          Сирожа в очередной раз доказывает, что он и в этой области - полная некомпетентность. Причем глупая и упрямая некомпетентность.
                                                                                                                                          Сообщение отредактировано: applegame -
                                                                                                                                            Цитата D_KEY @
                                                                                                                                            Цитата JoeUser @
                                                                                                                                            1) Реальные проекты на функциональщине??? (список)

                                                                                                                                            Что считать функциональщиной? На Scala много что пишут, например. Я уже приводил пример Twitter, да и Spark тот же и другие похожие вещи. LinkedIn вроде тоже на ней. Как и их очереди - Kafka.

                                                                                                                                            Просто недавно пролетал такой "тренд", мол функциональщина - весьма древний подход. Даже древнее процедурного и ООП программирования. Логично, если древний (и главное эффективный) - софта должно быть немерянно, гораздо больше или минимум равному другим "подходам". А я пока слышу только о брендах типа Твитер. А где операционные системы, встраиваемые системы, СУБД, АРМы проектирования ... где все это??? Ничего не смущает?
                                                                                                                                              Цитата JoeUser @
                                                                                                                                              Просто недавно пролетал такой "тренд", мол функциональщина - весьма древний подход. Даже древнее процедурного и ООП программирования. Логично, если древний (и главное эффективный) - софта должно быть немерянно, гораздо больше или минимум равному другим "подходам". А я пока слышу только о брендах типа Твитер. А где операционные системы, встраиваемые системы, СУБД, АРМы проектирования ... где все это??? Ничего не смущает?
                                                                                                                                              Что должно смущать? Тренд пролетел, я полагаю, в связи с развитием мультпроцессорности, на которой ФП может быть эффективней, проще и надежнее, чем императив. Но всему свое место, чистые ФП языки вроде Хаскеля лично я считаю академической забавой. А в реальных приложениях надо использовать смешанный подход: функциональщина + императив. Зачем бросаться в крайности?

                                                                                                                                              В любом случае я считаю необходимым изучить и функциональный подход, очень полезно для тренировки мозга. Да и на свои императивные алгоритмы начинаешь смотреть под другим углом и видеть грани, которых раньше не замечал.
                                                                                                                                              Сообщение отредактировано: applegame -
                                                                                                                                                Цитата applegame @
                                                                                                                                                Тренд пролетел, я полагаю, в связи с развитием мультпроцессорности, на которой ФП может быть эффективней, проще и надежнее, чем императив. Но всему свое место, чистые ФП языки вроде Хаскеля лично я считаю академической забавой. А в реальных приложениях надо использовать смешанный подход: функциональщина + императив. Зачем бросаться в крайности?

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

                                                                                                                                                +1
                                                                                                                                                  Цитата applegame @
                                                                                                                                                  Что должно смущать? Тренд пролетел, я полагаю, в связи с развитием мультпроцессорности, на которой ФП может быть эффективней, проще и надежнее, чем императив. Но всему свое место, чистые ФП языки вроде Хаскеля лично я считаю академической забавой. А в реальных приложениях надо использовать смешанный подход: функциональщина + императив. Зачем бросаться в крайности?

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

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

                                                                                                                                                  Да, на Цэ легче программить, чем на Асме ... Да, на Цэ можем позволить себе чаще дергать стек. Но простите, разговор о функциональщине - это не тот порядок! Тут нужны гораздо более веские основания. Я далеко не спец в фунциональщине, но кроме ленивых вычислений - я явного профита не вижу. Хотите опровергнуть - приведите пример сравнения! Посмотрим, оценим границы, важность ... Иначе все это пустая болтовня.
                                                                                                                                                    JoeUser, тут не агитация идет, а спор :)
                                                                                                                                                    Вас никто не заставляет использовать функциональщину.
                                                                                                                                                      Цитата JoeUser @
                                                                                                                                                      Я далеко не спец в фунциональщине, но кроме ленивых вычислений - я явного профита не вижу.

                                                                                                                                                      Прочитай ссылку, что я выкладывал на первой странице. Причина "куда реже ошибаешься", имхо, достаточно значимая и вполне может быть где-то определяющей.
                                                                                                                                                        ФОРТРАН (1957) - первый язык, для которого был написан транслятор.
                                                                                                                                                        Первым функциональным языком считается LISP (1958). По крайней мере в таком качестве он разрабатывался.
                                                                                                                                                        Первым процедурным - Algol-60 (1960).
                                                                                                                                                        Первым ООП - Симула 67 (1967).
                                                                                                                                                          Цитата applegame @
                                                                                                                                                          Сирожа в очередной раз доказывает, что он и в этой области - полная некомпетентность. Причем глупая и упрямая некомпетентность.

                                                                                                                                                          М-да, вся суть:
                                                                                                                                                          Цитата settler @
                                                                                                                                                          Лень вникать


                                                                                                                                                          Цитата JoeUser @
                                                                                                                                                          Хотите опровергнуть — …

                                                                                                                                                          …вспомните чайник Рассела.

                                                                                                                                                          Добавлено
                                                                                                                                                          Цитата JoeUser @
                                                                                                                                                          А где операционные системы

                                                                                                                                                          Развлекайся
                                                                                                                                                            Цитата applegame @
                                                                                                                                                            Я слышал лет эдак 15 назад, еще в институте. Еще вопросы?

                                                                                                                                                            Ага звиздун ты , большой , функциональным стилем называли процедурный,
                                                                                                                                                            в каком то ты особом инстутуте учился , ;) Кроме личных наездов
                                                                                                                                                            ничо сказать не можешь, все ясно разговор закончен , единсвенное что ты умеешь это вырывать куски фраз
                                                                                                                                                            их контекста молодец иди возьми пирожок , ;)
                                                                                                                                                              settler, не знаю, откуда ты берёшь сведения, но процедурное программирование всегда называли процедурным. А функциональным называли, то что и сейчас называют функциональным.
                                                                                                                                                              Возможно, в той среде, где ты получал образование, было принято называть зелёное оранжевым, а чёрное белым. Чтобы в будущем студенты не тушевались, называя банальных террористов борцами с тиранией.
                                                                                                                                                                Цитата applegame @
                                                                                                                                                                Но всему свое место, чистые ФП языки вроде Хаскеля лично я считаю академической забавой. А в реальных приложениях надо использовать смешанный подход: функциональщина + императив. Зачем бросаться в крайности?

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


                                                                                                                                                                D_Key
                                                                                                                                                                для паралельных вычислений используют map/reduce сколько там потоков сделает тебе скала ты не знаешь ,
                                                                                                                                                                средств управления ими у тебя нет, на одной машине все равно больше 8ядер не бывет, я не говорю о MF.
                                                                                                                                                                Я когда мэвен запускаю, выбрав 8 потоков разницу между 1 почти не чувствую , может две три секунды выигрыш,
                                                                                                                                                                отсилы 10, это когда весь процесс бежит .5часа , В теории все прекрасно , в реальности пока этой самой много поточности не видно,

                                                                                                                                                                Добавлено
                                                                                                                                                                Цитата amk @
                                                                                                                                                                Возможно, в той среде, где ты получал образование, было принято называть зелёное оранжевым, а чёрное белым. Чтобы в будущем студенты не тушевались, называя банальных террористов борцами с тиранией.

                                                                                                                                                                Ну возможно английское образование какое то неправильное ,
                                                                                                                                                                термин функциональное програмирование я слышу максимум год, может
                                                                                                                                                                сюда цивилизация не доходит, ;) вторую часть не понял, скажи по-русски ;)
                                                                                                                                                                  Цитата JoeUser @
                                                                                                                                                                  Просто недавно пролетал такой "тренд", мол функциональщина - весьма древний подход. Даже древнее процедурного и ООП программирования. Логично, если древний (и главное эффективный) - софта должно быть немерянно, гораздо больше или минимум равному другим "подходам". А я пока слышу только о брендах типа Твитер. А где операционные системы, встраиваемые системы, СУБД, АРМы проектирования ... где все это??? Ничего не смущает?

                                                                                                                                                                  Не совсем точная постановка вопроса. В таких случаях всегда надо уточнять область, про которую идёт речь. Функциональные языки сейчас довольно прочно обосновались в задачах мат. моделирования. То есть если поездить по конференциям, где общаются математики, общаться они будут про хаскель и ни разу не C/C++. Причина очевидна - если перейти от обычных персоналок к суперкомпам, где количество процов идёт на сотни, языки, умеющие параллелить "на автомате" котируются гораздо выше тех, которые предлагают поуправлять потоками руками. А ещё и иммутабельность "по дефолту", приближенность к математической записи функций, возможность построения embedded-DSL почти любой сложности - и их популярность в научной и околонаучной среде становится понятной. Является ли мат. моделирование серьёзной областью разработки софта - вопрос открытый. Я бы сказал, что да.

                                                                                                                                                                  Добавлено
                                                                                                                                                                  Цитата settler @
                                                                                                                                                                  термин функциональное програмирование я слышу максимум год, может

                                                                                                                                                                  Просто оно вновь становится популярным.
                                                                                                                                                                    Цитата settler @
                                                                                                                                                                    Ну возможно английское образование какое то неправильное ,
                                                                                                                                                                    термин функциональное програмирование я слышу максимум год, может
                                                                                                                                                                    сюда цивилизация не доходит
                                                                                                                                                                    Ты либо на задворках цивилизации живёшь, куда знания с большими задержками доходят и сильно искажённые, либо привык за истину выдавать собственную интерпретацию, того, что услышал или увидел.
                                                                                                                                                                    Потому что в России по крайней мере последние 30 лет функциональным называют именно функциональное программирование. А процедурным всегда называли процедурным. Причём названия эти 30 лет фигурируют как в русскоязычной литературе (преимущественно переводной, хотя и отечественная есть), так и в доступной литературе на английском и немецком языках (другими не интересовался, так как всё равно толком не прочитаю).

                                                                                                                                                                    Добавлено
                                                                                                                                                                    Раньше, в эпоху компьютеров с малой памятью и одним процессором функциональное программирование не давало каких-либо преимуществ перед другими парадигмами. Более того, часто оно им уступало - рекурсия быстро исчерпывает память. Что касается отсутствия необходимости в синхронизации, то на однопроцессорных системах синхронизация стоит относительно дёшево. Достаточно не позволять процессору переключаться на другую задачу, когда не надо.
                                                                                                                                                                      Цитата amk @
                                                                                                                                                                      Раньше, в эпоху компьютеров с малой памятью и одним процессором функциональное программирование не давало каких-либо преимуществ перед другими парадигмами. Более того, часто оно им уступало - рекурсия быстро исчерпывает память. Что касается отсутствия необходимости в синхронизации, то на однопроцессорных системах синхронизация стоит относительно дёшево. Достаточно не позволять процессору переключаться на другую задачу, когда не надо.

                                                                                                                                                                      Зато в многопроцессорных и кластерных системах - даёт огромное преимущество. Ибо map-reduce-алгоритмы идеально ложатся на функциональную парадигму с ленивыми вычислениями.
                                                                                                                                                                      Сообщение отредактировано: Flex Ferrum -
                                                                                                                                                                        Цитата Flex Ferrum @
                                                                                                                                                                        Зато в многопроцессорных и кластерных системах - даёт огромное преимущество. Ибо map-reduce-алгоритмы идеально ложатся на функциональную парадигму с ленивыми вычислениями.

                                                                                                                                                                        Что это такое? FP ты своими словами можешь определить без ссылок на википедию ,

                                                                                                                                                                        Добавлено
                                                                                                                                                                        Цитата amk @
                                                                                                                                                                        Потому что в России по крайней мере последние 30 лет функциональным называют именно функциональное программирование.

                                                                                                                                                                        C чего ему фигyрировать если его в практике не существовало, ну какой процент програмистов писал на лиспе
                                                                                                                                                                        или прологе?

                                                                                                                                                                        Добавлено
                                                                                                                                                                        Цитата Flex Ferrum @
                                                                                                                                                                        Зато в многопроцессорных и кластерных системах - даёт огромное преимущество. Ибо map-reduce-алгоритмы идеально ложатся на функциональную парадигму с ленивыми вычислениями.

                                                                                                                                                                        Где ты в том же Хескеле может указать сколько потоков нужно определить?
                                                                                                                                                                        Сколько потоков бегут на каждом ядре ?
                                                                                                                                                                        5? 10? 100? Про мэвен еще раз расказать как это в реальности может не работать?
                                                                                                                                                                          Цитата settler @
                                                                                                                                                                          Ну возможно английское образование какое то неправильное

                                                                                                                                                                          Да, явно не MIT.

                                                                                                                                                                          Цитата amk @
                                                                                                                                                                          Более того, часто оно им уступало - рекурсия быстро исчерпывает память.

                                                                                                                                                                          Рекурсия тут особо не при чём, оптимизация хвостовой рекурсии была уже во времена SICP (86), а возможно уже в ML (77). Другое дело, что GC, замыкания — это всё тяжеловесней вызова процедуры в Си. А уж если говорить о ленивых языках (Miranda 85), то это и создание thunk'ов на каждый чих, и «особый путь» в организации IO.

                                                                                                                                                                          ООП-языки (Simula 67, SmallTalk 80) тоже были для своего времени относительно тормозными (по сравнению со старым добрым Си) и не пошли в массы. Но потом появился С++ с достаточно эффективной ОО-моделью и ООП постепенно завоевало мир, про ФП и прочие подходы почти все забыли.
                                                                                                                                                                          Сообщение отредактировано: korvin -
                                                                                                                                                                            Цитата settler @
                                                                                                                                                                            C чего ему фигyрировать если его в практике не существовало, ну какой процент програмистов писал на лиспе
                                                                                                                                                                            или прологе?
                                                                                                                                                                            Из тех, с кем я работал в начале перестройки, все писали, хотя бы чтобы попробовать. На обоих языках. Пролог не прижился. Но Пролог не функциональный язык. Да и на Лиспе часто пишут не в функциональном стиле.
                                                                                                                                                                              Цитата settler @
                                                                                                                                                                              Что это такое? FP ты своими словами можешь определить без ссылок на википедию ,

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


                                                                                                                                                                              Цитата settler @
                                                                                                                                                                              Где ты в том же Хескеле может указать сколько потоков нужно определить?

                                                                                                                                                                              Многопоточность - не единственный способ организации параллельных вычислений. И не всегда самый эффективный. И вообще, ручная оптимизация сейчас - чаще всего удел гиков. Современные средства разработки справляются с этим лучше разработчика, особенно рядового разработчика.
                                                                                                                                                                              Сообщение отредактировано: Flex Ferrum -
                                                                                                                                                                                Цитата korvin @

                                                                                                                                                                                Цитата JoeUser @
                                                                                                                                                                                Хотите опровергнуть — …

                                                                                                                                                                                …вспомните чайник Рассела.

                                                                                                                                                                                Ты просто мастер интерпретаци! :lool: По поводу Чайника Рассела ... я всеж позволю себе выделить главное:
                                                                                                                                                                                Цитата
                                                                                                                                                                                «Ча́йник Ра́ссела» (англ. Russell's Teapot) — аналогия, впервые приведённая английским математиком и философом Бертраном Расселом (1872—1970) для опровержения идеи, что бремя доказательства ложности религиозных утверждений лежит на сомневающемся.

                                                                                                                                                                                Таки я согласен я с Расселом, доказывать нужно истинность существования (а не отсутствия).

                                                                                                                                                                                Цитата korvin @

                                                                                                                                                                                Посмотрел. Если там то, что назвали - "операционные системы", то мой утюг - не меньше, чем нейрокомпьютер :lol:
                                                                                                                                                                                  Цитата JoeUser @
                                                                                                                                                                                  Посмотрел. Если там то, что назвали - "операционные системы", то мой утюг - не меньше, чем нейрокомпьютер
                                                                                                                                                                                  Вообще-то те операционные системы правильнее называть операционные среды. Обычно они предназначены для запуска и поддержки программ, написанных на единственном языке программирования. Что-то вроде усложнённого монитора ПК "Радио-86РК".

                                                                                                                                                                                  У тебя в утюге программируемый контроллер стоит?
                                                                                                                                                                                  Шутки шутками, а, например, даже в самом простом цифровом телевизоре операционка на порядок сложнее.
                                                                                                                                                                                    Цитата settler @
                                                                                                                                                                                    Цитата applegame @
                                                                                                                                                                                    Я слышал лет эдак 15 назад, еще в институте. Еще вопросы?

                                                                                                                                                                                    Ага звиздун ты , большой , функциональным стилем называли процедурный,
                                                                                                                                                                                    в каком то ты особом инстутуте учился ;)

                                                                                                                                                                                    Нет. Курс Функционального и логического программирования в ВУЗах РФ существует довольно давно.

                                                                                                                                                                                    Добавлено
                                                                                                                                                                                    Цитата settler @
                                                                                                                                                                                    D_Key
                                                                                                                                                                                    для паралельных вычислений используют map/reduce сколько там потоков сделает тебе скала ты не знаешь ,
                                                                                                                                                                                    средств управления ими у тебя нет

                                                                                                                                                                                    Тонкий тюнинг нужен очень редко. И он есть.
                                                                                                                                                                                    Цитата

                                                                                                                                                                                    , на одной машине все равно больше 8ядер не бывет

                                                                                                                                                                                    У меня на серверах по 24 ядра.
                                                                                                                                                                                    Цитата

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

                                                                                                                                                                                    Нет. Там тоже в курсах довольно давно изучают ФП.
                                                                                                                                                                                    В каком ВУЗе ты получил "английское образование"?
                                                                                                                                                                                      D_KEY, ты не забывай, что settler у нас computer science не обучен.
                                                                                                                                                                                        Цитата amk @
                                                                                                                                                                                        У тебя в утюге программируемый контроллер стоит?

                                                                                                                                                                                        :sarcasm:

                                                                                                                                                                                        Ваш KO :)
                                                                                                                                                                                          Цитата JoeUser @
                                                                                                                                                                                          Если там то, что назвали - "операционные системы", то мой утюг - не меньше, чем нейрокомпьютер

                                                                                                                                                                                          В чём твоя проблема? Путаешь тёплое с мягким? На D, я так полагаю, ОС ждать не приходится? =)
                                                                                                                                                                                          Сообщение отредактировано: korvin -
                                                                                                                                                                                            Цитата korvin @

                                                                                                                                                                                            В чём твоя проблема? Путаешь тёплое с мягким?

                                                                                                                                                                                            Съезд на личности - такой съезд. :lol: Но, когда агрументов нет, таки и выхода нет) Чего греха таить, и я могу немножко перейти, но только с аргументами по теме!

                                                                                                                                                                                            Цитата korvin @
                                                                                                                                                                                            На D, я так полагаю, ОС ждать не приходится? =)


                                                                                                                                                                                            Ну, если сравнить, историю развития Хаскеля (1990) и D (2001), то 11 лет форы еще есть. И тем не менее ... Компиляторы D самодостаточны. А давай-ка почитаем про операционную систему на Хаскеле повнимательнее:

                                                                                                                                                                                            Цитата
                                                                                                                                                                                            Hos: A Haskell operating system
                                                                                                                                                                                            The kernel is written in mainly JHC Haskell, with fallbacks to C where necessary (biggest one being the garbage collector and rts). JHC was chosen because it produces ANSI C code which is easy to compile with a cross-compiler.

                                                                                                                                                                                            Таки 25 лет развития мало, чтобы быть самодостаточным, не? Вторая "операционная система" House (Kenny Graunke has made available a a newer version of House, ported to GHC 6.8.2 (October 2008)) - при переходе говорит 404. Да и обе эти системы по описанию даже до MS Dos'а не дотянули по количеству системных утилит. И не близко. Операционные системы на Хаскеле - мыльный пузырь, короче. Так, попытка написать ядро с окружением. А это ни разу не операционная система.

                                                                                                                                                                                            Давай обратимся к "ширпотребу" и оценим количество созданного за 25 развития софта:

                                                                                                                                                                                            Офисные системы - ?
                                                                                                                                                                                            Издательские системы - ?
                                                                                                                                                                                            САПР - ?
                                                                                                                                                                                            Бухгалтерские системы - ?
                                                                                                                                                                                            И отдельным пунктом "научные" системы - может тут повезет?

                                                                                                                                                                                            Скрытый текст
                                                                                                                                                                                            По поводу языка D - как я понял, это была попытка вырваться из застоя стандарта C++. Да ситуация изменилась, при нынешних подвижках в развитии С++, c D будет непредсказуемо. Но фазу (реального) бутстрепинга D недавно прошел, а Хаскель до сих пор "паразитирует" на C и ASM
                                                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                                                              Таки 25 лет развития мало, чтобы быть самодостаточным, не?

                                                                                                                                                                                              Я подожду, когда компилятор D будет работать на голом железе, без ОС, и будет компилировать такие же программы (работающие на голом железе), тогда и поговорим про «самодостаточность».

                                                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                                                              Таки 25 лет развития мало, чтобы быть самодостаточным, не? Вторая "операционная система" House (Kenny Graunke has made available a a newer version of House, ported to GHC 6.8.2 (October 2008)) - при переходе говорит 404. Да и обе эти системы по описанию даже до MS Dos'а не дотянули по количеству системных утилит. И не близко. Операционные системы на Хаскеле - мыльный пузырь, короче. Так, попытка написать ядро с окружением. А это ни разу не операционная система.

                                                                                                                                                                                              Ок, так и запишем: для JoeUser любой язык, на котором нет ОС массового использования или вообще нет ОС, не представляет интереса.
                                                                                                                                                                                              И скажи, для тебя ОС — это количество системных утилит?

                                                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                                                              Офисные системы - ?

                                                                                                                                                                                              Ещё одни? Тебе MSO/LO/(Pages/Numbers) мало?

                                                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                                                              Издательские системы - ?

                                                                                                                                                                                              Как будто есть что-то кроме TeX'а…

                                                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                                                              САПР - ?

                                                                                                                                                                                              Тебе существующих мало?

                                                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                                                              Бухгалтерские системы - ?

                                                                                                                                                                                              В этот ад вообще мало кто лезть хочет, но вот скажи, почему там 1C / ABAP(SAP), а не С++, D?

                                                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                                                              И отдельным пунктом "научные" системы - может тут повезет?

                                                                                                                                                                                              Что такое «научные» системы?

                                                                                                                                                                                              Где же это всё на D?

                                                                                                                                                                                              Цитата JoeUser @
                                                                                                                                                                                              Но фазу (реального) бутстрепинга D недавно прошел, а Хаскель до сих пор "паразитирует" на C и ASM

                                                                                                                                                                                              И как же D обходится без ассемблера? Сразу двоичный код фигачит? И каким образом Хаскель «паразитирует» на Си?
                                                                                                                                                                                                Цитата D_KEY @
                                                                                                                                                                                                Нет. Курс Функционального и логического программирования в ВУЗах РФ существует довольно давно.

                                                                                                                                                                                                Языков не было , так что изучали то , голую теорию ?
                                                                                                                                                                                                Логическое програмирование да было, пролог кажеться , что с ним делать, если ты не.
                                                                                                                                                                                                физик с PHD, я пока не знаю,
                                                                                                                                                                                                Курсов в вузах по языкам тут нету в принципе, языки ты изучаешь сам по ходу дела,
                                                                                                                                                                                                ну разве что java Basic или Introduction to C++.

                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                Цитата D_KEY @
                                                                                                                                                                                                , на одной машине все равно больше 8ядер не бывет

                                                                                                                                                                                                Цитата
                                                                                                                                                                                                У меня на серверах по 24 ядра.

                                                                                                                                                                                                Да у меня 32 в 99году было, счас там 10000, забыл добавить "чаще всего", Я тебе говорю о массовости,

                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                Цитата D_KEY @
                                                                                                                                                                                                В каком ВУЗе ты получил "английское образование"?

                                                                                                                                                                                                ОРТ Брауде + Технион, хотя какая разница, учится реально ты начинаешь когда диплом
                                                                                                                                                                                                уже на руках,

                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                Цитата D_KEY @
                                                                                                                                                                                                Тонкий тюнинг нужен очень редко. И он есть.

                                                                                                                                                                                                Ты про мэвен мой пример прочитал?

                                                                                                                                                                                                И как ты тюрнинг настороишь ? Конкретный пример можно?
                                                                                                                                                                                                И как ты проверяешь что он работает?

                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                Цитата D_KEY @
                                                                                                                                                                                                Нет. Там тоже в курсах довольно давно изучают ФП.

                                                                                                                                                                                                Если где-то изучают и то два дня, дальше своя голова,
                                                                                                                                                                                                Хотя там это слишком широкое понятие , Я говорю про 30/60 где живу,
                                                                                                                                                                                                про левые вузы где за 1,5 магистра делают, мы не говорим

                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                Цитата korvin @
                                                                                                                                                                                                В этот ад вообще мало кто лезть хочет, но вот скажи, почему там 1C / ABAP(SAP), а не С++, D?

                                                                                                                                                                                                Это не програмирование, а скорее пародия на него, хотя вина тут не языка а технически безграмотных
                                                                                                                                                                                                менажеров, у них нет програмиского образование и они не в состоянии оценить тот колосальный профит
                                                                                                                                                                                                можно было бы получит использовав програмистов по назначению,
                                                                                                                                                                                                эти языки заточены на конретные цели , и работают только в LS.
                                                                                                                                                                                                И там есть свои фичи , которых часто нет в "нормальных" языках.
                                                                                                                                                                                                Сообщение отредактировано: settler -
                                                                                                                                                                                                  Цитата korvin @
                                                                                                                                                                                                  Цитата JoeUser @
                                                                                                                                                                                                  Таки 25 лет развития мало, чтобы быть самодостаточным, не?

                                                                                                                                                                                                  Я подожду, когда компилятор D будет работать на голом железе, без ОС, и будет компилировать такие же программы (работающие на голом железе), тогда и поговорим про «самодостаточность».

                                                                                                                                                                                                  При чем тут "на голом железе"? Я прочитал про создание компиляторов Хаскеля под разные платформы. Там есть удивительное промежуточное звено - использование кросс-копилятора Си под нужную платформу. Кстати это ответ и на вопрос "каким образом паразитирует":
                                                                                                                                                                                                  Цитата
                                                                                                                                                                                                  In this section, we explain how to bootstrap GHC on a new platform, using unregisterised intermediate C files. We haven't put a great deal of effort into automating this process, for two reasons: it is done very rarely, and the process usually requires human intervention to cope with minor porting issues anyway.
                                                                                                                                                                                                  The following step-by-step instructions should result in a fully working, albeit unregisterised, GHC. Firstly, you need a machine that already has a working GHC (we'll call this the host machine), in order to cross-compile the intermediate C files that we will use to bootstrap the compiler on the target machine. We'll assume that you are porting to platform plat, e.g. plat may be x86_64-unknown-linux.


                                                                                                                                                                                                  Цитата korvin @
                                                                                                                                                                                                  Ок, так и запишем: для JoeUser любой язык, на котором нет ОС массового использования или вообще нет ОС, не представляет интереса.
                                                                                                                                                                                                  Нет, это лишь говорит о "удобстве языка". Фортран когда-то был наверное самом массовым - но позиции свои сдал, ибо появились языки лучше. Интерес перестал представлять? Нет, вернее не сам язык, а наработки на нем. Чем похвастает Хаскель - массовостью? наработками?

                                                                                                                                                                                                  Цитата korvin @
                                                                                                                                                                                                  И скажи, для тебя ОС — это количество системных утилит?

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

                                                                                                                                                                                                  Цитата korvin @

                                                                                                                                                                                                  Ещё одни? Тебе MSO/LO/(Pages/Numbers) мало?

                                                                                                                                                                                                  Это продукты, созданные на Хаскеле?

                                                                                                                                                                                                  Цитата korvin @
                                                                                                                                                                                                  Как будто есть что-то кроме TeX'а…

                                                                                                                                                                                                  Это создано на Хаскеле?

                                                                                                                                                                                                  Цитата korvin @
                                                                                                                                                                                                  Тебе существующих мало?

                                                                                                                                                                                                  Существующих, т.е. конкуренция была? Где были программисты, пользующие Хаскель?

                                                                                                                                                                                                  Цитата korvin @
                                                                                                                                                                                                  В этот ад вообще мало кто лезть хочет, но вот скажи, почему там 1C / ABAP(SAP), а не С++, D?

                                                                                                                                                                                                  Стоп. 1С тоже не писалась на Хаскеле???

                                                                                                                                                                                                  Цитата korvin @
                                                                                                                                                                                                  Что такое «научные» системы?

                                                                                                                                                                                                  :'(
                                                                                                                                                                                                  Скрытый текст
                                                                                                                                                                                                  user posted image

                                                                                                                                                                                                  "Научное программное обеспечение"

                                                                                                                                                                                                  Цитата korvin @
                                                                                                                                                                                                  Где же это всё на D?

                                                                                                                                                                                                  Погоди, мы говорим о Хаскеле. Если какой-то другой язык (например D) недотягивает, от этого Хаскель лучше не станет. И D - по сравнению с С/C++ поделка, с теми же недостатками. Но мы говорим про Хаскель.

                                                                                                                                                                                                  Цитата korvin @
                                                                                                                                                                                                  И как же D обходится без ассемблера? Сразу двоичный код фигачит?

                                                                                                                                                                                                  Создает объектный код и линкуется. Никаких С-компиляторов и С-файлов ему в помощь не нужно.

                                                                                                                                                                                                  Цитата korvin @
                                                                                                                                                                                                  И каким образом Хаскель «паразитирует» на Си?

                                                                                                                                                                                                  В замом начале ответил - про создание компиляторов GHC под разные платформы.
                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                    Давай обратимся к "ширпотребу" и оценим количество созданного за 25 развития софта:

                                                                                                                                                                                                    Офисные системы - ?
                                                                                                                                                                                                    Издательские системы - ?
                                                                                                                                                                                                    САПР - ?
                                                                                                                                                                                                    Бухгалтерские системы - ?

                                                                                                                                                                                                    Применять Хаскель (или любой другой функциональный язык) в этих областях - это примерно тоже самое, что писать сайты на голом C/C++ или заниматься сексом в гамаке надев скафандр. Можно, но зачем?

                                                                                                                                                                                                    Добавлено
                                                                                                                                                                                                    settler про меня, похоже, забыл.
                                                                                                                                                                                                      Цитата JoeUser @
                                                                                                                                                                                                      Существующих, т.е. конкуренция была? Где были программисты, пользующие Хаскель?

                                                                                                                                                                                                      А в академии, на практике есть три реально рабочих языка ,
                                                                                                                                                                                                      С/С++ Java и С# это 90% рынка, каждый со своими плюсами и минусами,
                                                                                                                                                                                                      все остальное пока на уровне разговоров, когда появился С# рынок его принял
                                                                                                                                                                                                      буквально за год, хотя до этого был VB-6/5/4/3 получивший распросранение очень быстро,
                                                                                                                                                                                                      Java появиласть реально где-то в 98году, пока она была кривая и тормозная, оставался С++
                                                                                                                                                                                                      хотя с Бустом и QT.Как только ява стала полноценным языком примерно с пятой версии рынок стал ею
                                                                                                                                                                                                      забит, Как только появиться реально хороший язык рынок его быстро адаптирует ,
                                                                                                                                                                                                      Пока только разговоры .
                                                                                                                                                                                                        Цитата Flex Ferrum @
                                                                                                                                                                                                        примерно тоже самое, что писать сайты на голом C/C++
                                                                                                                                                                                                        Поскольку C и C++ универсальные языки программирования, то на них сайт написать всё-таки можно, и это не намного сложнее, чем на том же PHP. Всё-таки сайт это фактически просто генерация текста. Придётся конечно с библиотеками подсуетиться.
                                                                                                                                                                                                          Цитата amk @
                                                                                                                                                                                                          Поскольку C и C++ универсальные языки программирования, то на них сайт написать всё-таки можно, и это не намного сложнее, чем на том же PHP. Всё-таки сайт это фактически просто генерация текста. Придётся конечно с библиотеками подсуетиться.

                                                                                                                                                                                                          Да можно и зайца научить курить. Нет ничего невозможного для человека с интеллектом. :) Я говорю про то, насколько инструмент соответствует задаче.
                                                                                                                                                                                                            Цитата amk @
                                                                                                                                                                                                            Цитата settler @
                                                                                                                                                                                                            C чего ему фигyрировать если его в практике не существовало, ну какой процент програмистов писал на лиспе
                                                                                                                                                                                                            или прологе?
                                                                                                                                                                                                            Из тех, с кем я работал в начале перестройки, все писали, хотя бы чтобы попробовать. На обоих языках. Пролог не прижился. Но Пролог не функциональный язык. Да и на Лиспе часто пишут не в функциональном стиле.

                                                                                                                                                                                                            Я не говорил что пролог ФЯ он -логический , и сделан для определенных задач,
                                                                                                                                                                                                            универсальным/полноценным его назовешь с натягом,
                                                                                                                                                                                                              Цитата settler @
                                                                                                                                                                                                              Я не говорил что пролог ФЯ он -логический , и сделан для определенных задач,
                                                                                                                                                                                                              универсальным/полноценным его назовешь с натягом,
                                                                                                                                                                                                              Да его и с натягом универсальным не назовёшь. Это фактически, всего лишь реализация алгоритма поиска с возвратами.
                                                                                                                                                                                                                Цитата amk @
                                                                                                                                                                                                                Поскольку C и C++ универсальные языки программирования,

                                                                                                                                                                                                                Уже давно нет, были такими когда небыло явы и нета,
                                                                                                                                                                                                                Сейчас С++ нужен либо для задач где критична скорость, либо прямой доступ к памяти,
                                                                                                                                                                                                                Писать не нем веб сайте чисто технически , можно в реальности такая фирма - 100% банкрот,
                                                                                                                                                                                                                PHP специально сделан для веба,

                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                Цитата amk @
                                                                                                                                                                                                                Цитата settler @
                                                                                                                                                                                                                Я не говорил что пролог ФЯ он -логический , и сделан для определенных задач,
                                                                                                                                                                                                                универсальным/полноценным его назовешь с натягом,
                                                                                                                                                                                                                Да его и с натягом универсальным не назовёшь. Это фактически, всего лишь реализация алгоритма поиска с возвратами.

                                                                                                                                                                                                                Ну так на чем и ФПЯ писали во время перестройки то?
                                                                                                                                                                                                                  Цитата settler @
                                                                                                                                                                                                                  Уже давно нет, были такими когда небыло явы и нета,
                                                                                                                                                                                                                  Сейчас С++ нужен либо для задач где критична скорость, либо прямой доступ к памяти,
                                                                                                                                                                                                                  Писать не нем веб сайте чисто технически , можно в реальности такая фирма - 100% банкрот,
                                                                                                                                                                                                                  PHP специально сделан для веба,

                                                                                                                                                                                                                  Ну, появились специализированные языки, с чего это C/C++ перестали вдруг быть универсальными. Что, после появления PHP писать сайты на C/C++ стало сложнее? По-моему, наоборот проще.
                                                                                                                                                                                                                  Скорость не всегда важна, я, к примеру многие задачу решаю на Питоне, а не на C++, просто потому, что на Питоне у меня получается быстрее программу написать и отладить.
                                                                                                                                                                                                                  Про такую фичу языка, как прямой доступ к памяти, знают хорошо, если один человек из ста. Да и среди них 90% как мантру повторяют: прямой доступ в память это зло, того, кто работает с голыми указателями, надо сразу увольнять. Больше противников наверно только у goto.
                                                                                                                                                                                                                    Цитата settler @
                                                                                                                                                                                                                    Применять Хаскель (или любой другой функциональный язык) в этих областях - это примерно тоже самое, что писать сайты на голом C/C++ или заниматься сексом в гамаке надев скафандр. Можно, но зачем?

                                                                                                                                                                                                                    Я просто смею утверждать, что сей язык - достаточно узконаправлен. Причем настолько узконаправлен, что в среде программеров на 98% от всей информации - знают о его "идеологии", 1% - о реальном применении (я про различные утилиты при сборке *nix систем и их компонентов), и 1% - о созданных на нем целостных ПП. Оппоненты же пытаются "натянуть" его возможности, сравнивая с ЯП общего назначения. Что не есть тру. У него своя ниша и нефик рассказывать сказки про "операционные системы".

                                                                                                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                                                                                                    Да можно и зайца научить курить.

                                                                                                                                                                                                                    Аллегория хорошая.
                                                                                                                                                                                                                    Но даже научив зайца курить мануалы по GPSS, никогда не научишь зайца на нем моделировать.
                                                                                                                                                                                                                    А тем более писать на нем сайты и "операционные системы"! :lol:
                                                                                                                                                                                                                      Цитата Flex Ferrum @
                                                                                                                                                                                                                      то писать сайты на голом C/C++

                                                                                                                                                                                                                      Кстати, в своем любопытстве языком D, я не сильно продвинулся ... но что удивило, народ упорно на нем пишет CMS'ы. Спрашиваю "нафига", отвечают быстрее, удобнее и компактнее. За что купил, за то продал.
                                                                                                                                                                                                                        Цитата settler @
                                                                                                                                                                                                                        Что это такое? FP ты своими словами можешь определить без ссылок на википедию ,

                                                                                                                                                                                                                        Спрашивается, зачем спрашивать, если ответ не интересен?
                                                                                                                                                                                                                          Цитата amk @
                                                                                                                                                                                                                          кто работает с голыми указателями, надо сразу увольнять.

                                                                                                                                                                                                                          Слишком категорично, без ОS при работе с dataSheet или как он там назыветься док что железку
                                                                                                                                                                                                                          описывает,, по другому никак,или в задачах RT , доступ *struct+delta для скорости,
                                                                                                                                                                                                                          тоже JNI без поитеров никак
                                                                                                                                                                                                                          http://stackoverflow.com/questions/1242046...env-environment

                                                                                                                                                                                                                          Ты об аппликациях говоришь, тоесть safety is first, ну так и пиши на Питоне или чем нидь другом
                                                                                                                                                                                                                          сам же сказал что писать быстрее , зачем тебе С++ вообще тут нужен, то что критично строй dll/so
                                                                                                                                                                                                                          И зови из того же Пайтона/Явы/Шарпа,

                                                                                                                                                                                                                          А ну как сделай на С++ выборку их БД, или НTTP сервер, затрахаешься ;)

                                                                                                                                                                                                                          Добавлено
                                                                                                                                                                                                                          Цитата Flex Ferrum @
                                                                                                                                                                                                                          Спрашивается, зачем спрашивать, если ответ не интересен?

                                                                                                                                                                                                                          Почему ты так решил? в принципе ты сказал то же самое что и я,
                                                                                                                                                                                                                          только я на русском так не могу фразу построить, и все,
                                                                                                                                                                                                                          Я думал что речь о чем то другом мне не ведомом, ну и парадигмы я тут не живу,
                                                                                                                                                                                                                          для меня это слишком красивое слово, нужное для маркетолога и лишнее для разраба,
                                                                                                                                                                                                                          ну кроме как на интевью показать что ты крутой, или не лекции студентом,
                                                                                                                                                                                                                          По сути еще одна фича,
                                                                                                                                                                                                                            settler, а где ты сказал то же, что и я? В каком посте?

                                                                                                                                                                                                                            Добавлено
                                                                                                                                                                                                                            Я думаю, что дальше settler'а можно смело игнорировать. Всё равно он плохо понимает, о чём спорит.
                                                                                                                                                                                                                              Цитата Flex Ferrum @
                                                                                                                                                                                                                              Всё равно он плохо понимает, о чём спорит.

                                                                                                                                                                                                                              Кто тебе сказал что я спорю, с кем и о чем ?
                                                                                                                                                                                                                              Пока что я привел пример причем два раза, где паралельность на практике не работает,
                                                                                                                                                                                                                              Опровержения не увидел, вот жду пока мне D_KEY или кто-то еще расскажет про тонкий тюнинг,
                                                                                                                                                                                                                              Как его конкретно делать? Где я могу расписать нагрузку задач между ядрами? как это прочитает Хескель/Scalа
                                                                                                                                                                                                                              или кто еще ?
                                                                                                                                                                                                                              Пока я вижу без аргументноое, он казёл ;)
                                                                                                                                                                                                                              Сообщение отредактировано: settler -
                                                                                                                                                                                                                                Цитата settler @
                                                                                                                                                                                                                                Цитата Flex Ferrum @
                                                                                                                                                                                                                                Всё равно он плохо понимает, о чём спорит.

                                                                                                                                                                                                                                Кто тебе сказал что я спорю, с кем и о чем ?
                                                                                                                                                                                                                                Пока что я привел пример причем два раза, где паралельность на практике не работает,
                                                                                                                                                                                                                                Опровержения не увидел, вот жду пока мне D_KEY или кто-то еще расскажет про тонкий тюнинг,
                                                                                                                                                                                                                                Как его конкретно делать? Где я могу расписать нагрузку задач между ядрами? как это прочитает Хескель/Scalа
                                                                                                                                                                                                                                или кто еще ?
                                                                                                                                                                                                                                Пока я вижу без аргументноое, он казёл ;)

                                                                                                                                                                                                                                Так где ты сказал то же, что и я, только другими словами?
                                                                                                                                                                                                                                  Цитата settler @
                                                                                                                                                                                                                                  Я не говорил что пролог ФЯ он -логический , и сделан для определенных задач,
                                                                                                                                                                                                                                  универсальным/полноценным его назовешь с натягом,
                                                                                                                                                                                                                                  "Логический"... Он декларативный. Только не говори, что makefile никогда не писал. Слабо на make квадратное уравнение решить? Я решал на каждом языке, который изучал, включая ассемблер для dsPIC33 и плюсовые шаблоны.
                                                                                                                                                                                                                                  Цитата amk @
                                                                                                                                                                                                                                  Да и среди них 90% как мантру повторяют: прямой доступ в память это зло, того, кто работает с голыми указателями, надо сразу увольнять. Больше противников наверно только у goto.
                                                                                                                                                                                                                                  Прямой доступ в память это зло, того, кто работает с нативными указателями, надо сразу... объяснительную на стол. А так всё правильно. Я не противник goto. :tong:

                                                                                                                                                                                                                                  Добавлено
                                                                                                                                                                                                                                  Цитата settler @
                                                                                                                                                                                                                                  Слишком категорично, без ОS при работе с dataSheet или как он там назыветься док что железку
                                                                                                                                                                                                                                  описывает,, по другому никак,или в задачах RT , доступ *struct+delta для скорости,
                                                                                                                                                                                                                                  тоже JNI без поитеров никак
                                                                                                                                                                                                                                  По ссылке не ходил. Незачем. Указатели нужны в C. Кушайте на здоровье, следите за руками. Своими в первую очередь. В C++ указатели нахрен не упёрлись.
                                                                                                                                                                                                                                    Цитата settler @
                                                                                                                                                                                                                                    Языков не было , так что изучали то , голую теорию ?

                                                                                                                                                                                                                                    РЕФАЛ? В «английском образовании» его не проходят, да.

                                                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                                                    Там есть удивительное промежуточное звено - использование кросс-копилятора Си под нужную платформу. Кстати это ответ и на вопрос "каким образом паразитирует"

                                                                                                                                                                                                                                    И? Вполне распространённая практика, зачем изобретать велосипед?… Ах да, прости, D-шникам этого не понять, у них весь язык — один сплошной велосипед.

                                                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                                                    Нет, это лишь говорит о "удобстве языка". Фортран когда-то был наверное самом массовым - но позиции свои сдал, ибо появились языки лучше. Интерес перестал представлять? Нет, вернее не сам язык, а наработки на нем. Чем похвастает Хаскель - массовостью? наработками?

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

                                                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                                                    Это достаточное количество утилит, которые обеспечат весь процесс обслуживания ВС. Прошу обратить более пристально внимание на термин "Операционная система". Если "система" не самодостаточна - это просто множество, ибо " система - множество элементов, находящихся в отношениях и связях друг с другом, которое образует определённую целостность". Не хватит чего-то, не будет системы.

                                                                                                                                                                                                                                    Чего не хватит? У ОС всего две задачи: запускать программы и предоставлять им доступ к железу(вычислительным ресурсам) тем или иным способом. Всё остальное — пустое философствование.

                                                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                                                    Это продукты, созданные на Хаскеле?

                                                                                                                                                                                                                                    Это готовые продукты, которые никто и никогда не будет переизобретать на всех возможных языках.

                                                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                                                    Это создано на Хаскеле?

                                                                                                                                                                                                                                    Это создано задолго до Хаскелла и в пересоздании не нуждается.

                                                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                                                    Стоп. 1С тоже не писалась на Хаскеле???

                                                                                                                                                                                                                                    Представь себе. Дальше что?

                                                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                                                    Погоди, мы говорим о Хаскеле. Если какой-то другой язык (например D) недотягивает, от этого Хаскель лучше не станет. И D - по сравнению с С/C++ поделка, с теми же недостатками. Но мы говорим про Хаскель.

                                                                                                                                                                                                                                    Т.е. тебя не смущает, что на C++, кроме никому не нужной Haiku, операционных систем нет?

                                                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                                                    "Научное программное обеспечение"

                                                                                                                                                                                                                                    Ну так отвечу тоже отсылкой в гугл

                                                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                                                    Создает объектный код и линкуется. Никаких С-компиляторов и С-файлов ему в помощь не нужно.

                                                                                                                                                                                                                                    Я спрашивал не про Си, а про ассемблер.

                                                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                                                    В замом начале ответил - про создание компиляторов GHC под разные платформы.

                                                                                                                                                                                                                                    И так:
                                                                                                                                                                                                                                    пишем компилятор Haskell->C, получаем возможность компилировать под кучу архитектур.
                                                                                                                                                                                                                                    пишем кастомный компилятор D, получаем пару-другую архитектур.

                                                                                                                                                                                                                                    Но вы продолжайте дрочить на самодостаточность.

                                                                                                                                                                                                                                    Добавлено
                                                                                                                                                                                                                                    Цитата JoeUser @
                                                                                                                                                                                                                                    Причем настолько узконаправлен, что в среде программеров на 98% от всей информации - знают о его "идеологии"

                                                                                                                                                                                                                                    То-то во все мейнстримовые языки добавили лямбды.
                                                                                                                                                                                                                                      Цитата korvin @
                                                                                                                                                                                                                                      Т.е. тебя не смущает, что на C++, кроме никому не нужной Haiku, операционных систем нет?
                                                                                                                                                                                                                                      WinNT
                                                                                                                                                                                                                                        Цитата korvin @
                                                                                                                                                                                                                                        У ОС всего две задачи: запускать программы

                                                                                                                                                                                                                                        Запускать программы может сам процессор (обычно из EEPROM, но все же).
                                                                                                                                                                                                                                        Цитата korvin @
                                                                                                                                                                                                                                        предоставлять им доступ к железу(вычислительным ресурсам) тем или иным способом

                                                                                                                                                                                                                                        Скорее наоборот. Представляет механизм абстракций, чтобы абстрагироваться от железа и обеспечить защиту.
                                                                                                                                                                                                                                          Цитата korvin @
                                                                                                                                                                                                                                          Ах да, прости, D-шникам этого не понять, у них весь язык — один сплошной велосипед.

                                                                                                                                                                                                                                          Ну не нужно про D, не нужно в очередной раз убегать от темы. Мы сейчас Хацкель караем! :lol:

                                                                                                                                                                                                                                          Цитата korvin @
                                                                                                                                                                                                                                          Адекватной системой типов. Но я уже понял, что ты оцениваешь качество по мухам.

                                                                                                                                                                                                                                          Я оцениваю по практическому результату. А он невпечатляющий. Несколько известных компаний начали его использовать, а крику как от курицы, снесшей яйцо. Массового использования нет, массового производства продуктов программирования на нем нет, вот накие "незначительные" мухи.

                                                                                                                                                                                                                                          Цитата korvin @
                                                                                                                                                                                                                                          Чего не хватит? У ОС всего две задачи: запускать программы и предоставлять им доступ к железу(вычислительным ресурсам) тем или иным способом. Всё остальное — пустое философствование.

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

                                                                                                                                                                                                                                          Цитата korvin @
                                                                                                                                                                                                                                          Это готовые продукты, которые никто и никогда не будет переизобретать на всех возможных языках.

                                                                                                                                                                                                                                          Здрасьте) Появился клон Линкукса - Андроид, там архитектура другая, принципы организации UI - совершенно другие, просто перекомпиляция не канает. Эй Хацкель, есть просто запредельно большой фронт работ, есть возможность быть впереди планеты всей! Ан-нет ... Облом.

                                                                                                                                                                                                                                          Цитата korvin @
                                                                                                                                                                                                                                          Это создано задолго до Хаскелла и в пересоздании не нуждается.

                                                                                                                                                                                                                                          Почему-то очень много продуктов создается в условиях конкуренции. Возьмем те же офисные системы. Ну хорошо M$ Office закрытый проект. Почему Open Office не стали писать на Хацкеле? Хорошо, не написали. Появился достойный конкурент, где-то проигрывающий, где-то выигрывающий. Я имею ввиду Libre Office. Упс ... Опять не на Хацкеле??? :(

                                                                                                                                                                                                                                          Цитата korvin @
                                                                                                                                                                                                                                          Т.е. тебя не смущает, что на C++, кроме никому не нужной Haiku, операционных систем нет?

                                                                                                                                                                                                                                          C++ - расширение С, на нем и писали. к моменту создания первых ядер Линукса (примерно 1991г) стандарт С++ был сырым и недоработанным, но писать надо было как-то. Кстати, в те времена и Хацкель вышел в свет. Вот и задайся вопросом, а почему не на Хацкеле?

                                                                                                                                                                                                                                          Цитата korvin @
                                                                                                                                                                                                                                          И так:
                                                                                                                                                                                                                                          пишем компилятор Haskell->C, получаем возможность компилировать под кучу архитектур.
                                                                                                                                                                                                                                          пишем кастомный компилятор D, получаем пару-другую архитектур.
                                                                                                                                                                                                                                          Но вы продолжайте дрочить на самодостаточность.

                                                                                                                                                                                                                                          О-5-25 :lol: Да причем тут D? Но если уж на то прошло, я прочитал про бэкэнды Хацкеля и D. Оба идут правильным путем - зацепились за LLVM в качестве бэкэнда. Хотя и тут неувязочка )) под MacOSX - Хацкелю все рано и тут нужен clang (c-компилятор), ну никак без Си :lol:

                                                                                                                                                                                                                                          Цитата korvin @
                                                                                                                                                                                                                                          Я спрашивал не про Си, а про ассемблер.

                                                                                                                                                                                                                                          Встроенный ассемблер есть. Но промежуточная стадия - создание ассемблерного кода для получения объектного отсутствует. Если ты об этом. Но я напомню - разговор про Хацкель. Про Д - есть отдельная тема.

                                                                                                                                                                                                                                          Цитата korvin @
                                                                                                                                                                                                                                          То-то во все мейнстримовые языки добавили лямбды.

                                                                                                                                                                                                                                          :lool: :lool: Лямбды в языке Perl, который мне более по душе - не добавляли, а они были изначально, в 1987 году, задолго до рождения Хацкеля. Нашел чем хвастаться. Ты это любителям С++ ставь в укор :lol:
                                                                                                                                                                                                                                            Цитата Qraizer @
                                                                                                                                                                                                                                            Я решал на каждом языке, который изучал, включая ассемблер для dsPIC33 и плюсовые шаблоны.

                                                                                                                                                                                                                                            Ну я его решал еще на MK-61, а на ассеблере писал графический редактор,
                                                                                                                                                                                                                                            и практически на каждом языке что учил писал пузырьковую сортировку,
                                                                                                                                                                                                                                            Ну так ради изучения, не для реальной работы ,
                                                                                                                                                                                                                                              Цитата Qraizer @
                                                                                                                                                                                                                                              WinNT

                                                                                                                                                                                                                                              В википедии пишут: C, C++, ASM. Какая часть написана на плюсах?
                                                                                                                                                                                                                                                Цитата korvin @
                                                                                                                                                                                                                                                Цитата Qraizer @
                                                                                                                                                                                                                                                WinNT

                                                                                                                                                                                                                                                В википедии пишут: C, C++, ASM. Какая часть написана на плюсах?

                                                                                                                                                                                                                                                В википедии есть бывшие работники майкрософта ??
                                                                                                                                                                                                                                                Винда написана скорее всего на чистом Си,
                                                                                                                                                                                                                                                на плюсах скорре всего интерфейс.
                                                                                                                                                                                                                                                  Цитата korvin @
                                                                                                                                                                                                                                                  В википедии пишут: C, C++, ASM. Какая часть написана на плюсах?
                                                                                                                                                                                                                                                  Понятия не имею. Кто-то тут хвастался, что имеет утёкшие сырцы Win2000, пусть отзовётся давай спросим.
                                                                                                                                                                                                                                                  Я читал, уже и не помню, где, больше 20 лет прошло, что WinNT 3.1 имела скольки-то там килобайтное ассемблерное ядро, инкапсулирующее аппаратную абстракцию, а остальное было писано на C++. Этим самым была достигнута необычайно высокая степень портабельности WinNT. И то правда, безумные по тем временам требования к памяти и невысокая скорострельность вполне укладывались в показатели тогдачных компиляторов.
                                                                                                                                                                                                                                                  Конечно, с 1993 года могло многое измениться. Но сейчас доля C++ в ОСи, я уверен, зашкаливает. Даже под Win98 можно было писать VxD на C, а WDM-модель изначально предполагала C++. Проблема была только с C++EH (но не SEH! оно там родное), да и это в WinXP, скорее всего, разрулили, делов-то: RTL слегка под другой API заточить. Да и в VxD вполне можно было. Просто отключаешь поддержку исключений и подсовываешь контейнерам кастомные аллокаторы на кастомных new/delete. Коллега так делал.
                                                                                                                                                                                                                                                    Цитата Qraizer @
                                                                                                                                                                                                                                                    что WinNT 3.1 имела скольки-то там килобайтное ассемблерное ядро, инкапсулирующее аппаратную абстракцию, а остальное было писано на C++. Этим самым была достигнута необычайно высокая степень портабельности WinNT.

                                                                                                                                                                                                                                                    По сравнению с чем? Разве Си не более портируем и портирован, чем C++? А unix был ранее полностью переписан на Си без ассемблера. Хотя в современных потомках unix, особенно в linux, ассемблерные вставки наверняка присутствуют в угоду производительности (и/или, может, ещё каких-то соображений).
                                                                                                                                                                                                                                                      Цитата korvin @
                                                                                                                                                                                                                                                      ассемблерные вставки наверняка присутствуют

                                                                                                                                                                                                                                                      Там их просто валом.
                                                                                                                                                                                                                                                      Пример файла отбалды (~/linux-4.5.2/arch/arm64/include/asm/arch_timer.h):
                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                            if (access == ARCH_TIMER_PHYS_ACCESS) {
                                                                                                                                                                                                                                                                switch (reg) {
                                                                                                                                                                                                                                                                case ARCH_TIMER_REG_CTRL:
                                                                                                                                                                                                                                                                    asm volatile("msr cntp_ctl_el0,  %0" : : "r" (val));
                                                                                                                                                                                                                                                                    break;
                                                                                                                                                                                                                                                                case ARCH_TIMER_REG_TVAL:
                                                                                                                                                                                                                                                                    asm volatile("msr cntp_tval_el0, %0" : : "r" (val));
                                                                                                                                                                                                                                                                    break;
                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                            } else if (access == ARCH_TIMER_VIRT_ACCESS) {
                                                                                                                                                                                                                                                                switch (reg) {
                                                                                                                                                                                                                                                                case ARCH_TIMER_REG_CTRL:
                                                                                                                                                                                                                                                                    asm volatile("msr cntv_ctl_el0,  %0" : : "r" (val));
                                                                                                                                                                                                                                                                    break;
                                                                                                                                                                                                                                                                case ARCH_TIMER_REG_TVAL:
                                                                                                                                                                                                                                                                    asm volatile("msr cntv_tval_el0, %0" : : "r" (val));
                                                                                                                                                                                                                                                                    break;
                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                            }

                                                                                                                                                                                                                                                      Насчет Хаскеля комменты опущу на всяк случай)
                                                                                                                                                                                                                                                        JoeUser, ты не понимаешь. Хаскель - красив, C++ - уродлив. И не забывай, мы тут обсуждаем ФП, которого полно и в D и даже в C++.
                                                                                                                                                                                                                                                          Цитата korvin @
                                                                                                                                                                                                                                                          По сравнению с чем? Разве Си не более портируем и портирован, чем C++?
                                                                                                                                                                                                                                                          В то время разница между этими двумя языками была куда менее очевидна. Миф о "C++ суть C с классами", можно сказать, оттуда. Другое дело, что C++ при грамотном проектировании позволяет разрабатывать, поддерживать и развивать проекты гораздо проще и без случайной стрельбы по ногам.
                                                                                                                                                                                                                                                          Но дело не в этом. Я реально помню, что читал о C++ как используемом для Windows NT.

                                                                                                                                                                                                                                                          Добавлено
                                                                                                                                                                                                                                                          P.S. Вероятно это была Компьютерра, ещё в своём исходном старом формате.
                                                                                                                                                                                                                                                          Сообщение отредактировано: Qraizer -
                                                                                                                                                                                                                                                            Цитата settler @
                                                                                                                                                                                                                                                            Это Я о новых языках Scala, F#, Хекель, я так понял их идея это програмировать без стэйта,
                                                                                                                                                                                                                                                            ибо последний являеться источником багов, в теории все понятно , а на практике как оно
                                                                                                                                                                                                                                                            кто нидь реальный опыт не в гараже ;)

                                                                                                                                                                                                                                                            Тоже не понятно.
                                                                                                                                                                                                                                                            И часто еще сюда же "ленивые вычисления" приаттачивают.
                                                                                                                                                                                                                                                            Это что же хрень еще?
                                                                                                                                                                                                                                                            Нафига они нужны?

                                                                                                                                                                                                                                                            Добавлено
                                                                                                                                                                                                                                                            Это типа когда программист написал С=А+Б
                                                                                                                                                                                                                                                            А чуть ниже С=А-Б

                                                                                                                                                                                                                                                            И компилятор в результате понимает, что НИЧЕГО делать не надо и не переводит электроэнергию в тепло выполняя бесполезные вычисления?

                                                                                                                                                                                                                                                            Так?
                                                                                                                                                                                                                                                              Нет. Вычисления делаются тогда, когда они нужны, но не ранее. Бывает, что до них дело не доходит.
                                                                                                                                                                                                                                                                Цитата prografix @
                                                                                                                                                                                                                                                                Нет. Вычисления делаются тогда, когда они нужны, но не ранее. Бывает, что до них дело не доходит.

                                                                                                                                                                                                                                                                а разве это не косяк программиста?
                                                                                                                                                                                                                                                                что он написал вычисления, до которых дело не доходит?

                                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                                Или допустим написал я А=Б+В в начале программе
                                                                                                                                                                                                                                                                А потом А у меня используется только в конце.
                                                                                                                                                                                                                                                                Так вот, вычисления А будут тоже производится в конце?
                                                                                                                                                                                                                                                                Это и есть "ленивые вычисления"?

                                                                                                                                                                                                                                                                А в чем тут фишка-то?
                                                                                                                                                                                                                                                                В чем выигрыш?
                                                                                                                                                                                                                                                                Экономия памяти?
                                                                                                                                                                                                                                                                Что память под А выделится только тогда, когда А реально будет нужна?
                                                                                                                                                                                                                                                                Или что?
                                                                                                                                                                                                                                                                  Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                  а разве это не косяк программиста?
                                                                                                                                                                                                                                                                  что он написал вычисления, до которых дело не доходит?
                                                                                                                                                                                                                                                                  Обычно косяк, но иногда без этого не обойтись, а иногда так просто программа понятнее получается.
                                                                                                                                                                                                                                                                    Исмаил Прокопенко
                                                                                                                                                                                                                                                                    Вот тебе классический пример. Есть программа вычисляющая число пи в текстовом виде. Если надо распечатать его с пятью знаками она вычислит его с пятью знаками. Если позже понадобится больше знаков программа вычислит ещё несколько знаков и т.д. Т.е. она не делает больше, чем нужно на текущий момент.
                                                                                                                                                                                                                                                                      Цитата prografix @
                                                                                                                                                                                                                                                                      Исмаил Прокопенко
                                                                                                                                                                                                                                                                      Вот тебе классический пример. Есть программа вычисляющая число пи в текстовом виде. Если надо распечатать его с пятью знаками она вычислит его с пятью знаками. Если позже понадобится больше знаков программа вычислит ещё несколько знаков и т.д. Т.е. она не делает больше, чем нужно на текущий момент.

                                                                                                                                                                                                                                                                      А циммес то в чем?
                                                                                                                                                                                                                                                                      Экономия электроэнергии?

                                                                                                                                                                                                                                                                      Чего машину-то жалеть?
                                                                                                                                                                                                                                                                      Она же железная
                                                                                                                                                                                                                                                                        Это в основном от метода распределения памяти, применяемом в компиляторе. Современные компилеры используют динамическое распределение памяти. Т.е. память под переменные выделяется только тогда, когда это необходимо.
                                                                                                                                                                                                                                                                        К примеру
                                                                                                                                                                                                                                                                        IF A-B=0 THEN X1() ELSE X2()
                                                                                                                                                                                                                                                                        Внутри текста для процедур Х1 и Х2 жуть как много всяких переменных, массивов, констант и прочая.
                                                                                                                                                                                                                                                                        Но в зависимости от A и B вызовется ведь только одна из них.
                                                                                                                                                                                                                                                                        И если A=B, то произойдет обращение к Х1, под все данные этой процедуры выделится оперативная память и она - Х1 - и сработает. А все переменные и остальное из Х2 в оперативке будут отсутствовать. После выхода из процедуры Х1 ее локальная область данных будет очищена. Экономия однако... :)
                                                                                                                                                                                                                                                                        При современных объемах перерабатываемой информации она существенна.
                                                                                                                                                                                                                                                                        Сообщение отредактировано: Oleg2004 -
                                                                                                                                                                                                                                                                          Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                          А циммес то в чем?

                                                                                                                                                                                                                                                                          Что-то у тебя плохо воображение работает, а я не люблю объяснять. Бывает так, что экономия существенная. Типа, как в методе ветвей и границ, где неперспективные ветки не считаются.
                                                                                                                                                                                                                                                                            Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                            А циммес то в чем?
                                                                                                                                                                                                                                                                            Экономия электроэнергии?

                                                                                                                                                                                                                                                                            Чего машину-то жалеть?
                                                                                                                                                                                                                                                                            Она же железная
                                                                                                                                                                                                                                                                            Время и деньги свои пожалей, если не жалко машину.
                                                                                                                                                                                                                                                                              Приведите примеры задач, где без "ленивых вычислений" просто ж..па
                                                                                                                                                                                                                                                                              [цензура]
                                                                                                                                                                                                                                                                              Сообщение отредактировано: JoeUser -
                                                                                                                                                                                                                                                                                  Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                  Приведите примеры задач, где без "ленивых вычислений" просто ж..па
                                                                                                                                                                                                                                                                                  Например ленивые списки. Зачем обрабатывать весь список, если можно обратотать только ту часть, которая нужна здесь и сейчас?
                                                                                                                                                                                                                                                                                  Сообщение отредактировано: applegame -
                                                                                                                                                                                                                                                                                    Цитата applegame @
                                                                                                                                                                                                                                                                                    Например ленивые списки. Зачем обрабатывать весь список, если можно обратотать только ту часть, которая нужна здесь и сейчас?

                                                                                                                                                                                                                                                                                    Странный пример - а в нефункциональных языках зачем? Что мешает указать диапазон обработки?
                                                                                                                                                                                                                                                                                      Цитата JoeUser @
                                                                                                                                                                                                                                                                                      Странный пример - а в нефункциональных языках зачем? Что мешает указать диапазон обработки?
                                                                                                                                                                                                                                                                                      Что значит нефункциональных? D - функциональный язык? В стандартной библиотеке полно функций порождающих из одних списков (ranges) другие, зачастую ленивые. Как именно указать диапазон? Допустим список - это поток символов, поступающих из сети.

                                                                                                                                                                                                                                                                                      Для примера: нам нужно загрузить из сети некий большой json-файл, найти там определенное место и выдрать нужный объект.
                                                                                                                                                                                                                                                                                      Неленивый подход:
                                                                                                                                                                                                                                                                                      1. Загрузить целиком json.
                                                                                                                                                                                                                                                                                      2. Распарсить его целиком.
                                                                                                                                                                                                                                                                                      3. Найти нужное место и выдрать нужное.

                                                                                                                                                                                                                                                                                      Ленивый подход:
                                                                                                                                                                                                                                                                                      1. Создаем ленивый список входящих символов.
                                                                                                                                                                                                                                                                                      2. Преобразовываем это список в ленивый же список токенов.
                                                                                                                                                                                                                                                                                      3. Лениво обрабатываем список токенов пока не найдем нужное.

                                                                                                                                                                                                                                                                                      Ленивый подход требует держать в памяти только текущий обрабатываемый токен, а не весь json и полный список токенов как в неленивом подходе.
                                                                                                                                                                                                                                                                                      Сообщение отредактировано: applegame -
                                                                                                                                                                                                                                                                                        Цитата applegame @
                                                                                                                                                                                                                                                                                        Цитата JoeUser @
                                                                                                                                                                                                                                                                                        Странный пример - а в нефункциональных языках зачем? Что мешает указать диапазон обработки?
                                                                                                                                                                                                                                                                                        Что значит нефункциональных? D - функциональный язык? В стандартной библиотеке полно функций порождающих из одних списков (ranges) другие, зачастую ленивые. Как именно указать диапазон? Допустим список - это поток символов, поступающих из сети.

                                                                                                                                                                                                                                                                                        Для примера: нам нужно загрузить из сети некий большой json-файл, найти там определенное место и выдрать нужный объект.
                                                                                                                                                                                                                                                                                        Неленивый подход:
                                                                                                                                                                                                                                                                                        1. Загрузить целиком json.
                                                                                                                                                                                                                                                                                        2. Распарсить его целиком.
                                                                                                                                                                                                                                                                                        3. Найти нужное место и выдрать нужное.

                                                                                                                                                                                                                                                                                        Ленивый подход:
                                                                                                                                                                                                                                                                                        1. Создаем ленивый список входящих символов.
                                                                                                                                                                                                                                                                                        2. Преобразовываем это список в ленивый же список токенов.
                                                                                                                                                                                                                                                                                        3. Лениво обрабатываем список токенов пока не найдем нужное.

                                                                                                                                                                                                                                                                                        Ленивый подход требует держать в памяти только текущий обрабатываемый токен, а не весь json и полный список токенов как в неленивом подходе.

                                                                                                                                                                                                                                                                                        При чем тут ленивость? Если дело ограничивается токенами и нам не нужен настоящий паркинг json, то это просто последовательное чтение токенов из потока. Или я чего-то не понял?
                                                                                                                                                                                                                                                                                          applegame, я понял твою мысль. У ленивых (отложенных) вычислений есть и негативная сторона - выполняя вычисления полностью, мы как бы кэшируем результат. И при повторном обращении читаем уже вычисленное. А в случае ленивых вычислений? Должны опять вычислить?
                                                                                                                                                                                                                                                                                            Цитата JoeUser @
                                                                                                                                                                                                                                                                                            applegame, я понял твою мысль. У ленивых (отложенных) вычислений есть и негативная сторона - выполняя вычисления полностью, мы как бы кэшируем результат. И при повторном обращении читаем уже вычисленное. А в случае ленивых вычислений? Должны опять вычислить?

                                                                                                                                                                                                                                                                                            Цитата
                                                                                                                                                                                                                                                                                            Type res = var.a().b().c().d().get()

                                                                                                                                                                                                                                                                                            Пока не вызван get() не вычисляется ни результат a(), ни результат b(), c() или d(). Вызвали get() - пошла работать вся цепочка, get() вернул итоговый результат. Кэшируй его сколько угодно.
                                                                                                                                                                                                                                                                                              Так и перегруженный оператор индекса в С++, по сути, и есть - ленивое вычисление. Но ... каждый раз он вычисляется, при каждом обращении. Это часто знатно снижает быстродействие. Т.к. создание временного массива и весь его просчет один раз - может дать заметный выхлоп, если обращений к одним и тем же элементам - множественное, повторное. Я об этом.
                                                                                                                                                                                                                                                                                                Народ, извините, что вмешиваюсь в ваш высокодуховный спор, но вы хотя бы в википедию загляните. А то ваша дискуссия выглядит как обсуждение вкуса омаров людьми, которые в жизни только крабовое мясо-суррогат ели.
                                                                                                                                                                                                                                                                                                Сообщение отредактировано: Flex Ferrum -
                                                                                                                                                                                                                                                                                                  Ну я тут вот почитал. Понятное дело, без практики - приходится крабовое мясо обсуждать :)
                                                                                                                                                                                                                                                                                                    Цитата D_KEY @
                                                                                                                                                                                                                                                                                                    При чем тут ленивость? Если дело ограничивается токенами и нам не нужен настоящий паркинг json, то это просто последовательное чтение токенов из потока. Или я чего-то не понял?
                                                                                                                                                                                                                                                                                                    Ну может быть пример не совсем удачный.
                                                                                                                                                                                                                                                                                                    Попробую по-другому.
                                                                                                                                                                                                                                                                                                    В D есть функция map, которая применяет некую функцию ко всем элементам списка (range) и возвращает список (опять же range) с результатами применения этой функции. map - это шаблонная функция, она кушает списки любого вида в том числе и обычные массивы. Если ей подсунуть массив, то она вернет список, который ведет себя тоже как массив (доступ по индексу, слайсы и т.д, в дешной терминологии это RandomAccessRange). Но при это она реально не вычисляет ничего. Вычислению будут происходить только при непосредственном обращении к элементам. Это и есть ленивый список. В дешной стандартной либе полно всяких трансформирующих функций для работы со списками, многие из них никаких вычислений не делают, а сразу же возвращают результат - ленивый список.

                                                                                                                                                                                                                                                                                                    Другой пример (извините, опять D :)):

                                                                                                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                      string heavyFun() {
                                                                                                                                                                                                                                                                                                          ...
                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                      foo(flag, heavyFun());     // функция heavyFun не будет вычислена в этой точке
                                                                                                                                                                                                                                                                                                       
                                                                                                                                                                                                                                                                                                      void foo(bool flag, lazy string txt) {
                                                                                                                                                                                                                                                                                                          if(flag) writeln(txt); // она будет вычислена в этой точке и только если flag - истина
                                                                                                                                                                                                                                                                                                      }
                                                                                                                                                                                                                                                                                                      applegame, разве ты сейчас не потерял контекст и от примера полезного использования не перешел к тривиальному объяснению?
                                                                                                                                                                                                                                                                                                        Цитата D_KEY @
                                                                                                                                                                                                                                                                                                        applegame, разве ты сейчас не потерял контекст и от примера полезного использования не перешел к тривиальному объяснению?
                                                                                                                                                                                                                                                                                                        А чем этот пример не годится? Функция рассчитывается только когда нужно, а не при каждом вызове. Разве это не профит?
                                                                                                                                                                                                                                                                                                          Цитата applegame @
                                                                                                                                                                                                                                                                                                          Цитата D_KEY @
                                                                                                                                                                                                                                                                                                          applegame, разве ты сейчас не потерял контекст и от примера полезного использования не перешел к тривиальному объяснению?
                                                                                                                                                                                                                                                                                                          А чем этот пример не годится? Функция рассчитывается только когда нужно, а не при каждом вызове. Разве это не профит?

                                                                                                                                                                                                                                                                                                          Само по себе нет :)
                                                                                                                                                                                                                                                                                                            Цитата applegame @
                                                                                                                                                                                                                                                                                                            Цитата D_KEY @
                                                                                                                                                                                                                                                                                                            При чем тут ленивость? Если дело ограничивается токенами и нам не нужен настоящий паркинг json, то это просто последовательное чтение токенов из потока. Или я чего-то не понял?
                                                                                                                                                                                                                                                                                                            Ну может быть пример не совсем удачный.
                                                                                                                                                                                                                                                                                                            Попробую по-другому.
                                                                                                                                                                                                                                                                                                            В D есть функция map, которая применяет некую функцию ко всем элементам списка (range) и возвращает список (опять же range) с результатами применения этой функции. map - это шаблонная функция, она кушает списки любого вида в том числе и обычные массивы. Если ей подсунуть массив, то она вернет список, который ведет себя тоже как массив (доступ по индексу, слайсы и т.д, в дешной терминологии это RandomAccessRange). Но при это она реально не вычисляет ничего. Вычислению будут происходить только при непосредственном обращении к элементам. Это и есть ленивый список. В дешной стандартной либе полно всяких трансформирующих функций для работы со списками, многие из них никаких вычислений не делают, а сразу же возвращают результат - ленивый список.

                                                                                                                                                                                                                                                                                                            Другой пример (извините, опять D :)):

                                                                                                                                                                                                                                                                                                            ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                              string heavyFun() {
                                                                                                                                                                                                                                                                                                                  ...
                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                              foo(flag, heavyFun());     // функция heavyFun не будет вычислена в этой точке
                                                                                                                                                                                                                                                                                                               
                                                                                                                                                                                                                                                                                                              void foo(bool flag, lazy string txt) {
                                                                                                                                                                                                                                                                                                                  if(flag) writeln(txt); // она будет вычислена в этой точке и только если flag - истина
                                                                                                                                                                                                                                                                                                              }

                                                                                                                                                                                                                                                                                                            Все что Вы описали мне кажется называется не "ленивые вычисления", а "оптимизация", когда часть компилятора, называемая "оптимизатор" анализируя зависимости выбрасывает неиспользуемый код.
                                                                                                                                                                                                                                                                                                              Вот здесь
                                                                                                                                                                                                                                                                                                              Очень хорошее описание - что можно назвать так называемыми "ленивыми вычислениями."
                                                                                                                                                                                                                                                                                                              Исчерпывающе :yes:
                                                                                                                                                                                                                                                                                                                Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                Само по себе нет :)
                                                                                                                                                                                                                                                                                                                Ну а тебе какие примеры нужны? Ленивые списки позволяют оптимизировать обработку легко и непринужденно. Без ленивости тоже самое получается либо не так удобно и/или неоптимально. Выбор за программистом.
                                                                                                                                                                                                                                                                                                                Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                Все что Вы описали мне кажется называется не "ленивые вычисления", а "оптимизация", когда часть компилятора, называемая "оптимизатор" анализируя зависимости выбрасывает неиспользуемый код.
                                                                                                                                                                                                                                                                                                                Нет. Оптимизация делается на стадии компиляции, а в данном примере значение переменной flag - на стадии компиляции неизвестно, поэтому компилятор не выбросит функцию heavyFun().
                                                                                                                                                                                                                                                                                                                Цитата Oleg2004 @
                                                                                                                                                                                                                                                                                                                Вот здесь
                                                                                                                                                                                                                                                                                                                Очень хорошее описание - что можно назвать так называемыми "ленивыми вычислениями."
                                                                                                                                                                                                                                                                                                                Исчерпывающе :yes:
                                                                                                                                                                                                                                                                                                                Там много Хаскеля, не думаю, что автор темы осилит.
                                                                                                                                                                                                                                                                                                                Сообщение отредактировано: applegame -
                                                                                                                                                                                                                                                                                                                  Цитата Oleg2004 @
                                                                                                                                                                                                                                                                                                                  Вот здесь
                                                                                                                                                                                                                                                                                                                  Очень хорошее описание - что можно назвать так называемыми "ленивыми вычислениями."
                                                                                                                                                                                                                                                                                                                  Исчерпывающе :yes:

                                                                                                                                                                                                                                                                                                                  "Самый очевидный плюс ленивых вычислений — если что-то не требуется, оно не будет вычислено."

                                                                                                                                                                                                                                                                                                                  Не вижу никакого плюса.
                                                                                                                                                                                                                                                                                                                  Как правило, если у программиста все нормально с головой, он и так не пишет код, который не требуется выполнять.

                                                                                                                                                                                                                                                                                                                  К тому же все равно не ясно, чем "ленивые вычисления" отличаются от банальной "оптимизации" - стандартной фичи ВСЕХ компиляторов ВСЕХ языков?

                                                                                                                                                                                                                                                                                                                  Добавлено
                                                                                                                                                                                                                                                                                                                  Цитата applegame @
                                                                                                                                                                                                                                                                                                                  Оптимизация делается на стадии компиляции, а в данном примере значение переменной flag - на стадии компиляции неизвестно, поэтому компилятор не выбросит функцию heavyFun().

                                                                                                                                                                                                                                                                                                                  Дык еще со времени СИ (это 50 лет назад) логические операторы вычисляются не до конца если результат уже известен.

                                                                                                                                                                                                                                                                                                                  Добавлено
                                                                                                                                                                                                                                                                                                                  Вообщем хрень какая-то эта Ваша заливная рыба эти ваши "ленивые вычисления". :yes:
                                                                                                                                                                                                                                                                                                                  Если бы реально была штука полезная - её бы во все языки ввели, как это было с ОО парадигмой, когда из-за ООП истерии ООП стали пихать во все языки
                                                                                                                                                                                                                                                                                                                    Ну вот ещё пример. Была функция
                                                                                                                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                      QList<BlaBla> get_all_items()
                                                                                                                                                                                                                                                                                                                    Оказалось, что её типичное использование -
                                                                                                                                                                                                                                                                                                                    ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                      for(auto item: foo->get_all_items()) {...}
                                                                                                                                                                                                                                                                                                                    Поэтому она была переписана так, чтобы она возвращала нечто, по чему можно пройтись таким вот for-ом, и у этого нечто была функция to_list, чтобы получить список, если нужен именно он. В языке с ленивостью весь этот огород бы не потребовался - я бы просто объявил список ленивым, и получил бы ровно тот же эффект.
                                                                                                                                                                                                                                                                                                                    Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                    К тому же все равно не ясно, чем "ленивые вычисления" отличаются от банальной "оптимизации" - стандартной фичи ВСЕХ компиляторов ВСЕХ языков?

                                                                                                                                                                                                                                                                                                                    Компилятор, способный на описанную выше оптимизацию, в студию.
                                                                                                                                                                                                                                                                                                                      И потом, все хорошо в теории и красиво смотрится на искусственно подобранных для иллюстрации примерах.

                                                                                                                                                                                                                                                                                                                      А если опуститься на уровень реализации?

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

                                                                                                                                                                                                                                                                                                                      Т.е. компилятор как бы оформляет автоматом все выражения вида А=Б+Г в виде функции int А(int Б, int Г); а потом во все точки, где используется переменная А, вставляет не значение А, а вызов функции А.

                                                                                                                                                                                                                                                                                                                      Что-то мне не нравится такое решение. Кривое какое-то

                                                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                                                      Цитата OpenGL @
                                                                                                                                                                                                                                                                                                                      Компилятор, способный на описанную выше оптимизацию, в студию.

                                                                                                                                                                                                                                                                                                                      Мне не знакомы эти контсрукции.
                                                                                                                                                                                                                                                                                                                      Приведите пример на СИ или Паскале

                                                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                                                      Цитата OpenGL @
                                                                                                                                                                                                                                                                                                                      Поэтому она была переписана так, чтобы она возвращала нечто, по чему можно пройтись таким вот for-ом

                                                                                                                                                                                                                                                                                                                      Хотите сказать, что компилятор хаскеля может распотрошить функцию и вытащить из неё только то, что реально нужно для данного кода?

                                                                                                                                                                                                                                                                                                                      Т.е. фактически ПЕРЕПИСАТЬ функцию так, чтобы она работала наиболее оптимально?

                                                                                                                                                                                                                                                                                                                      Тогда это реально круто :thanks:
                                                                                                                                                                                                                                                                                                                        Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                        Дык еще со времени СИ (это 50 лет назад) логические операторы вычисляются не до конца если результат уже известен
                                                                                                                                                                                                                                                                                                                        Дык в неленивом языке значение функции heavyFun будет вычислено до проверки flag.
                                                                                                                                                                                                                                                                                                                        Сообщение отредактировано: applegame -
                                                                                                                                                                                                                                                                                                                          Цитата Oleg2004 @
                                                                                                                                                                                                                                                                                                                          Вот здесь
                                                                                                                                                                                                                                                                                                                          Очень хорошее описание - что можно назвать так называемыми "ленивыми вычислениями."
                                                                                                                                                                                                                                                                                                                          Исчерпывающе :yes:

                                                                                                                                                                                                                                                                                                                          Описание мне лично не нужно :) Мне бы реальных кейсов и реального профита.

                                                                                                                                                                                                                                                                                                                          Добавлено
                                                                                                                                                                                                                                                                                                                          Цитата applegame @
                                                                                                                                                                                                                                                                                                                          Ну а тебе какие примеры нужны?

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

                                                                                                                                                                                                                                                                                                                          Добавлено
                                                                                                                                                                                                                                                                                                                          Цитата applegame @
                                                                                                                                                                                                                                                                                                                          Оптимизация делается на стадии компиляции, а в данном примере значение переменной flag - на стадии компиляции неизвестно, поэтому компилятор не выбросит функцию heavyFun().

                                                                                                                                                                                                                                                                                                                          Ну принимай вместо lazy string функцию :) Нужна мемоизация? Сделай, вроде не сложно :)

                                                                                                                                                                                                                                                                                                                          Добавлено
                                                                                                                                                                                                                                                                                                                          Цитата OpenGL @
                                                                                                                                                                                                                                                                                                                          Была функция
                                                                                                                                                                                                                                                                                                                          ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                            QList<BlaBla> get_all_items()
                                                                                                                                                                                                                                                                                                                          Оказалось, что её типичное использование -
                                                                                                                                                                                                                                                                                                                          ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                            for(auto item: foo->get_all_items()) {...}
                                                                                                                                                                                                                                                                                                                          Поэтому она была переписана так, чтобы она возвращала нечто, по чему можно пройтись таким вот for-ом, и у этого нечто была функция to_list, чтобы получить список, если нужен именно он.

                                                                                                                                                                                                                                                                                                                          Это не ленивость. Это просто range/iterator.

                                                                                                                                                                                                                                                                                                                          Цитата
                                                                                                                                                                                                                                                                                                                          В языке с ленивостью весь этот огород бы не потребовался - я бы просто объявил список ленивым, и получил бы ровно тот же эффект.
                                                                                                                                                                                                                                                                                                                          QList под капотом вроде массив, а не связанный список.
                                                                                                                                                                                                                                                                                                                          Не надо забывать про ограничения ленивых структур. Односвязный список - ок, но что будем делать в более сложном случае? А вместо односвязных ленивых списков вполне используют классические итераторы/стримы/etc.
                                                                                                                                                                                                                                                                                                                          Или я тебя не понял? Можешь псевдокодом показать?
                                                                                                                                                                                                                                                                                                                            Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                            Это не ленивость. Это просто range/iterator.

                                                                                                                                                                                                                                                                                                                            В данном контексте это вполне можно назвать ленивым вычислением списка.
                                                                                                                                                                                                                                                                                                                            Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                            QList под капотом вроде массив, а не связанный список.

                                                                                                                                                                                                                                                                                                                            Спасибо, но я в курсе :)
                                                                                                                                                                                                                                                                                                                              Цитата OpenGL @
                                                                                                                                                                                                                                                                                                                              Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                              QList под капотом вроде массив, а не связанный список.

                                                                                                                                                                                                                                                                                                                              Спасибо, но я в курсе :)

                                                                                                                                                                                                                                                                                                                              Тогда покажи ленивый массив.

                                                                                                                                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                                                                                                                                              Цитата OpenGL @
                                                                                                                                                                                                                                                                                                                              Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                              Это не ленивость. Это просто range/iterator.

                                                                                                                                                                                                                                                                                                                              В данном контексте это вполне можно назвать ленивым вычислением списка.

                                                                                                                                                                                                                                                                                                                              Ну давай еще так назовем стандартные плюсовые итераторы ввода, например :)
                                                                                                                                                                                                                                                                                                                              Тут же нет никакого создания списка. Ленивый список создается по мере надобности. У тебя же список создаётся только если функцию вызвать, причем создается он, опять же, целиком. Нет?
                                                                                                                                                                                                                                                                                                                                Я не понимаю, что ты от меня хочешь. Я показал пример, когда бы ленивость была удобнее, и описал, что пришлось сделать из-за ее отсутствия. Причём тут массивы и создание списка целиком при вызове метода?
                                                                                                                                                                                                                                                                                                                                  D_KEY, в плане примеров использования ленивых список (в частности) и ленивых вычислений вообще - могу привести свой кейс. У меня есть проект, в основе которого лежат различные операции на гиперграфе - выборка узлов, фильтрация, трансформация, сложные предикаты и прочие прелести. Понятно, что есть группа операций, в которых надо, например, обойти все связанные узлы, соответствующие некоторому критерию. А есть группа операций поиска, в которых итерации надо прерывать в момент нахождения узла. Для всего этого я и использую ленивые списки, которые ещё и в цепочки могу выстраивать с традиционными операциями map/filter/zip и т. п.
                                                                                                                                                                                                                                                                                                                                    Цитата OpenGL @
                                                                                                                                                                                                                                                                                                                                    Я не понимаю, что ты от меня хочешь. Я показал пример, когда бы ленивость была удобнее, и описал, что пришлось сделать из-за ее отсутствия.

                                                                                                                                                                                                                                                                                                                                    Ты не показал, чтобы ты сделал, если бы ленивость была :)
                                                                                                                                                                                                                                                                                                                                    Так же не объяснил, почему не сделал/не использовал реализацию ленивых структур данных для плюсов.

                                                                                                                                                                                                                                                                                                                                    Добавлено
                                                                                                                                                                                                                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                    D_KEY, в плане примеров использования ленивых список (в частности) и ленивых вычислений вообще - могу привести свой кейс. У меня есть проект, в основе которого лежат различные операции на гиперграфе - выборка узлов, фильтрация, трансформация, сложные предикаты и прочие прелести. Понятно, что есть группа операций, в которых надо, например, обойти все связанные узлы, соответствующие некоторому критерию. А есть группа операций поиска, в которых итерации надо прерывать в момент нахождения узла. Для всего этого я и использую ленивые списки, которые ещё и в цепочки могу выстраивать с традиционными операциями map/filter/zip и т. п.

                                                                                                                                                                                                                                                                                                                                    :good:
                                                                                                                                                                                                                                                                                                                                    Спасибо. Вроде да, хороший пример. Хотя если просто обойти, то разве не достаточно некоего range/iterator? Или нужно/полезно хранить предыдущие объекты, обходить несколько раз или иметь несколько ссылок на список?
                                                                                                                                                                                                                                                                                                                                      Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                      Спасибо. Вроде да, хороший пример. Хотя если просто обойти, то разве не достаточно некоего range/iterator? Или нужно/полезно хранить предыдущие объекты, обходить несколько раз или иметь несколько ссылок на список?

                                                                                                                                                                                                                                                                                                                                      Там фишка в том, что могут цепочки набираться в стиле:
                                                                                                                                                                                                                                                                                                                                      ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                        auto GetPropertyNodes(EntityPtr entity)
                                                                                                                                                                                                                                                                                                                                        {
                                                                                                                                                                                                                                                                                                                                           return entity->GetOutgoingRelations().filter([](RelationPtr rel) {return rel->GetKind() == property;}).map([](RelationPtr rel) {return rel->GetSecondEntity();}
                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                        //...
                                                                                                                                                                                                                                                                                                                                        auto proertyNames = GetPropertyNodes(entity).map([](EntityPtr& entity) {return entity->GetName();});
                                                                                                                                                                                                                                                                                                                                         
                                                                                                                                                                                                                                                                                                                                        bool hasUnnamed = std::find(propertyNames.begin(), propertyNames.end(), [](const std::string& name) {return name.empty();}) != propertyNames.end();


                                                                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                                                                      В итоге, тебе известен только первый диапазон, по которому делается фильтрация. А потом один маппинг, другой, меняется тип результата, ну и т. п.
                                                                                                                                                                                                                                                                                                                                      Сообщение отредактировано: Flex Ferrum -
                                                                                                                                                                                                                                                                                                                                        Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                        Ты не показал, чтобы ты сделал, если бы ленивость была

                                                                                                                                                                                                                                                                                                                                        Написал бы lazy.
                                                                                                                                                                                                                                                                                                                                        Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                        Так же не объяснил, почему не сделал/не использовал реализацию ленивых структур данных для плюсов.

                                                                                                                                                                                                                                                                                                                                        Потому, что у меня нет привычки решать простые задачи сложными способами :)
                                                                                                                                                                                                                                                                                                                                          Цитата OpenGL @
                                                                                                                                                                                                                                                                                                                                          Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                          Ты не показал, чтобы ты сделал, если бы ленивость была

                                                                                                                                                                                                                                                                                                                                          Написал бы lazy.

                                                                                                                                                                                                                                                                                                                                          Куда? :)

                                                                                                                                                                                                                                                                                                                                          Цитата
                                                                                                                                                                                                                                                                                                                                          Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                          Так же не объяснил, почему не сделал/не использовал реализацию ленивых структур данных для плюсов.

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

                                                                                                                                                                                                                                                                                                                                          А как же
                                                                                                                                                                                                                                                                                                                                          Цитата
                                                                                                                                                                                                                                                                                                                                          Поэтому она была переписана так, чтобы она возвращала нечто, по чему можно пройтись таким вот for-ом

                                                                                                                                                                                                                                                                                                                                          :-?

                                                                                                                                                                                                                                                                                                                                          Добавлено
                                                                                                                                                                                                                                                                                                                                          Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                          В итоге, тебе известен только первый диапазон, по которому делается фильтрация. А потом один маппинг, другой, меняется тип результата, ну и т. п.

                                                                                                                                                                                                                                                                                                                                          Так range это позволяют. Если тебе не нужны, условно, предыдущие элементы и результаты, то зачем их держать? Перешел в результате обхода к следующему элементу и все.
                                                                                                                                                                                                                                                                                                                                          Другое дело, если эти элементы нужны, будут использоваться повторно, на них имеются несколько ссылок и т.д.
                                                                                                                                                                                                                                                                                                                                            Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                            Куда?

                                                                                                                                                                                                                                                                                                                                            На стену.
                                                                                                                                                                                                                                                                                                                                            Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                            А как же

                                                                                                                                                                                                                                                                                                                                            Ты слишком толсто и явно троллишь. Давай тоньше :)
                                                                                                                                                                                                                                                                                                                                              Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                              Так range это позволяют. Если тебе не нужны, условно, предыдущие элементы и результаты, то зачем их держать? Перешел в результате обхода к следующему элементу и все.

                                                                                                                                                                                                                                                                                                                                              Ну, как бы да. Возможность повторного прохода закладывалась в дизайн.
                                                                                                                                                                                                                                                                                                                                                Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                                D_KEY, в плане примеров использования ленивых список (в частности) и ленивых вычислений вообще - могу привести свой кейс. У меня есть проект, в основе которого лежат различные операции на гиперграфе - выборка узлов, фильтрация, трансформация, сложные предикаты и прочие прелести. Понятно, что есть группа операций, в которых надо, например, обойти все связанные узлы, соответствующие некоторому критерию. А есть группа операций поиска, в которых итерации надо прерывать в момент нахождения узла. Для всего этого я и использую ленивые списки, которые ещё и в цепочки могу выстраивать с традиционными операциями map/filter/zip и т. п.

                                                                                                                                                                                                                                                                                                                                                А можно все тоже самое сказать не на "птичьем", понятном только узкому кругу секты избранных, языке, а на простом инженером языке?
                                                                                                                                                                                                                                                                                                                                                Чтобы ЛЮБОМУ инженеру было понятно в чем циммес использования "отложенных вычислений" и какой круг задач позволяет решать "ленивые вычисления"

                                                                                                                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                                                                                                                Т.е., как я понял, вычисления не делаются, а планируются. Т.е. "откладываются на потом". Копятся.
                                                                                                                                                                                                                                                                                                                                                А потом когда накапливается критическая масса БАХ. И вычисляются сразу всем скопом. И памяти не хватает и венда падает , а процессор сгорает от перегрева и атомный реактор взрывается.

                                                                                                                                                                                                                                                                                                                                                Так?

                                                                                                                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                                                                                                                И главное не понятно, какая цель преследуется в данной парадигме (я об "отложенных (ленивых) вычислениях")

                                                                                                                                                                                                                                                                                                                                                Ставка делается на то, что возможно, что там понаписал программист возможно вообще не потребуется, поэтому и считать это не нужно прям щас?

                                                                                                                                                                                                                                                                                                                                                Это основная идея?
                                                                                                                                                                                                                                                                                                                                                  Цитата OpenGL @
                                                                                                                                                                                                                                                                                                                                                  Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                  Куда?

                                                                                                                                                                                                                                                                                                                                                  На стену.
                                                                                                                                                                                                                                                                                                                                                  Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                  А как же

                                                                                                                                                                                                                                                                                                                                                  Ты слишком толсто и явно троллишь. Давай тоньше :)

                                                                                                                                                                                                                                                                                                                                                  Не надо слов, просто покажи код.
                                                                                                                                                                                                                                                                                                                                                    Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                    И главное не понятно, какая цель преследуется в данной парадигме (я об "отложенных (ленивых) вычислениях")

                                                                                                                                                                                                                                                                                                                                                    Когда то лет так 25 тому назад я вел курс "Архитектура вычислительных систем". Одним из подразделов курса были так наз. редукционные машины. Именно в программировании этой архитектуры впервые и появилось понятие ленивого вычисления.
                                                                                                                                                                                                                                                                                                                                                    И для хорошего понимания причин их появления я бы посоветовал вам прочитать Амамия М., Танака Ю. - Архитектура ЭВМ и искусственный интеллект - 1993.djvu, раздел 4 - Редукционные машины. Там все разъяснено...Книга в сети есть... :D
                                                                                                                                                                                                                                                                                                                                                      Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                      Т.е., как я понял, вычисления не делаются, а планируются. Т.е. "откладываются на потом". Копятся.
                                                                                                                                                                                                                                                                                                                                                      А потом когда накапливается критическая масса БАХ. И вычисляются сразу всем скопом. И памяти не хватает и венда падает , а процессор сгорает от перегрева и атомный реактор взрывается.
                                                                                                                                                                                                                                                                                                                                                      Как правило накопленное всем скопом не вычисляется. Вычисляется только то, что понадобилось. Иногда удаётся такие отложенные вычисления по ходу вычисления оптимизировать, так что процессор даже при необходимости вычислить ВСЁ греется меньше, чем при неленивом счёте.

                                                                                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                                                                                      Кстати, технология "Copy on Write/Update" тоже относится к "ленивым".
                                                                                                                                                                                                                                                                                                                                                        Цитата amk @
                                                                                                                                                                                                                                                                                                                                                        Иногда удаётся такие отложенные вычисления по ходу вычисления оптимизировать, так что процессор даже при необходимости вычислить ВСЁ греется меньше

                                                                                                                                                                                                                                                                                                                                                        Нуда, нуда.
                                                                                                                                                                                                                                                                                                                                                        А на "оптимизировать" процессорные такты естественно не тратятся и проц не нагревается, :lool:

                                                                                                                                                                                                                                                                                                                                                        Добавлено
                                                                                                                                                                                                                                                                                                                                                        Цитата Oleg2004 @
                                                                                                                                                                                                                                                                                                                                                        редукционные машины

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

                                                                                                                                                                                                                                                                                                                                                        Все равно осталось за кадром: а НАФИГА?
                                                                                                                                                                                                                                                                                                                                                        И насколько эффективно можно все это реализовать?
                                                                                                                                                                                                                                                                                                                                                        Не будет ли на "оптимизацию" потока исполнения тратится еще больше времени, чем просто тупо в лоб все посчитать без откладывания?
                                                                                                                                                                                                                                                                                                                                                          Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                          Ну принимай вместо lazy string функцию :) Нужна мемоизация? Сделай, вроде не сложно :)
                                                                                                                                                                                                                                                                                                                                                          Принимать функцию неудобно, сигнатуры могут быть разные, а если мне нужно передать простую строку, накой городить функцию для этого? lazy string всяко удобнее. Причем здесь мемоизация я не понял.
                                                                                                                                                                                                                                                                                                                                                          Вот реальный пример функции enforce в стандартной либе D. Что-то вроде assert, но может бросать любое исключение (по умолчанию обычный Exception) и не удаляется компилятором в релизе. Упрощенно, сигнатура выглядит так:
                                                                                                                                                                                                                                                                                                                                                          ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                            void enforce(bool condition, lazy string message) { ... }

                                                                                                                                                                                                                                                                                                                                                          допустим мне нужно в текст исключения вставить значения некоторых переменных, самое простое задействовать функцию format.
                                                                                                                                                                                                                                                                                                                                                          ExpandedWrap disabled
                                                                                                                                                                                                                                                                                                                                                            enforce(cmd.among("left", "right", "forward", "backward"), format("unknown command '%s'", cmd));
                                                                                                                                                                                                                                                                                                                                                          В "неленивом" языке либо пришлось бы самому городить if или смириться с тем, что сообщение об ошибке будет формироваться вхолостую даже когда никакой ошибки нет.
                                                                                                                                                                                                                                                                                                                                                          Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                          Это не ленивость. Это просто range/iterator.
                                                                                                                                                                                                                                                                                                                                                          На самом деле, ленивые range - это частный случай ленивости. Допустим бесконечные range обязаны быть ленивыми: очередной элемент вычисляется тольео когда он необходим. Понятно, что можно обойтись и без них, задействовать обычные циклы, но это не вписывается в функциональный подход, и не универсально.
                                                                                                                                                                                                                                                                                                                                                          Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                          А можно все тоже самое сказать не на "птичьем", понятном только узкому кругу секты избранных, языке, а на простом инженером языке?
                                                                                                                                                                                                                                                                                                                                                          Чтобы ЛЮБОМУ инженеру было понятно в чем циммес использования "отложенных вычислений" и какой круг задач позволяет решать "ленивые вычисления"
                                                                                                                                                                                                                                                                                                                                                          Зачем ЛЮБОМУ? Компетентный инженер прекрасно поймет написанное, а профнепригодный пусть верит на слово компетентным программистам. Функциональщина требует нехилого матана, недоступного для понимания обычному слесарю. :-? Смирись и терпи.
                                                                                                                                                                                                                                                                                                                                                          Сообщение отредактировано: applegame -
                                                                                                                                                                                                                                                                                                                                                            Цитата applegame @
                                                                                                                                                                                                                                                                                                                                                            а если мне нужно передать простую строку, накой городить функцию для этого? lazy string всяко удобнее. Причем здесь мемоизация я не понял.

                                                                                                                                                                                                                                                                                                                                                            Так а что такое lazy string, если не функция + мемоизация? В плюсах, кстати lazy<T> вроде несложно делается.
                                                                                                                                                                                                                                                                                                                                                              Цитата applegame @
                                                                                                                                                                                                                                                                                                                                                              Компетентный инженер прекрасно поймет написанное

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

                                                                                                                                                                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                                                                                                                                                                              Если Вы будете продолжать тут общаться на своем птичьем языке "о своем о девичьем" топикстартер НИКОГДА не поймет для чего нужны "ленивые вычисления".
                                                                                                                                                                                                                                                                                                                                                                Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                Цитата applegame @
                                                                                                                                                                                                                                                                                                                                                                Компетентный инженер прекрасно поймет написанное

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

                                                                                                                                                                                                                                                                                                                                                                Форум программистов вроде :)

                                                                                                                                                                                                                                                                                                                                                                Цитата
                                                                                                                                                                                                                                                                                                                                                                Если Вы будете продолжать тут общаться на своем птичьем языке "о своем о девичьем" топикстартер НИКОГДА не поймет для чего нужны "ленивые вычисления".

                                                                                                                                                                                                                                                                                                                                                                Если у него будет желание, то поймет.
                                                                                                                                                                                                                                                                                                                                                                  Цитата amk @
                                                                                                                                                                                                                                                                                                                                                                  Иногда удаётся такие отложенные вычисления по ходу вычисления оптимизировать, так что процессор даже при необходимости вычислить ВСЁ греется меньше, чем при неленивом счёте.

                                                                                                                                                                                                                                                                                                                                                                  Есть мнение, что ленивые вычисления не столько экономят проц, сколько ускоряют работу программы. По крайней мере я бы искал профит именно в этом.
                                                                                                                                                                                                                                                                                                                                                                    Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                    А можно все тоже самое сказать не на "птичьем", понятном только узкому кругу секты избранных, языке, а на простом инженером языке?
                                                                                                                                                                                                                                                                                                                                                                    Чтобы ЛЮБОМУ инженеру было понятно в чем циммес использования "отложенных вычислений" и какой круг задач позволяет решать "ленивые вычисления"

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

                                                                                                                                                                                                                                                                                                                                                                    Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                    Т.е., как я понял, вычисления не делаются, а планируются. Т.е. "откладываются на потом". Копятся.
                                                                                                                                                                                                                                                                                                                                                                    А потом когда накапливается критическая масса БАХ. И вычисляются сразу всем скопом. И памяти не хватает и венда падает , а процессор сгорает от перегрева и атомный реактор взрывается.

                                                                                                                                                                                                                                                                                                                                                                    Нет. Не так. В программе описывается правило получение некоего результата (в виде функции), эта функция переносится в рантайм и вызывается только тогда, когда результат действительно необходим. Если такой необходимости не возникло - функция не вызывается. Всё, вроде, просто. Обычно используется в связке с операциями над списками и функциями второго порядка, но не всегда.
                                                                                                                                                                                                                                                                                                                                                                      Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                                                      Всё, вроде, просто.

                                                                                                                                                                                                                                                                                                                                                                      Нет, не все. Совершенно не раскрыта тема того, нафига вы тратите время на этого толстого тролля? :-?
                                                                                                                                                                                                                                                                                                                                                                        Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                        Так а что такое lazy string, если не функция + мемоизация?
                                                                                                                                                                                                                                                                                                                                                                        Может проблема в терминологии? Я под мемоизацией понимаю ситуацию, кода чистая функция кеширует результаты вычислений для наборов параметров и при повторении этих наборов сразу возвращает готовый результат. Такой мемоизации в lazy string я не вижу. А что ты имеешь в виду говоря мемоизация, может ты путаешь мемоизацию с замыканием?
                                                                                                                                                                                                                                                                                                                                                                        Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                        В плюсах, кстати lazy<T> вроде несложно делается.
                                                                                                                                                                                                                                                                                                                                                                        Очень сомневаюсь. Но было бы интересно посмотреть на такое. Давай ссылку или сам набросай.
                                                                                                                                                                                                                                                                                                                                                                          Цитата Астарот @
                                                                                                                                                                                                                                                                                                                                                                          Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                                                          Всё, вроде, просто.

                                                                                                                                                                                                                                                                                                                                                                          Нет, не все. Совершенно не раскрыта тема того, нафига вы тратите время на этого толстого тролля? :-?

                                                                                                                                                                                                                                                                                                                                                                          Вот скажи, когда ты на наших заливных лугах последний раз троллей видел? Вот! :) А тут такой экземпляр. :)
                                                                                                                                                                                                                                                                                                                                                                            Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                                                            Вот скажи, когда ты на наших заливных лугах последний раз троллей видел? Вот! :) А тут такой экземпляр. :)

                                                                                                                                                                                                                                                                                                                                                                            Так толстый же. И унылый. До Мастерова, как до Китая!

                                                                                                                                                                                                                                                                                                                                                                            Добавлено
                                                                                                                                                                                                                                                                                                                                                                            В восьмой жабе, если уж говорить про ленивость, сделали стримы, которые насквозь ленивые, да еще туда возможность не явной параллельности впихнули :yes: Оч круто!
                                                                                                                                                                                                                                                                                                                                                                              Цитата applegame @
                                                                                                                                                                                                                                                                                                                                                                              Я под мемоизацией понимаю ситуацию, кода чистая функция кеширует результаты вычислений для наборов параметров и при повторении этих наборов сразу возвращает готовый результат.

                                                                                                                                                                                                                                                                                                                                                                              Ну так разве результат вычисления lazy не кэшируется? Не думаю, что он пересчитывается каждый раз при обращении.

                                                                                                                                                                                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                                                                                                                                                                                              Цитата applegame @
                                                                                                                                                                                                                                                                                                                                                                              Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                              В плюсах, кстати lazy<T> вроде несложно делается.
                                                                                                                                                                                                                                                                                                                                                                              Очень сомневаюсь. Но было бы интересно посмотреть на такое. Давай ссылку или сам набросай.

                                                                                                                                                                                                                                                                                                                                                                              А что там сложного? Делаем прокси-объект, который вызывает при обращении функцию для вычисления значения и умеет кэшировать результат.
                                                                                                                                                                                                                                                                                                                                                                                А еще есть std::async и std::launch::deferred. Я правда не юзал никогда, но тоже можно попробовать :)
                                                                                                                                                                                                                                                                                                                                                                                  Если что - мой вариант ленивых списков здесь. Примеры использования можно найти в тестах.

                                                                                                                                                                                                                                                                                                                                                                                  Добавлено
                                                                                                                                                                                                                                                                                                                                                                                  Кстати, принципиальное отличие от range'ей из N4128 - это то, что ты можешь вернуть такой список. То есть отличие примерно такое же, как между std::function<> и лямбдой.
                                                                                                                                                                                                                                                                                                                                                                                    Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                    Ну так разве результат вычисления lazy не кэшируется? Не думаю, что он пересчитывается каждый раз при обращении.
                                                                                                                                                                                                                                                                                                                                                                                    lazy и мемоизация - перпендикулярные вещи. Кеширование можно делать, если функция чистая. Но не обязательно.
                                                                                                                                                                                                                                                                                                                                                                                    Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                    А что там сложного? Делаем прокси-объект, который вызывает при обращении функцию для вычисления значения и умеет кэшировать результат.
                                                                                                                                                                                                                                                                                                                                                                                    То есть на вызывающей стороне, мне придется создавать этот прокси объект? Весь прикол как раз в том, что и для вызывающей стороны и для вызываемой функции lazy-параметр выглядит как обычная переменная, а не как прокси-объект, который нужно создавать, а потом вытаскивать из него результат вычислений. Получится костыль, а не lazy.

                                                                                                                                                                                                                                                                                                                                                                                    Добавлено
                                                                                                                                                                                                                                                                                                                                                                                    Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                    А еще есть std::async и std::launch::deferred. Я правда не юзал никогда, но тоже можно попробовать :)
                                                                                                                                                                                                                                                                                                                                                                                    Я юзал, но не в контексте lazy, а в многопоточном окружении, для которого они и предназначены.
                                                                                                                                                                                                                                                                                                                                                                                    Сообщение отредактировано: applegame -
                                                                                                                                                                                                                                                                                                                                                                                      Цитата Астарот @
                                                                                                                                                                                                                                                                                                                                                                                      Есть мнение, что ленивые вычисления не столько экономят проц, сколько ускоряют работу программы. По крайней мере я бы искал профит именно в этом.
                                                                                                                                                                                                                                                                                                                                                                                      И каким образом они это делают? Да, как правило, использование ленивых вычислений позволяет избежать вычисления ненужных значений.
                                                                                                                                                                                                                                                                                                                                                                                      Но иногда удаётся и воспользоваться оптимизацией при вычислении. Например, если надо перемножить несколько матриц разного размера, то используя сочетательный закон можно поменять трудоёмкость вычислений на порядки. Более того, прямой порядок вычислений может оказаться вообще невозможным.

                                                                                                                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                                                                                                                      Вообще для ускорения работы программы существует два противоположных подхода. Один - отложить вычисления «на потом», второй - выполнить вычисления заранее. Иногда срабатывает один, иногда другой. Иногда оба не работают.
                                                                                                                                                                                                                                                                                                                                                                                        Цитата amk @
                                                                                                                                                                                                                                                                                                                                                                                        И каким образом они это делают?

                                                                                                                                                                                                                                                                                                                                                                                        Ну, как каким? Если из всего множества ленивых вычислений будет сделано только одно, которое нужно, то вот тебе и ускорение - мы не потратили время на лишние расчеты :) Таким образом чисто на уровне бизнес-логики твоего приложения ты можешь заранее готовить любое количество вычислений, а время потратить только на одно в самый последний момент.

                                                                                                                                                                                                                                                                                                                                                                                        Цитата amk @
                                                                                                                                                                                                                                                                                                                                                                                        Вообще для ускорения работы программы существует два противоположных подхода. Один - отложить вычисления «на потом», второй - выполнить вычисления заранее. Иногда срабатывает один, иногда другой. Иногда оба не работают.

                                                                                                                                                                                                                                                                                                                                                                                        А распараллелить это какой из них?
                                                                                                                                                                                                                                                                                                                                                                                          А распараллелить это подход, никак не связанный с этими двумя. В частности, он может использоваться совместно с ними.
                                                                                                                                                                                                                                                                                                                                                                                            Цитата amk @
                                                                                                                                                                                                                                                                                                                                                                                            А распараллелить это подход, никак не связанный с этими двумя. В частности, он может использоваться совместно с ними.

                                                                                                                                                                                                                                                                                                                                                                                            Это сразу оба, потому что начинаешь вычислять заранее, а результат получишь где-то потом :D
                                                                                                                                                                                                                                                                                                                                                                                              Цитата applegame @
                                                                                                                                                                                                                                                                                                                                                                                              Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                              Ну так разве результат вычисления lazy не кэшируется? Не думаю, что он пересчитывается каждый раз при обращении.
                                                                                                                                                                                                                                                                                                                                                                                              lazy и мемоизация - перпендикулярные вещи. Кеширование можно делать, если функция чистая. Но не обязательно.

                                                                                                                                                                                                                                                                                                                                                                                              Я про условную реализацию lazy. Фактически это функциональный объект + мемоизация.

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

                                                                                                                                                                                                                                                                                                                                                                                              Фактически он и создается. Если тебя привлекает синтаксический сахар, то мне этот разговор будет не слишком интересен :)
                                                                                                                                                                                                                                                                                                                                                                                              Можно решить за счет шаблонов выражений, макросов и др. костылей=)

                                                                                                                                                                                                                                                                                                                                                                                              Кстати, что будет, если в выражении указать объект, который будет уничтожен до реального вычисления?
                                                                                                                                                                                                                                                                                                                                                                                              Я к тому, что из вызова не видно, что выражение будет вычислено лениво.
                                                                                                                                                                                                                                                                                                                                                                                              И еще такой вопрос, в обобщенном коде как мне сделать perfect forwarding в случае ленивых параметров?
                                                                                                                                                                                                                                                                                                                                                                                                Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                                                                                Нет. Не так. В программе описывается правило получение некоего результата (в виде функции), эта функция переносится в рантайм и вызывается только тогда, когда результат действительно необходим. Если такой необходимости не возникло - функция не вызывается. Всё, вроде, просто. Обычно используется в связке с операциями над списками и функциями второго порядка, но не всегда.

                                                                                                                                                                                                                                                                                                                                                                                                Т.е. Вы даже теоритечески не видите возможности возникнровения ЛАВИНЫ, которая может обружить всю систему?
                                                                                                                                                                                                                                                                                                                                                                                                Нет. Все таки не зря я создал тему "все программисты ...."
                                                                                                                                                                                                                                                                                                                                                                                                Вы не инженеры, Вы мистики.

                                                                                                                                                                                                                                                                                                                                                                                                Вы верите и надеетесь.
                                                                                                                                                                                                                                                                                                                                                                                                А инженер ЗНАЕТ

                                                                                                                                                                                                                                                                                                                                                                                                Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                Цитата amk @

                                                                                                                                                                                                                                                                                                                                                                                                Цитата amk @
                                                                                                                                                                                                                                                                                                                                                                                                Вообще для ускорения работы программы существует два противоположных подхода. Один - отложить вычисления «на потом», второй - выполнить вычисления заранее. Иногда срабатывает один, иногда другой. Иногда оба не работают.

                                                                                                                                                                                                                                                                                                                                                                                                Есть ещё третий подход (ИМХО самый правильный): запомнить значение уже ранее вычислявшееся, и потом повторно уже не вычислять его, а тупо достать его из хэш таблицы
                                                                                                                                                                                                                                                                                                                                                                                                Сообщение отредактировано: Исмаил Прокопенко -
                                                                                                                                                                                                                                                                                                                                                                                                  Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                  Т.е. Вы даже теоритечески не видите возможности возникнровения ЛАВИНЫ, которая может обружить всю систему?

                                                                                                                                                                                                                                                                                                                                                                                                  Чисто теоретически я могу видеть всё, что угодно. Хоть ЛММ, хоть Ктулху, хоть пса пятиногого. А практически - всё зависит от аппаратного и программного окружения. Но это ведь такие мелочи, правда?
                                                                                                                                                                                                                                                                                                                                                                                                    Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                                                                                    Чисто теоретически я могу видеть всё, что угодно. Хоть ЛММ, хоть Ктулху, хоть пса пятиногого. А практически - всё зависит от аппаратного и программного окружения.

                                                                                                                                                                                                                                                                                                                                                                                                    Опять незачот.
                                                                                                                                                                                                                                                                                                                                                                                                    Все зависит от программы, а не программного окружения.

                                                                                                                                                                                                                                                                                                                                                                                                    И опять всплывает разница между программистами и инженерами.
                                                                                                                                                                                                                                                                                                                                                                                                    Инженер считает, что проект не сделан, если факап возможен хотя бы чисто теоретически, а программист, если вероятность факапа мала, считает, что он невозможен и считает, что свою задачу он выполнил
                                                                                                                                                                                                                                                                                                                                                                                                    Сообщение отредактировано: Исмаил Прокопенко -
                                                                                                                                                                                                                                                                                                                                                                                                      Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                      Инженер не допускает факапа даже теоретически

                                                                                                                                                                                                                                                                                                                                                                                                      Гы-гы :lool: :lool: :lool:
                                                                                                                                                                                                                                                                                                                                                                                                        Flex FerrumПо крайней мере инженер отдаёт себе отчёт, что "при данной метОде решения задачи возможен фак ап".

                                                                                                                                                                                                                                                                                                                                                                                                        А программист просто "закрывает глаза" и врёт даже себе

                                                                                                                                                                                                                                                                                                                                                                                                        Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                        Не говоря уже про коллег на форуме
                                                                                                                                                                                                                                                                                                                                                                                                          Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                          Flex FerrumПо крайней мере инженер отдаёт себе отчёт, что "при данной метОде решения задачи возможен фак ап".

                                                                                                                                                                                                                                                                                                                                                                                                          А программист просто "закрывает глаза" и врёт даже себе

                                                                                                                                                                                                                                                                                                                                                                                                          Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                          Не говоря уже про коллег на форуме

                                                                                                                                                                                                                                                                                                                                                                                                          Ну да! Программист же - он тупой, к любой задаче с одним инструментом подходит, а потом возмущается, почему для программирования какого-нибудь S7-300 ему только FBD предлагают, а на С++17 - нельзя. Или почему при разработке числодробилки под айбиэмовский DeepBlue у него такой адовый шит в коде получается. Угу. Нет, чтобы докумекать, что в S7-300 - жёсткий реалтайм, а на машинке, где число процессоров измеряется тысячами, синхронизация потоков - очень дорогая штука. Ну идиот, одно слово. :D :D :D
                                                                                                                                                                                                                                                                                                                                                                                                            Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                            Инженер считает, что проект не сделан, если факап возможен хотя бы чисто теоретически, а программист, если вероятность факапа мала, считает, что он невозможен и считает, что свою задачу он выполнил
                                                                                                                                                                                                                                                                                                                                                                                                            Инженер считает, что число пи равно 3, а если нужно точно, то 3.14.
                                                                                                                                                                                                                                                                                                                                                                                                            А знающий программист знает, что там дальше ещё много много цифр.
                                                                                                                                                                                                                                                                                                                                                                                                            Инженерам обычно хватает приближённых эмпирических формул, и они сильно удивляются, когда подсунув эти грубые формулы программисту, получает в ответ сильно приближённое решение. Ведь формулы-то точные.
                                                                                                                                                                                                                                                                                                                                                                                                              Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                              "Самый очевидный плюс ленивых вычислений — если что-то не требуется, оно не будет вычислено."
                                                                                                                                                                                                                                                                                                                                                                                                              Это квантовая механика. Один в один. Мы в матрице.

                                                                                                                                                                                                                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                              Исмаил Прокопенко, тебе ещё не надело клоуном работать?
                                                                                                                                                                                                                                                                                                                                                                                                                Цитата Flex Ferrum @
                                                                                                                                                                                                                                                                                                                                                                                                                Программист же - он тупой

                                                                                                                                                                                                                                                                                                                                                                                                                Но согласитесь, что лавинообразный рост вычислительной нагрузки возможен, а Вы говорите, что нет. Хотя любому инженеру это очевидно.

                                                                                                                                                                                                                                                                                                                                                                                                                Достаточно написать 3 строчки
                                                                                                                                                                                                                                                                                                                                                                                                                C=f3(e,f,g)
                                                                                                                                                                                                                                                                                                                                                                                                                B=f1(C,D)
                                                                                                                                                                                                                                                                                                                                                                                                                А=B*C


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

                                                                                                                                                                                                                                                                                                                                                                                                                А если бы строчек было 10?
                                                                                                                                                                                                                                                                                                                                                                                                                А если каждая функция имеет по 5 параметров и внутри вызывает кучу других функций?

                                                                                                                                                                                                                                                                                                                                                                                                                Уже разрулить "завязки" (т.е. что с чем связано, а значит, что нужно считать "прям щас", а что можно отложить) уже нетривиальная задача, жрущая не малые ресурсы. А тут ещё лавина отложенных вычислений, которые все откладывались, откладывались и вот наконец пришло время их выполнять
                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                                                  Фактически он и создается. Если тебя привлекает синтаксический сахар, то мне этот разговор будет не слишком интересен :)
                                                                                                                                                                                                                                                                                                                                                                                                                  В какой-то степени да, синтаксический сахар. Но дык, например, синтаксис лямбд в С++ тоже не более, чем синтаксический сахар. Тебе они тоже не слишком интересны?
                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                                                  Кстати, что будет, если в выражении указать объект, который будет уничтожен до реального вычисления?
                                                                                                                                                                                                                                                                                                                                                                                                                  Я к тому, что из вызова не видно, что выражение будет вычислено лениво.
                                                                                                                                                                                                                                                                                                                                                                                                                  Не понятно, как именно ты собрался его уничтожать. Что ты имеешь в виду? Уничтожение в другом потоке?
                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                                                  И еще такой вопрос, в обобщенном коде как мне сделать perfect forwarding в случае ленивых параметров?
                                                                                                                                                                                                                                                                                                                                                                                                                  Не знаю, мне даже думать на эту тему не хочется. Наверное также как и в случае неленивых параметров. Я ленивость вызова функций не считаю архиполезной штукой, использую редко и как правило в простых случаях. А Perfect Forwarding сам по себе отрыжка академического плюсового перфекционизма. Эта неуёмная жажда обобщить все на свете на практике только вредит.
                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                                  И опять всплывает разница между программистами и инженерами.
                                                                                                                                                                                                                                                                                                                                                                                                                  Инженер считает, что проект не сделан, если факап возможен хотя бы чисто теоретически, а программист, если вероятность факапа мала, считает, что он невозможен и считает, что свою задачу он выполнил
                                                                                                                                                                                                                                                                                                                                                                                                                  Поэтому мы видим вокруг тонны инженерного факапа. :D
                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата applegame @
                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                                                    Фактически он и создается. Если тебя привлекает синтаксический сахар, то мне этот разговор будет не слишком интересен :)
                                                                                                                                                                                                                                                                                                                                                                                                                    В какой-то степени да, синтаксический сахар. Но дык, например, синтаксис лямбд в С++ тоже не более, чем синтаксический сахар. Тебе они тоже не слишком интересны?

                                                                                                                                                                                                                                                                                                                                                                                                                    Не слишком. Но код упрощают во многих случаях, да.

                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата
                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                                                    Кстати, что будет, если в выражении указать объект, который будет уничтожен до реального вычисления?
                                                                                                                                                                                                                                                                                                                                                                                                                    Я к тому, что из вызова не видно, что выражение будет вычислено лениво.
                                                                                                                                                                                                                                                                                                                                                                                                                    Не понятно, как именно ты собрался его уничтожать. Что ты имеешь в виду? Уничтожение в другом потоке?

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

                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата
                                                                                                                                                                                                                                                                                                                                                                                                                    А Perfect Forwarding сам по себе отрыжка академического плюсового перфекционизма. Эта неуёмная жажда обобщить все на свете на практике только вредит.

                                                                                                                                                                                                                                                                                                                                                                                                                    :D
                                                                                                                                                                                                                                                                                                                                                                                                                      Цитата applegame @
                                                                                                                                                                                                                                                                                                                                                                                                                      Поэтому мы видим вокруг тонны инженерного факапа.

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

                                                                                                                                                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                      И потом, исправить косяк в железе - это тебе не пару строк в коде поправить. На это иногда ГОДЫ нужны и огромные ресурсы
                                                                                                                                                                                                                                                                                                                                                                                                                      Сообщение отредактировано: Исмаил Прокопенко -
                                                                                                                                                                                                                                                                                                                                                                                                                        Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                                                        Не слишком. Но код упрощают во многих случаях, да.
                                                                                                                                                                                                                                                                                                                                                                                                                        Здесь то же самое, код может упростить, но не является серебряной пулей. Просили пример где lazy полезно, я его привел. Хочешь синтаксическим сахаром, хочешь костылями.
                                                                                                                                                                                                                                                                                                                                                                                                                        Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                                        Достаточно написать 3 строчки
                                                                                                                                                                                                                                                                                                                                                                                                                        C=f3(e,f,g)
                                                                                                                                                                                                                                                                                                                                                                                                                        B=f1(C,D)
                                                                                                                                                                                                                                                                                                                                                                                                                        А=B*C

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

                                                                                                                                                                                                                                                                                                                                                                                                                        Ты наверное никогда не пишешь
                                                                                                                                                                                                                                                                                                                                                                                                                        a = (b + c) * d + e / f;
                                                                                                                                                                                                                                                                                                                                                                                                                        это же ЛАВИННОСТЬ!!!
                                                                                                                                                                                                                                                                                                                                                                                                                        надо писать
                                                                                                                                                                                                                                                                                                                                                                                                                        bc = b + c;
                                                                                                                                                                                                                                                                                                                                                                                                                        bc = bc * d;
                                                                                                                                                                                                                                                                                                                                                                                                                        ef = e / f;
                                                                                                                                                                                                                                                                                                                                                                                                                        a = bc + ef;

                                                                                                                                                                                                                                                                                                                                                                                                                        Так-скаать "размазать" код по строчкам, для более плавного выполнения. :lool:
                                                                                                                                                                                                                                                                                                                                                                                                                        Сообщение отредактировано: applegame -
                                                                                                                                                                                                                                                                                                                                                                                                                          Цитата applegame @
                                                                                                                                                                                                                                                                                                                                                                                                                          И что? В третьей строчке фактически будет вычислены первая и вторая. Итоговое время выполнения не изменится вообще никак. Да и итоговый машинный код будет одинаковым.

                                                                                                                                                                                                                                                                                                                                                                                                                          Не верно.
                                                                                                                                                                                                                                                                                                                                                                                                                          Во первых если значения некоторых переменных вычислить заранее, то память под уже не нужные переменные можно освободить. А в случае лавины потребуется сразу вся память, так как придется "держать в уме" сразу все переменные.
                                                                                                                                                                                                                                                                                                                                                                                                                          А во вторых, как я понимаю, в случае "ленивых языков" компилятор вместо вставки уже вычисленного ранее значения вставляет некий "код пролога" (например вызов функции), который вычислит это значение. Т.е. некоторую ссылку на код, который формирует нужное значение.
                                                                                                                                                                                                                                                                                                                                                                                                                          Сообщение отредактировано: Исмаил Прокопенко -
                                                                                                                                                                                                                                                                                                                                                                                                                            "Лавины" действительно могут быть, я выше писал об этом. Возможно, это следствие кривых рук и неумения использовать haskell, но тем не менее.
                                                                                                                                                                                                                                                                                                                                                                                                                            Сообщение отредактировано: D_KEY -
                                                                                                                                                                                                                                                                                                                                                                                                                              Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                                                              это следствие кривых рук и неумения использовать haskell

                                                                                                                                                                                                                                                                                                                                                                                                                              Так с прямыми руками и хаскелл с его ленивыми вычислениями не нужен. Так?

                                                                                                                                                                                                                                                                                                                                                                                                                              Хороший программист и так пишет программу так, чтобы она наиболее оптимально работала и использовала ресурсы.

                                                                                                                                                                                                                                                                                                                                                                                                                              А все эти "ленивые вычисления" и прочие костыли - это просто средства защиты от криворуких программистов.

                                                                                                                                                                                                                                                                                                                                                                                                                              Так?

                                                                                                                                                                                                                                                                                                                                                                                                                              Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                              Ведь не секрет, что 99% программистов имеют, мягко говоря, неудовлетворительную квалификацию и интеллект. Не случайно же у них так "туго идут" общеинженерные дисциплины.

                                                                                                                                                                                                                                                                                                                                                                                                                              Поэтому приходится изощраться и придумывать разные костыли, чтобы даже низкоквалифицированный программист мог хоть какую-то пользу приносить
                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                                                Достаточно написать 3 строчки
                                                                                                                                                                                                                                                                                                                                                                                                                                C=f3(e,f,g)
                                                                                                                                                                                                                                                                                                                                                                                                                                B=f1(C,D)
                                                                                                                                                                                                                                                                                                                                                                                                                                А=B*C


                                                                                                                                                                                                                                                                                                                                                                                                                                Получается, что первые две строчки не будут выполнены пока программа не дойдёт до 3-й и поймет, что ей нужны результаты предыдущих.
                                                                                                                                                                                                                                                                                                                                                                                                                                Да и третья вычисляться не будет. Результат-то пока не нужен.
                                                                                                                                                                                                                                                                                                                                                                                                                                Реально эти выражения компилируются в дерево операций, как только значение понадобится, оно по этому дереву вычисляется. Ненужные более ветви сразу отсекаются. На практике ты получишь тот же код, что и в обычном императивном языке, разве что порядок вычислений может поменяться.
                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата applegame @
                                                                                                                                                                                                                                                                                                                                                                                                                                Поэтому мы видим вокруг тонны инженерного факапа
                                                                                                                                                                                                                                                                                                                                                                                                                                Это не потому, что инженер допускает факап. Это потому, что он не считает его факапом.
                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                                                Во первых если значения некоторых переменных вычислить заранее, то память под уже не нужные переменные можно освободить. А в случае лавины потребуется сразу вся память, так как придется "держать в уме" сразу все переменные.
                                                                                                                                                                                                                                                                                                                                                                                                                                А зачем их держать в памяти? Как только все вычисления со значением закончатся, ненужное значение сразу можно чистить. Хранить приходится только именованные переменные, но в функциональных языках они используются нечасто. Вот в императивных языках с этим сложности, там переменных на порядок больше, а без отслеживания времени жизни приходится все переменные держать в активном состоянии.
                                                                                                                                                                                                                                                                                                                                                                                                                                  Исмаил Прокопенко, у вас в посте очень мало конструктивных высказываний. Возможно даже совсем нет.

                                                                                                                                                                                                                                                                                                                                                                                                                                  Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата amk @
                                                                                                                                                                                                                                                                                                                                                                                                                                  А зачем их держать в памяти? Как только все вычисления со значением закончатся, ненужное значение сразу можно чистить. Хранить приходится только именованные переменные, но в функциональных языках они используются нечасто.

                                                                                                                                                                                                                                                                                                                                                                                                                                  Проблема в том, что даже ленивые списки часто действительно используются не по делу. Даже в примерах.
                                                                                                                                                                                                                                                                                                                                                                                                                                  Там, где в "императоры языках" был бы обычный обход, в функциональщине часто видим списки, которые таки да, сохраняют результат вычислений и держат его в памяти по крайней мере до окончания обхода(хотя в некоторых случаях правильной хвостовой рекурсии предыдущие элементы списка можно будет освободить, но не уверен, что это делается).
                                                                                                                                                                                                                                                                                                                                                                                                                                  Сообщение отредактировано: D_KEY -
                                                                                                                                                                                                                                                                                                                                                                                                                                    Цитата D_KEY @
                                                                                                                                                                                                                                                                                                                                                                                                                                    в функциональщине часто видим списки, которые таки да, сохраняют результат вычислений и держат его в памяти
                                                                                                                                                                                                                                                                                                                                                                                                                                    Попытка сымитировать состояние (как бы переменные и цикл) при использовании парадигмы, где состояния в принципе быть не должно. Программист просто никак не может отойти от привычной императивщины.
                                                                                                                                                                                                                                                                                                                                                                                                                                      Ой не пойму, об чём вообще спор. От перемены мест вычислений в программе сумма затребованных ими ресурсов не изменится. Это в идеале, в реальности на хранение списков нужны дополнительные ресурсы, но и на вычисления по месту нужны дополнительные ресурсы, и бывает, что больше одних, а бывает, что и других.
                                                                                                                                                                                                                                                                                                                                                                                                                                      Другое дело, что некоторые алгоритмические фрагменты могут перекрывать друг друга, поэтому вычисления по факту требования их результата могут отменить некоторые предшествующие элементы списков, поэтому ленивость является главным образом оптимизацией в рант-тайм, выбрасывающая ранние вычисления, перекрытые последующими. Если архитектура языка ориентирована на отложенные вычисления, то списки априори дёшевы, и проблема лишь в том, чтобы эту архитектуру реализовать на практике. О чём тут ещё спорить-то?
                                                                                                                                                                                                                                                                                                                                                                                                                                        Цитата Qraizer @
                                                                                                                                                                                                                                                                                                                                                                                                                                        ленивость является главным образом оптимизацией в рант-тайм

                                                                                                                                                                                                                                                                                                                                                                                                                                        Я об этом и сказал.
                                                                                                                                                                                                                                                                                                                                                                                                                                        Только вот не получится ли, что затраты на "оптимизацию в рунтайме" намного превысят затраты, если вычислять тупо в лоб, без поиска в рунтайме всяких сверток и ненужных веток.

                                                                                                                                                                                                                                                                                                                                                                                                                                        А? :victory:
                                                                                                                                                                                                                                                                                                                                                                                                                                          Цитата Qraizer @
                                                                                                                                                                                                                                                                                                                                                                                                                                          Ответ на этот вопрос, Исмаил Прокопенко, содержится в предыдущем посте.

                                                                                                                                                                                                                                                                                                                                                                                                                                          Может я дурак, но не увидел ответа в предыдущем посте
                                                                                                                                                                                                                                                                                                                                                                                                                                            Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                                                            Может я дурак

                                                                                                                                                                                                                                                                                                                                                                                                                                            Смекаешь.
                                                                                                                                                                                                                                                                                                                                                                                                                                              Цитата Астарот @
                                                                                                                                                                                                                                                                                                                                                                                                                                              Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                                                              Может я дурак

                                                                                                                                                                                                                                                                                                                                                                                                                                              Смекаешь.

                                                                                                                                                                                                                                                                                                                                                                                                                                              Ты слова-то из песни не выдирай :wall:
                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата amk @
                                                                                                                                                                                                                                                                                                                                                                                                                                                Вообще для ускорения работы программы существует два противоположных подхода. Один - отложить вычисления «на потом», второй - выполнить вычисления заранее. Иногда срабатывает один, иногда другой. Иногда оба не работают.

                                                                                                                                                                                                                                                                                                                                                                                                                                                Плюсую. А то совсем уж эти "ленивые вычисления" вознесли до небес.
                                                                                                                                                                                                                                                                                                                                                                                                                                                  а ещё, пишуть, что есть ФЯ без операции/оператора присваивания.
                                                                                                                                                                                                                                                                                                                                                                                                                                                  Это как вообще? :-?
                                                                                                                                                                                                                                                                                                                                                                                                                                                  А в чём тогда заключается назначение программы?
                                                                                                                                                                                                                                                                                                                                                                                                                                                    Функциональные языки вполне обходятся без такого оператора. Более того, даже там, где он есть, он обычно именно оператором присваивания не является, а просто определяет обозначение для выражения, чтобы это выражение можно было потом использовать не занимаясь копированием.

                                                                                                                                                                                                                                                                                                                                                                                                                                                    В Прологе нет оператора присваивания. Там вообще нет никаких операторов. Практически одним сопоставлением обходятся. И несколькими предикатами.
                                                                                                                                                                                                                                                                                                                                                                                                                                                      amk А можно всё тоже самое, но не на Вашем птичьем языке, а на человеческом?
                                                                                                                                                                                                                                                                                                                                                                                                                                                      Сообщение отредактировано: Исмаил Прокопенко -
                                                                                                                                                                                                                                                                                                                                                                                                                                                        Шаблонное метапрограммирование подойдёт?
                                                                                                                                                                                                                                                                                                                                                                                                                                                          Цитата Qraizer @
                                                                                                                                                                                                                                                                                                                                                                                                                                                          Шаблонное метапрограммирование подойдёт?

                                                                                                                                                                                                                                                                                                                                                                                                                                                          "Шаблонное метапрограммирование" не решает проблему, оно облегчает написание программы, которая решает проблему
                                                                                                                                                                                                                                                                                                                                                                                                                                                            Хм. 8-) Впрочем, чему я удивляюсь, все посты такие.
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Цитата amk @
                                                                                                                                                                                                                                                                                                                                                                                                                                                              В Прологе нет оператора присваивания. Там вообще нет никаких операторов. Практически одним сопоставлением обходятся. И несколькими предикатами.

                                                                                                                                                                                                                                                                                                                                                                                                                                                              Когда я читаю лекции по классической теории компиляции, мне всегда приходится объяснять понятие "ниши", т.е. прикладной области знаний, где применяется тот или иной язык. Классика языков программирования утверждает совершенно однозначно - у каждого языка есть своя ниша, свой ареал обитания.
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Просто НЕ СУЩЕСТВУЕТ самого наилучшего языка для ВСЕГО. Такого языка просто нет.
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Вот как об этом говорит Бьерн Страуструп - разработчик языка С++ и создатель первого компилятора для него:
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Цитата
                                                                                                                                                                                                                                                                                                                                                                                                                                                              "If someone claims to have the perfect programming language, he is either a fool or a salesman or both“ © Bjarne Stroustrup

                                                                                                                                                                                                                                                                                                                                                                                                                                                              Мне в этом предложении больше всего нравится фраза "is a fool", в переводе - просто "тупой"
                                                                                                                                                                                                                                                                                                                                                                                                                                                              В Прологе - по его сущности отнюдь не вычислительной - присвоение вообще не рассматривается:
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Цитата
                                                                                                                                                                                                                                                                                                                                                                                                                                                              Пролог, благодаря своим особенностям, используется в области искусственного интеллекта, компьютерной лингвистики и нечислового программирования в целом.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата Oleg2004 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                мне всегда приходится объяснять понятие "ниши"
                                                                                                                                                                                                                                                                                                                                                                                                                                                                про нишу, и даже про тип языка, в вопросе ничего не говорилось. Я Пролог немного знаю, хотя пользоваться им и не приходится, поэтому привёл его в качестве одного из языков без присваиваний.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Цитата Исмаил Прокопенко @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                amk А можно всё тоже самое, но не на Вашем птичьем языке, а на человеческом?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                Ладно, придётся переводить. Что именно ты, инженер, в этом «птичьем языке» не понял?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  Цитата Oleg2004 @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  В Прологе - по его сущности отнюдь не вычислительной - присвоение вообще не рассматривается

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

                                                                                                                                                                                                                                                                                                                                                                                                                                                                      В программе на Цэ плюс плюс программист хотя бы может командовать. И указывать.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      А в программе на прологе команд нету. Даже оператора присваивания нету.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      А то, так можно и мою плату печатную, нарисованную в пикад, можно назвать программой для САПР PCAD :lool:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Или чертёж железяки в автокаде - назвать программой для сапр "AutoCAD"

                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Впрочем.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Многие трассировщики печатных плат так и считают. Себя программистами. Когда трассируют плату.

                                                                                                                                                                                                                                                                                                                                                                                                                                                                      Здесь в роли программы выступает введенная трассировка а в роли компилятора - пикад, ментор, PADS и т.п.
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Опа-на. Всю жизнь меня то мама, то папа, то сестра старшая, то школа, то начальник... та мало ли кто... только и знали, что ворчать "вот идиот, сам додуматься не можешь до простейшей вещи, всё ему возьми, разжуй да в рот положи", а тут вдруг приходит Исмаил Прокопенко, которому категорически нравится за всех всё делать самому! Возьмите меня в подчинённые, плз!

                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Так, стоп. А что это за нытьё только что было за недееспособных инженеров? :wacko:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                        Добавлено
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        А, тю. Так это Вы код для своих микроконтроллеров писали в МШ? Вот умора :lool: .
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          Цитата Qraizer @
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          А, тю. Так это Вы код для своих микроконтроллеров писали в МШ? Вот умора

                                                                                                                                                                                                                                                                                                                                                                                                                                                                          https://www.youtube.com/watch?v=5iZMmyDumlA
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            Исмаил Прокопенко, ты и здесь наркоманишь?
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Исмаил Прокопенко, у тебя же инет слабый и комп с 256мб озу, а видео на трубе смотришь. :lol:
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              0 пользователей:


                                                                                                                                                                                                                                                                                                                                                                                                                                                                              Рейтинг@Mail.ru
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              [ Script execution time: 0,4794 ]   [ 16 queries used ]   [ Generated: 29.03.24, 09:06 GMT ]