Что такого плохого в inferior-lisp?

Когда я начал изучать lisp, emacs и ess (Emacs Speaks Statistics), я натолкнулся на концепцию неполноценного того или другого. Например, есть inferior-ess-mode, inferior-lisp и Низкий режим Emacs Lisp.

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


person Ben Ogorek    schedule 10.08.2014    source источник
comment
Он хуже в том смысле, что вы уступаете своему начальству. Это не качественный термин; это относится к тому факту, что подчиненный процесс управляется вышестоящим процессом, подчиняется вышестоящим процессам и получает задания от вышестоящего процесса.   -  person Joshua Taylor    schedule 10.08.2014


Ответы (2)


Под подчиненным режимом понимается режим, который выполняется как подпроцесс emacs.

Например, это мое дерево процессов, когда я запускаю emacs:

$ pstree 62238
--= 62238 smt /usr/local/Cellar/emacs/HEAD/Emacs.app/Contents/MacOS/Emacs

После того, как я запустил подчиненную оболочку tcl, мое дерево процессов выглядит так:

$ pstree 62238
-+= 62238 smt /usr/local/Cellar/emacs/HEAD/Emacs.app/Contents/MacOS/Emacs
 \-+= 62359 smt /bin/sh /usr/bin/wish
   \--- 62361 smt /usr/bin/../../System/Library/Frameworks/Tk.framework/Version

Другими словами, «подчиненный» в данном контексте является синонимом префикса «суб-».

person smt    schedule 10.08.2014

Я думаю, что Inferior Emacs Lisp Mode (ielm) - неправильное название. Он должен называться Интерактивный режим Emacs Lisp. С ielm Emacs Lisp не работает как неполноценный Lisp. Это цикл чтения и печати eval для встроенного Emacs Lisp. GNU Emacs на самом деле называет его Inferior Emacs Lisp Mode, но если вы посмотрите на исходный код, он напрямую использует встроенный Emacs Lisp eval для оценки выражений. Он просто повторно использует некоторую инфраструктуру (comint) для работы с низшими интерпретаторами (такими как Lisps, оболочки и т. Д.).

Обычно Inferior Lisp означает, что это (часто внешняя) система Lisp под управлением Emacs. Это также не обязательно должно быть Emacs Lisp. Обычно это какой-нибудь другой диалект Лиспа, например Common Lisp. Common Lisp имеет / имел несколько расширений для Emacs и Common Lisp, так что он работает как неполноценный Lisp с множеством функций среды разработки Lisp (отладчик, инспектор, локатор исходного кода, ...):

  • ILISP (Inferior Lisp), устаревший
  • ELI (интерфейс Emacs-Lisp) от Franz, Inc. для Allegro CL
  • SLIME (Улучшенный режим взаимодействия с Lisp для Emacs)

Emacs также имеет простое встроенное средство для запуска неполноценного Lisp: Внешний Лисп.

  • inferior-ess-mode: управляет подпроцессом R
  • inferior-lisp: подпроцесс Lisp
  • inferior-emacs-lisp-mode: встроенный Emacs Lisp как цикл печати eval для чтения
person Rainer Joswig    schedule 10.08.2014
comment
Уже есть lisp-interaction-mode, который используется в *Scratch*. В случае IELM, «низший» относится к работе через режим Comint, что и делают все «низшие» режимы (т.е. низший режим Haskell), так что это действительно отличительная особенность IELM. Режим взаимодействия с Лиспом предлагает совершенно другой стиль интерпретации Emacs Lisp. - person lunaryorn; 10.08.2014
comment
lunaryorn: lisp-interactive-mode также использует встроенный Emacs Lisp. Ни он, ни ielm не используют плохой Lisp. - person Rainer Joswig; 10.08.2014
comment
Построенный на Comint, IELM выглядит «низшим» интерпретатором во всех смыслах. «Интерактивный» недостаточно описывает отличительную особенность IELM по сравнению с режимом взаимодействия с Лиспом. В конце концов, M-: тоже «интерактивен». По сути, весь Emacs представляет собой интерактивную среду Emacs Lisp. - person lunaryorn; 10.08.2014
comment
lunaryorn: он может выглядеть как Inferior Lisp, но не ведет себя как таковой. Например, если выполняется код Emacs Lisp, Emacs полностью не отвечает. Изменения касаются локального Emacs и т. Д. - это означает, что переопределение функции Emacs Lisp может привести к сбою редактора, установка переменных может повлиять на редактор, ... - person Rainer Joswig; 10.08.2014