thedeemon: (office)
[personal profile] thedeemon
В начале мая в логове фейсбука прошла конференция DConf, посвященная языку D. Финансировали ее всем миром через проект на кикстартере, я там тоже поучаствовал скромным спонсором. Видео всех выступлений были выложены на ютюбе, вот наиболее мне понравившиеся, которые могу порекомендовать всем тем, кто открыт к новому и имеет немного любопытства:

1. Web Development in D - какие есть замечательные инструменты (в первую очередь vibe.d), как с ними все получается просто и красиво (и эффективно), благодаря грамотному использованию возможностей D.
2. Writing Testable Code in D - тут больше демонстрация умений и удобств языка.
3. Metaprogramming in the Real World - занятный experience report от компании с сотней программистов, где весь код пишется на D.

Date: 2013-08-28 06:49 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
Как в D написать функцию map, которая: 1) определена для всех коллекций (листов, векторов, чего угодно, соответствующего базовому интерфейсу), 2а) на выходе выдает ту же самую коллекцию, параметризованную типом результата маппера, 2б) за исключением случая, когда маппер возвращает Boolean - в таком случае возвращаемый тип map должен быть BitVector.

Что-то типа:
map(List(1, 2), x => x) возвращает List[Int]
map(Vector(1, 2), x => x.toString) возвращает Vector[String]
map(Map(42 -> "42"), x => true) возвращает BitVector

Date: 2013-08-28 07:21 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Это надо придумывать заново базовый интерфейс, а у меня уже третий час ночи. Вот дишный подход, он несколько отличается, в частности map получается ленивым (kinda):
http://ddili.org/ders/d.en/ranges.html
Сейчас контейнеры умеют представлять себя в виде рэнждей, с которыми работают всевозможные алгоритмы и комбинаторы. Если контейнерам еще добавить универсальный способ создаваться из рэнджей (не помню, есть ли это сейчас), то запрошенная тобой функция будет совсем простой. Завтра могу попробовать сделать пример.

Date: 2013-08-28 07:39 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
Спасибо, было бы здорово!

Date: 2013-08-29 09:14 am (UTC)
From: [identity profile] xeno-by.livejournal.com
Слушай, я вот тут еще подумал. Можно ли на дишечных шаблонах наколбасить LINQ, т.е. чтобы шаблоны каким-то образом преобразовывали лямбды, передаваемые в map/filters/etc, в сиквел?

Date: 2013-08-29 12:34 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Шаблоны внутрь переданных функций вроде как не могут заглядывать, но задача наверняка решается с помощью
http://en.wikipedia.org/wiki/Expression_templates
т.е. сделать лямбды не простыми, а строящими AST. С перегрузкой операторов это не так сложно.

Date: 2013-08-29 03:21 pm (UTC)
From: [identity profile] xeno-by.livejournal.com
С виртуализацией есть свои проблемы. Например, как лифтить константы или что делать с дереференсом филдов.

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 29th, 2026 07:58 pm
Powered by Dreamwidth Studios