> В конце концов, нужно различать собственно язык > программирования и его реализацию. Если очень уж хочется > добиться чего-то конкретно, берешь готовый ЯП с наработанными > уже для него библиотеками и пишешь другую РЕАЛИЗАЦИЮ, > как это делают любители CLisp, Scheme, CAML, SML и прочих > "Паскалей" и "С". > Языков, на уровне парадигм и спецификаций не противоречащих целям, > практически любым, найти можно полно.В Scheme dynamic latent typing реализацией не исправишь. Нужно делать другой язык, который уже неможно будет называть Scheme. SML требует чрезвычайно умных компиляторов, с dataflow analysis и прочими штуками на грани современных технологий для реализации свойства языка principal typing property - кроме пары исключений, типы _всегда_(а не "в большинстве случаев") можно вывести при type omitting. У Caml рантайм вполне большой и сложный, не такой, как у C++, но и с C не сравнить. Он такой не потому что авторы языка не умеют писать компиляторы, а потому что сильно проще не получится, таковы архитектурные решения языка, влекущие за собой решения в реализации. "Паскали" и "Си" - попробуйте на них написать квиксорт, который умеет оперировать с разными типами и принимает разные функции сравнения для этих типов. Это простейшая задача, в Си она решается за счет указателей на воид, фактически, в обход тайпчекера. Проверка корректности таких обобщенных операций целиком ложится на программиста. Хотя это можно делать компилятором. В шестидесятых было нельзя, сейчас часто - можно. В паскале Вирта написание такого обобщенного квиксорта невозможно - нет подходящих средств в языке. Так и со всеми другими языками. Фактически, подходят в нишу только C, C++, ATS, D, Go, Rust, BitC. Если сузить нишу, то C, Rust, BitC.
|