Интенсивное программирование: Языки выходного дня

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

Условное название проекта  «Языки выходного дня» — просто потому, что в рабочие дни для работы над ним нет времени.

Естественно, мне бы хотелось собрать вокруг проекта инициативную группу. И начать проект в каком-то правильном месте, которое должно быть открытым (open source) и русском. GitFlic? Есть ли еще что-то еще подходящее?

Краткое описание семейства в статье «Интенсивное программирование»:

На мой взгляд, семейство должно включать языки, в таких категориях:

  • язык, с ручным управлением памятью (типа Rust);
  • язык с управлением памятью на основе ARC (automatic reference counter);
  • язык со сборкой мусора;
  • «скриптовый язык» с динамической типизацией и сборкой мусора

Так как «нельзя объять необъятное», то начать желательно с одного языка, и это тоже надо обсудить отдельно.

Идеи и подходы, на которые можно опереться, описаны в статьях:

Если есть желание и возможность участвовать, пишите в комментариях.

11 комментариев


  1. Нет, место неудачное. Нельзя сделать проект публичным, политика ресурса лично мне непонятна. А публичность для проектов подобного характера — это вопрос политический.

    tvoygit.ru

    Ответить

    1. Git на своем сервере тоже не годится. Я неделю назад снес такой. Нужно публичное место, это раз. И, два, чтобы не тратить силы на поддержку.

      Ответить

  2. Почему бы не рассматривать создание метаплатформы для создания языков по собственному вкусу и потребностям?

    и документации похожей на книгу в которой рассказывается как это всё устроено, и как этим пользоваться

    я для себя подобную штуку делаю на базе обычной связки flex/bison в качестве метакомпонента — виртуальная машина на С++, байткод, и модель языка языка Форт в качестве базы (как самое простое и примитивное что вообще можно найти)

    Ответить

      1. Очевидно, коды на разных языках должны обмениваться между собой данными. Если языки создаются как часть общей системы, то логично предположить, что для эффективного взаимодействия между собой они могут обмениваться чем-то более высокоуровневым, чем набором байт.
        Вообще, какой уровень изоляции языков друг от друга предполагается?

        Ответить

        1. Между языками никакой намеренной изоляции не должно быть. Семейство построено над обобщенной типовой системой. Язык верхнего уровня может непосредственно использовать данные из языка нижнего уровня. В обратную сторону надо смотреть конкретно, но желательно, чтобы и в обратную сторону это работало.

          Пример из моего опыта — это XDS с двумя языками Модула-2 и Оберон-2. В нынешней классификации Модула-2 — это L4, Оберон-2 — L2. Сам XDS был написан на Обероне, а многие библиотеки на Модуле.

          Изоляция должна быть между компонентами, уровень изоляции определяет разработчик компоненты.

          Ответить

          1. Ну, то, что языки отделены друг от друга, а не являются одним смешанным убер-языком — это уже определённая изоляция :).

            Язык 4 создал, например, динамический список целочисленных значений. Чем он будет в Языках 3,2,1?

            Помимо общей части языков системы — языка типов, необходимого для бесшовного взаимодействия между ними, будет ещё язык межкомпонентного взаимодействия. Каким он будет?


        2. А не путаете рантайм и исполняемый продукт компиляции, и языки (компиляторы)?

          Как минимум, компиляторы нескольких языков должны иметь средства обмена информацией по типам, и внутренними структурами компиляторов (таблицы символов, граф вызовов,..).

          Если отказываетесь от общего рантайма, такого как JVM и реализации языков на её основе, всё равно придётся делать какой-то аналогичный базовый рантайм на который сверху вешать компиляторы/интерпретаторы. Как минимум, этот рантайм должен поддерживать функциона Language Protocol Server для сквозной интеграции с IDE.

          Ответить

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

    1. Есть язык (X1) для написания или синтеза программного кода некоторых компонент (единиц компиляции) (он описывает как спецификацию так и реализацию)
    2. Есть язык (X2) для описания как из этих компонент будет строитьсяч либо программа (т.е. то, что имеет одну точку входа) или библиотека (много точек входа) — выходная система.

    Эти языки могут иметь часть общих ключевых слов.

    Т.е. выбор системы управления памятью, алгоритма работы сборки мусора, где искать нужные единицы компиляции — это все то что указывается в языке X2. Сам же код на языке Х1 он просто решает задачу исходя из гипотиз типа что где-то есть единица компиляции с именем Math, а в ней я предполагаю есть функция с именем sin и с одним параметром типа real и я ее в своем коде использую.

    Про динамическую типизацию — по-моему конвергшениция между «статическими» и «динамическими» в пдане типизации яызками налицо — динамические вводят тповые аннотации, а статические начинают массово использовать type inference. Я бы поддерживал статику + type inference — т.е. просто написать
    StandardIO.put («Hello world\n»)
    это и есть моя программа — по сути просто последовательность операторов — ну для ‘начучности’ скажем anonymous procedure можно сказать и скрипт — вопрос в выборе терминов (C# такое поддерживает)

    Ответить

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

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