Вот кстати да, еще одно применение. Можно нафоткать свой дом или офис и скормить движку какой-нибудь игрушки. Ну и игрушки конечно подстроятся, добавят такую возможность.
Супер! Жду когда к Google Maps/Street View добавится возможность побродить по зданиям внутри. И публиковать собственные модели помещений конечно-же. Но сначала технология должна войти в мейнстрим, ее должны поддержать ведущие производители смартфонов.
ИМХО специализированное аппаратное решение все-же надежнее. Камера все-же не для этого предназначена.
А если такие датчики станут мейнстримом, будет очень интересно. Это и легкое создание трехмерных моделей помещений (с выкладыванием в Сеть конечно же), и быстрое создание моделей для 3D-печати (кстати, возможно это подстегнет развитие 3D-печати), и дополненная реальность, и много чего еще…
Буст хорош тем, что авторам языков программирования нужно туда смотреть и делать все это на языковом уровне. Прямо по списку. Каждая библиотека — фича языка (ну кроме традиционно библиотечных вещей типа ввода-вывода конечно же). А непосредственно такими вот макросами ИМХО лучше не пользоваться:)
Это я знаю, когда-то на rsdn читал статьи про язык nemerle. Это все определения той или иной степени формальности: от совсем неформальных («продвинутый enum») до строгих математических.
Но что это дает в реальном кодинге?
В чем киллер-фича ADT?
Ну я совсем не это хотел получить в ответ:) Меня интересует не реализация на хаскеле, а общие принципы.
Все что я хотел узнать — что такое АДТ с точки зрения классических императивных языков, а не Хаскеля.
Не совсем.
Вот допустим, я понял следующее.
Есть функция, принимающая на вход допустим тип T1 и возвращающая тип T2. Простая функция, ведать не ведающая ни о каких монадах.
Все эти конструкции (функторы, аппликативные функторы и монады) позволяют подавать на вход функции и получать на выходе этой функции разные другие типы, порожденные на основе T1 и T2 соответственно (например, Maybe, List, Future и т.д.). Что важно — без переписывания кода функции. Функция как не знала о монадах, так и дальше не знает, но мы получаем принципиально новые возможности в программе.
То есть если у нас есть функция увеличения числа на 1, мы можем ее совершенно прозрачно применить к целому списку чисел, получив на выходе другой список.
Я прав?
Я очень хочу разобраться в этом вопросе и помочь разобраться другим. Статью ту я с интересом читал как и многие другие статьи по теме здесь (но все равно спасибо, освежу в памяти).
Просто если есть люди, которые безусловно понимают тему на глубоком уровне (как автор топика), то почему не воспользоваться их присутствием на Хабре? Серией наводящих вопросов (возможно даже глупых) можно уточнить некоторые моменты, попытаться совместными усилиями переформулировать результаты обсуждения несколько раз до тех пор, пока не будет достигнуто полное понимание со стороны незнающих и согласие в корректности и полноте формулировок со стороны знающих.
Комментарии к статье ИМХО идеальный вариант для этой цели.
Спасибо за статью!
И как всегда объяснения на Хаскеле:) Думаю, для людей знакомых с Хаскелем, думаю это все и так понятно, а для незнакомых… сложно просто ориентироваться в коде, в синтаксисе языка, даже чтобы «распарсить» программу в уме.
Я время от времени все пытаюсь понять, что же такое эти функторы и монады, чего-то даже иногда понимаю, но единой картины все-же нет.
Начать надо с вопроса — что такое алгебраический тип данных и в чем его отличие от неалгебраических? Если пользоваться терминологией императивных языков, то например переменная типа int — АТД? Массив чисел? Структура? Класс?
В вашей предыдущей статье вы даете определение АТД как «АТД называются алгебраическими, потому что их можно представить как некую алгебраическую композицию типов его составляющих», но это все-же несколько не то, что могло бы облегчить понимание)…
Перед прочтением хотел спросить, помогло ли написание книги в улучшении вашего английского. Но вы пишете что «с английским проблем не было»:) Ну а вообще, как считаете — поможет ли наличие авторства книги к примеру в поиске работы в США?
Мне вспоминается, как я когда-то давно делал таблицу команд процессора 80x86 по книге Зубкова «Ассмеблер для dos windows и unix». Тогда тоже обратил внимание на «ICEPB» 0xF1. Но эта команда была «на виду», ее недокументированность сложно было не заметить. А вообще таких команд может быть неограниченное количество — ведь кроме «основой» таблицы, есть команды начинающиеся с 0x0F — та таблица содержит еще много «дырок», есть команды типа FPU устроенные аналогичным образом и т.п. Наконец, какая-нибудь редкоисползуемая или вообще недокументированная/незадействованная команда может делать что-то не то при определенном сочетании данных в регистрах.
А мне пофиг на украшения. И время как-то особо не смотрю (в крайнем случае действительно есть мобильник). Но я люблю хакерские гаджеты. Люблю вещи, которые всем своим видом напоминают об Информационных Технологиях. Смотрю на картинки к статье и душа радуется… причем олдскульный дизайн с несенсорными экранами и аппаратными кнопочками нравится гораздо больше современного.
Сам часов не ношу, но если вдруг внезапно по какой-то причине понадобятся — то буду смотреть именно в сторону «умных часов».
ИМХО все вполне очевидно.
Любая Власть всегда стремится сделать все, чтобы сохраниться и усилиться, и в частности устранить все, что ей может помешать — хотя-бы теоретически. Ясно, что неподконтрольные биткоины — это посягательство на территорию Власти, на ее прерогативу выпускать и контролировать деньги.
Но мы должны помнить о том, что мы — люди, граждане — единственная причина и единственный источник любой власти. Вот и все:)
А если такие датчики станут мейнстримом, будет очень интересно. Это и легкое создание трехмерных моделей помещений (с выкладыванием в Сеть конечно же), и быстрое создание моделей для 3D-печати (кстати, возможно это подстегнет развитие 3D-печати), и дополненная реальность, и много чего еще…
Но что это дает в реальном кодинге?
В чем киллер-фича ADT?
Все что я хотел узнать — что такое АДТ с точки зрения классических императивных языков, а не Хаскеля.
Вот допустим, я понял следующее.
Есть функция, принимающая на вход допустим тип T1 и возвращающая тип T2. Простая функция, ведать не ведающая ни о каких монадах.
Все эти конструкции (функторы, аппликативные функторы и монады) позволяют подавать на вход функции и получать на выходе этой функции разные другие типы, порожденные на основе T1 и T2 соответственно (например, Maybe, List, Future и т.д.). Что важно — без переписывания кода функции. Функция как не знала о монадах, так и дальше не знает, но мы получаем принципиально новые возможности в программе.
То есть если у нас есть функция увеличения числа на 1, мы можем ее совершенно прозрачно применить к целому списку чисел, получив на выходе другой список.
Я прав?
Просто если есть люди, которые безусловно понимают тему на глубоком уровне (как автор топика), то почему не воспользоваться их присутствием на Хабре? Серией наводящих вопросов (возможно даже глупых) можно уточнить некоторые моменты, попытаться совместными усилиями переформулировать результаты обсуждения несколько раз до тех пор, пока не будет достигнуто полное понимание со стороны незнающих и согласие в корректности и полноте формулировок со стороны знающих.
Комментарии к статье ИМХО идеальный вариант для этой цели.
И как всегда объяснения на Хаскеле:) Думаю, для людей знакомых с Хаскелем, думаю это все и так понятно, а для незнакомых… сложно просто ориентироваться в коде, в синтаксисе языка, даже чтобы «распарсить» программу в уме.
Я время от времени все пытаюсь понять, что же такое эти функторы и монады, чего-то даже иногда понимаю, но единой картины все-же нет.
Начать надо с вопроса — что такое алгебраический тип данных и в чем его отличие от неалгебраических? Если пользоваться терминологией императивных языков, то например переменная типа int — АТД? Массив чисел? Структура? Класс?
В вашей предыдущей статье вы даете определение АТД как «АТД называются алгебраическими, потому что их можно представить как некую алгебраическую композицию типов его составляющих», но это все-же несколько не то, что могло бы облегчить понимание)…
Сам часов не ношу, но если вдруг внезапно по какой-то причине понадобятся — то буду смотреть именно в сторону «умных часов».
Любая Власть всегда стремится сделать все, чтобы сохраниться и усилиться, и в частности устранить все, что ей может помешать — хотя-бы теоретически. Ясно, что неподконтрольные биткоины — это посягательство на территорию Власти, на ее прерогативу выпускать и контролировать деньги.
Но мы должны помнить о том, что мы — люди, граждане — единственная причина и единственный источник любой власти. Вот и все:)