Комментарии 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++;
}
Чтобы писать более компактные и понятные программы
Совершенно не понятно, зачем же всё таки оно нужно. C++ достаточно мощный и гибкий, всё описанное в статье, да и многое другое реализуеться стандартными средствами.
Зачем нужен ещё один язык? Возможно автор хотел сказать что это новая библиотека как к примеру STD или boost, дающая возможность готовых реализаций того или иного подхода или тех или иных шаблонов?
Кто будет поддерживать новый компилятор для нового языка, который подозрительно похож на C++? Сколько лет пройдёт чтобы новый компилятор, если таковой появиться, вошол на постоянной основе в основные дистрибутивы *nix систем?
C++ -- алгоритмически полный язык и позволяет сам по себе описать произвольный разрешимый алгоритм. Вопрос в том, насколько получается удобно и понятно. Для повышения такого удобства и понятности программ, а также для повышения краткости программ и разрабатываются новые языки. По моему мнению, Planning C позволяет достаточно компактно и понятно описывать ряд возможностей параллельного программирования, что я и старался продемонстрировать.
Кто будет поддерживать новый компилятор для нового языка, который подозрительно похож на C++? Сколько лет пройдёт чтобы новый компилятор, если таковой появиться, вошол на постоянной основе в основные дистрибутивы *nix систем?
Это Вы верно заметили. Пока компилятор поддерживаю только я, со всеми вытекающими отсюда следствиями (разрабатывается все это долго и тяжело :) ). Возможно когда-нибудь дело дойдет до написания полноценной версии транслятора, которая действительно войдет в какой-нибудь дистрибутив, но задача может и умереть, как, например, по факту скончался язык-расширение cilk++, который первоначально создавался и поддерживался Intel'ом, но впоследствии они отказались от его поддержки.
Новый язык обычного и параллельного программирования Planning C 2.0