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 пока что больше нет ничего, пригодного для создания графики :).
Комментариев нет:
Отправить комментарий