Ver Mensaje Individual
  #21  
Antiguo 14-10-2018
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por brakaman Ver Mensaje
Yo por lo que he entendido cuando un lenguaje o compilador esta hecho en si mismo, normalmente se hace un pequeño kernel en lenguaje C
Es un camino comun. Pero no es INDISPENSABLE. El que parezca serlo es ppalmente que las comunidad de hacedores de lenguaje es muy pequeña ( y esos hacedores son muy conservadores en su uso de herramientas), y solo en los ultimos años se ha extendido y se hace mas popular la idea de hacer lenguajes.

Se hace en C por inercia, y acceso a ecosistema. Pero puedes arrancar con CUALQUIER lenguaje. El punto es que la implicacion de la imagen no es correcta (aunque se puede argumentar que historicamente fue la sequencia que nos toco. Pero perfectamente pudo haber sido diferente: Lisp pudo haber sido el "c" para hacer lenguajes).

Ahora, para *interpretes* si es mas cierto. Se pueden hacer interpretes metacirculares, en su propio lenguaje, y en un lenguaje mas "arriba", pero para hacerlos eficientes, necesitas hacer un bytecode y tener un lenguaje con la maquinaria de operar eficiente en eso ( y para especificar la estructuras y manipulacion memoria). Si tiene GC, este interfiere con el tema, porque los GC estan ajustados a su lenguaje, asi que si te desvias mucho termina afecto negativamente.


Ahora, esto es puramente por eficiencia. Se puede totalmente hacer un interprete de C en Java y con bytecode, no ser tan lento en su generalidad (solo sufrir en manipulacion intensiva).

P.D: Llevo como 3 años ya leyendo del tema y prototipando lenguajes en varios entornos.

P.D: Si hablamos de que *realmente* hace un lenguaje bueno para hacer lenguajes, tenemos que estas son sus familas/versiones:

Todos los lenguajes con Homoiconicidad (https://es.wikipedia.org/wiki/Homoiconicidad):

- Derivados Lisp, por su enorme facilidad de metaprogramacion
- Forth y derivados, trivial de hacer bootstraping
- ML y derivados: Uso de tipos algebraicos hacen para lenguajes tipados lo que lisp para no tipados: Trivial de operar en AST

Y lenguajes con capacidad de operar en estructuras de "bajo" nivel. C, C+, Pascal, Delphi... pero se puede en C#, Java con extenciones y soportes como

https://github.com/dotnet/roslyn

que operan al nivel del AST y no del lenguaje de alto nivel como tal.

Osea, lo que hace a un lenguaje bueno pa hacer lenguajes? Que permita manipular AST de forma eficiente y natural.
__________________
El malabarista.

Última edición por mamcx fecha: 14-10-2018 a las 02:16:36.
Responder Con Cita