amarao (amarao_san) wrote,
amarao
amarao_san

Системно-полный язык

Поскольку предыдущий пост вызвал кучу комментариев, уточняю, что такое "системно-полный" язык.

Системно-полный язык должен позволять реализовать любое приложение, способное к исполнению на этой машине, без привлечения других языков программирования. (звучит почти как тьюринг, но с поправкой на запрет "биндингов к си", после чего большинство интерпретируемых языков полностью теряют свою "полноту").

Очевидно, без ассемблера мы _всё_ не сделаем. Вряд ли какой-либо ЯП поддерживает инструкции вида "запись в CR-регистры у intel" со всеми вытекающими.

Однако, допуская в ЯП общение с ассемблером (ок, меня убедили, что достаточно линкинга) нужно соблюсти одну важную вещь:

ЯП должен обеспечить передачу в обе стороны машинного слова и указателя на данные без их преобразования. Что означает:
* nice case: передачу через запись в регистр (или даже через передачу имени регистра, где хранится значение)
* bad case: копирование значения на стек или в отведённую область памяти.

Заметим, никакого дополнительного геморроя для ассемблерного кода "выделить память, установить refcounter, поправить пару указателей на этот блок памяти". Верно и обратное, язык не должен делать специальное преобразование из собственного формата в чужеродный перед вызовом.

Другими словами (но не заменяя определения) - полностью системным языком является такой, который способен оперировать примитивами машины как собственными объектами, обеспечивая по-возможности их прямое соответствие (целое - > word, указатель -> pointer). Заметим, я не требую, чтобы язык действительно имел указатели как основной инструмент (иначе тот же си получится), а имел такой формат хранения данных, который позволил бы без специальных преобразований с этими указателями работать как с штатными объектами).
Subscribe

  • systemd-networkd, netlink и arp флуд

    Нереально странный баг пофикшен с помощью eBPF затычки. Для меня большой неожиданностью является реакция на него.…

  • Rust soundness

    Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов:…

  • still_ntp

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

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 13 comments

  • systemd-networkd, netlink и arp флуд

    Нереально странный баг пофикшен с помощью eBPF затычки. Для меня большой неожиданностью является реакция на него.…

  • Rust soundness

    Каждый раз, когда я сталкиваюсь с маленькими "но" в Rust'е, это ощущение тщательной продуманности. Например, простейшие fold-функции для итераторов:…

  • still_ntp

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