Как стать автором
Обновить

Комментарии 8

А можно раскрыть вопрос, зачем для этого делать "отдельный язык, расширяющий С++"?

Разве не достаточно будет реализовать обычную библиотеку с нужными типами данных, оставаясь в рамках уже существующего синтаксиса языка?

Не все новые возможности языка можно уместно и компактно вписать в стандартный синтаксис C++. Я пока написал только о части возможностей. Вот пример: вычислительная топология - кольцо из 5 взаимодействующих потоков, по этому кольцу прогоняются некоторые данные. На Planning C записывается достаточно кратко, на обычном C++ так кратко и универсально вряд ли получится. Кстати, эта программа выведет на экран число 210.

#include "reentera.h"
#include <iostream>

using namespace std;

const int NP = 5;

int main() {
    int SUM = 0;

    auto c = chain[] <input_proc Src, int from, int val> {
      int id = reent_linear_num();

      if ((id == 1) ^ (from >= 1)) {
         reent_next_first(this[1 + id % NP], id, val+1);
      }
      if (from >= 1) {
         SUM += val;
         if (id == 1) {
            cout << SUM << endl;
            reent_topology_quit();
         }
      }
    } {
      1 -> 2 -> 3,
      5<-4<-3, 5->1
    };

    c(empty_proc, 0, 39);

    return 0;
}

А такая возможность, как оперативное расширение синтаксиса языка, в C++ вообще почти отсутствует. В этой статье я приводил пример такого оперативного расширения -- как средствами Planning C на ходу встроить в язык новую синтаксическую конструкцию -- цикл while с обработкой прерывания по break. То есть, нечто вроде:

while (k < 10) {
		cin >> A[k];
		if (A[k] == 0) break;
		k++;
	}
	else
		cout << "Был введен ноль!" << endl;

А такая возможность, как оперативное расширение синтаксиса языка

Ответ на вопрос "зачем", для меня так и остался не раскрытым.

while (k < 10) {
		cin >> A[k];
		if (A[k] == 0) {
			cout << "Был введен ноль!" << endl;
			break;
		} 
		k++;
}
		

Чтобы писать более компактные и понятные программы

Уже сравнивали получающиеся решения на Planning по компактности и понятности с другими языками с ресурса rosettacode.org?

Нет, с этим ресурсом пока не работал. Интересная идея, спасибо.

Совершенно не понятно, зачем же всё таки оно нужно. C++ достаточно мощный и гибкий, всё описанное в статье, да и многое другое реализуеться стандартными средствами.

Зачем нужен ещё один язык? Возможно автор хотел сказать что это новая библиотека как к примеру STD или boost, дающая возможность готовых реализаций того или иного подхода или тех или иных шаблонов?

Кто будет поддерживать новый компилятор для нового языка, который подозрительно похож на C++? Сколько лет пройдёт чтобы новый компилятор, если таковой появиться, вошол на постоянной основе в основные дистрибутивы *nix систем?

C++ -- алгоритмически полный язык и позволяет сам по себе описать произвольный разрешимый алгоритм. Вопрос в том, насколько получается удобно и понятно. Для повышения такого удобства и понятности программ, а также для повышения краткости программ и разрабатываются новые языки. По моему мнению, Planning C позволяет достаточно компактно и понятно описывать ряд возможностей параллельного программирования, что я и старался продемонстрировать.

Кто будет поддерживать новый компилятор для нового языка, который подозрительно похож на C++? Сколько лет пройдёт чтобы новый компилятор, если таковой появиться, вошол на постоянной основе в основные дистрибутивы *nix систем?

Это Вы верно заметили. Пока компилятор поддерживаю только я, со всеми вытекающими отсюда следствиями (разрабатывается все это долго и тяжело :) ). Возможно когда-нибудь дело дойдет до написания полноценной версии транслятора, которая действительно войдет в какой-нибудь дистрибутив, но задача может и умереть, как, например, по факту скончался язык-расширение cilk++, который первоначально создавался и поддерживался Intel'ом, но впоследствии они отказались от его поддержки.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории