LINUX.ORG.RU

Vim или Emacs? А LISP в 2021?

 , ,


1

3

https://www.youtube.com/watch?v=8Q9YjXgK38I&t=42s

Парень в определённых кругах, личность известная.
посмотрел я его ролик, стал ковыряться по истории:

А ведь Crashbandicoot была годной игрой…

Что выбрать? Vim или Emacs?
Изучать в 2021 году Lisp? Если изучать, какой? Практика?
А не засмеют сотрудики?

Времени в сутках маловато, на всё не хватает.


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

да и плотность покрытия LTE в Германии недвусмысленно намекает, какое место немцы клали на урбанизацию.

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

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

пострелять по цели, которая непредсказуемо движется

Всё ещё слишком конкретно. Обрисуйте цель абстрактнее.

По итогу заснул

«Сало на клавиатуре» Вы бы тоже не прошли, ясно :P

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

Зачем ты пытаешься выставить минусом то, что является функциональной парадигмой? Она именно для этого и создавалась, не?

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

Эта «дристня», как ты ее назвал, лучшее поведение в ответ на твою ошибку, явно указывающее, что ты заметно тупее бездушной машины, которая «обдристала» весь экран

Выдавать программисту в выхолопе сущности, большой части из которых нет в исходном коде программы — это, по-твоему, лучшее поведение? Отличные истории.

Потому что Read - это функция компилятора/интерпритатора, а read - команда, которая вызвала функцию Read при компиляции/интерпретации. А в скобочках еще и описало, чо именно оно не смогло Read-нуть. Чо непонятного?

Я знаю, что там написано. Я возмущаюсь, что ничего из этого начинающий хаскель-программист, вроде среднего мимокрокодила в этом треде, не поймет. Ну и, к слову, ты сам ошибся, потому что Read — это типокласс, экземпляра которому компилятор не смог найти, поскольку Read подразумевает чистое значение, а контейнер-конвеер IO в Read не умеет. Но чтобы это понять, нужно иметь глубокое понимание системы типов хаскеля, которого нет и у меня.

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

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

Я забыл поставить закрывающую скобочку функции в простенькой программе на три строчки на языке C, и оно «обдристало» экран. Фу, какой мерзкий и убогий этот ваш С!

Да, Си — еще одна мерзость. Но на нем можно хотя бы рабочие программы писать. Хотя, большую часть своей «карьеры» я писал на поскале, которые заметно человечнее.

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

haskell это язык для любителей другого говно-языка под названием матан, убогого настолько, что на нем нельзя даже шахматы написать, а на PHP можно => PHP лучше математики

Лять, еще один. Тебе слово «функциональный» надо написать большими буквами и выделить жирным? Или чо?

говно-языка под названием матан

Хотя и этого достаточно, чтобы не продолжать разговор.

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

серьезные проекты на хаскеле

RainCat, например? В котором дубовое управление без драгндропа, и падает от нажатия любой непредусмотренной клавиши (как они вообще умудрились сделать такое? o_O)

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

большими квадратами

Для кубача это нормально.

Зато вот на застрявшее пятно света или тени неизвестного происхождения до сих пор можно напороться, ага.

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

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

Мдааа…

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

Написал на VBA сервис, который выдает HTML странички в ответ на запросы?

Хуже. Эхель был его браузером :)

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

Это создание сайтов на Тильде и тп

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

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

No-Code программирование называется.

Зерокодинг - настолько мертворожденная херня, что даже не знаю как долго оно еще продержится в поле нашего зрения.

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

Действительно, ведь begin/end или {/} - это что-то настолько запредельно сложное, что надо пару лет на освоение

Begin/end выкинули из питона не потому, что они сложны, а потому, что во всех языках и так дублируются отступами. Почему бы их не выкинуть и не оставить одни отступы?

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

во всех языках

4.2

Однострочники в консоли пишутся без отступов. А питон в эту нишу не может :P

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

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

Бгг, и чо толку? Куда он дальше расти будет без умения мыслить, а тем более мыслить категориями больших проектов? Мне это напоминает профессию портовых грузчиков, которая в начале 1900-х считалась уважаемой. Вот только изобретение контейнеров помножило их профессию (а по совместительству и их самих) на ноль. Не находишь, что это одно и тоже?

но, епта, найди реальное применение своим знаниям.

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

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

А, юношеский прыщемаксимализм, понимаю. Было и у меня такое, чо уж…

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

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

Блин, берешь, гуглишь «haskell lagest open source projects», получаешь первой ссылкой проекты, о которых я говорю:

https://serokell.io/blog/best-haskell-open-source-projects

Написал на VBA сервис, который выдает HTML странички в ответ на запросы?

Хуже. Эхель был его браузером

Я ничо не понял. Он давал клиентам эксельку, из которой они делали заказ, что ли?

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

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

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

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

Я свое мнение высказал.

Ты показал, что нихера не понимаешь. Только и всего.

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

Выдавать подробное описание твоей ошибки теперь есть нехорошее поведение компилятора? Отличные истории.

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

Начинающий электросварщик тоже много чего не понимает. Электросварку надо отменить?

Ну и, к слову, ты сам ошибся, потому что Read — это типокласс, экземпляра которому компилятор не смог найти, поскольку Read подразумевает чистое значение, а контейнер-конвеер IO в Read не умеет.

Не суть, я упростил до уровня «на пальцах». И да, ты определись: ты все-таки не понял, чо за «дрисня», или просто ты простейщее из семейства амеб, которому просто вечно лень в чем-то разбираться?

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

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

Хасель объективно на порядок сложнее, при этом толку в коммерческой разработке от него намного меньше, чем от JS. И тогда спрашивается — почему хаскель нужен? Потому что гладиолус?

Что характерно, ты до сих пор не уловил, что хаскель - это не альтернатива JS, а, сцуко, совсем другой инструмент джля, сцуко, совсем других задач. Сцуко!

Хотя, большую часть своей «карьеры» я писал на поскале, которые заметно человечнее.

Там же бегины и энды. По твоей же классификации это говноязык))

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

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

Можно закончить на том, что мой собеседник не допускает ошибок в своих программах.

Что характерно, ты до сих пор не уловил, что хаскель - это не альтернатива JS, а, сцуко, совсем другой инструмент джля, сцуко, совсем других задач

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

Хотя, большую часть своей «карьеры» я писал на поскале, которые заметно человечнее

Там же бегины и энды. По твоей же классификации это говноязык

Ты сам выдумал этот тезис и сам же ему возражаешь.

byko3y ★★★ ()
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от byko3y

Я ничо не понял. Он давал клиентам эксельку, из которой они делали заказ, что ли?

Не клиентам, а трем тетенькам-продавщицам, которые сидели в соседних деревнях на точках. А клиентам бумажные каталоги :)))))

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

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

Хорошо, намекаю в последний раз, по-тупому уже совсем: функциональный язык - это значит он нужен прежде всего для чего-о-о?) Ну? Ну? Давай, я верю в тебя! (хотя вру, не верю уже давно)

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

функциональный язык - это значит он нужен прежде всего для чего-о-о?) Ну? Ну? Давай, я верю в тебя! (хотя вру, не верю уже давно)

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

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

Можно закончить на том, что мой собеседник не допускает ошибок в своих программах.

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

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

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

Ты сам выдумал этот тезис и сам же ему возражаешь.

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

Тем не менее аргументов нет до сих пор, но хаскель по-прежнему говно. Потому что гладиолус. Угу.

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

Закончим на том, что твой собеседник не дает оценку инструменту, пока не попробует его в его же области применения, не сравнит с другими инструментами из той же области и не проверит, применяя на практике в реально работающих проектах

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

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

Ты хоть один проект с вычислениями создавал? Ну хоть с какими-нибудь? Или тупо и бездумно шпаришь фронты к бэкам и в ус не дуешь?

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

Не надо совать нос в деревенский сортир, чтобы понять, что там воняет. Но ты почему то деревенским сортиром называешь все, что находится за порогом твоего маня-мирка. ИЧСХ, иногда все-таки суешь туда нос. Забавно, не так ли?

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

Не надо совать нос в деревенский сортир, чтобы понять, что там воняет. Но ты почему то деревенским сортиром называешь все, что находится за порогом твоего маня-мирка. ИЧСХ, иногда все-таки суешь туда нос. Забавно, не так ли?

Сунул нос раз, сунул нос два, три — все время воняет говном. Значит, это говно. Я даже немножко попробовал — говно. Что я еще должен сделать? Искупать целую команду с коммерческим проектом в этом говне?

Ты хоть один проект с вычислениями создавал? Ну хоть с какими-нибудь? Или тупо и бездумно шпаришь фронты к бэкам и в ус не дуешь?

Писал в инсте не шибко мудренные программы, чего-то крупномасштабного не делал. У меня встречный вопрос: зачем эти вычисления делаются? Во-первых, программа должна откуда-то получить входные данные. Вполне возможно, что данные даже будут изменяться по ходу вычислений. Во-вторых, вычисленные результаты должны быть куда-то выведены: на исполнительное устройство, в БД, через сеть. В-третьих, модель ленивых вычислений, от которой последние годы даже GHC отказывается, не позволяет эффективно использовать SIMD и GPGPU — это строго императивные вычислители, которым нужно скормить блок и выполнить строгую последовательность действий с этими блоками.

Итого, хаскелю в вычислениях нечего ловить дальше тетрадочки.

byko3y ★★★ ()
Последнее исправление: byko3y (всего исправлений: 1)
Ответ на: комментарий от byko3y

Проще, чище, короче

???

Строк столько же, токенов столько же. В случае, если что-то незнакомое гуглить format и concat намного проще, чем «%» и «+».

ты вынужден городить сложный конструкции на монадах-контейнерах просто для того, чтобы написать алгоритм «напечатать Hello, напечатать World».

do
  putStr "Hello, "
  putStrLn "World"

Каждый шаг — боль, каждый шаг — превозмогание, но нет «мы привыкли, нам нормально».

Тебе, чтобы написать в начале последовательности команд «do» надо превозмогать с болью?

У питона очень компактные и лаконичные циклы

Напиши эту конструкцию на питоне.

[[i,i+99] for i in range(1,11)]

читается на порядок сложнее. И почти всегда требуют комментарий вида

# [1,100] ... [10,110]
# 99 = 100-1, 11 = 10+1

Макросы в лиспе очень часто используются там, где достаточно простых функций. То есть «макросы не нужны».

Макросы нужны для нового синтаксиса. Приведи хоть один пример, где макрос можно заменить функцией. Разве что в том виде, как я привёл для питона (многословно и мусорно).

это непрактичный язык, который не предназначен для написания полезных программ

Странно. У меня всё на нём пишется. Единственная претензия: GUI по Windows кривой (порт GTK).

monk ★★★★★ ()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от byko3y

Ты можешь заметить, что даже самые крупные и серьезные проекты на хаскеле (которые ставят в пример при ответе на вопрос «а покажите хоть какие-то софтины, которые написаны на хаскеле») — это неинтерактивные трансляторы.

Leksah возьми за пример. Достаточно крутая IDE, естественно интерактивная.

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

Непрактичность в том, что в хаскеле крайне сложная работа с побочными эффектами. А побочные эффекты — это вся полезная работы программы.

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

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

Зачем ты берешься за решение новых задач, не закрыв предыдущие?

Что значит «закрыв»? Уволился с той работы, где получил задачу и получил расчёт? Во всех остальных случаях задача может внезапно открыться заново.

Можно, конечно, закрывать проект после каждой отправки на тестирование, но это уже как дама с кошёлочкой.

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

Функциональный -> алгоритмический.

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

мне есть на что тратить свою жизнь, кроме бесконечной организации и реорганизации заметок

Это не просто беспорядочная куча заметок, это дамп твоего мыслительного процесса, позволяющий в любой момент прервать любую цепь рассуждений и продолжить ее позже с того же места, не теряя контекста. По крайней мере так задумано.

зачем мне нужен этот гроб, который постоянно жужжит у моего стола

К сожалению (или к счастью), думать за тебя он пока еще не может.

Nervous ★★★★★ ()
Последнее исправление: Nervous (всего исправлений: 1)
Ответ на: комментарий от SPRATAY

Vim есть везде из коробки, не только в дистрах, но и в кастомных прошивках на телефонах точнее его папа vi, в прошивках роутерах

Vim – не vi, а лишь частично совместимый его клон. В прошивках обычно недоделанная реализация vi.

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

очень редко, возникает необходимость посчитать что-то во время компиляции

Она «возникает редко» потому что нет адекватных инструментов. В C++ аналог макросов это шаблоны, а не constexpr. И они ужасны, как только ты выходишь за тривиальные случаи.

no-such-file ★★★★★ ()
Ответ на: комментарий от byko3y

Хасель объективно на порядок сложнее

Хасель это просто про другое мышление. Настолько другое, что даже задачи нужно ставить по-другому. Если пытаться писать программы в духе «напечатай hello, напечатай world» то конечно это будет боль и страдание.

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

no-such-file ★★★★★ ()
Ответ на: комментарий от byko3y

потому что Read — это типокласс, экземпляра которому компилятор не смог найти, поскольку Read подразумевает чистое значение, а контейнер-конвеер IO в Read не умеет.

Read не «подразумевает чистое значение», его можно научить читать в IO:

instance (Read a) => Read (IO a) where
  readsPrec d s =
    let xs = readsPrec d s in
    let m (x, s) = (return x, s) in
    map m xs
 
main = do
  read "123" :: IO Int
  print "World"

а проблема в твоём примере, что

  1. всё выражение (read «123») должно в данном контексте возвращать какой-то IO-тип.
  2. read имеет тип String -> a и если a не может быть выведен из контекста, его нужно указывать явно. А для этого не нужно никакое глубокое понимание системы типов именно Хаскелла.
korvin_ ★★★★★ ()
Последнее исправление: korvin_ (всего исправлений: 3)
Ответ на: комментарий от tz4678
haskell это язык для любителей другого говно-языка под названием матан, убогого настолько, что на нем нельзя даже шахматы написать, а на PHP можно => PHP лучше математики

Только к математике (да и к computer sciences) Haskell имеет примерно такое же отношение, как нумерология к точным наукам.

Minoru ★★★ ()
Ответ на: комментарий от no-such-file

задача исходит из внешней бизнес-логики. Она уже существует и продумана в императивно-алгоритмическом стиле.

Бизнесу даже императивный Алгол был чужд.

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

Строк столько же, токенов столько же. В случае, если что-то незнакомое гуглить format и concat намного проще, чем «%» и «+»

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

do
putStr «Hello, »
putStrLn «World»

Каждый шаг — боль, каждый шаг — превозмогание, но нет «мы привыкли, нам нормально».

Тебе, чтобы написать в начале последовательности команд «do» надо превозмогать с болью?

Уже ответил выше с примером ошибки. Под капотом происходят весьма сложные вещи, и эти сложные вещи вываливаются на программиста при совершении ошибок. А ошибки совершенно точно будут. И так же с этими ошибками ты столкнешься, если попытаешься в do засунуть собственную функцию — а ты не можешь, например, вызвать из этого блока do чистую функцию без дополнительных приседаний. Да, религиозно фанатичный хаскелист скажет «что тут сложного? всё просто: do оборачивает блоки в монаду через монадические бинды, значит нужно чистые функции обернуть в return или стрелочную нотацию, а грязные функции вызывать как они есть при условии, что они являются монадой того же типа» — но это и есть «намного сложнее, чем должно быть». И это только «Hello World» — напоминаю для тех, кто уже забыл, о чем была беседа.

loop.for(«i»).from(1).to(100).for(«j»).from(1).to(100).collect(«[i,j]»)

[[i,i+99] for i in range(1,11)]
читается на порядок сложнее. И почти всегда требуют комментарий вида

Это стёб такой? Ты серьезно считаешь, что пример с list comprehension читается сложнее, чем рябь из вызовов функций? При всем моем неуважении к list comprehension... Я вообще предлагал нотацию плана:

list$
    for in in range(1, 11):
        yield [i, i+99]

Но в питоне до сих пор не научились передавать функцию аргументом.

Макросы нужны для нового синтаксиса. Приведи хоть один пример, где макрос можно заменить функцией. Разве что в том виде, как я привёл для питона (многословно и мусорно)

