Триада языков программирования

Проверка, можно ли использовать Rust в качестве языка нижнего уровня для сборочного программирования, к сожалению, закончилась отрицательным результатом. Перефразируя анекдот: я не хочу так, как может этот месье. Или более серьезно, программируя на Rust я вынужден больше думать о том, как выразить свою мысль на языке, а не о том, как сделать то, что я делаю.

Так что я снова вынужден заниматься прикладным языкотворчеством, то есть проектировать язык и одновременно делать компилятор, чтобы сразу проверять все решения. Впрочем, компиляторы на базе LLVM писать одно удовольствие, не надо делать кодогенерацию, хотя думать о ней все равно надо.

Поясню, почему я рассматриваю Rust и не рассматривал, например, Go, хотя Go сам по себе очень хорош.

На мой взгляд, если смотреть на создание программ с философского уровня, нам нужна триада языков:

  • язык нижнего уровня (не низкого, а нижнего из трех) – условно системный,
  • язык среднего уровня – условно прикладной
  • и скриптовый язык – язык-клей

Системный – должен требовать мало ресурсов, и, не использовать сборку мусора (типа Rust). Естественно, должен быть очень надежным.

Прикладной, вроде Go.

Про «язык-клей» надо объяснить – два первых языка нужны для разработки компонент, из которых собираются программы. Сборка (изготовление) программ – это не программирование, это другой процесс, как это сейчас и сделано в среде разработке «Вир».

При сборке компоненты надо притирать друг другу, а для этого лучше использовать связки, написанные на простом интерпретируемом языке.

В программе прикладного уровня естественно сочетать языки всех уровней, а значит, они должны быть естественно совместимы. Тем более, если мы рассматриваем распределенные системы и интернет-объекты и уровень «бытового программирования».

Основные сложности в разработке триады совместимых языков находятся на нижнем уровне, выше можно просто выбирать подходящие языки и адаптировать. А вот готового решения для языка системного уровня я не вижу. Именно поэтому, его приходится делать.

Возвращаясь к Rust – идейно это очень важный язык, по крайней мере, с точки зрения работы с памятью. Хотя не менее интересны и его предшественники, например, Cyclone.

Но напрямую Rust я не могу использовать. Мне нужен гораздо более простой язык, который я называю ассемблер-1 (А1), где слово «ассемблер» намекает на сборку (ассемблирование) и на то, что это язык нижнего уровня. В А1 много беру из Go и Rust.

Простенький пример на а1 (из тестов компилятора):

фн «Проверка индексации»(строка: &[] цел16 ): цел32 {

1 → и: цел32

завершить строка[и] ? цел32

}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *