LINUX.ORG.RU

А может пора переходить на лисп?

 ,


1

2

Меня тут обвинил коллега в том, что я на любом языке пишу как на лиспе. Я посмотрел свой код в новом проекте и понял что обвинения были не на совсем пустом месте, практически все написано примерно вот в таком стиле

    public List<MethodDescription> available(MethodType type) {
        return ctx.getBeansWithAnnotation(MethodProvider.class).entrySet()
            .stream()
            .map(Map.Entry::getValue)
            .flatMap(e -> Arrays.asList(e.getClass().getMethods()).stream())
            .filter(m -> m.getAnnotation(Method.class) != null && m.getAnnotation(Method.class).type() == type)
            .map(fm -> fm.getAnnotation(Method.class))
            .map(a -> new MethodDescription(
                a.value(),
                src.getMessage("method." + a.value(), null, a.value(), dh.getLocale()),
                src.getMessage("method." + a.value() + ".description", null, a.description(), dh.getLocale())))
            .collect(toList());
    }

Может действительно пора переходить на тот же clojure?

Перемещено maxcom из talks

★★★★

Ответ на: комментарий от Ritmik

ты балбес, блябмы - не сахар для анонимных классов.

anonymous
()

Не надо тебе вообще программировать. Не твоё это.

anonymous
()
Ответ на: комментарий от Ritmik

Все, что вижу, это синтаксический сахар для анонимных классов с одним методом, которые они почему-то называют лямбдами.

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

«Потоки» это вообще эпик фэйл.

На вкус и цвет фломастеры разные. Вроде более менее нормально они потоки сделали имхо. Что конкретно не устраивает?

Вообще, весь этот шум вокруг восьмой джавы связан с тем, что возможности джавы находятся на таком уровне, на фоне которого даже такие убогие и кривые «нововведения» выглядят неплохо.

Есть такое. Зато стабильно, обратная совместимость и отсутствие кучи мест, где нубы будут отстреливать себе ноги.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Кавайное кисо тебе в очень мягкой форме сказало то, что скажет любой нормальный разработчик. Тем более, что ты даже выпендриться нормально не можешь: lisp-way — это свой DSL для решения любой задачи. У тебя же, повторяю, типичный высер в стиле jQuery.

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

kawaii_neko ★★★★
()
Ответ на: комментарий от kawaii_neko

lisp-way — это свой DSL для решения любой задачи.

Это не лисп way а stupid dead end. Пока ты будешь писать свой dsl я уже 100 лет как сделаю библиотеку на языке общего назначения и решу задачу. Собственно посмотри сколько их понаделали под java/.net/c и сравни с количеством dsl-ей под любой из диалектов лиспа.

У тебя же, повторяю, типичный высер в стиле jQuery.

Чувак, ты ничего кроме jquery в глаза что-ли не видел, что тебя так на ней заклинило? Или просто не осилил и у тебя теперь от этого butthurt?

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

Вряд ли я решу устраиваться на работу. Меня туда обычно сами зовут. И речь идет не о моем коде, а об условиях, которые мне готовы предоставить.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Это не лисп way а stupid dead end

Тогда отвечу, что на лисп тебе переходить рановато — ты просто не сможешь писать на нем эффективно. Твоим потолком будут loop-однострочники.

Чувак, ты ничего кроме jquery в глаза что-ли не видел, что тебя так на ней заклинило?

Ok, могу стравнить с крестовыми iostreams, так лучше?

а об условиях, которые мне готовы предоставить

Ты исполняющий обязанности catap'а чтоли?

kawaii_neko ★★★★
()
Ответ на: комментарий от kawaii_neko

Тогда отвечу, что на лисп тебе переходить рановато — ты просто не сможешь писать на нем эффективно. Твоим потолком будут loop-однострочники.

Ооо, аватар vsl-a в треде? Постаревший и поутративший былой задор?

Ok, могу стравнить с крестовыми iostreams, так лучше?

Я конечно на плюсах не писал с институтских времен, т.е. лет так уже 10, но из того, что я еще смутно помню про iostreams - ничего общего и в помине нет.

Ты исполняющий обязанности catap'а чтоли?

Я не очень в курсе кто такой catap, но последняя запись в трудовой у меня была про должность технического директора. Сейчас пытаемся с несколькими хорошими людьми поднять свой небольшой бизнес, вот и пришлось снова сесть за разработку, во избежание излишних потерь бабла на этапе старта.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Пока ты будешь писать свой dsl я уже 100 лет как сделаю библиотеку на языке общего назначения и решу задачу.

В том и дело, что лисп позволяет писать дсли быстрее, чем библиотеки на языке общего назначения.

anonymous
()
Ответ на: комментарий от anonymous

В том и дело, что лисп позволяет писать дсли быстрее, чем библиотеки на языке общего назначения.

Первое: Где все эти DSL-и? Почему под ту-же убогую яву я с вероятностью в 80% найду практически под любую из задач библиотеку, по крайней мере сильно упрощающую мне жизнь, а под лисп мне придется самому писать дсл?

Второе: Все равно этими dsl-ами пользоваться придется программистам, иначе мы скатываемся в задачу разбора естественных языков и прочего ии. И какой смысл изобретать велосипед, если то же самое можно сделать в рамках библиотеки на уже известном программисту языке?

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Потому что на лиспах этот DSL написать намного проще, чем вбить строку поиска в поисковик. А сложные есть в библиотеках.

turtle_bazon ★★★★★
()
Ответ на: комментарий от Nagwal

Все кричат про DSL-и, но ничего кроме регулярных выражений, BNF, всяких прологов с дейталогами и pattern matching-а в разных формах предъявить не могут. А это все и библиотеками неплохо реализуется, или в крайнем случае внешними DSL-ями (тот же ANTLR). Так что не слушай дураков.

anonymous
()

Посмотрел cursive clojure. Достойно. Есть рефакторинг, навигация по коду, редактирование скобок. Ну подсветка, само собой. Комплит таки там fuzzy, что не могло порадовать, потому что в емаксе его не было вначале. Если сравнивать с эклипсовым CCW - лучше возможности редактирования кода. Но репл что-то у меня на двух из двух открытиях сглючил. И пришлось перезапускать. Потом пробовал варианты специального заваливания репла. CCW при таких глючит, конечно, но пользоваться можно. Cursive - пока нет, к сожалению. Но так как репл - это основной инструмент, cursive clojure я на пока забраковал. Пусть работают. Пока продолжаю использовать emacs. Но конкретно ты отслеживай его статус, ведь ты, вроде как пишешь, что к идее привык.

turtle_bazon ★★★★★
()
Ответ на: комментарий от anonymous

ANTLR, конечно, внешний DSL, но пользоваться им на порядк менее удобно. А по поводу предъявить. Понимаешь, тут народу мало кто реально на лиспе пишет. Поэтому и предъявляют только самые яркие примеры.

turtle_bazon ★★★★★
()
Ответ на: комментарий от Nagwal

Первое: Где все эти DSL-и?

https://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&amp...

Racket is particularly strong at developing languages... DSLs. We utilized this to custom build hundreds of languages, large and small, to fit the various needs of the game.

Второе: Все равно этими dsl-ами пользоваться придется программистам

Конечно же, нет. Декларативными дслями свободно могут пользоваться и непрограммисты.

anonymous
()
Ответ на: комментарий от anonymous

https://www.google.ru/url?sa=t&rct=j&q=&esrc=s&source=web&amp...

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

Конечно же, нет. Декларативными дслями свободно могут пользоваться и непрограммисты.

Мы в свое время на спор учили секретаршу sql-ю. Основы девочка конечно довольно быстро вкурила, но вот ни одного более менее сложного отчета так и не написала.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от turtle_bazon

Я там уже анонимусу на его пост про лисп, встроенный в какую то игрушку отвечал. Понятно что можно написать пару полезных макр, облегчающих работу с предметкой. Только вот чем это отличается от написания пары полезных библиотечных функций - не очень вижу. Да и все равно мы с этими макрами остаемся в синтаксисе и, практически, в семантике лиспа. А если мы хотим за них выйти - то придется писать полноценный интерпретатор/компилятор языка, что уже далеко не пара строчек.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Как раз с языками, у которых хорошо определена семантика, и нового выдумывать не надо, компиляторы на макросах пишутся элементарно - те же BNF, регулярные выражения, Kanren и подобные. При том, что семантика регулярных выражений ничего общего с семантикой Лиспа не имеет, да и синтаксис у них тоже совершенно свой.

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

anonymous
()
Ответ на: комментарий от Nagwal

И где там дсл?

Racket is particularly strong at developing languages... DSLs. We utilized this to custom build hundreds of languages, large and small, to fit the various needs of the game.

We utilized this to custom build hundreds of languages, large and small, to fit the various needs of the game.

build hundreds of languages

anonymous
()
Ответ на: комментарий от Nagwal

Я там уже анонимусу на его пост про лисп, встроенный в какую то игрушку отвечал.

Он не встроенный в игрушку. Там использовались дсли для генерации данных, которыми пользовались дизайнеры/моделлеры/етц.

