2010-06-01 20 views
7

Estoy diseñando un lenguaje de programación, puramente por diversión, y quiero agregar tantas características experimentales como pueda, solo para hacer que la programación sea algo completamente diferente, y no de una mala manera como Brainf * ck o Malbolge.¿Qué características teóricas y/o experimentales de lenguaje de programación existen?

Sin embargo, parece que soy bastante malo en encontrar nuevas cosas para él, pero estoy seguro de que hay un montón de cosas que se han hablado pero que nunca se han probado.

  • ¿Qué características de lenguaje experimental o conceptos no implementados en los principales lenguajes existen en este momento?

E.g: Si le pregunté esto en, digamos, 1960, una respuesta podría ser "programación orientada a objetos".

Estoy seguro de que hay muchas ideas no implementadas que los científicos de la computación (recientemente) han presentado, al menos me lo han dicho.

Respuesta

2

DWIMNWIS (Haz lo que quiero decir, no lo que digo).

Más en serio, una característica absolutamente genial (que sería muy difícil o imposible de implementar) sería la capacidad de un programa de idioma para no contener problemas de simultaneidad.

En cuanto a las características DEBE TENER, diría lambdas y First-class functions. No es exactamente nuevo ni teórico (cuántos años tiene Lisp este año) pero es poderoso y falta en muchos idiomas.

+0

Ya lo han hecho, creo que en COBOL, ¿verdad? Oh, no importa –

+0

En estos días ya no hay muchos idiomas que no tengan lambdas y funciones de orden superior. – sepp2k

+0

+1 para DWIMNWIS –

4

Un área actual de investigación es dependent types. Todavía hay muchas cosas que puedes hacer con ellos, eso aún no se ha hecho.

+0

Un sistema de tipo dependiente completo tiene dos problemas principales: tanto la inferencia de tipo como la comprobación de tipo son indecidibles y, por lo tanto, pueden no detenerse. –

+0

@JonPurdy: tanto Coq como Agda tienen tipos dependientes, pero ninguno de los dos problemas menciona. – Blaisorblade

0

leer ACM y publicaciones de IEEE para las ideas de investigación

0

He aquí una idea; y si alguien lo escribe, ¡debe darme crédito por derechos de autor! Construido automáticamente en plantillas de matriz arbitrarias tales que estas matrices no son tipos matemáticos sino más bien de tipo de almacenamiento o estructura. Dependiendo de los parámetros de la plantilla, estas matrices pueden ser tan simples como un valor escalar o tan complejo como una entidad dimensional casi infinita en teoría si la computadora lo permitiera sin quedarse sin memoria, pero en la práctica esto se limitaría a la arquitectura, sistema operativo y compiladores detalles intrínsecos del tamaño de su entero o tipo integral. Entonces uno puede tener una matriz volumétrica de baja dimensión que tiene 3 Dimensiones pero se queda sin memoria porque podría verse así: Matrix<type, 1000000000,1000000000,1000000000> matOutOfBounds antes que una matriz dimensional mucho más alta como Matrix<type, 2,2,2,2,2,2,2,2> que sería una matriz volumétrica 8D. La simplificación se puede hacer si son "matrices perfectas". Ahí es donde cada dimensión tiene la misma cantidad exacta de elementos, independientemente de la cantidad de dimensiones que tengan. Por ejemplo: <3,3><3,3,3><3,3,3,3> son todas matrices perfectas. La simplificación sería Matrix<type, 4^4> igual que Matrix<type, 4,4,4,4> dando una Matriz volumétrica 4D 4x4x4x4 con 96 elementos en una estructura 4D. Donde `Matrix sería una matriz volumétrica tridimensional con muchos elementos, pero tiene una estructura volumétrica tridimensional ya que nuestros relojes y brújulas actuales funcionan de forma tal que 360 ​​grados al círculo completo, 60 minutos, 60 segundos, excepto que hay muchos elementos de almacenamiento de flotadores.

A continuación se verá como una posible biblioteca de C++ que alguien incluiría en sus proyectos; pero la idea aquí es hacerlo un tipo de lenguaje integrado. Entonces cualquiera con su lenguaje y compilador puede usarlos a voluntad.Se pueden utilizar estos con cualquier número de dimensiones, como lo retrata esta plantilla:

// Header Declaration 
template<typename ClassType, unsigned int...> 
matrix{ 
}; // No need to show body just declaration for concept 

// User Code Would Be 
matrix<float,2,3,4,5,7> mat; // This would create a 2x3x4x5x7 matrix that is a 5th dimensional volumetric matrix 

// Default type 
matrix<int> mat2; // This creates a 1x1 matrix that would in essence be a scalar. 

Ahora lo que he mostrado es actual sintaxis de C++ para las plantillas variadic. ¡La idea aquí sería que este tipo de contenedores de matriz se construirían en tipos!

¿Quieres hacerlos matemáticos? Claro que está bien, pero el usuario tendría que definir sus propios "algoritmos, métodos, funciones o rutinas" para hacerlo.

La razón por la que tendrían que ser definido de forma independiente es hacer a esta razón:

mat<float, 3,3,3> mat1; 3x3x3 3D Volumetric Matrix - 27 elements 
mat<float, 5,5> mat2; 5x5 2D Linear-Quadratic (Area) Matrix - 25 elements 
mat<int, 6,7,8> mat3; 6x7x8 3D Volumetric Matrix - 336 elements 

mat<bool, 8>  mat4; 1x8 1D Linear Matrix (Array); transpose? 
        mat4::transpose; // built in - now 8x1 matrix 
        mat4::transpose; // back to 1x8. 

class TheMotherLoad {// Many members and methods }; 
// ... 
mat<TheMotherLoad*, 9,9,9,9,9,9,9,9,9> mat9; 
// simplified version 
mat<TheMotherLoad*, 9^9> mat9 
// A 9 Dimensional Volumetric container So the first the would be a Cube 
// with its sides having a length of 9 cells where the Volume 9^3 is the 
// First Order of what a Volumetric Matrix is. 
// Anything less is linear or quadratic either it being a scalar, 
// translation, an array, a line, a point, a vector, rotation, quadratic and area) 
// Now that we have a cube that has 729 elements and the next 
// three 9s which are the 4th, 5th & 6th dimensions would act as another 
// 9x9x9 matrix surrounding the first 3 dimensions respectively. 
// Finally the 7th, 8th & 9th dimensions defines the "outer matrix" 
// that also has "9x9x9" elements. So in total the number of elements 
// in this matrix would be 729^3 and for every 

Debido a las propiedades de la forma en matrices son es lo que determina lo que el tipo de operaciones matemáticas que se puede hacer a ellos para esto tiene que ser hecho externamente.

Cuestiones relacionadas