Hola Habr! Les presento la traducción de la publicación de Steven Wolfram "El repositorio de funciones de Wolfram: lanzamiento de una plataforma abierta para extender el lenguaje Wolfram" .

Requisitos previos de Wolfram Language
Hoy, estamos al borde de grandes logros con Wolfram Language . Hace solo tres semanas, lanzamos el motor Wolfram gratuito para desarrolladores para ayudar a nuestros usuarios a integrar Wolfram Language en sus proyectos de software a gran escala. Es hoy cuando lanzamos el repositorio de funciones Wolfram para proporcionar una plataforma coordinada para las funciones creadas para expandir el lenguaje Wolfram, y también abrimos el repositorio de funciones para cualquier persona que pueda contribuir al desarrollo de nuestro producto de software.
Wolfram Function Repository es lo que se hizo posible gracias a las características únicas del Wolfram Language, no solo como lenguaje de programación, sino también como un lenguaje computacional completo . En los lenguajes de programación tradicionales, la adición de nuevas características significativas generalmente implica la creación de bibliotecas adicionales completas que pueden o no funcionar cuando se comparten. Sin embargo, en Wolfram Language, ya se ha incorporado tanto en el lenguaje en sí que es posible expandir significativamente su funcionalidad simplemente agregando nuevas funciones que se integran de inmediato en toda la estructura de todo el idioma.
Por ejemplo, ahora en el repositorio de funciones Wolfram contiene 532 nuevas funciones estructuradas en 26 categorías temáticas:

De manera similar a más de 6000 funciones estándar integradas en el lenguaje Wolfram, cada función del repositorio tiene una página de documentación con una descripción detallada y ejemplos de trabajo:

Para ir a la página, copie el objeto anterior (BLOB funcional), péguelo en la línea de entrada y luego ejecute la función; ya está integrado en el lenguaje Wolfram y es compatible de forma predeterminada, a partir de la versión 12.0 :

Cabe señalar aquí que al procesar LogoQRCode no es necesario, por ejemplo, configurar una "biblioteca para el procesamiento de imágenes", como en Wolfram Language ya hemos implementado una forma consistente y completamente algoritmizada de procesar imágenes que pueden procesarse inmediatamente con varias funciones gráficas del lenguaje:

