Common Lisp IDE для разработчика на C #? - PullRequest
7 голосов
/ 18 февраля 2011

ОБНОВЛЕНИЕ

Я решил пока использовать Clojure.

LispDev не готов, и Eclipse / cusp не был достаточно стабилен, чтобы я чувствовал себя комфортно.

Что касается Clojure, после долгого, очень разочаровывающего, очень раздражающего процесса, пытающегося получитьEclipse / CCW, Netbeans / Enclojure и IntelliJ / La Clojure работают, я наконец получил Eclipse / CCW работает.Остальные до сих пор в основном в разрушенных штатах.

(Если я доберусь до этого, я задокументирую, что потребовалось мне , чтобы заставить Eclipse / CCW работать.)

Итак, пока ясобираюсь использовать это.Я могу окунуться в CL и проверить бесплатные версии LispWorks и AllegroLisp, но Clojure кажется мне более естественным шагом для работы в среде Microsoft CLR.

Спасибо всем за помощь.


Оригинальный вопрос

Я разработчик на C #, очень хорошо знаком с Visual Studio (с Resharper).

Я новичок в Lisps.Недавно я заинтересовался и Common Lisp, и Clojure, и нашел много хороших материалов для них обоих.

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

Существуют плагины Eclipse для Clojure и CL.Есть также еще пара вариантов для Clojure.Поскольку я не Java-разработчик, я ничего не знаю об этих IDE.

Является ли Eclipse хорошим местом для начала?Есть ли другие хорошие варианты?

РЕДАКТИРОВАТЬ:

