Здравствуйте, prVovik, Вы писали:
V>Здравствуйте, Nick_, Вы писали:
N_>>Все просто. Популярность завоевал не Си, а UNIX. Если бы UNIX был написан на другом языке, то сейчас был бы популярен другой язык. V>Ну дак почему же UNIX не был написан на паскале?
Так ведь создатели языка Си и создатели UNIX — это одни и те же товарищи из Bell Labs, а именно Брайан Керниган, Кен Томпсон и Деннис Ричи (Страуструп тогда аспирантом там был). Они тогда были молодыми и горячими. Наворотили дел. Потом они повзрослели и осознали свои ошибки. От языка Си открестились. Вместо него создали обероноподобный язык Limbo и написали на нем, опять же, обероноподобную операционку Inferno. Но было уже поздно. Миру вполне хватало древнего UNIX, а более продвинутая Inferno на широкий рынок так и не пробилась.
Здравствуйте, Kluev, Вы писали:
K>С++ с его тупыми шаблонами и анахронизмами
Это мои слова. И я действительно так считаю.
Если интересно можно поговорить на эту тему в отдельной ветке.
... << RSDN@Home 1.1.4 rev. 185 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Kluev, Вы писали:
K>Здравствуйте, Сергей Губанов, Вы писали:
К>>>Ты уверен на все 200%? К>>>А может быть просто грабли ещё не нашли, а лежат они в кустах?
СГ>>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.
K>Гы. Тогда напишите нам на обероне тот кусок с NurbsCurve который я привел. А мы посмотрим и сравним.
...
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();
}
Поскольку шаблонов в обычном Обероне нет, то писанины будет больше. Надо будет расписать отдельно для 2D и отдельно для 3D.
TYPE
NurbsCurve3D = RECORD
p : INTEGER;
Pw: PointVector3D;
END;
PROCEDURE (IN Self: NurbsCurve3D) Point (OUT out: TPoint3D; u: REAL), NEW;
VAR N: ARRAY OF REAL;
h: THPoint3D;
span: INTEGER;
BEGIN
NEW(N, Self.p + 1);
span := knot_span(u);
basis_functions(N, u, span);
h.x := 0; h.y := 0; h.z := 0;
FOR i := 0 TO Self.p DO
h.x := h.x + N[i] * Self.Pw[span - Self.p + 1].x;
h.y := h.y + N[i] * Self.Pw[span - Self.p + 1].y;
h.z := h.z + N[i] * Self.Pw[span - Self.p + 1].z
END;
out := h.euclid()
END Point;
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, FR, Вы писали:
СГ>>>Вирт предлагает перестать кидать дрова в топку разогнавшегося паровозика...
FR>>Объясни пожалуйста чем именно Оберон лучше C++.
СГ>Фрагмент из того самого текста, который обсуждается в этой ветке форума: СГ>
СГ>... Но как нам учить образцовому дизайну с помощью инструментов и языков, которые делают нас посмешищем? ...
СГ>Оберон, в отличие от Си++ позволяет обучать студентов образцовому дизайну не отвлекаясь при этом на внутриязыковые грабли, поскольку в Обероне внутриязыковых граблей нет.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, FR, Вы писали:
СГ>>>Своей целостностью.
FR>>Какие преимущества для разработчика это дает?
СГ>Разработчику остается думать лишь о предметной области, а не о том как преодолевать внутриязыковые грабли самого языка.
А вот мне кажется что ему придется мучатся выражая предметную область на более бедном языке.
Здравствуйте, Сергей Губанов, Вы писали:
FR>>>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым?
V>>А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования.
СГ>Потому что: "Легче погасить в себе свет, чем рассеять тьму вокруг""Ночной Дозор"
Здравствуйте, Kluev, Вы писали:
K>И вот получается что старый тупой старичок С++ опять всех опередил. На каком языке вы еще сможете написать это так же кратко, ясно, просто и понятно?
На Лиспе с помощью макросов, но общественность не поверит, что это ясно и просто.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Kluev, Вы писали:
K>>С++ с его тупыми шаблонами и анахронизмами WH>Это мои слова. И я действительно так считаю. WH>Если интересно можно поговорить на эту тему в отдельной ветке.
А вот, кстати, интересно.
Здравствуйте, Kh_Oleg, Вы писали:
K_O>Е-мое, "и эти люди запрещают мне ковыряться в носу?!" K_O>И это все ради того, чтобы вместо Add писать +, опускать индексы у массивов и не писать явно оператор цикла?!
K_O>Моя крыша слегка съехала...
Вот для того, чтобы она не съезжала и перекрывают операторы.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Ну и как, создав их он понял как надо их грамотно создавать? Скольких студентов и аспирантов он научил тому как надо грамотно создавать языки и операционки? Кстати, Питер Мюллер (создатель Aos) был аспирантом у Вирта и Гуткнехта.
WH>>Короче ИмеюМнениеХренОспоришь: WH>>Сейчас нужны языки которые позволяют как можно сильнее повышать абстракцию. И старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами справляется с этим на порядок лучше любой Виртовской поделки. А рассуждения типа = vs == это ламерство!
СГ>Правильно, надо повышать абстракцию. Вот Оберон ее и повышает. Например, еще со времен Модулы, в этом языке есть такая абстракция как "модуль" — это не только единица компиляции, но и динамически линкующаяся и загружаемая единица исполнения (в Си++ такой абстракции нет и не будет). Еще пример высокого уровня абстракции — "активный объект" (в Си++ такой абстракции нет и не будет). А Вы только посмотрите сколько новых абстракций в Zonnon — Оберон для .NET. Одни DEFINITION чего стоят. А еще, совсем убойная для всех рептилоидов вещь, там, представьте себе, какой ужас, протокол обмена сообщениями между двумя активностями пишется прямо в EBNF, то есть тот кто не знает EBNF не сможет писать программы на языке 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 } | RUNAWAY [ ?CHASE] | KO | fight ) }.
СГ> attack = ATTACK strike.
СГ> defense = DEFENSE strike.
СГ> strike = bodypart [ strength ].
СГ> bodypart = LEG | NECK | HEAD.
СГ> strength = integer. }
СГ> Karate = (RUNAWAY, CHASE, KO, ATTACK, DEFENSE, LEG, NECK, HEAD);
СГ>end Fighter.
СГ> ... [skipped] ...
СГ>
Хммм... а как насчёт полиморфизма элементов протокола? А что у нас по части создания шаблонов грамматик и их специализации?
СГ>Спрашивается, а как может повысить уровень абстракции старичек С++ со своими тупыми шаблонами, дебильными макросами и прочими Сишными дебилизмами и анахренизмами?
Увы и ах. Именно благодаря темплейтам, множественному наследованию и возможности перегрузки операторов можно создавать пусть не идеальные, но очень неплохо заточенные под конкретные задачи (т.е. — высокоабстрактные) реализации языков. Можно и BNF-описания залудить. А их потом записать в виде шаблона и агрегировать в рантайме.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Здравствуйте, Дарней, Вы писали:
Д>>э.... DLL?
СГ>Что DLL? Вот именно, что "э....". В самом языке Си++ такой абстракции нет, а в Оберонах MODULE — есть еще со времен Модулы. Вот Вам и высокая абстракция!
Поганая это абстракция. Deployment-unit, чем по сути и является модуль, есть ни что иное, как совокупность интерфейса и схемы деплоймента. Физическая схема деплоймента может быть какой угодно: и статической либой и динамической. Это зависит от линковщика (а не от компилятора) и на этом можно кое во что играть. А запихивать всё в язык... Ну, был такой, PL/1 назывался. И где он сейчас?
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Дарней, Вы писали:
Д>Совершенно верно — одного. Другой вопрос только, какой ценой это достигается. Д>Лучше уж многопроходный компилятор, чем та порнография, которая существует сейчас в C++. Куча усилий уходит просто на то, чтобы уменьшить количество связей между файлами при компиляции. А уж скорость оной — это просто песня. Время полной компиляции проекта в сутки — это еще не предел Даже "заплатки" в виде предкомпилированных хэдеров не всегда помогают.
Ну а что тут такого? Как-никак — пересобирается полная программа, а не набор заплаток, собираемых в рантайме. Всё в порядке — чудес не бывает. Сборка делается либо в компайл-тайме, либо в рантайме. Но её же всё равно нужно сделать!
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Поскольку шаблонов в обычном Обероне нет, то писанины будет больше. Надо будет расписать отдельно для 2D и отдельно для 3D.
[...] СГ>И как Вы хотите это сравнивать?
Никак. Именно поэтому те, кто перешли на C++ крайне редко возвращаются к паскалю. Я — из их числа, между прочим.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Сергей Губанов, Вы писали:
К>>Ты уверен на все 200%? К>>А может быть просто грабли ещё не нашли, а лежат они в кустах?
СГ>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.
Угу. Это не грабли. Это — рояли в кустах.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, prVovik, Вы писали:
V>
Ну, на самом деле это не все. Паскаль — неизмеримо круче плюсов потому, что := гораздо понятнее, чем =
^. гораздо понятнее, чем ->
строковые константы ограничиваются одинарными, а не двойными кавычками (в ДВА раза меньше штрихов!)
в If можно писать на одну пару скобок меньше
Хотя, конечно, главное — все-таки то, что преподавание языка, где присваивание выполняется при помощи "=" означает выставить себя посмешищем.
З.Ы. В самом популярном языке программирования для персоналок вообще оператор присваивания не отличается от оператора сравнения на равенство. Что не мешает миллионам людей осваивать его безо всяких Виртов.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>Уверен. В Обероне граблей нет. Если не верите, то можете поискать.
Оффтоп: меня несказанно забавляет твоя уверенность в неизмеримой крутизне оберона. Если бы ты говорил о нем с меньшим придыханием, то эффект был бы значительно больше. Также очень рекомендую поосторожнее выбирать аргументы против других языков. Уж очень часто ты заявляешь "в языке X нет фичи A, а в обероне она есть", в случаях, когда на самом деле эта фича есть. После таких опровержений публика теряет доверие и к другим аргументам, которые могут оказаться справедливыми.
Собственно, это-то и не нравится у Вирта. От него откровений ждали, а он "=" критикует. Ну не смешно ли?
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Ну а что тут такого? Как-никак — пересобирается полная программа, а не набор заплаток, собираемых в рантайме. Всё в порядке — чудес не бывает. Сборка делается либо в компайл-тайме, либо в рантайме. Но её же всё равно нужно сделать!
Проблема в том, что перед компиляцией любого файла в C++ сначала делается препроцессинг, и даже самый мелкий файл после включения в него всех хэдеров превращается в многомегабайтного монстра. Что самое поганое, парсинг каждого хэдера производится заново после включения его в каждый cpp-файл
Учитывая еще зависимости между хэдерами, все становится совсем плохо. (я знаю, что эти зависимости можно и нужно уменьшать — но на это уходит лишнее время, и это возможно не всегда).
В качестве пищи для размышлений советую сравнить компиляцию примерно одинаковых по сложности прог на VC++ и на C#. Разница по времени компиляции обычно на порядки, и совсем не в пользу C++
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, LaptevVV, Вы писали: LVV>>Уже оказал. Не было б паскаля — сидели бы мы сейчас на Алголе-68!
Д>а как же K&R?
Транслятор С писали профессиональные программисты-системщики, а транслятор с паскаля написал СТУДЕНТ! Под руководством Вирта (и уверяю, вирт не написал ни строчки — сам такой руководитель, знаю).
LVV>>Блестящий язык, но как же сложно с него полного писать транслятор!
Д>Да уж.. хотя кажется мне, у С++ с этим всё намного хуже
Транслятор С++ — одно проходной, как и транслятор с паскаля. Хотя лично я сделал бы его двух проходным. Глядишь, и с темплейтами меньше заморочек было бы
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, prVovik, Вы писали:
V>Здравствуйте, FR, Вы писали:
FR>>И может именно поэтому корявый и не логичный, но выразительный C++ стал таким массовым?
V>А вот, кстати, ты поднял очень интересный вопрос. Почему же популярность завоевал, не паскаль, а именно такой ужасный и корявый С/С++, несмотря на то, что паскаль появился раньше ??? И почему именно на основе синтаксисв С/С++ сделали и Java и C#? Может быть товарищу Вурту следовало бы сначала разобраться с этими вопросами, прежде чем придумывать свой очередной идеальный язак программирования.
Керниган написал об этом статью "Почему паскаль не является моим любимым языком". Но от себя добавлю — все же в свое время главной целью паскаля было обучение. И демонстрация того, что язык может быть простой, и транслятор с него может быть простой.
Отнюдь не профессиональное программирование.
А С — это профессиональный язык для профессионалов — так он и разрабатывался.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!