Моя задумка (рабочего прототипа пока нет) - декларативный (чистый функциональный) язык с явной динамической типизацией, взаимно однозначно транслируется в байт-код. Языков с явной динамической типизацией ещё не существует, мой будет первый. Это означает что типы указываются явно, но могут вычисляться в рантайме. Могут быть типы, значением которых является другой тип.
В языке можно выделить статически-типизированное подмножество, когда все типы известны во время компиляции, то есть нет выражений над типами, которые зависят от входных данных программы. Это подмножество хорошо оптимизируется и его можно транслировать в C/C++ и другие языки.
Язык ориентирован на описание структур данных с возможностью создавать как реальные поля, так и статические поля. Одну структуру можно автоматически конвертировать в другую, если у них совпадают имена и логические типы полей. Поскольку размер структуры и типы могут варьироваться на основании значений её полей (которые могут содержать типы), язык позволяет описывать бинарные форматы и протоколы с помощью таких структур.
Байткод представляет собой просто определения типов в бинаре и сами данные, которые хранятся в нём согласно структуре, которые эти типы описывают. То есть это умный бинарный файл, который знает, что в нём лежит. Можно создать программу визуализатор, которая сможет отобразить любой такой бинарный файл независимо от фактической структуры, которую создал пользователь.
Далее в язык добавляются всякие штуки типа map, reduce, filter, recurrence, лямбды, алгоритмы компрессии и хеширования, работы с графами, и мы получаем язык программирования, ориентированный на генерацию и обработку данных. Это ещё не язык общего назначения, но многие задачи как раз-таки сводятся именно к работе с данными. А вот GUI, графику и всякое взаимодействие с железом придётся делать на традиционных языках. Может я потом придумаю, как сделать из этого язык общего назначения, но сначала надо сделать то, что я уже придумал.