Страницы

четверг, 9 февраля 2012 г.

Go, OpenGL

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

Go 
Мне очень понравился этот язык, когда я с ним впервые познакомился (месяца 2-3 назад, заметил ботов из топа AIChallange написанных на нем, стало любопытно что это за зверь такой).
От чего я восторге:
  •  Компилируемый язык (как С, С++ и др.), и при этом - garbage collector! Есть pointers, но без арифметики указателей. Потерять память должно быть непросто.
  • Синтаксис. Вопрос субъективный. Мне просто нравится стремление к лаконичности, однозначности и понятности кода. 
  • Функции могут возвращать больше чем одно значение (долой классы PairSmth&SmthElse :))! Кроме того через этот же механизм реализовано Exception handling! Когда код может завершиться неожиданным образом - он просто дает кроме результата еще os.Error обьект. Хотим проверяем, хотим игнорируем. Я не буду жаловаться на java-exceptions (свою работу они нормально выполняют, если не городить велосипеды), но идея вместо try{...}catch(IOException e){...}finally{...} делать  проверку if ioException == nil {...} - как по мне тоже очень ничего.
  • Да, способ вернуться по стеку и аналог finally тоже есть - поищите в мануалах ключевые слова panic, defer, recover.
  • Интересная альтернатива системмы наследования, и своя идея интерфейсов.
    В Go нет никаких классов. Есть данные (чистый struct во всей его красоте), есть методы созданые для работы именно с этими данными  (функции, в которых указан данный struct в качестве receiver). Структуры можно вкладывать одна в другую в качестве анонимного поля - тогда все ее public поля и методы становяться доступны прямо из главной структуры!
    Как я понимаю - главное следить чтобы не было конфликта имен, и рекурсивной вложенности :).
  • И еще гениальная (на мой взгляд!) вещь: область видимости поля или функции определяется не какими-либо ключевыми словами... а регистром, ее названия! AField, AFunction = public,  anotheField, anotheFunction = private.
    Я в восторге от этой идеи! Лаконично, задает единый стиль, в любом коде сразу видно с чем он работает - с внешними или внутренними данными!
  • Хорошая поддержка многопоточности. Тут многого не скажу, я пока очень редко имел дело с concurency, чтобы аргументировано сравнивать, но рассказывают убедительно.
  • Много приятных мелочей, например map как базовый тип.
Я надеюсь, что он получит распространение. Но даже если нет - хочу попробовать написать на нем простенькую игру. И с этим связан мой интерес следующей темой...

OpenGL
Движки для графики, физики, блэкджека (...и много еще чего :) ) - вещь замечательная. Но у меня есть вполне резонные сомнения, что я не смогу выбрать правильный движок и эффективно его использовать, если не буду понимать как он внутри работает (хотя бы в общих чертах).
Потому ищу литературу. Книга, которую нашел: Learning Modern 3D Graphics Programming мне понравилась. Вряд ли я когда либо буду использовать все, что там описано, но фундаментальные знания о принципах работы  видеокарт, о том как формируется картинка, там изложены, как мне показалось, очень неплохо. OpenGL там, собственно - не главная тема, хотя тоже есть главы, которые были очень интересные для меня. После них я понял почему OpenGL таков, какой он есть.
P.S. Раскрою таки карты, на счет реальной причиной почему я заинтересовался OpenGL - просто для Go пока что больше нет ничего, пригодного для создания графики :).

Комментариев нет:

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