Доклад
"Nemerle must die" «Nemerle deep dive» («Глубокое погружение в Nemerle»).
Докладчик
Чистяков Владислав, текущий maintainer, архитектор и идеолог языка Nemerle.



Рассказ о языке:

Видеозапись

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



Любые правки этой статьи будут перезаписаны при следующем сеансе репликации. Если у вас есть серьезное замечание по тексту статьи, запишите его в раздел «discussion».

Репликация: База Знаний «Заказных Информ Систем» → «Nemerle Deep Dive (встреча ALT.NET, 2011-03-31)»

Примечания

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

Блог:Дима Цыганков/Типизируем задницу