Легчайше. Берем тот же упомянутый выше по треду lsp-mode.el, 8000 строк, 18 макросов. Посмотрим. зачем же они «нужны», какой «новый синтаксис» они приносят:

(defmacro lsp-with-current-buffer (buffer-id &rest body) ... )
(defmacro lsp--catch (tag bodyform &rest handlers)
  "Catch TAG thrown in BODYFORM." ...)
(defmacro lsp--while-no-input (&rest body)
  "Wrap BODY in `while-no-input' and respecting `non-essential'." ...)
(defmacro lsp-save-restriction-and-excursion (&rest form) ... )
(defmacro with-lsp-workspace (workspace &rest body)
  "Helper macro for invoking BODY in WORKSPACE context." ... )
(defmacro with-lsp-workspaces (workspaces &rest body)
  "Helper macro for invoking BODY against multiple WORKSPACES."
(defmacro lsp-foreach-workspace (&rest body)
  "Execute BODY for each of the current workspaces." ... )
(defmacro when-lsp-workspace (workspace &rest body)
  "Helper macro for invoking BODY in WORKSPACE context if present." ... )
(defmacro lsp-define-conditional-key (keymap key def desc cond &rest bindings)
  "In KEYMAP, define key sequence KEY as DEF conditionally." ... )
(defmacro lsp--with-workspace-temp-buffer (workspace-root &rest body)
  "With a temp-buffer under `WORKSPACE-ROOT' and evaluate `BODY', useful to access dir-local variables." ... )
(defmacro lsp-with-filename (file &rest body)
  "Execute BODY with FILE as a context.
Need to handle the case when FILE indicates virtual buffer." ... )
(defmacro lsp-with-cached-filetrue-name (&rest body) 
  "Executes BODY caching the `file-truename' calls." ... )
(defmacro lsp--doctor (&rest checks) ... )

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

(defmacro lsp--json-serialize (params) ... )
(defmacro lsp--read-json (str) ... )
(defmacro lsp-json-read-buffer () ... )

здесь — для условной компиляции при отсутствии пакета json.

(defmacro lsp-consistency-check (package)
  `(defconst ,(intern (concat (symbol-name package)
                              "-plist-value-when-compiled"))
     (eval-when-compile lsp-use-plists)))
(defmacro lsp-make-interactive-code-action (func-name code-action-kind)
  "Define an interactive function FUNC-NAME that attempts to
execute a CODE-ACTION-KIND action." ... )

и константы, куда же без них.

byko3y ★★★ ()
Последнее исправление: byko3y (всего исправлений: 2)
Ответ на: комментарий от vM

Бизнесу даже императивный Алгол был чужд

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

Алгол-60 был всем чужд, потому что это был абстрактный язык без конкретной реализации ввода-вывода. Ту же ошибку Вирт снова повторил в Algol-W (паскаль), из-за чего язык заметно задержался на полках, пока на Си уже усердно клепали говнокод. Algol-68 — это совершенно иной язык, чистое нежизнеспособное творение комитета, для которого даже компилятора не получалось написать много лет подряд — настолько он был хорош.

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

там есть удобный семантический поиск?

Что это значит и как должно выглядеть?

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

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

Leksah возьми за пример. Достаточно крутая IDE, естественно интерактивная

Это б$@%$ что такое? 90% сорцов IDE — картинки, шрифты, доки, конфиги, локализации, и JS-based редактор кода CodeMirror, как вишенка на торте. И полтора мегабайта кода на хаскеле (примерно 25 тысяч строк).

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

Ты открываешь файл. Редактируешь. Сохраняешь. Открываешь другой файл, просто посмотреть. Открываешь третий файл и вуаля, только к работе приступил, а уже три открытых буфера. А представляете что будет через неделю? А через месяц?

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

знаю. как и программирование в целом, но просто математики любят хацкель хз за что

За возможность бесконечно убегать от жизни в красивые абстракции. Одна из проблем многих любителей хаскеля — они не могут написать рабочую программу, потому что сравнивают двадцать способов творчески выразить алгоритм. Потому что да, все они будут ужасны и чрезмерно переусложнены — я выше уже писал по поводу монад, создающих сложности на ровном месте.

byko3y ★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)