То есть те самые дсли для непрограммистов.

Только вот чем это отличается от написания пары полезных библиотечных функций - не очень вижу.

Тем что проще, более выразительно, могут легко пользоваться непрограммисты.

anonymous
()
Ответ на: комментарий от turtle_bazon

На порядок менее удобно чем что? Удобнее чем antlr ничего пока не придумали.

А предъявить DSLи не только тут не могут. Везде, где про них спрашивают, выдают один и тот же список из парсеров с прологами.

anonymous
()
Ответ на: комментарий от Nagwal

Мы в свое время на спор учили секретаршу sql-ю. Основы девочка конечно довольно быстро вкурила, но вот ни одного более менее сложного отчета так и не написала.

Ну вон тебе ааа+ проект, написанный непрограммистами при помощи дслей. А sql - это фактически general purpose language, а не дсл, коненчо для непрограммиста он сложен будет.

anonymous
()
Ответ на: комментарий от Nagwal

Да и все равно мы с этими макрами остаемся в синтаксисе и, практически, в семантике лиспа.

Не остаемся. Те дсли что в презентации - ничего общего с синтаксисом и семантикой ракетки, по факту, не имеют.

anonymous
()
Ответ на: комментарий от anonymous

Беда с DSL в том, что придумать семантику языка для предметной области очень непросто

Это то же самое, что придумать архитектуру для библиотеки предметной области.

Так что все так называемые DSL на самом деле реализации стандартных и широко известных языков, а никак не проблемно-специфичные.

О проблемно-специфичных дслях никто не знает именно потому, что они проблемно-специфичные - то есть пишутся для одной конкретной задачи и не применяются за ее пределами.

И по хорошему все это можно было сразу включить в семантику языка и не париться с макросами.

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

anonymous
()
Ответ на: комментарий от anonymous

На порядок менее удобно чем что?

Чем попытка реализовать это при помощи библиотеки.

добнее чем antlr ничего пока не придумали.

Как не придумали, если макросы на порядок удобнее?

А предъявить DSLи не только тут не могут.

Я выше дал ссылку.

anonymous
()
Ответ на: комментарий от anonymous

Это то же самое, что придумать архитектуру для библиотеки предметной области.

Это сложнее. Библиотека может быть ad hoc слепленная соплями, и при этом неплохо работать. Семантика же должна быть сразу корректной.

О проблемно-специфичных дслях никто не знает именно потому, что они проблемно-специфичные - то есть пишутся для одной конкретной задачи и не применяются за ее пределами.

Ну так почему никто тогда не может предъявить ни одного убедительного примера?!? В открытых исходниках хотя бы.

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

Ну так в том и дело, что не надо. Для стандартных вещей - надо, а для проблемно-специфичных без этого все обходятся почему-то.

anonymous
()
Ответ на: комментарий от anonymous

Как не придумали, если макросы на порядок удобнее?

Ну покажи мне реализацию BNF на макросах, которая была бы удобнее и мощнее, чем antlr. Напомню, что antlr даже в GLR умеет.

Я выше дал ссылку.

Это хренота какая-то, которая должна была быть XML-ем вообще, а не убедительный пример DSL. Форматы файлов с данными на DSL не канают.

anonymous
()

Причём тут лисп? Типичный java-код же.

BattleCoder ★★★★★
()
Ответ на: комментарий от anonymous

Беда с DSL в том, что придумать семантику языка для предметной области очень непросто, и на практике никто этого никогда не делает.

В том и фишка Лиспа, что на нем можно «выращивать» семантику снизу вверх.

anonymous
()
Ответ на: комментарий от anonymous

Ну покажи мне реализацию BNF на макросах, которая была бы удобнее и мощнее, чем antlr.

Во-первых - при чем тут реализация bnf? во-вторых - как собираемся сравнивать удобство? Предлагаю взять какюу-то задачУ, ты ее ришаешь на своих антлрах с сишками, я - на ракетке, потом сравниваем резалты.

Это хренота какая-то, которая должна была быть XML-ем вообще, а не убедительный пример DSL. Форматы файлов с данными на DSL не канают.

Это не формат файлов с данными, этот код на дсл генерирует данные. В частности, он генерирует, например, код на сишке. Как раз прекрасный пример дслей, именно для этого дсли и нужны. Конечно, можно для этого применять xml - но тебе тогда придется писать дсл для генерации этого хмл, потому что писать и править хмл руками никто не сможет. А тогда к чему этот промежуточный шаг?

anonymous
()
Ответ на: комментарий от anonymous

