Персональные инструменты
 

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

Материал из CustisWiki

Перейти к: навигация, поиск
Доклад
"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 часа! Четыре части по часу!




Внимание! Эта статья была создана путем автоматического реплицирования из внутренней базы знаний компании Заказные Информ Системы. Любые правки этой статьи могут быть перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «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 крутится вокруг «слегка ленивых» списков), но, с другой стороны, каждое из недовычисленных выражений может содержать в себе Её. Задницу.