9

Quería escribir un código educativo en Haskell con caracteres Unicode (no latinos) en los identificadores. (De modo que los identificadores se ven bonitos y naturales para los hablantes de un lenguaje natural distinto del inglés que no usa los caracteres latinos en su escritura). Por lo tanto, me propuse encontrar una implementación de Haskell adecuada que permita esto.¿Dónde se especifica si los identificadores Unicode deben permitirse en una implementación de Haskell?

¿Pero dónde se especifica esta característica en la especificación del idioma? ¿Cómo me referiría a esta característica cuando busque una implementación conforme? (¿Y qué implementaciones de Haskell son compatibles con los identificadores Unicode?)

Resultó que una implementación de Haskell aceptó mi código con identificadores Unicode, mientras que otro no lo aceptó. Me gustaría que hubiera una manera de formalizar este requisito de mi código, en una forma de cambio de función de idioma tal vez, de modo que si yo o alguien más intente ejecutar mi código, sería inmediatamente claro si falta su implementación. la característica requerida y, por lo tanto, debería buscar otra. (También podría haber una página wiki para esta característica - "Identificadores Unicode", que enumeraría cuáles de las implementaciones existentes lo admiten, de modo que uno sabría a dónde ir si lo necesita).

(Por cierto, He puesto una etiqueta de "sintaxis" en esta pregunta, pero en realidad percibo que es un problema del nivel de lexing, un nivel más bajo que la sintaxis de un idioma. ¿Hay alguna etiqueta aquí para las características del nivel de lexing de un idioma, en lugar de características de la especificación de sintaxis de un idioma?)

+0

En cuanto al último párrafo: es parte de la sintaxis. Es probable que no sea parte de la gramática, pero la distinción entre tokenización y análisis solo existe en la práctica. Y hay sistemas (por ejemplo, Análisis de expresión de gramáticas) que omiten el paso de tokenización y se adaptan al código fuente real. – delnan

+1

Detalles de mis experimentos: ghc-6.10.4- [alt2] (http://prometheus.altlinux.org/en/5.1/srpms/ghc) (IIRC) no aceptó identificadores Unicode, ghc-6.12.3- alt4 y ghc-7.0.1- [alt1] (http://prometheus.altlinux.org/en/Sisyphus/srpms/ghc) permiten los identificadores Unicode y los abrazos98-20060921- [alt5] (http: //prometheus.altlinux .org/es/5.1/srpms/hugs98) no permite los identificadores Unicode (lo cual es desafortunado, porque pensé que podría ser mejor para la educación que ghc por su mayor simplicidad, es decir, quizás mensajes de error más simples). –

+0

Experimentos más relacionados con identificadores Unicode: Ah, y también di curry-0.9.11 una prueba (porque tal vez quiera mostrar algún código con Curry "extensiones"): este compilador de Münster Curry no permitió identificadores Unicode (IIRC) . –

Respuesta

10

El Online Report documenta esto en Lexemes. También señala desde el principio que "Haskell usa el conjunto de caracteres Unicode. Sin embargo, los programas fuente actualmente están sesgados hacia el conjunto de caracteres ASCII utilizado en las versiones anteriores de Haskell".

Los compiladores reales pueden o no admitir identificadores Unicode. GHC lo hace, pero debe tener en cuenta que los puntos de código Unicode deben obedecer las mismas reglas que los caracteres ASCII: los tipos deben comenzar con un punto de código que se clasifique como mayúscula o título, las variables como minúsculas (aunque de facto esto se relaciona con alfabético y no mayúscula/título del título; podría valer la pena solicitar una aclaración del comité de idiomas), los operadores deben ser de puntuación o símbolo. (Esto significa que no puede declarar tipos en árabe, por ejemplo, a menos que los prefija con un carácter en alguna otra secuencia de comandos que sea mayúscula/de título).

En cuanto a la recopilación de información de soporte Unicode: mientras yo no saber de una sola página que lo proporciona, buscando "unicode" en el Haskell Wiki encuentra información sobre el soporte Unicode en varios compiladores Haskell.

+0

¡Gracias por una respuesta tan rápida y elaborada con enlaces! –

+3

Eso es intrigante para conocer casos tan desafortunados como los id de Árabe. (Probó sus predicciones con hebreo.) Puede tener sentido para Haskell relajar estas reglas de sintaxis para los sistemas de escritura unicase, o plantearlos de manera diferente: dada la observación de que es bastante natural en matemáticas usar solo letras latinas o griegas en fórmulas, tolerar la imposibilidad de letras unicase para identificadores con límites locales (y todas las identificaciones), y permitir letras unicase en nombres de tipos. Entonces las funciones globales se quedan sin nombres "localizados", pero al menos hay _ que puede ser un prefijo neutral para los nombres de funciones globales localizados. –

Cuestiones relacionadas