Это сложнее. Библиотека может быть ad hoc слепленная соплями, и при этом неплохо работать. Семантика же должна быть сразу корректной.

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

Ну так почему никто тогда не может предъявить ни одного убедительного примера?

Я выше предъявил.

В открытых исходниках хотя бы.

Ну так посмотри исходники на ЯП, в которых есть нормальные макросы.

Ну так в том и дело, что не надо.

Так дело в том что надо как раз.

Для стандартных вещей - надо, а для проблемно-специфичных без этого все обходятся почему-то.

Можно и вообще машиной тьюринга обходиться.

anonymous
()

Как в этой вашей жаве можно что-то читать с узким монитором? Где граница на 80м символе?

sambist ★★
()
Ответ на: комментарий от sambist

Как в этой вашей жаве можно что-то читать с узким монитором? Где граница на 80м символе?

Осталась в 20-м веке, как и мониторы с разрешением < fullhd.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от anonymous

Ты сам то пользовался этим удобным ANTLR? И чем-то менее удобным? :)

turtle_bazon ★★★★★
()
Ответ на: комментарий от Nagwal

как и мониторы с разрешением < fullhd.

Да насрать на размер монитора. Задумывались когда-нибудь, почему газеты не верстают во всю длину?

sambist ★★
()
Ответ на: комментарий от sambist

Не насрать. Никто не пишет код так, что все строчки по 100 с хреном символов. А вот некоторые - вполне могут и за 120 выезжать. Так что аналогия с газетой здесь не очень к месту. К тому же книги вон верстают 99% во всю ширину страницы и я не слышал чтобы кто-то особо жаловался на это.

Nagwal ★★★★
() автор топика

Пациент безнадежно болен, у вас Lisp.

amazpyel ★★★
()
Ответ на: комментарий от Nagwal

Никто не пишет код так, что все строчки по 100 с хреном символов.

За сто с хреном символов пишут только те, кому насрать на поддержку кода. Люди, которым приходится поддерживать код пишут читаемо. А у вас пока одну строчку прочитаешь уже забудешь где находишься.

sambist ★★
()
Ответ на: комментарий от sambist

Может тебе подумать о смене профессии, если ты строчку в 100 символов прочитать не можешь, не забыв о том, где находишся?

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

Вообще это как раз о том, что чтобы прочитать код, нужно сидеть и вникать. Беглым взгядом это не окидывается. Что понижает в читаемости.

turtle_bazon ★★★★★
()
Ответ на: комментарий от Nagwal

В книгах, кстати, подсчитай сколько там в среднем символов на строчку. И подумай почему это среднее значение во всех книгах одно.

turtle_bazon ★★★★★
()
Ответ на: комментарий от Nagwal

Я конечно на плюсах не писал с институтских времен, т.е. лет так уже 10, но из того, что я еще смутно помню про iostreams - ничего общего и в помине нет.

Да неужели?

cout << "Hello" << " " << "world" << endl;
ostream.out("Hello").out(" ").out("world").out(endl);

Сейчас пытаемся с несколькими хорошими людьми поднять свой небольшой бизнес, вот и пришлось снова сесть за разработку, во избежание излишних потерь бабла на этапе старта.

А, ну если для себя пишешь, то пиши хоть левой пяткой. У меня-то душа болит за тех, кому твои опусы поддерживать придется.

kawaii_neko ★★★★
()
Ответ на: комментарий от turtle_bazon

Блин, да что вы все придрались к этой несчастной длине строки? Я не виноват что в яве так методы называются, что несколько их вызовов в одну строчку раздувают длину строки до неприличных размеров. Там полезной информации на символ - с гулькин хрен, поэтому проблем прочитать - не вижу. Да и вообще - не нравится, выделил в ide, нажал форматировать - в чем проблема то, она сама строчки перенесет.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от kawaii_neko

А, ну если для себя пишешь, то пиши хоть левой пяткой. У меня-то душа болит за тех, кому твои опусы поддерживать придется.

Ну, вообще люди деньги получают обычно за разбор чужого кода. Так что больно уж у тебя душа чувствительная, раз за них болит. Просто работа такая.

К тому же вон тут выяснилось, что ощутимая часть людей этот код нормальным считают.

Nagwal ★★★★
() автор топика
Ответ на: комментарий от Nagwal

ощутимая часть людей этот код нормальным считают

Лоровские школьники, которые пишут хайлоад на rust'е с версии 0.1 чтоли?

kawaii_neko ★★★★
()
Ответ на: комментарий от kawaii_neko

Да хрен его знает, думаешь я к каждому, кто оставлял каммент из серии «нормальный код» в профиль что-ли лез?

Nagwal ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.