Thursday, March 01, 2007

Stream computing уже здесь

Пока в новостях носятся с экспериментальным 80-ядерным процессором Intel, NVidia окончательно выпустила свой CUDA SDK на прошлой неделе, и можно сказать что stream computing на оченьмногоядерных платформах готов идти, наконец, в массы.

Оба крупнейших вендора представили свои замечательные девайсы и SDK: у нвидии это CUDA, у ATI -- их CTM SDK.

Однако ATI CTM не выглядит так интересно как CUDA, поскольку при всем пафосе он таки слишком похож на третьи-четвертые шейдеры: архитектура и инструкции похожи, лимит на 512 инструкций, и в качестве высокоуровневого языка предлагается HLSL. Правда спецификации очень подробны, и железкой управлять можно очень тонко. На данный момент ATI предлагает все писать на железко-зависимом ассемблере, и считает это почему-то преимуществом CTM.

А вот CUDA от NVidia намного интереснее. С точки зрения девелопера оно выглядит как натуральный очень-многопроцессорный девайс, причем логикой распараллеливания программы можно управлять (в отличие от шейдеров и CTM).

Вообще рекомендую полистать замечательный мануал к CUDA, за что определенно можно любить NVidia -- так это за красивые понятные и подробные SDK. Будущее параллельных вычислений -- на пальцах и с картинками.

Писать под эту красоту можно на настоящем, немного модифицированном C. Что характерно никаких жестоких ограничений по коду в мануалах к CUDA не приведено, ни размер кода, ни на глубину вложенных циклов на девайсе, ни на количество вложенных вызовов процедур.
Что, кроме всего прочего, позволяет ожидать кучи параллельных функциональных языков под нвидиевские девайсы ;)


Monday, February 19, 2007

Z++

Нечаянно наткнулся на забавных техасских парней, торгующих компилятором языка Z++.

Язык этот содержит кучу надерганых отовсюду, часто просто дурацких фич, типа специального кейворда canvas для рисования GUI, не-ленивых версий && и ||, и т.п. Также авторы легким движением руки выкинули все лишнее, типа целых чисел параметров шаблонов и классов исключений (эксепшены могут быть только enum-ами), несмотря на это язык по мнению авторов является надмножеством C++.

При чтении туториала периодически вспоминалась старая первоапрельская статья Страуструпа про перегрузку operator whitespace.

В общем сравнению со всем этим D и прочее это просто детский лепет.

Авторы считают язык мега-кроссплатоформенным (версии для windows, linux и palm), обзывают трехсоткилобайтный рантайм "виртуальной машиной" и, видимо, очень не любят яву: в табличке "сравнение фич C++, java и Z++" в колонке для явы практически одни No, в количестве 22 штук (единственное "partially" в графе portable, причем у Z++ там однозначный yes).

В порыве яваненавистничества ребята даже отказывают яве в наличии динамических массивов, enum'ов и шаблонов:

Преимущества Z++ над Java и C++

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


Thursday, February 08, 2007

Покер на Erlang — маленькая success story

Помните эту статью на devmaster.net про написание MMOG — покера на эрланге?

Так вот, автор статьи оказывается продает лицензию на исходники за $10000, один покупатель у него уже есть, в связи с чем OpenPoker стал closed source. Очень неплохо для примера из статьи, не правда ли?

Справа кстати можно обнаружить ссылку на его блог The Erlang Fix, правда он увлекся последнее время торговлей на бирже и пишет про erlang маловато.


Saturday, February 03, 2007

Математика: an idiot's guide

Отличный блог Good Math, Bad Math.
На самом деле не только про математику, но про computer science вообще.

Автор в популярной форме объясняет чем отличается Тьюринг-полнота от тьюринг-эквивалентности, все что вы хотели знать но боялись спросить о теории сложности (что именно означает O в записи O(n)), NP-полнота и прочие базовые понятия, с некоторыми из которых я, например, либо знаком был как-то вскользь, либо знал но забыл давно.

Конечно, книжки надо читать, но на них не всегда есть время и соответствующее настроение. А в легком формате блога оно идет на ура в качестве послеобеденного чтива.

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

Few picks, так сказать:
Basics: Recursion and Induction
Why oh why Y? (Про fixed-point комбинатор и рекурсию)
Basic Computational Complexity
Monads and Programming Languages


Sunday, January 14, 2007

Язык B и первый в мире hello world

Многие знают что до языка C++ был язык C, который, в свою очередь, вырос из языка B.

Выглядит он, надо сказать, довольно забавно с точки зрения C++ программера. Почитать про него можно тут на сайте bell labs. Почти все фичи присутствуют в C++, но есть некоторое количество всяких смешных нюансов:

  • типов в нем не было. то есть
    auto i; i = 3;
    
    это не C++09, как думают некоторые, это B :)
  • конструкции for там тоже не было. Был только while.
  • зато тернарный оператор ?: уже был
  • массив v[10] содержал 11 элементов с индексами от 0 до 10. Видимо эта фича как-то в генетической памяти записана, не знаю как можно иначе объяснить количество ошибок с доступом к одиннадцатому элементу в C++
  • в качестве escape-character использовался *, а не \. То есть "hello world*n" вместо "hello world\n"
  • да, и сама фраза "hello, world" впервые появилась именно в туториале к B (ну то есть стопроцентно, конечно, тут сложно утверждать, но похоже на то)
    *барабанная дробь* Исходник:
      main( ) {
        extrn a, b, c;
        putchar(a); putchar(b); 
        putchar(c); putchar(’!*n’);
      }
      a ’hell’;
      b ’o, w’;
      c ’orld’;
    


Monday, January 08, 2007

Глагол

В [info]ru_brainfucker обнаружена ссылка на фееричный язык "Глагол". Разрабатывается с 2003 года до сих пор.
Выглядит волшебно

ЗАДАЧА Голова();
ПЕР
  ч:Читать.Поток;
  п:Писать.Поток;
  чимя:Файл.ВПолного;
  двв,рез:КЛЮЧ;
  парам:ЦЕЛ;
УКАЗ
  парам:=1;
  ЕСЛИ парам >= Параметр.всего ТО 
    Ошибка1("Нет параметров") 
  КОН;
  Параметр.Текст(парам,чимя);
  ЕСЛИ чимя = "ВДОС" ТО
    двв:=ОТКЛ
  АЕСЛИ чимя = "ВВИН" ТО
    двв:=ВКЛ
  ИНАЧЕ
    Ошибка1("Неверный параметр")
  КОН;
  УВЕЛИЧИТЬ(парам);
  ЕСЛИ парам >= Параметр.всего ТО
     Ошибка1("Нет имени входного файла") 
  КОН;
  Параметр.Текст(парам,чимя);
  ЕСЛИ НЕ ОС.ПервыйПоискФ(чимя,поиск) ТО 
     Ошибка2(чимя," не найден(ы)") КОН;
  НовоеИмя
КОН Голова;
Лично мне больше всего нравится АЕСЛИ вместо elseif и ОТДЕЛ вместо паскалевского unit. Плюс к этому в дистрибутиве все файлы называются по-русски, типа "построить.bat" вместо "build", "опись" вместо descript.ion, "уборка.bat" – clean и т.п.

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

Ну а сама идея перевести паскаль на русский, конечно, далеко не нова. Собственно первый язык программирования, который я увидел, он примерно так и выглядел, назывался "Рапира" и работал, кажется, на мощном двухпроцессорном ПК "Электроника МС 0202".

Однако ж я думал что с тех пор такие фанаты русского языка от computer science как-то перевелись..