|
|
(не показаны 2 промежуточные версии этого же участника) |
Строка 61: |
Строка 61: |
| <noinclude>{{ActualBanner2}}</noinclude> | | <noinclude>{{ActualBanner2}}</noinclude> |
| | | |
− | [[Категория:Собрания ALT.NET]]
| + | {{replicate-from-custiswiki-to-lib}} |
| | | |
− | {{replicate-from-custiswiki-to-lib}}
| + | == Примечания == |
| + | ;Обсуждения — «Nemerle — да или нет?»: |
| + | * У разработчиков: http://www.rsdn.ru/forum/nemerle/4258415.flat.1.aspx |
| + | * У менеджеров и тестировщиков: http://www.it4business.ru/lib/2499/ |
| | | |
| + | {{include-review|Блог:Дима Цыганков/Типизируем задницу}} |
| | | |
| [[Категория:Собрания ALT.NET]] | | [[Категория:Собрания ALT.NET]] |
| + | [[Категория:Nemerle (доклады)]] |
Текущая версия на 00:58, 16 ноября 2011
- Доклад
-
"Nemerle must die" «Nemerle deep dive» («Глубокое погружение в Nemerle»).
- Докладчик
- Чистяков Владислав, текущий maintainer, архитектор и идеолог языка Nemerle.
Рассказ о языке:
- Ядро языка;
- Вывод типов;
- Мимикрия под C# в области поддержки ООП;
- Поддержка функционального программирования:
- Функции как первоклассные значения;
- Алгебраические типы;
- Сопоставление с образцом;
- Гигиенические (LISP) макросы в Nemerle:
- Что такое? С чем едят?
- Как сочетаются с IDE и прочими технологиями?
- Сложности разработки, отладки, сопровождения.
- Развечание мифов;
- Ограничения версии 1.0;
- Что будет в Nemerle 2.0?
- Примеры практического использования макросов, прикладные макро-библиотеки:
- Nemerle.Xml — XML-литералы;
- Nemerle.Peg — быстрый и гибкий генератор парсеров шаговой доступности;
- ComputationExpressions:
- Асинхронное программирование;
- Yield внутри выражения;
- Другие применнения.
- Nemerle on Rails — миграции, автоматизация формирования ViewModel, движок рендеренга HTML «Spark»;
- Nemerle.WUI.Reactive — реактивный Web-интерфейс на основе статически типизированного языка вместо скриптов;
- Мелкие полезняшки:
- Автоматизация реализации зависимых свойств в WPF
- Record — автоматизация создания конструкторов
- Автоматизация паттернов проектирования ООП (Abstract factory, Aggregate, Proxy, Singleton)
- Late-binding — позднее связывание
- Surroundwith — создание аналогов using и lock в мгновение ока.
- Memoize
- $-строки
- Assertions
- ListComprehension
- Regexp match
- StructuralEquality, LexicographicCompareTo, StructuralHashCode
- .. и многое другое.
Видеозапись
4 часа! Четыре части по часу!
Репликация: База Знаний «Заказных Информ Систем» → «Nemerle Deep Dive (встреча ALT.NET, 2011-03-31)»
Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».
Примечания
- Обсуждения — «Nemerle — да или нет?»
На недавно прошедшем семинаре по Nemerle Владислав Чистяков, его текущий maintainer, впал в ступор, пытаясь определить тип выражения
throw NotImplementedException();
, и был несказанно удивлен, когда удалось написать что-то вроде
def a : int = throw NotImplementedException();
def b : void = throw NotImplementedException();
Честно говоря, его удивление само по себе немного удивительно, учитывая, что он ковырял много разных языков программирования, и Хаскель в том числе.
Таки вот — это выражение сигнализирует, грубо говоря, о том, что во время выполнения некой функции случилась некая задница. Кстати, именно так её и называют некоторые вполне серьезные люди — bottom (для краткости иногда обозначая её значком _|_). Исключение — это не единственное проявление задницы, бывает ещё бесконечная рекурсия.
Так какой же она может иметь тип? Ну, очевидно, задница может случиться во время выполнения абсолютно любой функции. А абсолютно любая функция может иметь абсолютно любой тип. То есть — задница может иметь абсолютно любой тип, она полиморфна! А тип того, что может иметь абсолютно любой тип, записывается в C# примерно так:
public static T Bottom<T>()
{
throw new NotImplementedException();
}
Причина неимоверной популярности задницы именно среди хаскеллистов объясняется ленивостью этого популярного языка. Ленивость — это передача туда-сюда «недовычисленных» выражений. Она, с одной стороны, дает преимущества в модульности кода (эти преимущества в какой-то степени должны быть знакомы и сишарпистам — весь Linq крутится вокруг «слегка ленивых» списков), но, с другой стороны, каждое из недовычисленных выражений может содержать в себе Её. Задницу.