Emacs blèsent

Le Emacs blèsent est un dialecte du blèsent le langage de programmation employé par le GNU Emacs et les éditeurs de texte de de XEmacs (qui désigné collectivement sous le nom du Emacs en cet article.) Il est employé pour mettre en application la majeure partie de la fonctionnalité de édition construite dans Emacs, le reste étant écrit dans le C (de même que l'interprète lui-même de de blésité). Les utilisateurs d'Emacs écrivent généralement Emacs blèsent code pour adapter aux besoins du client et prolonger Emacs.

Emacs blèsent peut également être employé comme langue scripting, tout comme le shell Bourne De d'Unix , le python , le Perl , le Scsh , ou la perfidie de GNU de . Juste comme avec ces langues, il peut s'appeler de la ligne de commande ou par l'intermédiaire d'un dossier exécutable. Ses fonctions d'édition, telles que des amortisseurs et des commandes de mouvement, complètent les dispositifs de blèsent et travaillent en exploitation par lots .

Emacs blèsent s'appelle parfois le ELISP , au risque de la confusion avec un indépendant plus ancien blèsent dialecte avec le même nom. En termes de dispositifs, on le lie étroitement au dialecte de Maclisp , avec certains plus tard influencent du terrain communal blèsent. Il soutient le des méthodes impératives de la programmation fonctionnelle de et de . Le Richard Stallman a choisi blèsent comme langue de prolongation pour sa réécriture d'Emacs (le utilisé original TECO en tant que sa langue de prolongation) en raison de ses dispositifs puissants, y compris la capacité de traiter des fonctions comme données. À la différence du terrain communal bléser, comploter existé lorsque Stallman était Gosling Emacs de réécriture dans GNU Emacs, mais il n'a pas été employé en raison de l'exécution alors-pauvre de l'arrangement sur des postes de travail, et il a dû développer un dialecte plus facilement optimisé.

Le dialecte de blésité utilisé dans Emacs diffère sensiblement du terrain communal de blèsent et arrangement , dialectes de utilisés pour la programmation d'applications. Une des différences principales est qu'Emacs blèsent des utilisations dynamiques plutôt que la portée lexicologique par défaut. C'est-à-dire, des variables locales dans une fonction d'appel peuvent être mises en référence d'une fonction appelée sans passer des indicateurs ou des références.

L'écriture Emacs blèsent n'est pas la seule méthode d'adapter GNU aux besoins du client Emacs. Depuis la version 20, GNU Emacs a inclus un " ; Customize" ; service qui permet à des utilisateurs de placer des variables communes de personnalisation par une interface graphique. " ; Customize" ; les travaux à côté d'écrire Emacs blèsent code pour l'utilisateur, et sont limités aux personnalisations relativement simples. Besoins de l'utilisateur non chaque que le plein degré d'extensibilité a offerts par Emacs ; ceux qui mettent en boîte écrivent leur propre Emacs blèsent code.

Exemple

Voici un exemple simple d'une prolongation d'Emacs écrite dans Emacs blèsent. Dans Emacs, le secteur de édition peut être coupé en secteurs séparés appelés les fenêtres , chacun de qui montre un amortisseur différent de . Un amortisseur est, en général, une région de texte chargée dans la mémoire d'Emacs (probablement à partir d'un dossier), qui peut être économisée dans un document des textes.

