Nemerle Deep Dive (встреча ALT.NET, 2011-03-31)

Материал из CustisWiki

Версия от 16:47, 26 мая 2011; StasFomin (обсуждение | вклад) (Видеозапись)

Это снимок страницы. Он включает старые, но не удалённые версии шаблонов и изображений.
Перейти к: навигация, поиск
Доклад
"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
    • .. и многое другое.

Видеозапись

Caution.svg 4 часа! Четыре части по часу!

Видео в HD-качестве, смотрите в полноэкранном режиме.

HTML-код включения <iframe src="http://player.vimeo.com/video/23917345?byline=0&portrait=0" width="720" height="405" frameborder="0"></iframe>

Видео в HD-качестве, смотрите в полноэкранном режиме.

HTML-код включения <iframe src="http://player.vimeo.com/video/23950141?byline=0&portrait=0" width="720" height="405" frameborder="0"></iframe>

Видео в HD-качестве, смотрите в полноэкранном режиме.

HTML-код включения <iframe src="http://player.vimeo.com/video/23984615?byline=0&portrait=0" width="720" height="405" frameborder="0"></iframe>

Видео в HD-качестве, смотрите в полноэкранном режиме.

HTML-код включения <iframe src="http://player.vimeo.com/video/24051256?byline=0&portrait=0" width="720" height="405" frameborder="0"></iframe>




Внимание! Данная статья выбрана для репликации во внешнюю базу знаний компании. Пожалуйста, не допускайте в этой статье публикацию конфиденциальной информации, ведения обсуждений в теле статьи, и более ответственно относитесь к качеству самой статьи — проверяйте орфографию, пишите по-русски, избегайте непроверенной вами информации.


Примечания

Обсуждения — «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 крутится вокруг «слегка ленивых» списков), но, с другой стороны, каждое из недовычисленных выражений может содержать в себе Её. Задницу.