Espero que con el apoyo de una comunidad maravillosa y talentosa que esté creciendo y expandiéndose (basada en Wolfram Language) en las últimas décadas. En el futuro previsible, el repositorio de funciones Wolfram ampliará significativamente la gama de funciones (posiblemente potencialmente significativas, especializadas en diversos campos de la ciencia y la tecnología) disponibles en el idioma. Por lo tanto, es posible usar tanto el contenido del lenguaje (sus funciones integradas) como los principios de desarrollo que se implementan en función del lenguaje. (Cabe señalar aquí que Wolfram Language ya tiene más de 30 años de historia de desarrollo y crecimiento estable ).
Dentro de las funciones del repositorio puede haber fragmentos de código pequeños o bastante voluminosos escritos en Wolfram Language. Por ejemplo, pueden ser llamadas a servicios y API externos o bibliotecas externas en otros idiomas . Una característica única de este enfoque es que cuando cambie a la funcionalidad a nivel de usuario, no habrá posibles inconsistencias debido al hecho de que este enfoque se basa en la estructura acordada de Wolfram Language, y cada función funcionará automáticamente correctamente, exactamente como y debe ser
El shell y la estructura del programa del repositorio de funciones Wolfram están configurados de tal manera que todos puedan contribuir a la causa común de la manera más simple y conveniente para él, de hecho, simplemente llenando el archivo de texto del bloc de notas (con la extensión nb) WL . Las funciones automáticas incorporadas le permiten verificar las nuevas funciones agregadas al repositorio para garantizar su integración en el idioma. Nuestra empresa cuenta con una amplia gama de usuarios que pueden integrar sus funciones en el idioma, y no con las grandes dificultades de las nuevas funciones, y aunque el proceso de verificación se implementa aquí, no insistimos en algo como un análisis minucioso del diseño o estándares estrictos para la integridad y confiabilidad de los nuevos funciones de usuario, en contraste con comprobaciones más exhaustivas de funciones integradas en el núcleo del lenguaje que utilizamos.
Hay muchos compromisos y detalles en este enfoque, pero nuestro objetivo es optimizar el repositorio de funciones de Wolfram tanto para la conveniencia de los usuarios como para que las nuevas funciones de los usuarios hagan una contribución tangible al desarrollo del lenguaje. A medida que crezca, no tengo dudas de que tendremos que inventar nuevos métodos para procesar y verificar las funciones integradas en el repositorio, y esto no es menos importante para organizar una gran cantidad de funciones y buscar las que los usuarios necesitan. Sin embargo, no puede dejar de asegurar que el camino que hemos elegido es un buen comienzo. Personalmente agregué varias características a la base original. Muchos de ellos se basan en el código que desarrollé personalmente durante bastante tiempo. Y pasé solo unos minutos para reenviarlos al repositorio. Ahora que están en el repositorio, finalmente puedo, de forma inmediata y en cualquier momento, usar estas funciones según sea necesario, sin preocuparme de encontrar archivos, descargar paquetes, etc.
Aumente la eficiencia mientras reduce los costos.
Incluso antes de la llegada de Internet, había formas de intercambiar el código de Wolfram Language (nuestro primer proyecto centralizado importante fue MathSource , creado para Mathematica en 1991 sobre la base de un CD-ROM, etc.). Por supuesto, el enfoque propuesto basado en el repositorio de funciones Wolfram es una herramienta más poderosa y confiable para implementar las tareas anteriores.
Durante más de 30 años, nuestra empresa ha trabajado arduamente para mantener la integridad de la estructura del lenguaje Wolfram, y esto es muy importante para que el lenguaje Wolfram se convierta no solo en un lenguaje de programación, sino también en un lenguaje computacional completo . Y por lo tanto, la esencia del enfoque para la implementación del repositorio de funciones Wolfram es el uso de un enfoque único para la programación y el desarrollo de nuevas funciones que se agregan secuencialmente y se ajustan al marco del lenguaje para la posibilidad de su desarrollo y evolución conjunta.
En la estructura de la implementación de cada función, ocurren varios procesos computacionales. Cabe señalar aquí que es necesario que el usuario tenga un aspecto claro y uniforme y una legibilidad clara. En este contexto, las funciones integradas de Wolfram Language proporcionan más de 6,000 ejemplos consecutivos de cómo programar correctamente las funciones (estas son nuestras revisiones de programación de video en vivo que incluyen cientos de horas de creación de procesos de programación típicos ). En última instancia, este enfoque le permite hacer que el repositorio de funciones de Wolfram sea capaz de realizar un buen trabajo, es decir, la naturaleza estructural del lenguaje Wolfram Language con su gran cantidad de bibliotecas adicionales y diversas que ya están integradas en el lenguaje. Por ejemplo, si tiene una función que procesa imágenes, matrices dispersas o estructuras moleculares , así como datos geográficos u otros, el lenguaje ya tiene una representación simbólica consistente de ellos y, gracias a esto, su función se vuelve inmediatamente compatible con otras funciones. en el idioma
Crear un repositorio que funcione realmente bien es una tarea interesante de metaprogramación. Por ejemplo, un exceso de restricciones en el programa no podrá obtener la unificación requerida y la universalidad del algoritmo. Al igual que con un número insuficiente de limitaciones funcionales, no puede implementar una secuencia de ejecución de algoritmo suficientemente correcta. Algunos ejemplos anteriores del compromiso entre estos enfoques implementados por nuestra compañía han funcionado de manera bastante estable: estos son: el Proyecto de demostración Wolfram , lanzado en 2007 y ahora trabajando de manera interactiva en Internet y que contiene más de 12,000 demostraciones interactivas para usuarios. La base de datos Wolfram tiene más de 600 bases de datos listas para usar que se pueden usar en el idioma Wolfram Language, y el almacenamiento de la red neuronal Wolfram se actualiza con nuevas redes neuronales casi todas las semanas (hay 118 de ellas ahora) y se conectan inmediatamente a través de la función NetModel en el idioma Wolfram Language.
Todos los ejemplos anteriores tienen una característica fundamental: los objetos y funciones recopilados en el proyecto tienen un grado muy alto de estructuración y distribución de procesos. Por supuesto, la granularidad de la estructura de lo que es una demostración o una red neuronal o algo más puede variar mucho, pero la estructura fundamental para cualquier repositorio actual siempre permanece sin cambios. Entonces, ¿cuál es su opinión, querido usuario, sobre la creación de un repositorio que agregue extensiones al lenguaje Wolfram? Wolfram Language está diseñado para ser extremadamente flexible, por lo que puede expandirse y modificarse de cualquier manera. Esta circunstancia es extremadamente importante para la capacidad de crear rápidamente varios proyectos de software a gran escala en Wolfram Language. Cabe señalar que con el aumento de la flexibilidad del idioma, el costo de los proyectos implementados en dicho idioma aumentará inevitablemente. Esto se debe al hecho de que cuanto más usa el usuario un lenguaje de este tipo, más obtiene la funcionalidad asignada, pero no debemos olvidar que este enfoque puede tener lados negativos en términos de la incapacidad para garantizar la coherencia constante de los módulos del programa.
En los lenguajes de programación tradicionales, hay un problema común con las bibliotecas: si, por ejemplo, usa una biblioteca, el código funciona correctamente, pero si intenta usar varias bibliotecas, no hay garantía de que interactúen correctamente entre sí. Además, en los lenguajes de programación tradicionales, a diferencia de un lenguaje informático completo, no hay forma de garantizar la presencia de representaciones integradas consistentes para cualquier función o tipo de datos que no sean sus estructuras básicas. Pero, de hecho, el problema es aún mayor de lo que parece a primera vista: si alguien está construyendo una vertical de funcionalidad a gran escala, sin los enormes costos de la programación centralizada del proyecto que hemos invertido en el lenguaje Wolfram, es imposible lograr consistencia. Por lo tanto, es importante que todos los módulos del programa siempre funcionen correctamente juntos.
Por lo tanto, la idea del repositorio de funciones de Wolfram es evitar el problema mencionado anteriormente: simplemente agregar extensiones al lenguaje en forma de elementos relativamente pequeños de código de programa a través de funciones separadas, cuyo desarrollo en forma de módulos coordinados es una tarea más fácil. Al mismo tiempo, hay características de programación que no pueden ser convenientes con la ayuda de funciones individuales (y nuestra compañía lanzará un algoritmo de software optimizado en un futuro próximo para ayudar a implementar paquetes de software a gran escala). Sin embargo, en función de las funciones ya integradas en Wolfram Language, hay muchas opciones de programación que se implementan en función de funciones individuales. La idea aquí es que, con esfuerzos relativamente pequeños del programa, sería posible crear una serie de funciones nuevas y muy útiles que aseguren una coherencia suficiente del proyecto, mientras que estarán bien coordinadas entre sí y, además, serán capaces de ampliamente utilizado en el idioma más adelante.
Este enfoque, por supuesto, es un compromiso. Con la implementación de un paquete más grande, puede imaginar un mundo completamente nuevo de funcionalidad que se volverá extremadamente poderoso y útil. Si existe la necesidad de obtener nuevas funcionalidades que encajen en todo lo demás, pero al mismo tiempo no está listo para gastar grandes esfuerzos en el desarrollo del proyecto, esto, desafortunadamente, puede conducir a una disminución en la escala de su proyecto. La idea del repositorio de funciones de Wolfram es proporcionar funcionalidad a la parte definitoria del proyecto, este enfoque agregará una funcionalidad poderosa, al tiempo que simplifica el mantenimiento de una buena consistencia del proyecto de programación.
Ayuda para agregar funciones personalizadas al repositorio de funciones
Los especialistas de nuestra compañía trabajaron arduamente para que su contribución a las funciones del repositorio de Wolfram sea lo suficientemente fácil para los usuarios. En el escritorio (ya en la versión 12.0 ), simplemente puede ir secuencialmente a través de las pestañas del menú principal: Archivo> Nuevo> Elemento de repositorio> Elemento del repositorio de funciones y obtendrá un " Cuaderno de definición " (programáticamente dentro del entorno de trabajo. También puede usar la función analógica - CreateNotebook [ "FunctionResource" ] ):

Hay dos acciones principales que deberá realizar: en primer lugar, escribir el código de su función y, en segundo lugar, escribir documentación que ilustre cómo debería funcionar su función.
Haga clic en el botón "Abrir muestra" en la parte superior para ver un ejemplo de lo que debe hacer:

De hecho, está intentando crear algo similar a una función incorporada en Wolfram Language. Excepto que puede hacer algo mucho más específico que una función en línea. Además, las expectativas con respecto a su integridad y confiabilidad serán mucho más bajas.
Debe proporcionar un nombre para su función que siga las pautas de nomenclatura de la función Wolfram Language. Además, deberá desarrollar documentación para su función, similar a las funciones de lenguaje integradas. Discutiré esto con más detalle más adelante. Ahora solo preste atención al hecho de que en la fila de botones en la parte superior del archivo del cuaderno de definición hay un botón de " Guía de estilo" que explica qué hacer, y un botón de "Herramientas" que proporciona herramientas para formatear la documentación de su función.
Cuando esté seguro de que todo se ha completado correctamente y está listo, haga clic en el botón "Verificar". Es perfectamente normal que aún no haya descubierto todos los detalles. Por lo tanto, la función Comprobar se ejecutará automáticamente y realizará muchas comprobaciones de estilo y coherencia. A menudo, ella le solicitará de inmediato que confirme y acepte las correcciones (por ejemplo: "Esta línea debe terminar con dos puntos", y le ofrecerá ingresar dos puntos). A veces ella te pide que agregues o cambies algo tú mismo. Constantemente agregaremos nuevas funciones a la funcionalidad automática del botón "Verificar", pero su objetivo principal es garantizar que todo lo que envíe al repositorio de funciones ya coincida exactamente con la mayor cantidad posible de recomendaciones de estilo.

Entonces, después de ejecutar "Verificar", puede usar "Vista previa". "Vista previa" crea una vista previa de la página de documentación que definió para su función. También puede crear una vista previa para un archivo creado en su computadora o para un archivo ubicado en el almacenamiento en la nube. Si por alguna razón no está satisfecho con lo que ve en la vista previa, simplemente regrese y realice las correcciones necesarias, y luego haga clic nuevamente en el botón Vista previa.
Ahora está listo para colocar su función en el repositorio. El botón Implementar le brinda cuatro opciones:

En este paso, es importante que pueda enviar su función al repositorio de funciones de Wolfram para que esté disponible para cualquier usuario. Al mismo tiempo, también puede colocar su función para un número limitado de usuarios. Por ejemplo, puede crear una función localmente localizada en su computadora para que esté disponible cuando use esta computadora en particular. O puede colocarlo en su cuenta en la nube para que esté disponible cuando esté conectado a la nube. También puede colocar (implementar) públicamente una función a través de su cuenta en la nube. Sin embargo, no estará en el repositorio de funciones central de Wolfram, pero puede darle a alguien una URL que le permitirá obtener su función de su cuenta. (En el futuro, también daremos soporte a repositorios centrales en toda nuestra empresa).
Entonces, supongamos que desea transferir su función a la base de conocimiento de la función Wolfram. Para hacer esto, haga clic en el botón "Enviar" al repositorio. Entonces, ¿qué está pasando en este momento? Su solicitud ingresa inmediatamente a la cola para su consideración y aprobación por parte de nuestro equipo especial de curadores.
A medida que su solicitud pasa por el proceso de aprobación (que generalmente toma varios días), recibirá mensajes sobre el estado de su consideración, así como, posiblemente, propuestas para su uso posterior. , Wolfram . ( . .)
?
, , , 6000+ , Wolfram 30 . Wolfram , , Wolfram Language, ( ).
, Wolfram Wolfram Language — , . .
Wolfram, , . Wolfram , , - , . , SendMailFromNotebook . PolygonalDiagram . .
, , , , . , , .
, , , , — Wolfram — , , .
. , . , , API, , . nb ( « ») , , VerificationTest , . , ( , , , ).
. , , . , ? , , , , . , , , , .
( ) , . , Wolfram Data . , ?
. , , . .
, , , Wolfram Language, ? Wolfram Language , UpValues . ( , ), . ( , Wolfram Language, — , , , , , , ).
, ? , Wolfram Language , ( , , ) . : API, Wolfram Cloud , . , , . , , API , . ( «») , Wolfram Language. (, , — , .)
Wolfram Wolfram? , API Wolfram, . , , , Wolfram. ( ExternalEvaluate ExternalFunction Wolfram.)
? , Wolfram Language . , Wolfram Language , . , , . ., Wolfram Language. ( , , ).
, , , , - , , . Wolfram Language, , , , , « » , .
«»
, , Wolfram! - ( ), . , , , .
, , — — . , . ( Wolfram Enterprise , , .)
, Wolfram, ; . «» Unix — « » « », , . ., . , , , .
: « » « Wolfram ». (, ), , , , .
Wolfram, , . « », «». , , . . . , , , , , , .
Git , , , . ( ), , , , .
, «» . , , ( , ). , , . , ResourceUpdate . (« BLOB-» , .)
Wolfram , Wolfram Language . , « » (, ).
, ResourceFunction [ ... ] . , Wolfram Engine, , IDE (c , Free Wolfram Engine ).
Como funciona
Wolfram , ( , Neural Net Repository , ..), Wolfram, ResourceFunction ResourceObject .
ResourceFunction :

, Information :

¿Cómo funciona la configuración de una función de recurso? El más simple es un caso puramente local. Aquí hay un ejemplo que toma una función (en este caso, solo una función pura) y la define como una función de recurso para una sesión determinada en el programa:

Después de haber hecho la definición, puede usar la función de recurso:

Tenga en cuenta que hay un icono negro en este blob de funciones.
. Esto significa que una función BLOB se refiere a una función de recurso en la memoria definida para la sesión actual. Para la función de recursos, que se almacena constantemente en su computadora o en una cuenta en la nube, hay un icono gris
. Y para la función de recursos oficial en el repositorio de funciones de Wolfram hay un icono naranja
.
Entonces, ¿qué sucede cuando usa el menú Implementar en el cuaderno de definición? En primer lugar, toma todas las definiciones en el bloc de notas y de ellas crea un ResourceObject simbólico). (Y si utiliza un IDE o programa de texto, también puede crear explícitamente un ResourceObject )
La implementación local de la función desde el repositorio en su computadora se realiza utilizando el comando LocalCache para el objeto de recurso con el fin de guardarlo como LocalObject en su sistema de archivos. La implementación en la cuenta de la nube se realiza mediante el comando CloudDeploy para el objeto de recurso, y la implementación pública en la nube se realiza mediante CloudPublish . En todos los casos, ResourceRegister también se utiliza para registrar el nombre de la función de recurso, de modo que la Función de recurso [ "nombre" ] funcionará.
Si hace clic en el botón Enviar para el Repositorio de funciones, lo que sucede debajo de ResourceSubmit se llama en el objeto de recurso. (Y si usa una interfaz de entrada de texto, también puede llamar a ResourceSubmit directamente).
Por defecto, el envío se realiza con el nombre asociado con su ID de Wolfram. Pero si envía una solicitud en nombre de un grupo u organización de desarrollo, puede establecer un identificador de editor separado y utilizarlo como un nombre para interactuar con sus envíos.
Después de haber enviado cualquiera de sus funciones a la base de conocimiento de funciones, entrará en la cola para su verificación. Si recibe comentarios en respuesta, generalmente tendrán la forma de un archivo de texto con "celdas de comentarios" adicionales agregadas. Siempre puede verificar el estado de su aplicación yendo al portal del participante del sistema de recursos . Pero tan pronto como se apruebe su función, se le notificará (por correo electrónico) y su función se colocará en el repositorio de funciones de Wolfram.
Algunas sutilezas en el trabajo.
A primera vista, puede tener la impresión de que simplemente puede tomar el cuaderno de definición y colocarlo literalmente en el repositorio de funciones, sin embargo, de hecho, hay bastantes sutilezas, y para procesarlas, debe realizar una metaprogramación bastante compleja, procesamiento de caracteres como código que define la función y la definición del Bloc de notas en sí. La mayor parte de esto ocurre internamente, es decir, "detrás de escena", pero esto puede tener algunas consecuencias que vale la pena entender si va a contribuir a la base de conocimientos de las funciones.
Primera sutileza inmediata: cuando complete el Bloc de notas de definición, simplemente puede hacer referencia a su función en todas partes, utilizando un nombre como MyFunction , que parece un nombre normal para una función en Wolfram Language, pero para la documentación del repositorio de funciones, esto se reemplaza por ResourceFunction [ "MyFunction " ] : esto es exactamente lo que los usuarios utilizarán realmente cuando trabajen con la función.
La segunda sutileza: cuando crea una función de recurso desde el Bloc de notas de definición, todas las dependencias involucradas en la definición de la función deben ser reparadas e incluidas explícitamente. Sin embargo, para garantizar que las definiciones sigan siendo modulares, debe colocar todo en un espacio de nombres único. (Por supuesto, las funciones que hacen todo esto están en el repositorio de funciones).
Por lo general, nunca verá rastros del código utilizado para configurar este espacio de nombres. Pero si por alguna razón llama a un símbolo poco ejecutado dentro de su función, verá que este símbolo está en el contexto interno de la función. Sin embargo, al procesar las definiciones del Bloc de notas, al menos el carácter correspondiente a la función en sí está configurado para mostrarse mejor como un BLOB funcional en lugar de un carácter sin formato en el contexto interno.
El repositorio de funciones está destinado a definir nuevas funciones. Y estas funciones pueden tener opciones. A menudo, estos parámetros (por ejemplo, Method o ImageSize ) podrán usarse para funciones integradas, así como para aquellas para las que ya existen caracteres incorporados. Pero a veces las nuevas características pueden requerir nuevas opciones. Para preservar la modularidad, es necesario que estos parámetros sean símbolos definidos en un contexto interno único (o algo así como funciones completas de recursos, es decir, por sí mismos). Para simplificar, el repositorio de funciones le permite establecer nuevas opciones en las definiciones como cadenas. Y para la conveniencia del usuario, estas definiciones (siempre que usen OptionValue y OptionsPattern ) también se procesan para que cuando se usan funciones, los parámetros se puedan establecer no solo como cadenas, sino también como caracteres globales con los mismos nombres.
La mayoría de las funciones simplemente hacen lo que deben hacer cada vez que se las llama, pero algunas funciones deben inicializarse antes de que puedan funcionar en una sesión en particular, y para resolver este problema, hay una sección llamada Inicialización en la sección Definición.
Las funciones del repositorio pueden usar otras funciones que ya están en el repositorio, para configurar las definiciones para el repositorio de funciones que incluyen dos (o más) funciones que se refieren entre sí, debe expandirlas en su sesión con el programa para que pueda consultar en ellos como ResourceFunction [ "nombre" ] , puede crear las combinaciones de estas funciones que necesita como ejemplos (no lo entendí) y agregar una nueva función al repositorio basada en las ya ubicadas. (o ya o antes - ambas palabras son torpes)
Perspectivas de desarrollo. ¿Qué debería pasar cuando el repositorio se vuelve realmente grande?
Hoy solo estamos lanzando el repositorio de funciones Wolfram, pero con el tiempo esperamos que (elimine) su volumen y funcionalidad pueda aumentar drásticamente, y a medida que crece, surgirán varios problemas que, como ya suponemos, pueden surgir.
El primer problema se refiere a los nombres de las funciones y su singularidad. El repositorio de funciones está diseñado de tal manera que en él, como para las funciones integradas en Wolfram Language, puede referirse a cualquier función dada simplemente especificando su nombre. Pero esto inevitablemente significa que los nombres de las funciones deben ser globalmente únicos en todo el repositorio, de modo que, por ejemplo, solo puede haber una Función de recurso [ "MyFavoriteFunction" ] en el repositorio.
A primera vista, esto puede parecer un gran problema, pero debe comprender que es básicamente el mismo problema que para dominios de Internet o marcadores de redes sociales. Y el hecho es que en el sistema simplemente es necesario tener un registrador, y este es uno de los roles que nuestra compañía desempeñará para la base de conocimiento de funciones de Wolfram. (Para las versiones privadas del repositorio, los administradores pueden ser sus registradores). Por supuesto, el dominio de Internet puede registrarse sin tener nada en él, pero en el repositorio de funciones el nombre de la función solo puede registrarse si hay una definición real de la función.
Parte de nuestro rol en la administración de la Base de conocimiento de Wolfram Functions es asegurarnos de que el nombre que seleccione para la función sea coherente con la definición de la función y que cumpla con las convenciones de nomenclatura de Wolfram Language. Tenemos más de 30 años de experiencia en nombrar funciones integradas en Wolfram Language, y nuestro equipo de curación (¿curadores?) También transferirá esta experiencia al repositorio de funciones. Por supuesto, siempre hay excepciones. Por ejemplo, puede parecer preferible tener un nombre corto para alguna función, pero es mejor "defender" con un nombre más largo y más específico, porque es menos probable que alguien quiera crear un nombre de función similar en el futuro.
(Cabe señalar aquí que simplemente agregar una etiqueta de participante para eliminar la ambigüedad de las funciones no traerá el efecto esperado. Porque si no insiste en asignar siempre una etiqueta, deberá definir una etiqueta predeterminada para cualquier función determinada, así como resaltar etiquetas de autor, que nuevamente requerirán coordinación global).
A medida que crece la base de conocimiento de Wolfram Functions, uno de los problemas que probablemente surja es la capacidad de detección de funciones, para esto la función de búsqueda se proporciona en el sistema (y los archivos de definición pueden incluir palabras clave, etc.). Para las funciones integradas en Wolfram Language, la documentación tiene todo tipo de referencias cruzadas que ayudan a "anunciar" las funciones. Las funciones en un repositorio de funciones pueden hacer referencia a funciones integradas. ¿Pero qué pasa al revés? Para hacer esto, vamos a experimentar con varios esquemas para presentar funciones de repositorio en las páginas de documentación para funciones incorporadas.
Para las funciones integradas en Wolfram Language, existe un llamado nivel de detección proporcionado por una red de "páginas de ayuda" que proporcionan listas organizadas de funciones relacionadas con áreas específicas. Siempre es difícil equilibrar adecuadamente las páginas de manual, y a medida que Wolfram crece, las páginas de manual a menudo deben reorganizarse por completo. Es bastante simple poner las funciones del repositorio en categorías amplias e incluso desglosarlas secuencialmente, pero es mucho más valioso tener páginas de manual de idiomas correctamente organizadas. Todavía no está claro cuál es la mejor manera de crearlos para toda la base de conocimiento de funciones. Por ejemplo, CreateResourceObjectGallery en el repositorio de funciones, todos pueden colocar una página web que contenga sus "opciones" del repositorio:

El repositorio de funciones de Wolfram está configurado como un repositorio permanente de funciones, donde cualquier función siempre funcionará. Por supuesto, pueden aparecer nuevas versiones de funciones, y esperamos que algunas funciones se vuelvan obsoletas con el tiempo. Las funciones funcionarán si se usan en programas, pero sus páginas de documentación se vincularán a funciones nuevas y más avanzadas.
Wolfram Feature Repository está diseñado para obtener rápidamente nuevas funciones y explorar nuevos usos para el lenguaje Wolfram. Con mucho optimismo, esperamos que parte de lo que se ha investigado en el repositorio de funciones finalmente tenga sentido para convertirse en partes integradas del lenguaje principal de Wolfram Language. Durante la última década, tuvimos un conjunto similar de características que se introdujeron originalmente en Wolfram | Alfa Y una de las lecciones aprendidas de esta experiencia es que se necesita mucho trabajo, que a menudo es más difícil que el esfuerzo inicial, para lograr los estándares de calidad y consistencia en los que nos enfocamos, que todo está integrado en el lenguaje Wolfram. presentando ideas. Pero incluso en este caso, una función en la base de conocimiento de funciones puede servir como una prueba muy útil del concepto de una función futura, que al final puede incorporarse al lenguaje Wolfram.
Lo más importante aquí es que la función en el repositorio de funciones es lo que está disponible para cada usuario para usar en este momento. La función de lenguaje incorporada puede ser mucho mejor y más productiva, pero el repositorio de funciones permitirá a los usuarios acceder de inmediato a todas las nuevas funciones. Y, lo más importante, este concepto permite a todos agregar cualquiera de sus nuevas funciones.
Anteriormente, en la historia del lenguaje Wolfram, esta idea no hubiera funcionado tan bien como lo es ahora, pero en esta etapa ya se ha puesto tanto esfuerzo en el lenguaje, así como una comprensión tan profunda de los principios del diseño del lenguaje que ahora parece muy posible que una gran comunidad de usuarios agregue funciones que Mantenga la coherencia del proyecto para que sean útiles para una amplia gama de usuarios.
La comunidad de usuarios de Wolfram Language tiene un increíble espíritu de talento (?). (Por supuesto, esta comunidad incluye muchos expertos líderes en I + D en una amplia gama de campos). Espero que Wolfram Feature Repository proporcione una plataforma eficaz para liberar y difundir este espíritu de talento. Solo juntos podemos crear algo que expandirá significativamente el área a la que se puede aplicar el paradigma computacional Wolfram.
Durante más de 30 años hemos recorrido un largo camino en el idioma Wolfram. Ahora juntos, vayamos aún más lejos. Insto a todos los usuarios respetados de Wolfram en todo el mundo a usar un repositorio funcional, así como un nuevo proyecto de software como Free Wolfram Engine para desarrolladores como plataforma para esto.