Вот функции, к которым я привык:

  • Подсветка синтаксиса и автоиндентирование (у всех это есть, так что этоспорный вопрос)
  • Автозаполнение имен функций и переменных
  • Отображение в реальном времени всех перегрузок функций и параметров и возможность стрелок вверх / вниз по списку при наборе параметров
  • Предложения по синтаксису для улучшения кода, с возможностью сделать их для вас («использовать const», «преобразовать в выражение LINQ (FP)», «переменная никогда не будет назначена», «переменная никогда не будет использоваться», «переменная»может иметь значение null "," функция никогда не будет использоваться "и т. д.)
  • Извлечение метода / рефакторинг функции: выберите блок текста, и его можно извлечь в новую функцию
  • СоздатьПерефакторинг переменной: выберите блок текста и создайте переменную (например, let)
  • Переименуйте Refactoring: переименуйте объявление функции или переменной, и все другие функции, использующие ее, будут be обновлено (автоматический поиск / замена)
  • Перейти к определению метода / функции, переменная
  • Найти использование / ссылки на определенный метод / функцию, переменная
  • Интегрированная папкаинструменты управления проектами и инструменты построения
  • "Переместить класс в новый файл", который создает новый файл на основе имени класса и содержит все его методы
  • "Переименовать файл на основе классатип ", который переименовывает файл, если вы измените имя класса
  • F9 / Нажмите слева от строки, чтобы добавить / удалить точки останова
  • F10 / F11, чтобы перейти к или над кодом при отладке,вместе со стрелкой и подсветкой, чтобы показать, какой код выполняется в данный момент (перейти к выполнению func или просто выполнить его здесь)

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

Я не говорю, что emacs / slime не может этого сделать, но если это так, он не использует ничего подобного с точки зрения удобства использования.Ques.

Ответы [ 7 ]

7 голосов
/ 18 февраля 2011

Если вы привыкли к Visual Studio и хотите подобный продукт для Lisp, то, вероятно, аналогичным будет аналогичный коммерческий IDE. Самые известные из них: Allegro и Lispworks .

Я лично не использовал ни один из них для реальной работы (то есть, большой проект), хотя я пробовал демонстрационные версии. Они казались достаточно хорошими, хотя и немного сложными и со странными пользовательскими интерфейсами, но не намного лучше, чем Slime, чтобы стоить мне денег. Но если вы хотите что-то вроде VS, они могут быть именно тем, что вы ищете.

FWIW, я делаю и C #, и Common Lisp в Emacs, и я нахожу, что Slime в 10 раз лучше, чем любой набор режимов, которые я нашел для редактирования C # до сих пор. Если подумать, я не знаю ни одной среды разработки для какого-либо языка или платформы, которую я бы предпочел использовать - это так хорошо.

Одна из проблем, с которой вы можете столкнуться, заключается в том, что сам Lisp является достаточно другим языком, чем тот, который вы привыкли к тому, что старые способы ведения дел больше не применяются, поэтому любая IDE может показаться вам "задом наперед" , (Я выучил Lisp задолго до C #, а C # кажется мне задом наперед и датирован!) Поэтому вместо изучения нескольких команд Slime (их не так уж много), вы изучаете команды IDE, которые на самом деле не могут быть легче Вы, так как понятия одинаковы и не обязательно сопоставляются с VS-подобными функциями IDE.

Но удачи с тем, что вы выберете!

4 голосов
/ 19 февраля 2011

C # в основном используется в пакетном режиме. IDE показывает это. Он знает синтаксис фиксированного языка, вызывает компилятор и использует вывод различных инструментов, таких как компилятор.

Common Lisp немного отличается. Среды IDE либо интегрированы в Common Lisp (Allegro CL, LispWorks, CCL), либо находятся в чем-то вроде Emacs и подключаются к работающему Lisp (SLIME / Emacs). Основной способ разработки - интерактивный. Программа работает, и среда IDE изменяет ее.

Для Emacs используется SLIME с расширениями Paredit и Redshank . Смотрите: Редактирование кода на Лиспе с помощью Emacs .

  • Подсветка синтаксиса и автоиндентирование (у всех это есть, поэтому это спорный вопрос)

    Это обеспечивается IDE.

  • Автозаполнение функций и имен переменных

    Это обеспечивается IDE.

  • Отображение в реальном времени всех перегрузок и параметров функций и возможность стрелок вверх / вниз по списку при наборе параметров

    Обычный Лисп не имеет «перегрузок». Можно просматривать общие функции (CLOS) в IDE.

  • Синтаксические предложения по улучшению кода, с возможностью сделать их за вас («использовать const», «преобразовать в выражение LINQ (FP)», «переменная никогда не будет назначена», переменная никогда не будет использоваться, переменная может быть нулевой, функция никогда не будет использоваться и т. д.)

    Компиляторы Lisp выводят подсказки и предупреждения. Есть также предложения по стилю некоторыми.

    CL-USER 15> (defun foo (a b) a) FOO

    CL-USER 16> (скомпилировать 'foo) ;;; * Предупреждение в FOO: B связан, но на него нет ссылок FOO

    Такие реализации, как LispWorks, могут просматривать набор предупреждений и ошибок.

  • Извлечение метода / рефакторинг функции: выберите блок текста, и его можно извлечь в новую функцию.

    Инструменты могут сделать это. См. Например, Redshank.

  • Рефакторинг переменной: выделите блок текста и создайте переменную (например, let)

    Reshank.

  • Переименовать рефакторинг: переименуйте объявление функции или переменной, и все остальные функции, использующие его, будут обновлены (автоматический поиск / замена)

    Используйте инструменты поиска и замены в среде IDE. Обратите внимание, что, поскольку Lisp имеет программируемый синтаксис, проблема в общем случае не разрешима.

  • Перейти к определению метода / функции, переменная

    Meta-. , Meta-X Изменить определение

  • Найти использование / ссылки на определенный метод / функцию, переменная

    Кто вызывает функцию в IDE.

  • Интегрированные инструменты управления проектами и инструменты для создания папок

    См. Системные инструменты.

  • «Переместить класс в новый файл», который создает новый файл на основе имени класса и содержит все его методы

    Common Lisp не работает таким образом. Методы и классы не связаны, как в C #.

  • «Переименовать файл на основе типа класса», который переименовывает файл, если вы измените имя класса

    Common Lisp не работает таким образом. Один не пишет файл для класса.

  • F9 / Нажмите слева от строки, чтобы добавить / удалить точки останова

    Зависит от IDE. В противном случае используйте функцию BREAK.

  • F10 / F11 для перехода к коду или его перезаписи при отладке вместе со стрелкой и выделением, чтобы показать, какой код выполняется в данный момент (перейти к выполнению функции или просто выполнить его здесь)

    Используйте функцию STEP или инструмент IDE.

  • Большинство всего доступно в контекстном меню, вызываемом правой кнопкой мыши, или в виде всплывающего комбинированного списка или текстового поля при вводе.

    Да.

Я думаю, вам нужно проверить SLIME более подробно, так как он во многом делает то, что вы описываете, в сочетании с обычными функциями Common Lisp, такими как STEP, BREAK и TRACE.

Также может быть полезно прочитать руководство по LispWorks IDE, которое предоставляет эквивалентные функции в переносном графическом интерфейсе и многое другое:

Lispworks for Windows, Руководство пользователя IDE

  • Я не говорю, что emacs / slime не может этого сделать, но если это так, он не использует ничего похожего с точки зрения юзабилити.

    SLIME - этооснованный на Emacs, поэтому он формируется своим пользовательским интерфейсом.Например, LispWorks использует идеи Emacs в основном только для компонента редактора (который основан на редакторе, подобном Emacs, написанному на Common Lisp).LispWorks использует инструменты GUI для просмотра классов, просмотра общих функций, управления системой, отладчика, инспектора и т. Д.

3 голосов
/ 18 февраля 2011

Может быть, вам стоит попробовать Jabberwocky .

Также есть LispIDE и Lisp Studio .

2 голосов
/ 18 февраля 2011

В состав Allegro Common Lisp входит IDE , который может представлять интерес (хотя я не уверен, что вы можете использовать его с другими Лиспами). Плагин Eclipse называется Cusp и может быть найден здесь , хотя есть его ответвление здесь под названием lispdev, которое могло быть обновлено совсем недавно.

Возможно, на вики-странице Lisp Game есть кое-что полезное, особенно страница «Полезные приложения» здесь .

Лично мне нравится использовать Emacs + Slime с некоторыми инструментами emacs, разработанными для того, чтобы сделать его более похожим на IDE.

1 голос
/ 03 июня 2017

Несмотря на то, что этот вопрос устарел, а операционная система перешла на Clojure, я думаю, что этот вопрос все еще актуален, особенно для тех, кто хочет изучать Common Lisp и не хочет переходить из Visual Studio или просто хочет узнать что-то новое. с помощью инструмента, с которым они знакомы, чтобы хотя бы уменьшить барьер для вхождения в такой прекрасный язык, по тем же причинам, по которым был задан этот вопрос.

Я написал статью, объясняющую, как именно этого добиться, используя Visual Studio в качестве Lisp IDE , что было бы почти отличной заменой комбинации EMACS + SLIME.

Шаги для этой настройки:

  1. Visual Studio 2015 (очевидно, основной ингредиент)
  2. Интеграция с Lisp Расширение Visual Studio.
  3. Установите ConEmu и установите расширение ConEmuIntegration Visual Studio .
  4. Реализация Common Lisp по вашему выбору, установленная в вашем% PATH% (через настройки среды)

При вышеописанной настройке у вас будет встроенный REPL, а при наведении указателя мыши на функции / макросы Lisp появятся всплывающие подсказки с подписями и определениями. Это должно выполнить большинство функций, запрошенных в исходном вопросе.

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

В качестве бонуса, если вы уже знакомы с C ++, я бы порекомендовал проверить Embeddable Common Lisp (ECL), поскольку это позволяет вам встраивать Lisp в код C ++ или вызывать C ++ из Лисп, насколько это здорово в сочетании с Visual Studio?

1 голос
/ 22 июля 2014

Я знаю, что это старый вопрос, но - для Clojure - как насчет Nightcode?Я также не хотел тратить время на изучение языка, изучая новый редактор (например, Emacs / SLIME).Мне очень пригодился Nightcode.

https://nightcode.info/

Теперь я хочу, чтобы Nightcode тоже поддерживал Common Lisp (возможно, в форме ABCL)!

1 голос
/ 22 февраля 2011

Если вы новичок в Lisp и не являетесь пользователем emacs, я настоятельно рекомендую бесплатные версии Allegro Lisp или LispWorks.Или, если вы идете по маршруту Схемы, Схема PLT (которая теперь называется Racket).

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

...