2010-06-01 10 views
7

Projektuję język programowania, wyłącznie dla zabawy, i chcę dodać jak najwięcej funkcji eksperymentalnych, jak tylko mogę, aby programowanie w nim było czymś zupełnie innym, i to nie w zły sposób, jak Brainf * ck lub Malbolge.Jakie są teoretyczne i/lub eksperymentalne funkcje programowania języka?

Jednak wydaje mi się, że nie jestem w stanie wymyślić nowych rzeczy, ale jestem pewien, że istnieje mnóstwo rzeczy, o których mówiono, ale nigdy nie wypróbowano.

  • Jakie eksperymentalne funkcje językowe lub koncepcje nie zostały zaimplementowane w popularnych językach?

E.g: Jeśli zapytam to w, powiedzmy, 1960, odpowiedź może brzmieć "Programowanie obiektowe".

Jestem pewien, że istnieje wiele niezmodyfikowanych pomysłów, które naukowcy (ostatnio) wymyślili naukowcy, przynajmniej mi powiedziano.

Odpowiedz

2

DWIMNWIS (Rób co mam na myśli, a nie co mówię).

Co ważniejsze, absolutnie wspaniałą cechą (która byłaby bardzo trudna do zrealizowania) byłaby możliwość udowodnienia, że ​​program języka nie zawiera problemów związanych z współbieżnością.

Jeśli chodzi o funkcje MUST-HAVE, powiedziałbym: lambdas i First-class functions. Niezupełnie nowy lub teoretyczny (ile lat ma Lisp w tym roku), ale mocny i nieobecny w wielu językach.

+0

Oni już to zrobili, w języku COBOL, myślę, że to było? Oh .. nevermind –

+0

Obecnie nie ma już wielu języków, które nie mają lambd i funkcji wyższego rzędu. – sepp2k

+0

+1 dla DWIMNWIS –

4

Jeden z aktualnych obszarów badań to dependent types. Jest jeszcze wiele rzeczy, które możesz zrobić z tymi, co jeszcze nie zostało zrobione.

+0

Pełny system zależny ma dwa poważne problemy: zarówno wnioskowanie typu, jak i sprawdzanie typu są nierozstrzygalne, a zatem mogą nie zostać zatrzymane. –

+0

@JonPurdy: zarówno Coq jak i Agda mają typy zależne, ale nie ma problemu, o którym wspomniałeś. – Blaisorblade

0

czytać ACM i publikacji IEEE pomysłów badawczych

0

Oto pomysł; a jeśli ktoś to napisze, musi mi przyznać prawa autorskie! Automatyczne wbudowane w dowolne matryce szablony takie, że te macierze nie są typami matematycznymi, lecz bardziej typu przechowywania lub struktury. W zależności od parametrów szablonu, te macierze mogą być tak proste, jak wartość skalarna, do tak złożonej, jak niemal nieskończenie wielowymiarowa jednostka w teorii, jeśli komputer mógłby na to pozwolić bez wyczerpania pamięci, ale w praktyce ograniczałoby się to do architektury, systemu operacyjnego i kompiluje wewnętrzne szczegóły dotyczące rozmiaru ich liczby całkowitej lub typu integralnego. Tak więc można mieć niskowolimetryczną matrycę wolumetryczną, która ma 3 wymiary, ale brakuje jej pamięci, ponieważ może wyglądać tak: Matrix<type, 1000000000,1000000000,1000000000> matOutOfBounds zanim matryca wolumetryczna 8D będzie miała matrycę o wiele wyższym wymiarowaniu, taką jak Matrix<type, 2,2,2,2,2,2,2,2>. Uproszczenia można dokonać, jeśli są "idealnymi matrycami". Tam każdy wymiar ma taką samą ilość elementów niezależnie od tego, ile ma wymiarów. Na przykład: <3,3><3,3,3><3,3,3,3> są wszystkie idealne matryce. Uproszczenie będzie miało postać Matrix<type, 4^4>, podobnie jak Matrix<type, 4,4,4,4>, co daje 4x4x4x4 4D Matrycę wolumetryczną z 96 elementów w strukturze 4D. Gdzie `Matrix byłby macierzą wolumetryczną 3D z wieloma elementami, ale ma strukturę wolumetryczną 3D, ponieważ nasze obecne zegary i kompasy działają w zakresie od 360 stopni do pełnego koła, 60 minut, 60 sekund, z tym wyjątkiem, że istnieje wiele elementów pamięciowych elementów pływających.

To poniżej będzie wyglądało jak możliwą bibliotekę C++, którą ktoś umieściłby w swoich projektach; ale idea polega na tym, że jest to typ zbudowany w języku. Wtedy każdy z twoim językiem i kompilatorem może z nich korzystać.Mogą z nich korzystać z dowolnej liczby wymiarów, takich jak to, co przedstawia ten szablon:

// 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. 

Teraz co mam pokazany jest aktualny C++ składni dla zmiennej liczbie argumentów szablonów. Pomysł polega na tym, że tego rodzaju pojemniki matrycowe będą budowane w typach!

Czy chcesz, aby były matematyczne? Pewnie, że to dobrze, ale użytkownik musiałby zdefiniować własne "algorytmy, metody, funkcje lub procedury", aby to zrobić.

Powodem musieliby być definiowane niezależnie to zrobić, aby z tego powodu:

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 

Ze względu na właściwości jak macierze są to co określa co typ operacji matematycznych, które można zrobić z nimi tak to musi być zrobione na zewnątrz.

Powiązane problemy