Помню в одной фидошной конференции (кажется, ru.game.design) кто-то вопрошал: "ну покажите мне хоть один упаковщик файлов на Хаскелле. Мне этот момент хорошо запомнился, потому что незадолго до этого наш северодонецкий форумчанин завоевал первое место в конкурсе, организованном в конференции ru.compression: на лучший упаковщик файлов. И написал он его как раз на языке Haskell.
Вот такие бывают конфузы.

Особенно любят спорить насчет незаменимости своего инструмента.
"Мы решаем низкоуровневые задачи, поэтому нам не подойдут высокоуровневые языки".

Причем под низкоуровневостью понимается, к примеру, работа с объектами находящимеся в памяти видеокарты. В качестве такового объекта раньше очень любили обсуждать VBO (vertex buffer object). Ну вот находятся они в видеопамяти. А раз так, то С/C++ незаменим для работы с ними!
А вот и нет! И чтобы доказать это я приведу самопальную программу на haskell'е, которая создает и затем использует VBO. Проще некуда:

import Graphics.UI.GLUT import Graphics.Rendering.OpenGL.GL.VertexArrays import Graphics.Rendering.OpenGL.GL.BufferObjects import Foreign.Marshal.Alloc import Foreign.Marshal.Array import Foreign.Storable import Foreign.Ptr my_vertex :: [Vertex2 GLfloat] my_vertex = [Vertex2 0 0 ,Vertex2 0.5 0.5 ,Vertex2 (-0.5) (-0.5) ,Vertex2 (-0.5) 0.5 ,Vertex2 0.5 (-0.5) ] createVertexBuffer vertex = do withArray vertex do_init return (VertexArrayDescriptor 2 Float 0 nullPtr) where do_init ptr = bufferData ArrayBuffer $= (size, ptr, StreamDraw) size = fromIntegral $ length vertex * (sizeOf (head vertex)) redraw = do clear [ColorBuffer] pointSize $= 4 drawArrays Points 0 5 flush main = do initialize "GLTest" [] w <- createWindow "GlTest Window" [nm] <- genObjectNames 1 bindBuffer ArrayBuffer $= Just nm v <- createVertexBuffer my_vertex arrayPointer VertexArray $= v clientState VertexArray $= Enabled displayCallback $= redraw mainLoop deleteObjectNames [nm]

(c) haskell

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.