L'ordre d'utilisateur pour ouvrir une nouvelle fenêtre est " ; C-x 2" ; (qui signifie pour appuyer sur la touche de « x » tout en maintenant la clef de « control », et puis pour presser le &mdash principal de « 2 » ; ne pas dactylographier le &mdash de caractère d'espace ; on lui montre seulement pour la lisibilité). Ceci court l'Emacs blèsent la fonction split-window-vertically. Normalement, quand la nouvelle fenêtre apparaît, il montre le même amortisseur que le précédent. Supposer que nous souhaitons le faire montrer le prochain amortisseur disponible. Afin de faire ceci, l'utilisateur écrit l'Emacs suivant blèsent code, dans l'un ou l'autre un Emacs existant blèsent fichier source ou un amortisseur vide d'Emacs :

lang=" de (mon-dédoubler-fenêtre-fonction de defun () (interactif) (dédoubler-fenêtre-vertical) (placer-fenêtre-amortisseur (prochain-fenêtre) (autre-amortisseur))) (" de global-placer-clef ; \ C-x2" ; 'mon-dédoubler-fenêtre-fonction)

Le premier rapport, (defun…), définit une nouvelle fonction, my-split-window-function, qui appelle split-window-vertically (la vieille fonction de fenêtre-division), puis indique la nouvelle fenêtre montrer un autre amortisseur. Le deuxième rapport, (global-placer-clef…) re-lie le " d'ordre principal ; La CX 2" ; à la nouvelle fonction.

Cependant, il y a une manière plus facile d'écrire ceci. Emacs blèsent a un dispositif puissant appelé le conseil de , qui permet à l'utilisateur de créer des emballages autour des fonctions existantes au lieu de définir leurs propres. Using le conseil, le code ci-dessus peut reimplemented comme suit :

lang=" de (dédoubler-fenêtre-vertical de defadvice (après mon-fenêtre-dédoubler-conseil d'abord () activer) (placer-fenêtre-amortisseur (prochain-fenêtre) (autre-amortisseur)))

Ceci demande à split-window-vertically d'exécuter le code écrit par l'utilisateur toutes les fois qu'il s'appelle, avant d'exécuter le reste de la fonction.

Ces changements entrent en vigueur quand le code est évalué par , using (par exemple) le " de commande ; M-x eval-buffer" ;. Il n'est pas nécessaire de recompile ou même remettre en marche Emacs, qui rend adaptant Emacs aux besoins du client très commode. Si le code est sauvé dans le " d'Emacs ; file" d'init ; (habituellement un dossier appelé " ; .emacs" ; dans le répertoire local du de l'utilisateur), alors Emacs chargera la prolongation la prochaine fois qu'il commence. Autrement, les changements seront perdus quand les procédures utilisateur Emacs.

Code source

Emacs blèsent code est stocké comme texte plat , avec le " de suffixe de nom de fichier ; .el" ; (une exception étant le dossier de l'init de l'utilisateur, qui est appelé " ; .) Quand les dossiers sont chargés, un volet de l'interprète du programme d'Emacs lit et analyse les fonctions et les variables, les stockant dans la mémoire. Ils sont alors disponibles à d'autres fonctions d'édition, et à l'utilisateur commandent. Des fonctions et les variables peuvent être librement modifiées et rechargées.

Afin de sauver l'espace mémoire, une grande partie de la fonctionnalité d'Emacs n'est pas chargée jusqu'à ce qu'il soit nécessaire. Chaque ensemble d'options est mis en application par une collection de code d'Emacs appelée un " ; library" ;. Par exemple, il y a une bibliothèque pour accentuer des mots-clés en code source de programme, et une bibliothèque pour jouer le jeu du Tetris . Chaque bibliothèque est mise en application using l'un ou plusieurs Emacs blèsent des fichiers source.

Certaines fonctions sont écrites dans le C. Ce sont " ; primitives" ; , également connu comme " ; functions" intégré ; ou " ; subrs" ;. Bien que des primitifs puissent s'appeler de blèsent le code, ils peuvent seulement être modifiés en éditant les fichiers source de C et recompiling. Dans le GNU Emacs , primitifs ne pas être disponible en tant que bibliothèques externes ; elles font partie de l'Emacs exécutable. Dans le XEmacs , le chargement d'exécution de tels primitifs est possible, using le soutien du système d'exploitation de l'enchaînement dynamique. Des fonctions peuvent être écrites comme primitifs parce qu'elles ont besoin de l'accès aux données externes et les bibliothèques pas autrement fournies par Emacs blèsent, ou parce qu'ils s'appellent assez souvent que la vitesse comparative de C contre Emacs blèsent fait une différence valable.

Cependant, parce que les erreurs en code de C peuvent facilement mener aux violations de segmentation ou aux bogues plus subtiles, en se brisant le rédacteur, et en écrivant le code de C qui agit l'un sur l'autre correctement avec l'Emacs bléser collecteur d'ordures de que est sujet aux erreurs, relativement peu de fonctions sont mis en application comme primitifs.

Code de byte

L'exécution d'Emacs blèsent code peut être encore augmentée par le " ; byte-compilation" ;. Emacs contient un compilateur qui peut traduire Emacs blèse des fichiers source dans une représentation spéciale connue sous le nom de Bytecode . Emacs blèsent des dossiers de bytecode ont le " de suffixe de nom de fichier ; . Comparé aux fichiers source, les dossiers de bytecode chargent plus rapidement, occupent moins d'espace sur le disque, emploient moins de mémoire une fois chargés, et fonctionnent plus rapidement.

Bytecode est encore plus lent que des primitifs, mais des fonctions chargées comme bytecode peuvent être facilement modifiées et rechargées. En outre, les dossiers de bytecode sont plate--indépendants. L'Emacs standard blèsent code distribué avec Emacs est chargé comme bytecode, bien que les fichiers source assortis habituellement soient aussi bien donnés pour la référence de l'utilisateur. Des prolongements écrits par l'utilisateur byte-ne sont pas typiquement compilés, car ils ne sont ni comme grands ni comme comportant de nombreux calculs.

Dispositifs de langue

Le " ; cl" ; le paquet est notable pour mettre en application un sous-ensemble assez grand de terrain communal de blèsent .

Emacs blèsent des utilisations dynamiques, pas charge statique (ou lexicologique), la portée . Si une variable est déclarée dans la portée d'une fonction, elle est disponible aux sous-routines appelées de cette fonction. À l'origine, ceci a été prévu comme optimisation ; la portée lexicologique était encore rare et d'exécution incertaine. La portée dynamique a été également censée pour fournir une plus grande flexibilité pour des personnalisations d'utilisateur. Cependant, la portée dynamique a plusieurs inconvénients. Premièrement, elle peut facilement mener aux bogues dans de grands programmes, dus aux interactions fortuites entre les variables dans différentes fonctions. Deuxièmement, variables de accès dessous la portée dynamique est généralement plus lente que sous la portée lexicologique. En conséquence, des plans ont été faits pour convertir Emacs blèsent à la portée lexicologique, bien que ceci n'ait pas été encore fait. Le macro de lexical-let dans le " ; cl" ; le paquet fournit la portée lexicologique efficace à Emacs blèsent des programmeurs, mais tandis que "CL" est employé couramment, lexical-let est rarement employé.

Emacs blèsent ne fait pas le Queue-appellent l'optimisation , qui est faite dans beaucoup d'autre blèse des réalisations. Sans ceci, les récursions de queue de peuvent par la suite mener au débordement de pile .

Apostilles

.
Random links:Chronologie de biologie et de chimie organique | Logique de description | Godzilla contre Mechagodzilla | Saints de New Jersey | L'amour nous détachera | Emacs_balbucea