Здравствуйте, Сергей Губанов, Вы писали:
СГ>Что DLL? Вот именно, что "э....". В самом языке Си++ такой абстракции нет, а в Оберонах MODULE — есть еще со времен Модулы. Вот Вам и высокая абстракция!
как раз эта возможность в С++ прекрасно эмулируется, так что не вижу тут никаких особых преимуществ у Модулы. Активные объекты тоже эмулируются, при наличии желания.
Действительно серьезные проблемы у языка совсем другие, чем это думают теоретики.
И пока они будут парить в облаках, паровоз будет ехать как ему удобнее А они могут и дальше сколько угодно рассуждать о порочном круге и прочих приятных для их слуха вещах.
Здравствуйте, FR, Вы писали:
FR>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым?
А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования.
Здравствуйте, prVovik, Вы писали:
V>Здравствуйте, FR, Вы писали:
FR>>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым?
V>А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования.
Все просто. Популярность завоевал не Си, а UNIX. Если бы UNIX был написан на другом языке, то сейчас был бы популярен другой язык.
Здравствуйте, prVovik, Вы писали:
V>Здравствуйте, FR, Вы писали:
FR>>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым?
V>А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования.
Потому что: "Легче погасить в себе свет, чем рассеять тьму вокруг""Ночной Дозор"
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами?
А зачем его повышать? Абстракции ради абстракций нам не нужны. Более того совсем недавно писал кусок программы и в котороый раз приятно поразился насколько С++ с его тупыми шаблонами и анахронизмами идеально подошел для решаемой задачи:
template <int Dims, class T>
class NurbsCurve
{
typedef HPoint<Dims,T> THPoint;
typedef Point<Dims,T> TPoint;
typedef ValVector<T> KnotVector;
typedef ValVector<THPoint> PointVector;
int p;
int n;
KnotVector U;
PointVector Pw;
public:
void point( TPoint &out, T u )
{
TmpVector<T> N(p + 1);
THPoint v, h;
int span = knot_span( u );
basis_functions( N, u, span );
for( int i = 0; i <= p; ++i ) {
v = Pw[span-p+i] * N[i];
h = h + v;
}
out = h.euclid();
}
};
// а теперь хотим кривую в пространстве, пожалуйста:typedef NurbsCurve<3,double> NurbsCurve3d;
// нужна на плоскости? нет проблем:typedef NurbsCurve<2,double> NurbsCurve2d;
// хотим во флотах:typedef NurbsCurve<2,float> NurbsCurve2f;
И вот получается что старый тупой старичок С++ опять всех опередил. На каком языке вы еще сможете написать это так же кратко, ясно, просто и понятно?
Здравствуйте, FR, Вы писали:
СГ>>Вирт предлагает перестать кидать дрова в топку разогнавшегося паровозика...
FR>Объясни пожалуйста чем именно Оберон лучше C++.
Фрагмент из того самого текста, который обсуждается в этой ветке форума:
... Но как нам учить образцовому дизайну с помощью инструментов и языков, которые делают нас посмешищем? ...
Оберон, в отличие от Си++ позволяет обучать студентов образцовому дизайну не отвлекаясь при этом на внутриязыковые грабли, поскольку в Обероне внутриязыковых граблей нет.
Здравствуйте, Kluev, Вы писали:
K>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами?
K>А зачем его повышать? Абстракции ради абстракций нам не нужны. Более того совсем недавно писал кусок программы и в котороый раз приятно поразился насколько С++ с его тупыми шаблонами и анахронизмами идеально подошел для решаемой задачи:
K>
<skipped/>
K>
K>И вот получается что старый тупой старичок С++ опять всех опередил. На каком языке вы еще сможете написать это так же кратко, ясно, просто и понятно?
Да, хотелось бы увидеть аналог на Обероне, который "делает" плюсы...
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Оберон, в отличие от Си++ позволяет обучать студентов образцовому дизайну не отвлекаясь при этом на внутриязыковые грабли, поскольку в Обероне внутриязыковых граблей нет.
Ты уверен на все 200%?
А может быть просто грабли ещё не нашли, а лежат они в кустах?
Имхо, идеала нет, можно только к нему стремиться...
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, FR, Вы писали:
СГ>>>Своей целостностью.
FR>>Какие преимущества для разработчика это дает?
СГ>Разработчику остается думать лишь о предметной области, а не о том как преодолевать внутриязыковые грабли самого языка.
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>Оберон, в отличие от Си++ позволяет обучать студентов образцовому дизайну не отвлекаясь при этом на внутриязыковые грабли, поскольку в Обероне внутриязыковых граблей нет.
К>Ты уверен на все 200%? К>А может быть просто грабли ещё не нашли, а лежат они в кустах?
Уверен. В Обероне граблей нет. Если не верите, то можете поискать.
Здравствуйте, Сергей Губанов, Вы писали:
К>>Ты уверен на все 200%? К>>А может быть просто грабли ещё не нашли, а лежат они в кустах?
СГ>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.
Гы. Тогда напишите нам на обероне тот кусок с NurbsCurve который я привел. А мы посмотрим и сравним.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Курилка, Вы писали:
К>>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>>Оберон, в отличие от Си++ позволяет обучать студентов образцовому дизайну не отвлекаясь при этом на внутриязыковые грабли, поскольку в Обероне внутриязыковых граблей нет.
К>>Ты уверен на все 200%? К>>А может быть просто грабли ещё не нашли, а лежат они в кустах?
СГ>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.
Может он ещё и математически доказываемые правильные программы генерирует?
А если серьёзней — на чём основана уверенность?
Я вот нисколько не удивлюсь, если тот же вирт через 5 лет придумает ещё какой-нибудь язычёк, который будет ну несказанно правильным.
Здравствуйте, Nick_, Вы писали:
N_>Все просто. Популярность завоевал не Си, а UNIX. Если бы UNIX был написан на другом языке, то сейчас был бы популярен другой язык.
Ну дак почему же UNIX не был написан на паскале?
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Потому что: "Легче погасить в себе свет, чем рассеять тьму вокруг""Ночной Дозор"
Хм, какое глубокомысленное замечание!
А если серьезно, то я знаю кучу народа (я в их числе), которые после перехода с турбо паскаля на борланд с++ поняли, что поступили правильно . При чем обратный переход — это жутко редкая экзотика. Интересно, почему?
Здравствуйте, Kluev, Вы писали:
K>Здравствуйте, Сергей Губанов, Вы писали:
К>>>Ты уверен на все 200%? К>>>А может быть просто грабли ещё не нашли, а лежат они в кустах?
СГ>>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.
K>Гы. Тогда напишите нам на обероне тот кусок с NurbsCurve который я привел. А мы посмотрим и сравним.
+ ещё бы посмотреть на код, котоырй в результате сгенерится и сравнить, ну и бенчмарки само собой...
Здравствуйте, Kluev, Вы писали:
K>Здравствуйте, Сергей Губанов, Вы писали:
К>>>Ты уверен на все 200%? К>>>А может быть просто грабли ещё не нашли, а лежат они в кустах?
СГ>>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.
K>Гы. Тогда напишите нам на обероне тот кусок с NurbsCurve который я привел. А мы посмотрим и сравним.
Да, в том куске Point<Dims,T> это
template <int Dims, class T>
struct Point;
// точка на плоскостиtemplate <class T>
struct Point<2,T>
{
T x, y;
//далеее поскипано
};
// в пространствеtemplate <class T>
struct HPoint<3,T>
{
T x, y, z
//далеее поскипано
};
Здравствуйте, prVovik, Вы писали:
V>Здравствуйте, Сергей Губанов, Вы писали:
СГ>>Потому что: "Легче погасить в себе свет, чем рассеять тьму вокруг""Ночной Дозор"
V>Хм, какое глубокомысленное замечание! V>А если серьезно, то я знаю кучу народа (я в их числе), которые после перехода с турбо паскаля на борланд с++ поняли, что поступили правильно . При чем обратный переход — это жутко редкая экзотика. Интересно, почему?
Ну и переход Хейлсберга в лагерь C# (тоже по идее близко к C++) много о чём говорит.
Здравствуйте, Сергей Губанов, Вы писали:
WH>>2)Я не вижу объективных причин благодаря которым знание EBNF помогает писать программы. Ибо это специфические знания необходимые при разработке компиляторов. СГ>Все знания о том что такое EBNF умещаются на одной странице. Это элементарщина которую в школе надо давать, а Вы о ней говорите как о высокой науке.
Попробуй человеку который не умеет программировать объяснить что такое указатель. Поверь мне ты офигеешь. А ведь что может быть проще указателя? Уж не EBNF ли?
СГ>Вас не спросили!
А надо было!
СГ>Ну и как, создав их он понял как надо их грамотно создавать?
А ты уверен что Вирт понял? СГ>Скольких студентов и аспирантов он научил тому как надо грамотно создавать языки и операционки?
А ты уверен что Вирт научил их создавать языки и операционки _грамотно_?
Я вот глядя на Виртовские поделки почемуто сомневаюсь.
СГ>Сами поняли что сказали?
Сам то я понял. А ты меня упорно не понимаешь.
СГ>Правильно, надо повышать абстракцию.
Ага... СГ>Вот Оберон ее и повышает.
В каком месте? СГ>Например, еще со времен Модулы, в этом языке есть такая абстракция как "модуль" — это не только единица компиляции, но и динамически линкующаяся и загружаемая единица исполнения (в Си++ такой абстракции нет и не будет).
Ну насчет не будет это ты погорячился. К томуже я не вижу как это может повысить абстракцию. СГ>Еще пример высокого уровня абстракции — "активный объект" (в Си++ такой абстракции нет и не будет).
А зачем оно надо? СГ>А Вы только посмотрите сколько новых абстракций в Zonnon — Оберон для .NET. Одни DEFINITION чего стоят. А еще, совсем убойная для всех рептилоидов вещь, там, представьте себе, какой ужас, протокол обмена сообщениями между двумя активностями пишется прямо в EBNF, то есть тот кто не знает EBNF не сможет писать программы на языке Zonnon!
А тебе не кажется что это проблемы языка Zonnon!? СГ>
СГ>11.3 Protocol EBNF
СГ>The definition of an activity can include a formal syntax specification of a communication protocol in EBNF as a modifier to an enumeration type which defines the alphabet of terminal tokens of the syntax. The name of an activity and its enumeration type constitute the activity’s signature. Note that in EBNF protocol specifications the communication of an item from the callee to the caller is prefixed by a ‘?’.
Вот смотрю я на этот пример и думаю на кой черт описывать протокол если его тутже приходится реализовывать ручками? Или ты хочешь сказать что компилятор проверит корректность реализации протокола?
Вот еслибы пример выглядел примерно так
definition Fighter;
activity (* Syntax of the protocol, in this case it is recursive too *)
{
fight = { attack ( { defense attack } | escape | knock_out | fight ) }.
knock_out = KO
escape = RUNAWAY [ ?CHASE]
attack = ATTACK strike.
defense = DEFENSE strike.
strike(part : Karate)
= part := bodypart.
strike(part : Karate, damage : integer)
= part := bodypart damage := strength.
bodypart : Karate
= LEG | NECK | HEAD.
strength : integer
= integer.
}
Karate = (RUNAWAY, CHASE, KO, ATTACK, DEFENSE, LEG, NECK, HEAD);
end Fighter.
object Opponent implements Fighter;
activity Karate implements Fighter.Karate;
var
t : object;
hp : integer;
procedure knock_out;
begin
activity end
end knock_out;
procedure escape;
begin
if hp > 0 then
send Karate.CHASE
end;
activity end
end escape;
procedure strike(part : Karate);
begin
hp := hp - 1
end escape;
procedure strike(part : Karate, damage : integer);
begin
hp := hp - damage
end escape;
begin (* Karate*)
hp := 100;
activity begin fight
end Karate;
end Opponent.
object Challenger;
import Opponent, Fighter;
var
opp : Opponent;
f : Fighter.Karate;
begin
opp := new Opponent; (* create opponent *) …
f := new opp.Fighter.Karate; (* create dialog *)
send Fighter.Karate.ATTACK => f; … (* fight according to the dialog protocol *)
...
end Challenger.
Я бы сказал: Круто хотя всеравно не понятно на кой оно надо.
СГ>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами?
Во превых что значит повышение абстракции? Это уменьшение колличества деталей. Так?
Вот например берем тотже STL там есть шаблон сортироваки std::sort (абстракция раз) которому нужны два итератора произвольного доступа (абстракция два) и опционально предикат сравнения (абстакция три).
По этим данным компилятор постороит максимально эффективный код сортировки. Причем в реализацию библиотеки можно внести все возможные оптимизации для конкретных типов и что гораздо важнее для типов обладающих некоторыми свойствами.
И это только цветочки. До чего можно дойти и как это сделать я тебе расказывать не буду ибо это потянет на книгу, а то и не на одну. И не надо ехидничать ибо это уже программирование программы.
... << RSDN@Home 1.1.4 rev. 185 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн