Pull to refresh

Болезнь, Nemerle

Programming *
imageNemerle — язык под .NET, который поддерживает три парадигмы программирования: та, которую большинство программистов считает за ООП парадигму, функциональную парадигму (алгебраические типы данных, pattern-matching) и метапрограммирование (АОП, квазицитирование, расширение синтаксиса самого nemerle через макросы a-la lisp ). Все это положено на рельсы строгой статической типизации и приправлено мощной системой вывода типов.

Читать далее...
Total votes 57: ↑51 and ↓6 +45
Views 7.9K
Comments 49

Оптимизация хвостовой рекурсии в .NET и Nemerle

Programming *
Недавно chiaroscuro написал провокационную статью с жёлтым заголовком «Почему циклы должны умереть». Её обсуждение заняло около 180 комментариев, но сама статья ушла в минус и не попала на главную, не смотря на то, что она содержала здравую мысль об использовании рекурсии вместо циклов.

В этой статье я дополню его пост и приведу примеры реализации на одном из лучших языков под .NET — Nemerle, а так же сделаю холиварное заявление о преимуществе .NET перед Java.

Я соглашаюсь с тем, что данная статья распространяется на условиях CC-NC-BY
Total votes 40: ↑30 and ↓10 +20
Views 5.5K
Comments 103

Вычисление выражений на Nemerle и Mono.

Programming *
За weekend на хабре появились три статьи по разбору математических выражений: Компилятор выражений, Парсер математических выражений и Вычисление значения выражения и один комментарий, в котором код на прологе по краткости и выразительности рвет примеры в этих статьях.

Ниже я покажу, как использовать стандартные средства платформы и языка для достижения того же результата, а именно вычислению выражений.

Читать дальше →
Total votes 21: ↑20 and ↓1 +19
Views 1.4K
Comments 15

Разработка снизу-вверх и базы данных.

Website development *
    Пол Грэм в своих эссе часто касается темы разработки снизу-вверх. Этот метод упоминается у него, когда он пишет о разработке програмного обеспечения, о способе ведения бизнеса, о преимуществах open source и блогах. Ниже я опишу почему при этой модели разработки взаимодействие с базой данных встает поперек глотки, и предложу решение уместное в некоторых случаях.

читать далее...
Total votes 7: ↑6 and ↓1 +5
Views 3.1K
Comments 6

Monadic Parser Combinator в Nemerle

Programming *
Недавно обнаружил замечательную статью Monadic Parser Combinator про создание парсеров. Основная идея заключена в том, что бы описать парсер как объект первого класса, что бы можно было произвести декомпозицию исходной задачи и представить искомый парсер в виде синтеза более простых парсеров. Что бы облегчить комбинацию парсеров используется подход replace error with list of success. В языке haskell очень удобно работать с созданием парсеров, так как эта задача естественно ложится на концепцию монад, к сожалению в nemerle монады не поддерживаются, но все же язык достаточно мощный, что бы справиться с данной задачей.

Сломать мозг с помощью ФП
Total votes 17: ↑17 and ↓0 +17
Views 2.1K
Comments 9

Nemerle и спутник, или ФП для самых маленьких

.NET *

В последнее время на Хабре зачастило упоминание о Nemerle. Хотите узнать, что это такое и как его едят, а вернее — как с его помощью едят (задачки)?

Попробую показать на простом примере, но для этого вам придется
принести свой мозг в жертву богу Nemerle
Total votes 35: ↑30 and ↓5 +25
Views 1.2K
Comments 13

Язык Nemerle

Programming *
Влад Чистяков, один из активных разработчиков языка Nemerle, начал цикл статей о нем. В отличии от существующих статей, которые ориентированы на опытных программистов, этот цикл подходит как для начинающих программистов, так и для опытных, но не знакомых с платформой .NET.

Введение от автора:

На данную работу меня вдохновила книга Кернигана и Ричи – «Язык С». Много лет назад я учился программировать по этой книге. Мне очень понравилась концепция изложения использованная в этой книге. В этой книге, вместо того чтобы взять одну тему и разобрать ее по косточкам, попутно заостряя внимание на мелких деталях, давался минимум, необходимый человеку, чтобы начать программировать на «C», а затем приоткрывался аспект за аспектом. Причем изложение давалось не на абстрактных примерах, которыми так увлекаются проповедники функционального программирования, а на примерах простых, но все же из этой жизни. Понимая, что прыгнуть выше Кернигана и Ричи очень тяжело, я решил не соревноваться с ними в креативности, а просто повторить их методологию, но с расчетом на Nemerle.

Язык Nemerle
Total votes 28: ↑21 and ↓7 +14
Views 2K
Comments 10

Математическая поисковая система Uniquation

Self Promo
Mы только что открыли α-тестирование проекта Uniquation. Это математическая поисковая система, которая ищет решения среди уравнений, равенств и прочих математических объектов, размещенных в интернете. На текущем этапе развития её можно мыслить как развивающуюся CAS (wiki). Помимо этого поста про неё можно прочитать в нашей презентации.

image


Читать дальше →
Total votes 100: ↑85 and ↓15 +70
Views 2K
Comments 56

Задачи для курсовых

Programming *
На хабре часто возникают топики, в которых студенты CS специальностей просят помочь им с выбором тем курсовых и дипломных работ. Это не удивительно, так как обычно темы, которые предлагают научные руководители интересны только им самим, и получается ситуация, когда студент выполняет работу, но не видит в ней смысл. Мне кажется, что это очень ужасно, когда человек не заинтересован в своей работе.

Было бы намного лучше, если бы студент понимал, что он делает нужную вещь, за которую много людей будут ему благодарны. Один из способов достичь этого — участие в популярных open source проектах, связанных с его специальностью. Хорошими кандидатами являются проекты по созданию компиляторов/интерпретаторов языков программирования, так как это наукоемкие проекты (алгоритмы вывода типов, PEG, монады, теория типов...) и объективно полезные проекты (если язык достаточно популярен).

Как можно уже было догадаться, я предлагаю поучаствовать в разработке языка Nemerle. Это достаточно уникальный проект, так как он стоит в одним ряду с таким языком как scala, он поддерживается людьми из России, и он еще не такой популярный, что бы избегать всеми силами ломающих изменений.
Ниже я перечислил некоторые задачи, которые еще не реализованы, но которые есть в плане развития
Total votes 29: ↑16 and ↓13 +3
Views 4.3K
Comments 16

Разбор исходного кода языков программирования и языков разметки

Programming *
..it is true that asking regexes to parse arbitrary HTML is like asking Paris Hilton to write an operating system..

Последние версии языка Nemerle включают в состав библиотеку для разбора языков, грамматика которых принадлежит классу PEG.

Что такое PEG?


В отличии от других инструментов для создания парсеров, PEG описывает не грамматику, а стратегию её разбора, но фактически описание стратегии разора является описанием грамматики. Для парсера описанного с помощью PEG существует алгоритм (packrat), разбирающий любой текст, удовлетворяющий грамматике из этого класса, за линейное время от длинны текста.

Класс языков, которые можно разобрать с помощью парсеров описанных подобным образом, достаточно широк, чтобы покрыть популярные языки программирования (например, C#) и языки разметки. Очевидно, что он покрывает всю функциональность регулярных выражений.
Про PEG для Nemerle и других .Net языков
Total votes 36: ↑33 and ↓3 +30
Views 10K
Comments 15

Асинхронное программирование и Computation Expressions

Programming *
В предыдущих заметках (часть I, часть II) об async/await в C# 5 я написал, что подобный подход реализован в таких языках, как Haskell, F# и Nemerle, но, в отличие от C#, эти языки поддерживают концепцию более высокого уровня, которая позволяет реализовать асинхронные вычисления в стиле async/await в виде библиотеки, а не на уровне языка. Забавно, что в Nemerle сама эта концепция реализована в виде библиотеки. Имя этой концепции — монада. Помимо асинхронных вычислений монады позволяют реализовать другие вкусности, такие как list comprehension, continuation, превращение грязных функций в чистый блок, через который неявно протаскивается состояние, и множество других.

Некоторые монады реализуют такие «хотелки» C# программистов, как yield коллекции или yield foreach и yield из лямбда выражения.

Цель этой заметки — введение в асинхронное программирование и computation expressions в Nemerle, но она так же может быть полезна тем, кто изучает F#, так так реализация асинхронного программирования в Nemerle была сделана с оглядкой на него в F#. С другой стороны, кому-нибудь может быть интересно, как некоторые задачи, которые являются проблемой в других языках (После всех асинхронных вызовов), решаются с помощью computation expressions в пару строк.
Читать дальше →
Total votes 32: ↑25 and ↓7 +18
Views 14K
Comments 19

«Лишние» языки программирования удаляют из Википедии

Crowdsourcing
В Википедии развернулось настоящее сражение между группой пользователей, которые пытаются удалить «лишние» языки программирования, и теми, кто возвращает их обратно. За последние сутки уже удалены статьи о Nemerle и Alice ML, а также помещены в список для удаления статьи о Factor, Joy, Ioke, Pure и др. Всех сочувствующих просят зайти на Википедию и указать свидетельства значимости этих тем, чтобы их сохранить.
Читать дальше →
Total votes 67: ↑48 and ↓19 +29
Views 5.4K
Comments 120

St. Petersburg Alt.Net: 26я Встреча

.NET *

Обязательная регистрация

Место: Карта м. Петроградская, ул. Рентгена д.5, офис компании Exigen Services (http://www.exigenservices.ru/)

Дата: 24 февраля 2011 года, 19.00–21.00

Язык программирования Nemerle


Докладчик: Денис Рысцов

Доклад о том, что такого особенного есть в языке Nemerle и как его можно использовать для борьбы с акцидентальной сложностью. Сам по себе язык интересный и стоит того, чтобы про него знать хотя бы потому, что начиная с момента его создания 2006 про него говорят, что это следующая версия C#, притом это высказывание остается верным с выходом каждой новой версии C# (включая C#5 CTP) несмотря на то, что концептуально язык Nemerle не менялся с создания.

В докладе: я научу аудиторию читать код на Nemerle и покажу некоторые его особенности из-за которых его можно считать улучшенной версией C#; расскажу, что F# и Nemerle — сводные братья; затрону жемчужину языка — макросы, из-за которых Nemerle может заимствовать особенности из других языков (например, я реализовал поддержку Active Patterns из F# в Nemerle в виде макроса) и создавать библиотеки невозможные в других языках; в заключении расскажу о применении Nemerle в своем проекте uniquation.ru

Если вы хотите выступить с докладом, напишите у нас на стене: http://spbalt.net/home/wall
Total votes 14: ↑10 and ↓4 +6
Views 479
Comments 0

Moscow ALT.NET: 3ья встреча. Язык Nemerle

.NET *

Что это?
Обязательная регистрация
Место: Карта м. Чистые пруды / м. Лубянка / м. Китай-Город, пер. Архангельский, д.1., конференц-зал CustIS (http://www.custis.ru/) Будут кофе, печенюшки и wi-fi
Дата: 31 марта 2011 года

Доклады


18-30 Nemerle Deep Dive


Докладчик: Чистяков Владислав (VladD2 @ RSDN)
Доклад состоит из нескольких частей:
Читать дальше →
Total votes 16: ↑11 and ↓5 +6
Views 911
Comments 13

Макросы в Scala, Евгений Бурмако. Скринкаст, слайды и фото со scalaby#6

Scala *

На 6-ой встрече коммьюнити #scalaby выступал Евгений Бурмако — докторант EPFL, и член команды Мартина Одерски, занимающейся разработкой Scala. Темой презенатции был «Проект Кеплер» — пропозал по добавлению макросов в Scala, над которым Евгений работает в течение последнего месяца.

Фото и скринкаст под катом
Total votes 15: ↑14 and ↓1 +13
Views 2.9K
Comments 2

Реализация стека за счёт … стека вызовов

Abnormal programming *
Sandbox
Пришла мне однажды идея: есть стек вызовов и стек как структура данных. А нельзя ли использовать стек вызовов для хранения данных?
Немного поразмыслив я понял, что можно, только с ограничениями: во первых для обработки значений придётся использовать колбеки (ведь пока значение на стеке, нельзя выходить из того вызова, в котором мы его сохранили). Во вторых доступ строго LIFO.
Реализация — под катом.
Читать дальше →
Total votes 16: ↑15 and ↓1 +14
Views 9.2K
Comments 7

NemerleWeb — Уникальный веб-фреймворк

Website development *.NET *C# *
NemerleWeb NemerleWeb — это фреймворк для создания одностраничных веб приложений (Single Page Application — SPA), который транслирует код написанный на Nemerle в смесь JavaScript и HTML, а также обеспечивает двустороннюю привязку данных, прозрачное дуплексное общение с сервером, статическую типизацию с настоящими подсказками и ещё много чего другого.

Как это работает?


Разработчик описывает логику моделей на компилируемом языке Nemerle.
Благодаря макросам, код на этом языке получается очень лаконичным, фактически мы только описываем логику приложения. Это выгодно отличает наше решение от библиотек на чистом JavaScript.
Читать дальше →
Total votes 40: ↑31 and ↓9 +22
Views 20K
Comments 104

Адаптация ZenCoding к C# — ZenSharp

Visual Studio *C# *
Многие наверняка знают, что для HTML & CSS существует великолепный инструмент ZenCoding(emmet), который позволяет очень сильно упростить ввод рутинных конструкций языка, определяя специальный язык мнемоник. C# менее многословный язык, чем Html, но тем не менее, ввод его конструкций можно здорово оптимизировать.
Я предлагаю динамическое расширение идеи мнемоник, впервые услышанное мною от Дмитрия Нестерука [1].

proto

sample

Получился небольшой плагин для ReSharper, мнемоники для которого можно настраивать через специальный язык, похожий на формальную грамматику.
Плагин для ReSharper доступен в галерее расширениий. Исходный код на GitHub

Читать дальше →
Total votes 31: ↑26 and ↓5 +21
Views 10K
Comments 7

Метапрограммирование: какое оно есть и каким должно быть

Programming *C++ *Compilers *D *

Метапрограммирование — вид программирования, связанный с созданием программ, которые порождают другие программы как результат своей работы (wiki). Это достаточно общий термин, к которому, согласно той же википедии, относится и генерация исходного кода внешними инструментами, и различные препроцессоры, и «плагины к компилятору» — макросы с возможностью модификации синтаксического дерева не посредственно в процессе компиляции, и даже такая экзотическая возможность, как самомодифицирующийся код — модификация программы самой программой непосредственно во время выполнения.

Хотя, конечно, самомодифицирующийся код — это скорее отдельная большая тема, достойная отдельного исследования; здесь под метапрограммированием мы будем понимать процессы, происходящие во время компиляции программы.

Метапрограммирование реализовано в той или иной мере в очень разных языках; если не рассматривать экзотические и близкие к ним языки, то самым известным примером метапрограммирования является С++ с его системой шаблонов. Из «новых» языков можно рассмотреть D и Nim. Одна из самых удачных попыток реализации метапрограммирования — язык Nemerle. Собственно, на примере этой четверки мы и рассмотрим сабж.

Метапрограммирование — интереснейшая тема; в этой статье я попытаюсь разобраться, что же это такое, и каким оно должно быть в идеальном случае.
Читать дальше →
Total votes 24: ↑21 and ↓3 +18
Views 34K
Comments 26

Как я начал писать макросы для Rust на Gluon

Abnormal programming *Functional Programming *Rust *

Во многих языках есть специальный механихм для кодогенерации - макросы. Иногда из реализуют на отдельном достаточно примитивном языке, основанном на простой подстановке текста (препроцессоры PL/I и C, m4), но даже в таком варианте удается делать интересные и полезные вещи. Другой популярный вариант - макросы реализуются на том же языке, что и программа, в которой они используются. Такой подход ведет свое начало из Lisp (удобный тем, что формат программ и данных там одинаков), активно применяется в Julia, OCaml(camlp4/5), Scala, Haskell, Rust, а наибольшего развития получил в Nemerle, где макрос может может запускаться как до, так и после проверки и вывода типов, и в последнем варианте иметь доступ к типам.

При этом макросах все возможности языка не нужны, скажем высокая эффективность и безопасность Rust пользы здесь не принесут и могут только затруднить разработку.

Читать далее
Total votes 19: ↑13 and ↓6 +7
Views 3.7K
Comments 13