Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

C++

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.92
macro4wf
45 / 0 / 0
Регистрация: 09.01.2014
Сообщений: 7
#1

Дедушка, а что это за костыль у тебя? - C++

28.01.2014, 23:41. Просмотров 1706. Ответов 22
Метки нет (Все метки)

Есть языки программирования с очень длинной и непростой историей, у которых примерно половина их возможностей – это какие-то исторически сложившиеся сложные и ненужные костыли. К таким, например, относится и наш любимый C++. Если вы не разработчик компилятора C++, почти всегда можно найти что-то, чего вы в языке не знаете.

http://habrahabr.ru/company/yandex/blog/206234/
А что это за костыли такие?Прошу помощи олдфагов.Можно будет составить список хотя бы 10 самых самых и привести примеры исходного кода.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.01.2014, 23:41
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Дедушка, а что это за костыль у тебя? (C++):

Необходимо протестировать костыль. Конвертирование Glib::ustring в sf::String - C++
Есть строка Glib::ustring, пытался её конвертировать в sf::String, и вроде бы всё работает без особых костылей, но как добрался до...

Memo->Lines[1] - что за тип? костыль? C++ Builder - C++ Builder
Пояснение: bus03_eightschools.time - int Lines - "06:30" Как записать эту строчку правильно: bus03_eightschools.time =...

