Как стать автором
Обновить
98
0
Рысцов Денис @shai_xylyd

Пользователь

Отправить сообщение
Бла-бла-бла, сбежать в солипсизм очень просто, но абсолютно не продуктивно. Кстати, интересно, существует ли критерий фальсифицируемости в математике?

Я писал о том, что если физика, биология, экономика изучает то, что существует в сознании большинства людей или на основе этого знания построено то, что они используют, то объяснить это в двух словах намного проще, чем, например, теорию категорий, являющейся абстракцией над абстрактной алгебре, являющейся абстракцией над числами, которые нельзя потрогать)
Математика не такая, потому что изучает то, что не существует. Нельзя сказать, что математик занимается изучением X и это будет понятно, так как X существует только в сознании математика; чтобы объяснить — нужно дать определение X, а так как X может зависеть от Y, то очевидно, что в двух словах это не рассказать.
Сингелтон убивает композицию.
безопасность обеспечивает runtime managed языков
Классификация Хомского в реальной жизни почти не применима, так она задает классификацию грамматик, а на практике нужны парсеры. Парсер от грамматики отличается тем, что по мере разбора производит семантические действия (строит AST), в то время как грамматика позволяет производить только валидацию текста.

Подход к созданию парсеров, отталкиваясь от грамматики (lex/yacc), так неудобно использовать именно из-за того, что в основе академический подход: грамматика определяет множество валидных текстом и грамматика определяет парсер этих текстов. В прикладном программировании намного более удобен подход: парсер определяет множество валидных текстов (грамматику задается неявно). В конце концов, нужен парсер, а не грамматика, поэтому нужно описывать парсер, а не грамматику.

Такого подхода придерживаются инструменты поддерживающие PEG нотацию, или парсер-комбинаторы, например, parsec. И они просто удобнее, чем, например, antlr. Выигрыш получается более, чем в три раза.
На самом деле мне очень интересны случаи, когда парсеры создавались для решения бизнес задач. Например, я случай, когда создание своей легкой встраиваемой VM и своего языка для этой VM помогло защитить программу от взломов: важная часть алгоритма была написана под эту VM и сильно усложняла reverse engineering.

Если вы написали комментарий о создании парсеров и вас интересует скидка (5%) — пишите в личку.
Кстати, я ожидал, что будет больше тех, кто пытался создать свои языки, чем тех, кто писал разборщики для существующих.

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


Непонятно, откуда взялась эта информация. Я закончил универ в 2010 и не учился на кафедре Терехова.
Софт и ПО это не синонимы?
представляете, вы женаты на не очень красивой женщине, дети… идете по улице и видите своего давнего одноклассника, над которым в школе все смеялись, который, пока вы курили и пили после школы, сидел дома и занимался никому не понятными делами; которого все считали ботаником. Так вот он идет с шикарной женщиной. Единственное, что вам остается — плевать в его карму =)
Именно так и было проверенно — читайте полную статью в оригинале searchengineland.com/google-bing-is-cheating-copying-our-search-results-62914
Блин, да это Haskell головного мозга :)

Сложно понять цель статьи и её аудиторию.

Можно было написать хорошую статью про то, как вводяться числа через нумералы Черча или по Пеано, но нет зачем-то прикрутили Haskell.

Посылка, что пропали из языка числа, конечно, хороша; но что делать, если языка пропадут списки, или, что еще лучше, алгебраические типы данных; в этом случае Haskell уже не помощник :)

Теперь об аудитории, c одной стороны автор пытается по ходу объяснять очевидные вещи, следовательно, можно предположить о том, что он пишет для людей незнакомых с Haskell

data [a] = [] | a:[a] — определение списка, [] и: — конструкторы, [] — имя типа

С другой стороны, без объяснения, что такое бесточечный стиль, понять следующее сложно

incN = MkN.(():).toList;

Да и с читаемостью проблемы, особенно с

data () = ()

P.S. Я сам идиот — habrahabr.ru/blogs/personal/43855/
чем больше серверов, тем чаще они выходят из строя

Что за бред? Вероятность сбоя отдельного сервера не зависит от количества серверов, в случае большого количества даже лучше, так как можно оперировать мат. ожиданием, а не вероятностью =)
С ветряными мельницами бороться бесполезно, а заблуждение, что разобрать нерегулярный текст можно с помощью регулярных выражений, является как раз такой мельницей. Корни этого заблуждения очень просты:

  1. регулярные выражения встроены как DSL практически в каждый язык программирования (порог входа явно ниже, чем, например, у yacc)
  2. регулярные выражения кажутся сложными, поэтому, их применение ко всему подряд, дает автору +1 к ЧСВ


Кстати, funboy регулярных выражений может запросто с вами спорить, логика тут бесполезна. Их излюбленные способы: апелляция к слухам («я слышал, что в Perl регулярные выражения настолько мощные, что там это возможно „) и “добавить чуть-чуть кода». Под добавлением чуть-чуть кода они имеют ввиду создание парсера вручную поверх частично разобранных регулярными выражениями фрагментами текста (по сути, регулярки используются только как часть лексера).
Из твиттера: «BREAKING! WikiLeaks is going to release Santa's list of good and bad children!»
я бы прочитал как экс-ю-ай
Боюсь показаться занудой, но мне кажется, что вся соль нововведений немного в другом. Запустить параллельно и асинхронно несколько асинхронных операций с обработкой результатов в контексте вызывавшего потока можно было и раньше:

public static void Bar() 
{
    var context = SynchronizationContext.Current;
    new Thread(delegate()
    {
        var requestA = HttpWebRequest.Create("http://ya.ru/");
        var requestB = HttpWebRequest.Create("http://habr.ru/");
        var futuresA = requestA.BeginGetResponse(delegate { }, null);
        var futuresB = requestB.BeginGetResponse(delegate { }, null);
        var resultA = requestA.EndGetResponse(futuresA);
        var resultB = requestB.EndGetResponse(futuresB);
        context.Post(delegate
        {
            Console.WriteLine(resultA.ContentType);
            Console.WriteLine(resultB.ContentType);
        }, null);
    }).Start();
}

И нельзя сказать, что данный код настолько плох, чтобы вводить новую конструкцию. Но вот создание собственного асинхронного метода является проблемой, точнее являлось. Раньше, для этого нужно было определить пару методов BeginXXX(), EndXXX() и реализовывать интерфейс IAsyncResult. Await вводит новую технику работы с асинхронными методами, используя которую новый асинхронный метод описывается через комбинацию старых асинхронных/синхронных методов, и это описание максимально приближено к простому описанию функции.

То есть async/await в первую очередь упрощает не использование асинхронных методов, а их определение. Во многом это нововведение подобно yield return, которое упрощает создание интераторов.

Информация

В рейтинге
Не участвует
Откуда
Санкт-Петербург, Санкт-Петербург и область, Россия
Дата рождения
Зарегистрирован
Активность