• Так ты, значит, хотел быть программистом…

      BY SCOTT C. REYNOLDS

      Сколько ты себя помнишь, компьютеры и электроника привлекали тебя. К моменту твоего совершеннолетия ты уже верно стоял на пути профессионального программиста. Первая интернетская золотая лихорадка была в самом разгаре, и вас, нердов, повсюду величали героями Новой Экономики на обложках журналов Fast Company и Wired, и нерды гребли деньги лопатой, делая то же, что любишь делать ты.
      Читать дальше →
    • Элементы стиля: UNIX как литература

      • Перевод
      (by Thomas Scoville)

      В начале 80-х я работал в исследовательском отделе местной телефонной компании Кремниевой долины. Мой отдел состоял в основном из кандидатов наук и одаренных хакеров. Как вы понимаете, контора была UNIX-ориентированной.

      Менеджер группы был исключением: ни научного звания, ни технического образования. Он явно отдавал себе в этом отчет. Мы подозревали, что он (ошибочно, как мы думали) не очень уверен в уровне своего образования и ума. Однажды произошла история, которая подтвердила наши подозрения: он сообщил нам, что его пугает учёность нашего отдела, и что он будет предпринимать шаги, чтобы что-то сделать с этим. Выход он нашел неожиданный: “Мне надо повышать уровень интеллекта”, сказал он, “Я собираюсь выучить UNIX.”
      Читать дальше →
    • Наш мир, возможно, — одна огромная голограмма

      • Перевод
      (Сокращенный перевод.)

      Эксперимент GEO600, Ганновер. В чистом поле — две перпендикулярные траншеи, покрытые металлом. Внутри — детектор, длиной 600 метров. Последние 7 лет там искали (не нашли) гравитационные волны, испускаемые нейтронными звездами и черными телами. Ученые в лаборатории не знали, как объяснить странный шум в результатах измерений. Внезапно появился некий Хоган (Hogan, USA) с объяснением. По его словам, GEO600 наткнулась на фундаментальное ограничение пространства-времени — точку, где континуум уже не может быть представлен как сплошной (по Эйнштейну), а ведет себя как «зерна», типа зернистости фотографии в газете. «GEO600 замеряет квантовые колебания пространства-времени. Если там происходит именно это то, то мы все живем в большой космической голограмме», говори Хоган.
      Читать дальше →
    • Наш мир, возможно, — одна огромная голограмма

        Источник: www.newscientist.com/article/mg20126911.300-our-world-may-be-a-giant-hologram.html?full=true
        15 January 2009 by Marcus Chown

        Сокращенный перевод.

        Эксперимент GEO600, Ганновер. В чистом поле — две перпендикулярные траншеи, покрытые металлом. Внутри — детектор, длиной 600 метров. Последние 7 лет там искали (не нашли) гравитационные волны, испускаемые нейтронными звездами и черными телами. Ученые в лаборатории не знали, как объяснить странный шум в результатах измерений. Внезапно появился некий Хоган (Hogan, USA) с объяснением. По его словам, GEO600 наткнулась на фундаментальное ограничение пространства-времени — точку, где пространство-время уже не может быть представлено как сплошной континуум Эйнштейна, а ведет себя как «зерна», типа зернистости фотографии в газете. «GEO600 замеряет квантовые колебания пространства-времени. Если в лаборатории GEO600 происходит именно это то, то мы все живем в большой космической голограмме», говори Хоган.
        Читать дальше →
      • Часть 3/3. Компилятор идеальной VM для ICFPC 2009, на Haskell, с популяризаторскими комментариями

          Окончание. Предыдущие части: 1 и 2

          Что еще осталось? Мы пропустили место, в котором два смежных опкода превращаются в один. Что мы имели? По спецификации проходили следующие операции:

          flag = m20 > 0
          if (flag) m222 = m3 else m222 = m4


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

          -- convert 2-op conditional operator to 1-op<br>
          removePhi [] = []<br>
          removePhi ((Cmpz cond condr1):(Phi addr r1 r2):xs) = <br>
                      Noop addr : If cond condr1 addr r1 r2 : removePhi xs<br>
          removePhi (x:xs) = x:removePhi xs<br>
          Читать дальше →
        • Часть 2/3. Компилятор идеальной VM для ICFPC 2009, на Haskell, с популяризаторскими комментариями

            Начало здесь.

            Теперь разбираемся как мы будем декодировать весь файл, а не только одну инструкцию.

            readMyFile = withBinaryFile "bin4.obf" ReadMode $ \-> do<br>
                    len <- hFileSize h<br>
                    buf <- mallocBytes $ fromInteger len<br>
                    hGetBuf h buf $ fromInteger len<br>
                    return (len, buf)<br>
            Это императивный кусок, потому что с файлами так в основном и работают. withBinaryFile открывает файл, выполняет указанную ей «пользовательскую» функцию, передав ей handle, и закрывает файл, и возвращает то, что вернула ей пользовательская функция. Вот, после знака $ мы описали «пользовательскую» функцию с одним параметром h (от handle). Эта функция получает размер файла, аллоцирует буфер, читает в буфер и возвращает сам буфер и его длину (в байтах). Заметим, что «пользовательская функция» здесь не имеет имени и начинается так:

            Читать дальше →
          • Часть 1/3. Компилятор идеальной VM для ICFPC 2009, на Haskell, с популяризаторскими комментариями

              Здесь мы будем разбирать по буквам некую программу (компилятор VM) на Хаскеле. На вход этому компилятору дается бинарный файл с инструкциями некоего процессора, где в этих инструкциях описываются некие вычисления. На выходе нашего компилятора получается текст программы, тоже на Хаскеле, которая производит те же самые вычисления, с большой скоростью. Возможно, это не компилятор, а декомпилятор, не знаю. Сравнение работы результирующих программ на Haskell/Java приводится в предыдущем посте.

              Читать дальше →
            • Haskell и Java — сравнение на реальной задаче (спутники, ICFP Contest)

                Сегодня на хабре проходила статья про Nemerle и ICFP 2009. Я хотел бы поделиться собственными изысканиями на эту тему, которые сделал недавно. Моей задачей было написать идеальный компилятор VM из задания, сделать это на Хаскеле, а главное, сравнить скорости результирующего кода на Java и на Haskell. Здесь не приводится полное решение задачи для ICFP, потому что задача эта переборная, и VM в ней — самое внутреннее место, от которого зависит производительность переборного решения, этим она и интересна.

                Читать дальше →