Объясните подробно данный код программы. Знаю что это фильтр а пошагово что к чему не понимаю - C++ Builder
void __fastcall TForm1::suiButton7Click(TObject *Sender) { tdiag -> Filtered = false; tdiag -> Filt = «id_p=« + suiEdit6 -> Text; ...

afx_msg: что это и зачем это? - Visual C++
Рассматриваю примеры по MFC, часть функций там переписываются с afx_msg, а часть без: BOOL OnInitDialog(); afx_msg HBRUSH...

Подскажите что делать. Знаю что надо перегрузить оператор но никак не могу понять как это сделать - Visual C++
#include "stdafx.h" #include <iostream> #include <conio.h> #include <Windows.h> #include <string> using namespace...

Как работать с LPCWSTR? Как перевести char в это? И что это вообще такое? - C++ WinAPI
Как работать с LPCWSTR? Как перевести char в это? И что это вообще такое?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
04.02.2014, 02:59 #16
Kuzia domovenok, мои проблемы - это набор переусложнений, сделанных для неочевидной оптимизации
есть языки где этого нет и эти сложности не нужны

ооп - это достаточно высокоуровневая вещь
там где нужно считать байты как правило ооп не нужно
а так сказать "паттернов" чисто с++ого ооп'a не так уж много
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
04.02.2014, 04:16 #17
alex_x_x, "где нужно считать байты ооп не нужно", - вот это открытие! Да от такого авторитета!

Позволь спросить, а "считать байты", это какая операция в С++? и в каких "якобы тру ооп языках" её нет? Только конкретно!

И, например, при написании игрового 3d движка, что не нужно, по-твоему: ооп или c++ ?
0
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 347
Записей в блоге: 2
04.02.2014, 04:45 #18
Цитата Сообщение от alex_x_x Посмотреть сообщение
Kuzia domovenok, мои проблемы - это набор переусложнений, сделанных для неочевидной оптимизации
есть языки где этого нет и эти сложности не нужны
ооп - это достаточно высокоуровневая вещь
там где нужно считать байты как правило ооп не нужно
а так сказать "паттернов" чисто с++ого ооп'a не так уж много
В С++ великолепно реализовано ООП. Великолепно для написания под железо. Если Выпишите только какие-нибудь мелкие скрипты, вроде плагинов для браузера, то вам и не нужно думать не об оптимизации, не о железе. А если у вас крупный проект, вроде Среды программирования, 3D движка, вычислительной системы или много ещё чего-то подобного, то вам не обойтись без низкоуровневых оптимизаций. Даже несмотря на то, что большую часть таких оптимизаций компилятор уже сейчас выполняет лучше человека, Вам всё равно нужно контролировать его работу: где-то правильно построить цикл, что бы он мог векторизоваться, а где-то метод, что бы он мог стать inline, а ещё может понадобиться выравнивать данные по кэш-линейкам и т.п. Для всего этого нужен язык с очень тонким контролем структуры данных и конечного кода. С++ не идеал и в нём действительно много артефактов, но это не переусложнения и от них не нужно отказываться. Просто нужно сделать их более логичными и закономерными. Хотя где-то придётся отказаться от исторических традиций, но это необходимо. И подобные попытки уже были, например , язык D
1
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
04.02.2014, 05:23 #19
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
alex_x_x, "где нужно считать байты ооп не нужно", - вот это открытие! Да от такого авторитета!
с учетом этого перехождения на личности дальше должна идти умная мысль видимо
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
Позволь спросить, а "считать байты", это какая операция в С++?
очевидно настолько критичная к первомансу, что нужно экономить на дереференсе vtable'a
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
и в каких "якобы тру ооп языках" её нет? Только конкретно!
в которых не замарачиваются экономией на виртуальных методах, те почти во всех
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
И, например, при написании игрового 3d движка, что не нужно, по-твоему: ооп или c++ ?
движки на с++ это я смотрю последний оплот цпп, как и последний аргумент
очевидно, что если написать его на си, то не нужно будет ни то, ни другое

Цитата Сообщение от НеСказочник Посмотреть сообщение
Великолепно для написания под железо.
что-то я редко вижу что-то написанное на с++, сильно приближенное к железу. Это уже из области написания драйверов на с#
Цитата Сообщение от НеСказочник Посмотреть сообщение
А если у вас крупный проект, вроде Среды программирования, 3D движка, вычислительной системы или много ещё чего-то подобного, то вам не обойтись без низкоуровневых оптимизаций. Даже несмотря на то, что большую часть таких оптимизаций компилятор уже сейчас выполняет лучше человека, Вам всё равно нужно контролировать его работу: где-то правильно построить цикл, что бы он мог векторизоваться, а где-то метод, что бы он мог стать inline, а ещё может понадобиться выравнивать данные по кэш-линейкам и т.п. Для всего этого нужен язык с очень тонким контролем структуры данных и конечного кода.
и почему это не написать на си? подобные оптимизации всегда точечные и уж явно с ооп не связаны
Цитата Сообщение от НеСказочник Посмотреть сообщение
Для всего этого нужен язык с очень тонким контролем структуры данных и конечного кода. С++ не идеал и в нём действительно много артефактов, но это не переусложнения и от них не нужно отказываться. Просто нужно сделать их более логичными и закономерными.
не получится быть везде хорошим. c++ пытается совмещать низкоуровневость с выкоровневостью - получается что-то между.
Цитата Сообщение от НеСказочник Посмотреть сообщение
Хотя где-то придётся отказаться от исторических традиций, но это необходимо
ну от них-то никто не отказывается
Цитата Сообщение от НеСказочник Посмотреть сообщение
И подобные попытки уже были, например , язык D
ну не выстрелил, но objective c например в перспективе и цпп обойдет

Добавлено через 11 минут
НеСказочник, такто я согласен про перфоманс и оптимизации
другое дело, мне кажется что уж много жертв ради этого сделано
множественное наследование - вопрос для диспута, но в-принципе дань истории
насчет невиртуального наследования у меня сомнение, что современные компиляторы не могут заоптимизировать, чтобы это потеря была несущественной
особых идиом в невиртуальном наследовании я не вижу

цппный way - чтобы был выбор - отстреливать ноги, или чуть потерять перфоманса, но быть осторожней
0
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 347
Записей в блоге: 2
04.02.2014, 05:41 #20
Цитата Сообщение от alex_x_x Посмотреть сообщение
что-то я редко вижу что-то написанное на с++, сильно приближенное к железу
Я имел ввиду, что Вы можете написать что-то более менее высокоуровневое, что потом может быть не только удачно откомпилировано под самые разные платформы, но и будет более-менее оптимально работать на них.


Цитата Сообщение от alex_x_x Посмотреть сообщение
отстреливать ноги
С++ однозначно нужна глобальная перестройка, но и превращать его в что-то питоноподобное тоже не стоит. ООП, конечно, можно и на ассемблере организовать, но согласитесь, что высокоуровневый язык, позволяющий контролировать код почти как на ассемблере, всё же нужен. Я компиляторщик и, возможно, рассуждаю слишком строго, но простые и очевидные скрипты - это только одна из движущих сил IT индустрии, а основание, на котором она стоит - тяжеловесные проекты с огромным количеством ресурсоёмких вычислений. Так что "неосторожное кастрирование" C++ может подорвать основу IT. Хотя Вы правы, что переделка ему всё же нужна.
0
Dmitriy_M
1349 / 1230 / 114
Регистрация: 20.03.2009
Сообщений: 4,420
Записей в блоге: 11
04.02.2014, 10:06 #21
Цитата Сообщение от alex_x_x Посмотреть сообщение
--> неожиданный полиморфизм - невиртуальные методы в разных контекстах ведут себя по-разному
--> невиртуальные методы могут перегружаться (создавая новые контексты)
Мне кажется что это проблема полиморфизма в целом.
Цитата Сообщение от alex_x_x Посмотреть сообщение
--> в ряде случаев виртуальные методы не могут быть вызваны из конструктора
И правильно, что нельзя!

Цитата Сообщение от alex_x_x Посмотреть сообщение
ооп - это достаточно высокоуровневая вещь
Вещь высокоуровневая, однако определяет объект как сущность в адресном пространстве.
Цитата Сообщение от alex_x_x Посмотреть сообщение
множественное наследование - вопрос для диспута, но в-принципе дань истории
Может быть и дань истории, но вещь полезная и удобная.
НеСказочник, язык D уже пригоден для промышленного использования?
0
НеСказочник
58 / 46 / 7
Регистрация: 12.11.2012
Сообщений: 347
Записей в блоге: 2
04.02.2014, 11:03 #22
Цитата Сообщение от Dmitriy_M Посмотреть сообщение
язык D уже пригоден для промышленного использования?
Ну я не слышал о том, что бы для D был утверждён ISO стандарт, так что, наверное, пока не стоит. Хотя компиляторы под него и есть. Мало ли что они там изменят. Помните какой кавардак был в своё время в С++?
0
Dmitriy_M
1349 / 1230 / 114
Регистрация: 20.03.2009
Сообщений: 4,420
Записей в блоге: 11
04.02.2014, 14:02 #23
Проблема с D, что для него не хватает библиотек.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.02.2014, 14:02
Привет! Вот еще темы с ответами:

Что это за знак >> прочитал что это сдвиг вправо? что он делает - C++
int d=6, c=5,f; f = d >> c; cout<< f; вывод 0

Какой прогой быстрее всего показать что у тебя есть на HDD? - Софт
Здарова! У нас есть трекер, и мы хотим чтобы прежде чем стать аплоадерами, пользователи показали что у них есть на харде (фильмы, игры,...

Можно ли сказать, что оператор With - "костыль"? - Pascal
Никак не могу вспомнить где прочитал это заявление, но что-то было о сравнении языков опять. Всерьёз заинтересовало - почему вдруг...

Не могу понять, что это за реализация ORM и как это работает - C#
Есть проект на C#, есть база данных MSSQL, есть код, который позволяет мне добавлять и удалять данные из базы данных (без создания и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
04.02.2014, 14:02
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru