Здравствуйте, sergii.p, Вы писали:
SP>ну плюс же! Никаких проблем с виртуальным деструктором, нет проблем с шаблонами.
SP>
SP>В первую очередь, Линус говорит, что использование C++ неизменно приводит программиста к плохим решениям вроде использования библиотек STL или Boost, которые считаются прекрасными.
Кем они считаются прекрасными? Они в меру хороши, и дают простые и прозрачные гарантии — это плюс. Не добавляют слишком много накладных расходов — это плюс. В критических местах производительности может всё же быть недостаточно, но обычно это связано не с недостатками стандартных контейнеров, а с тем, что под специфическую задачу лучше подходит специализированный контейнер, которого, понятное дело, в стандартной библиотеке нет. Опять же, костыльные сишечные списки и прочее говно скорее всего и работает хуже, и отлаживать пипец.
Так что мимо.
SP>
SP>Однако на деле, по мнению Линуса, они постоянно ломаются, отладка кода становится испытанием, а сам код нестабильный и не портируемый.
У меня ничего не ломается, отладка тривиальна, код стабильный, и работает на любых системах, будь то линукс, винда, или микроконтроллер. Видимо, я что-то делаю не так.
SP>
SP>Также Торвальдс заявил, что код на C++ построен на абстракциях, которые не работают как следует. Программист может легко обнаружить, что использованная им абстракция неэффективна, и захочет заменить ее, но для этого ему потребуется переписать все приложение.
Чушь. Во-первых, всё работает как следует. Во-вторых, если неправильно выбрать тип контейнера под задачу, то переписывать придётся и на плюсах, и на сишечке, только на сишечке это превратиться в боль и унижение.
SP>
SP>Если же программист захочет написать хорошее, эффективное и портируемое приложение на C++, он будет ограничен рамками, которые уже хорошо реализованы на языке Си.
Полная чушь.
SP>
SP>Кроме того, использование Си страхует программистов от ошибок, и они не смогут «облажаться» на проекте, а сам язык учит кодеров разбираться в низкоуровневых проблемах. По версии Торвальдса, сплошные плюсы.
Си страхует от ошибок? Лол-што?
SP>
SP>Линус признался, что в 1992 году они уже пытались использовать C++ для написания Linux. С тех пор, по его мнению, мало что изменилось.
Ну так бы и сказал, что не осилил. Ну, или в 92ом году они использовали глючный и сырой компилятор с кривой реализацией STL, такое вполне могло быть в те времена. Ему бы дурню понять, что с тех пор мир изменился.
SP>Нельзя не согласиться.
Нельзя согласится. Главпингвин просто не осилил плюсики даже в минимальном объёме студента-первокура.
SP>Для такого монстра как Linux уже написаны базовые вещи типа списка и переписывание в С++ парадигме ломает совместимость и кучу кода.
Тут уже ближе к реальности. Но даже при этом унутре модули вполне можно на плюсах писать, и даже эти убогие сишные базовые вещи можно переписать на плюсах, не ломая совместимость, в тч двоичную, с сишечным кодом, и это избавит писателей от кучи багов.
SP>Также бесспорно, что для нового проекта использовать С не имеет смысла. Хотя я бы попробовал: интересно. Язык с челенжем. Как раз после универа была возможность, но я её упустил, потому как мозг был засран ООП.
Тоже есть такая идея. Взять какой-нибудь сишечный открытый известный проект, и переписать на плюсах, добавив производительности, убрав кучу багов, и в несколько раз сократив объем кода. На пенсии может займусь
Re[3]: Касательно простоты голого C (vsb призывается)
Здравствуйте, пффф, Вы писали:
П>Ну, или в 92ом году они использовали глючный и сырой компилятор с кривой реализацией STL, такое вполне могло быть в те времена.
В 92-ом STL был только в маленькой лаборатории Алекса Степанова и это был не совсем тот STL, который мы затем увидели в C++98.
Так что вряд ли Линус в 92-ом вообще слышал про STL от Степанова. Не говоря уже про то, чтобы попробовать. Тогда, емнип, на x86 вообще не было C++ных компиляторов с поддержкой шаблонов, первый такой от Borland-а, появился году в 1994-ом.
Re[4]: Касательно простоты голого C (vsb призывается)
Здравствуйте, so5team, Вы писали:
П>>Ну, или в 92ом году они использовали глючный и сырой компилятор с кривой реализацией STL, такое вполне могло быть в те времена.
S>В 92-ом STL был только в маленькой лаборатории Алекса Степанова и это был не совсем тот STL, который мы затем увидели в C++98.
Да, согласен, STL тогда не было, значит, высказывание Линуса относится к более позднему C++, и видимо, он не глядя переносит свои ощущения из 92го года на современные плюсы.
S>Так что вряд ли Линус в 92-ом вообще слышал про STL от Степанова. Не говоря уже про то, чтобы попробовать. Тогда, емнип, на x86 вообще не было C++ных компиляторов с поддержкой шаблонов, первый такой от Borland-а, появился году в 1994-ом.
CFront был как раз под PC, и шаблоны в нём появились в 91ом, как раз тогда, когда Линус только начал Линупс.
Templates were introduced in Release 3.0 of the language, in October 1991.
Там по ссылке приведён пример, как извращались без макросов. Что характерно, линупсоиды и сейчас страдают этой хренью.
Далее. Насколько я краем глаза видел, в Линупсе в ядре все объекты используют виртуальные функции, только VTBL там хранится не для класса отдельно, а непосредственно в структуре объекта. В этом есть некоторые плюсы — можно на ходу заменить реализацию отдельного метода (но я хз, используется ли это где-нибудь активно), но и минусы — раздувается объем (сейчас наверное это уже не особо актуально конечно, но теоретически, это может влиять на производительность — для отдельных VTBL нужно меньше кеша, чем для экземпляров объектов ядра в текущем варианте).
Уж виртуальные функции-то были в плюсах от рождения, и, имхо, было бы хорошей идеей использовать этот механизм в ядре.
Ну и по мелочам — конструкторы деструкторы, автоматическое управление временем жизни — это очень помогает писать без ошибок, связанных с утечками ресурсов. Когда видишь сишечный код, в котором они этим пытаются заниматься, вот просто обнять и плакать, как говорится.
Контроль типов, опять же. В общем, даже в плюсах того времени уже была куча полезного.
Turbo Vision был выпущен в 90м году, хотя хз, может тот вариант был на паскале.
Но в 92ом под C++ уже точно был:
3.1 (1992): Introduction of Windows-based IDE and application frameworks (OWL 1.0, Turbovision 1.0)
Да, я вроде на BC++ 3.0 начинал, и он уже вроде с шаблонами был, это 91ый год (Страуструп наверняка же выкатывал беты CFront'а, и шаблоны были интересной фичей, думаю, борманцы задолго до офф релиза начали их делать).
Re[2]: Касательно простоты голого C (vsb призывается)
SP>Линус признался, что в 1992 году они уже пытались использовать C++ для написания Linux. С тех пор, по его мнению, мало что изменилось.
блин, даже интересно стало, что у них могло пойти не так с С++ в 92м году?
Как много веселых ребят, и все делают велосипед...
Re[3]: Касательно простоты голого C (vsb призывается)
DP>>не ООП единым и иже с ними депенденсями ижекшнами и прочими паттернами живет мир разработки... ну так, к сведению П>К сведению, ООП так или иначе везде применяется, просто если в языке нет его нативной поддержки, то изобретают свой ООП через костыли, боль и страдание
Хуже того они даже исключения сделали в glibc в коде динамического линковщика (который грузит .so), сделано оно так:
код который вызывает функцию которая может вызвать исключение, вызывает _dl_catch_exception, передавая ту функцию в качесте колбэка, выглядит это так:
где call_dl_lookup — враппер вокруг другой функции, которая может бросить такое исключение, этому врапперу приходят все ее аргументы в структурке и просто ее вызывает:
Здравствуйте, пффф, Вы писали:
П>CFront был как раз под PC, и шаблоны в нём появились в 91ом, как раз тогда, когда Линус только начал Линупс. П>
П>Templates were introduced in Release 3.0 of the language, in October 1991.
Никогда не слышал о полноценном CFront под x86. Да еще и вопрос где в 1992-ом году на x86 можно было 32 бита использовать.
П>Turbo Vision был выпущен в 90м году, хотя хз, может тот вариант был на паскале. П>Но в 92ом под C++ уже точно был: П>
П>3.1 (1992): Introduction of Windows-based IDE and application frameworks (OWL 1.0, Turbovision 1.0)
Бьёрн предупредил нас, что с проверкой может оказаться не всё так просто:
Please remember this is *very* old software designed to run on a 1MB 1MHz machine and also used on original PCs (640KB). It was also done by one person (me) as only part of my full time job.
S>Да еще и вопрос где в 1992-ом году на x86 можно было 32 бита использовать.
Это вопрос, да. Но GCC с 87го года в C++ умел
1.42.0 (g++) September 20, 1992
1.41.0 (g++) July 13, 1992
1.40.3 (g++) October 19, 1991
1.39.1 (g++) May 4, 1991
1.37.1 (g++) March 1, 1990
1.37.0 (g++) February 28, 1990
1.36.4 (g++) January 30, 1990
1.36.3 (g++) January 16, 1990
1.15.3 (g++) December 18, 1987
Да это не про шаблоны и было, а про то, что на плюсах можно было писать нормально в то время. А если представить TV на сишечке в любимом стиле Линуса? Это ж ад и израиль был бы (как ядро линупса)
Re[7]: Касательно простоты голого C (vsb призывается)
Здравствуйте, пффф, Вы писали:
П>Ну хз, хотя тут пишут:
Я был наслышан (а что-то и пробовал начиная с 1992-го) про компиляторы от Borland, Zortech/Symantec, Watcom, Microsoft, IBM. Что-то работало под MS-DOS, что-то под MS-DOS и Windows, что-то под MS-DOS и OS/2, что-то только под OS/2 (тот же IBM я пробовал только под OS/2). Где-то во второй половине 1990-х довелось и с GCC под Linux встретится.
Но вот про Cfront для MS-DOS/Windows/OS-2/Linux никогда не слышал.
П>Я так понимаю, пометки g++ это обновления плюсового компилятора
Насколько я помню, первый C++ный компилятор, в котором появилась поддержка шаблонов, был не Cfront, а компилятор толи от HP, толи от Sun. Для больших машин, не для персоналок. На нем-то вроде бы Степанов своим STL и занимался.
А первый компилятор для персоналок с поддержкой шаблона появился у Borland-а в 1994-ом.
Но все это по памяти, так что надежным источником быть не могу. Однако про то, чтобы кто-то использовал Cfront на персоналках не помню в упор.
Линус мог разве что GCC использовать, но сомневаюсь, что C++ там был хоть сколько-то похож на C++98.
Re: Касательно простоты голого C (vsb призывается)
Здравствуйте, Shmj, Вы писали:
S>Но вот глянуть на стандартную библиотеку — там же нет даже списков (динамических массивов) и словарей. Или я не увидел? А ведь без этого практически ни один проект не обходится.
Да с этим то проблем нет. Один раз написал и пользуйся. Более того, все давно уже написано — гугли и что найдешь.
Интересней другое. Как блин немногословно обрабатывать ошибки без исключений. Хреначить через коды возврата, а результат передавать по ссылке, или наоборот в каждую функцию писать ссылку на ошибку? И как то исхитриться макросами чтоб не было многословно? Или через глобальные переменные ошибки, и макросом проверять, каждую строку которая может требовать ошибку оборачивать в макрос? Делать как в https://club.shelek.ru/viewart.php?id=343?
С шаблонами тоже через макросы работать? Или тупо копипастить алгоритм с учетом всех возможных типов?
Re[8]: Касательно простоты голого C (vsb призывается)
Здравствуйте, so5team, Вы писали:
S>Я был наслышан (а что-то и пробовал начиная с 1992-го) про компиляторы от Borland, Zortech/Symantec, Watcom, Microsoft, IBM. Что-то работало под MS-DOS, что-то под MS-DOS и Windows, что-то под MS-DOS и OS/2, что-то только под OS/2 (тот же IBM я пробовал только под OS/2). Где-то во второй половине 1990-х довелось и с GCC под Linux встретится.
Я тоже о них был наслышан и пробовал, но после 95 года, по поводу состояния плюсов в 1992 году, тем не менее, знаю очень мало.
S>Но вот про Cfront для MS-DOS/Windows/OS-2/Linux никогда не слышал.
В середине 90ых он был уже неактуалелен, Бьярн забил на него. Тем не менее:
Comeau Computing's CEO, Greg Comeau, provided one of the early ports of cfront to the PC.
Ну и потом был Comeau C/C++, например. К сожалению, не скажу, когда точно это было, в вики мало инфы, а искать глубоко как-то недосуг. Но, думаю, для писишки таки были варианты и для 32ух бит.
S>Насколько я помню, первый C++ный компилятор, в котором появилась поддержка шаблонов, был не Cfront, а компилятор толи от HP, толи от Sun.
Ну, как такое могло бы быть? Реализация плюсиков в CFront'е была на тот момент единственным стандартом, если Бьярн выкладывал беты, то другие компиляторы максимум могли идти с ним в ногу.
Ещё были такие Edison Design Group, они делали фронтэнды, которые использовали много кто. Так что, думаю, что-то под писишку таки было.
1985 October
Cfront Release 1.0 (first commercial release) The C++ Programming Language
1986
First commercial Cfront PC port (Cfront 1.1, Glockenspiel)
1987 December
First GNU C++ release (1.13)
1988
First Oregon Software C++ release [announcement]; first Zortech C++ release
1989 June
Cfront Release 2.0
1991
First ISO WG21 meeting (Lund, Sweden); Cfront Release 3.0 (including templates); The C++ Programming Language (2nd edition)
1992
First IBM, DEC, and Microsoft C++ releases
S>Для больших машин, не для персоналок. На нем-то вроде бы Степанов своим STL и занимался.
Сам Степанов говорит следующее:
В 1988 г. я перешел в HP Labs, где я был нанят для работы над обобщёнными библиотеками. В течение нескольких лет, я работал вместо этого над жесткими дисками, и это было захватывающе, но совершенно ортогонально к этой области исследований. Я вернулся к разработке обобщенной библиотеки в 1992, когда Билл Ворли, бывший заведующим моей лаборатории, запустил проект по алгоритмам со мной в качестве руководителя. C++ к тому моменту имел шаблоны. Я обнаружил, что Бьярн проделал превосходную работу по проектированию шаблонов. Очень давно я принял участие в нескольких дискуссиях в Лабораториях Белла о проектировании шаблонов, и спорил с Бьярном достаточно жёстко о том, что он должен сделать шаблоны C++ настолько близкими к дженерикам Ada, насколько это возможно. Я думаю, что спорил так жёстко, что он принял противоположное решение. Я осознал важность наличия шаблонных функций в C++, а не только шаблонных классов, как многие считают. Я думал, однако, что шаблонные функции должны работать как дженерики Ada, т.е. что они должны были быть явно инстанцируемы. Бьярн не послушал меня и спроектировал механизм шаблонных функций, в котором шаблоны инстанцируются явно, используя механизм перегрузки. Эта специфическая техника стала решающей для моей работы, т.к. я обнаружил, что она позволила мне делать многое из того, что было невозможно в Ada. Я вижу этот особый дизайн, разработанный Бьярном, как превосходный результат, и я счастлив, что он не последовал тогда моему совету.
S>А первый компилятор для персоналок с поддержкой шаблона появился у Borland-а в 1994-ом.
У Borland-а в 91ом:
Turbo C++ 3.0 was released on November 20, 1991, amidst expectations of the coming release of Turbo C++ for Microsoft Windows. Initially released as an MS-DOS compiler, 3.0 supported C++ templates, Borland's inline assembler and generation of MS-DOS mode executables for both 8086 real mode and 286 protected mode (as well as 80186). 3.0 implemented AT&T C++ 2.1, the most recent at the time.
S>Но все это по памяти, так что надежным источником быть не могу. Однако про то, чтобы кто-то использовал Cfront на персоналках не помню в упор.
В середине 90ых Cfront был уже не актуален. Да, думаю, уже и в начале тоже, потому как были уже другие компиляторы получше
S>Линус мог разве что GCC использовать,
g++-1.42.0.tar.bz2 1992-07-13 22:13 637K
Можно собрать и потыкать, если не лень. Я что-то не нашел нигде текстом, какие фичи в нем реализованы, но не думаю, что сильно отставало от того же Turbo C++
S>но сомневаюсь, что C++ там был хоть сколько-то похож на C++98.
В BC 3.1 шаблоны были вполне похожи, и даже в Turbo C++ 3.0 (начал припоминать, что я на нём писал первое время) были вполне себе, и Степанов STL начинал писать именно на них. Да, потом STL сильно изменилась, но шаблоны уже тогда были вполне круты.
Там в ранних шаблонах были какие-то баги/непродуманности/недоделки (это наверное надо смотреть в дизайне и эволюции), но в целом обобщённо программировать уже вполне можно было
Re[9]: Касательно простоты голого C (vsb призывается)
Здравствуйте, пффф, Вы писали:
S>>А первый компилятор для персоналок с поддержкой шаблона появился у Borland-а в 1994-ом.
П>У Borland-а в 91ом: П>
П>Turbo C++ 3.0 was released on November 20, 1991, amidst expectations of the coming release of Turbo C++ for Microsoft Windows. Initially released as an MS-DOS compiler, 3.0 supported C++ templates, Borland's inline assembler and generation of MS-DOS mode executables for both 8086 real mode and 286 protected mode (as well as 80186). 3.0 implemented AT&T C++ 2.1, the most recent at the time.
У меня была другая траектория -- начинал с Turbo C++ 1.0, затем почти сразу перешел на Borland C++ 2.0 (не Turbo C++). И там я шаблонов не помню от слова совсем. А потом пересел с Borland C++ 2.0 на Borland C++ 4.0 и вот там уже с шаблонами познакомился. Но, оказывается, шаблоны появились в Borland C++ 3.0 в 1992-ом году (здесь вот есть Programmer's Guide для BC++ 3.0, там уже реально шаблоны описаны).
Так что был не прав, каюсь.
Re[10]: Касательно простоты голого C (vsb призывается)
Здравствуйте, so5team, Вы писали:
S>Спасибо, заставили меня поднять информацию.
S>У меня была другая траектория -- начинал с Turbo C++ 1.0, затем почти сразу перешел на Borland C++ 2.0 (не Turbo C++). И там я шаблонов не помню от слова совсем. А потом пересел с Borland C++ 2.0 на Borland C++ 4.0 и вот там уже с шаблонами познакомился. Но, оказывается, шаблоны появились в Borland C++ 3.0 в 1992-ом году (здесь вот есть Programmer's Guide для BC++ 3.0, там уже реально шаблоны описаны).
S>Так что был не прав, каюсь.
Borland С++ 2.0 вообще хз что за зверь, Turbo C++ 2.0 вообще не было, а по идее, это просто с разными бандлами по разной цене для разной аудитории, а под капотом одно и то же.
Скачал BC2 и BC3 отсюда — http://old-dos.ru/files/file_938.html
Думал глянуть в хидерах мож что есть. Божечки, там пара десятков файлов, простых, как мой валенок. Сорцов у продукта, думаю, примерно столько же. И каждый год версию выпускали. Я сейчас за квартал пишу гораздо больше гораздо более сложного кода, а продукты пилятся всё медленнее и медленнее. Какое время было.
А, так вот, в хидерах про шаблоны нет ни там ни там ничего, нашел в generic.h
BC2
/* generic.h -- for faking generic class declarations
Copyright (c) 1990,1991 by Borland International
All rights reserved
When type templates are implemented in C++, this will probably go away.
*/
BC3
/* generic.h -- for faking generic class declarations
Copyright (c) 1990, 1992 by Borland International
All rights reserved
When type templates are implemented in C++, this will probably go away.
*/
Ставить DOS-бокс, запускать и проверять, что там поддерживается — лень
Могу предположит, что в BC2 таки что-то было про шаблоны — вроде бы шаблоны классов в плюсики завезли позже шаблонов функций, возможно в BC2 были только вторые, а в BC3 — первые, потому и не отложилось.
Но вообще, даже шаблоны функций — уже штука неплохая, в кампании с перегрузкой всяко лучше, чем педалить сишечное говно
Re[2]: Касательно простоты голого C (vsb призывается)
Здравствуйте, Философ, Вы писали:
P>>Была интересная хохма с GC дотнета. Выложили в интернет его код, ровно один файл ...
Ф>А не знаешь какая это версия дотнета была? Где его найти?