Fuc$%$ng C++

 
US Сергей-4030 #01.04.2014 20:49
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
То ли в "гадости"? Последнее время на работе приходится одновременно работать с двух сторон - с Java (сервер, UI и проч) и C++ - симулятор поездов у нас на нем написан, Java передает данные, симулятор пережевывает и дает расписание/прогноз.

И, блин, как я, оказывается, перестал любить C++. Ну ладно, сам язык... Тоже удовольствие еще то, но куда ни шло. Но какой же это огромный тормозной монстр в смысле environment. Visual Studio - ужасен. Медленный, отстойный, баг на баге... И при том функциональность по сравнению с Eclipse - околонулевая. Задача, которая на Java делается за пять минут, на C++ side растягивается на два часа - перекомпилировать заголовки, перекомпилировать модули.... блджад.
 33.0.1750.15433.0.1750.154
RU Balancer #01.04.2014 21:06  @Сергей-4030#01.04.2014 20:49
+
-
edit
 

Balancer

администратор
★★★★☆
Сергей-4030> Задача, которая на Java делается за пять минут, на C++ side растягивается на два часа - перекомпилировать заголовки, перекомпилировать модули.... блджад.

Гы. Я на это матерился где-то в районе 2004-го :D А в районе 2006-го не матерился, но только как компромисс воспринимал Java на фоне PHP :) Ибо примерно такая же картина, что многие задачи, что на PHP решаются за 5 минут, на Java требуют получаса.

А в 1990-х также прикалывался от перехода с ассемблера на Си++ :)
 3232
US Сергей-4030 #01.04.2014 21:26  @Balancer#01.04.2014 21:06
+
-
edit
 

Сергей-4030

исключающий третье
★☆
админ. бан
Balancer> Гы. Я на это матерился где-то в районе 2004-го :D А в районе 2006-го не матерился, но только как компромисс воспринимал Java на фоне PHP :) Ибо примерно такая же картина, что многие

У PHP свои прелести. :)
 33.0.1750.15433.0.1750.154
RU Balancer #02.04.2014 00:01  @Сергей-4030#01.04.2014 21:26
+
-
edit
 

Balancer

администратор
★★★★☆
Сергей-4030> У PHP свои прелести. :)

У каждого языка свои прелести :)
 33.0.1750.15433.0.1750.154
CA nexusxv #02.04.2014 12:41  @Сергей-4030#01.04.2014 20:49
+
-
edit
 
+
-
edit
 

cholev

втянувшийся

Сергей-4030>>
nexusxv> Delphi?
Разве Delphi жив :eek: . Сомневаюсь.
Было время здесь в Болгарии был очень популярен, но постепенно все ушли в .нет или жаба
 1414
+
-
edit
 

Balancer

администратор
★★★★☆
cholev> Разве Delphi жив :eek: . Сомневаюсь.

На Tiobe 15-е место, почти 1% :)

TIOBE Software: The Coding Standards Company

TIOBE Software B.V. Company Homepage // www.tiobe.com
 

TIOBE Software: The Coding Standards Company

TIOBE Software B.V. Company Homepage // www.tiobe.com
 

Хотя сегодня на нём реально мало пишут, да. Но иногда попадается упоминание, что тот или иной софт на Дельфи написан.
 33.0.1750.15433.0.1750.154
+
-
edit
 

digger

опытный

Последний юзабельный MSVC - 6,1998 года, быстрый ,удобный,с нормальным хелпом.Я только на нем и пишу,позднейшие - отстой и тормоза.Причем предыдущие MSVC были тоже кривые и косые.Некоторые фичи C++ он не поддерживает,придется фиксить часть кода.MSVC , в свою очередь - отстой по сравнению с Борланд С++.Я пользовался им ,пока мог,потом перешел на DJGPP.
Эклипс неплох,но с прибабахами.Например,почему нельзя просто скопировать проект и запустить его? А если я работаю над ним и дома,и на работе?
 30.030.0
+
-
edit
 

Balancer

администратор
★★★★☆
digger> Эклипс неплох,но с прибабахами.Например,почему нельзя просто скопировать проект и запустить его? А если я работаю над ним и дома,и на работе?

Я уже давно с ним не ковыряюсь, но раньше проблем таких не помню. Какая разница, откуда работать? Закоммитил с работы изменения, забрал их дома, продолжаешь работать...
 35.0.1916.15335.0.1916.153
+
-
edit
 

digger

опытный

Это мелкий проектик, нету CVS.
 30.030.0
+
-
edit
 

Balancer

администратор
★★★★☆
digger> Это мелкий проектик, нету CVS.

Использование VCS никак не коррелирует с размером проекта. Я часто использую DVCS (обычно Mercurial) даже на «проекте» из 4-5-6 файлов :) Это же реально удобно и весьма востребовано (отслеживание изменений, откаты версий, работа из нескольких мест и т.п.)
 35.0.1916.15335.0.1916.153
+
+1
-
edit
 

digger

опытный

Можно,но не имеет отоношения к фичам.Нет причин,почему скопированый проект с относительными путями не может быть открыт,а нужен идиотский импорт.Точно так же,дебагирование в Эклипсе в отдельных окнах,а не непосредственно в редакторе.
 30.030.0
+
-
edit
 

arkhnchul

втянувшийся
digger> Точно так же,дебагирование в Эклипсе в отдельных окнах,а не непосредственно в редакторе.
"непосредственно в редакторе" - это как?
 30.030.0
+
-
edit
 

digger

опытный

Вопрос/флуд по языку. Есть класс, реализyющий список:
class list
{
class list *prev,*next;
...
}
Mы хотим сделать из него наследника:
class stringList : public list
{
char *s;
}
Так,чтобы конструктор и итератор работали без извращений:
l1 = new stringList("fuck1")
l2 = new stringList("fuck2")
l2 = l1->next;
А вот и фиг : next является пойнтером на list, a не на stirngList. Способа объявить его пойнтером на текущий класс нет. Также нет гарантии,что каст будет работать, а вдруг язык напакостит. Выкручиваются с помощью темплейтов, где всё более криво как визуально, так и бинарно.Есть языки, где это работает, не считая языков c динамическим oпределением типов? А рассширения С? В чистом С при #pragma pack (1) это работает и гарантирует бинарную совместимость:

struct list_
{
struct list_ *prev,*next;
...
}
typedef struct list_ list;
typedef struct stringList
{
list l1;
char *s;
}
 46.0.2490.8046.0.2490.80

Vale

Сальсолёт

1. Посмотрите, как это реализовано в Qt.
2. Думаю сработает, если будете возвращать ссылку перегруженной функцией.

class Base {public: Base* next();};
class Derived: protected Base {public: Derived* next();};
"Не следуй за большинством на зло, и не решай тяжбы, отступая по большинству от правды" (Исх. 23:2)  41.041.0

digger

опытный

Vale> 2. Думаю сработает, если будете возвращать ссылку перегруженной функцией.
Vale> class Base {public: Base* next();};
Vale> class Derived: protected Base {public: Derived* next();};

Это уже некрасиво, лезть в код предка. Кроме пойнтеров, там подразумевается куча функций, работающих с Base *.
 46.0.2490.8046.0.2490.80

Vale

Сальсолёт

digger> Это уже некрасиво, лезть в код предка. Кроме пойнтеров, там подразумевается куча функций, работающих с Base *.

Derived ни разу не лезет в Base, он переопределяет его функции. Хотя вообще-то действительно не факт, что вам подходит такой метод.

Вообще, я немного не понимаю суть вашей проблемы. Что вы собираетесь в списке хранить. Однородную коллекцию Derived, или смесь типов? Вариант кода показанный вами (l2 = l1->next;) - это С, а не C++. Ваши ссылки на следующий элемент - для C++ не должны быть видны, они должны быть как минимум protected. А ссылка на следующий элемент должна возвращаться публичной функцией.

Если список однородный, я не вижу проблем с использованием шаблонов.
"Не следуй за большинством на зло, и не решай тяжбы, отступая по большинству от правды" (Исх. 23:2)  41.041.0
Это сообщение редактировалось 29.11.2015 в 16:13

digger

опытный

>(l2 = l1->next;) - это С, а не C++. Ваши ссылки на следующий элемент - для C++ не должны быть видны
Я это не люблю, это старомодный подход, мода на хардкорное ОО прошла 10 лет назад и это была большая кака. Мне наследование нужно только для повторного использования кода, использование -> очевиднее.

>я не вижу проблем с использованием шаблонов
Я и использую темплейт, но он работает криво в этом смысле, это и есть тема данного флейма.Темплейт вначале инициализирует контейнер default constructor'om, а потом - конструктором копии контейнера.Это потому,что название членов темплейта и прототип его конструктора не меняются,а у наследника - да.Это и некрасиво, и жрет немного лишних ресурсов.
С темплейтом:
root = root->addNew(new container(content));
С наслeдованием:
root = root->addNew(content);


А как это устроено в Qt? Qt - вообще язык или фреймворк?
Мою проблему решило бы расширения языка thisclass *next; thisclass - текущий класс, в потомке меняется на потомка.
 46.0.2490.8046.0.2490.80
Это сообщение редактировалось 01.12.2015 в 14:22

hcube

старожил
★☆

digger> Эклипс неплох,но с прибабахами.

Посоветуйте среду для простенького проекта.

Надо :

- работа с сокетом
- немножко работа с формами
- работа с ком-портом
- реалтайм или близко к тому обработка пакетов из ком-порта, плюс реалтайм же отсылка в тот же ком-порт результатов обработки прочитанного из сокета.

Ну, я понимаю, что винда не лучшая для этого платформа, но там особый реалтайм и не нужен.

Попробовал я после embeded C++ что-то написать на визуальной среде под виндой. Для начала попробовал vxDev, поплевался на неочевидный доступ к ресурсам системы. Потом express VC++ от мелкосакса. Поплевался на полный запрет на доступ к соседским данным. Хотя бы на чтение, my ass!

И начал драть волосья. Сама концепция, когда громоздится обработчик на обработчик, чисто чтобы принять байтик из порта, идет разделение доступа к переменным классов внутри ОДНОГО ПРИЛОЖЕНИЯ - совершенно чуждая. Где дух C, где можно было что угодно сломать откуда угодно?! :-)

В общем. Хочу, чтобы было как в PHP. Ну, или хотя бы близко :-) Есть варианты? Или придется превозмогать?
Убей в себе зомби!  47.0.2526.7347.0.2526.73
Это сообщение редактировалось 07.12.2015 в 16:30
?? Татарин #07.12.2015 17:02  @hcube#07.12.2015 16:24
+
-
edit
 

Татарин

координатор
★★★☆
digger>> Эклипс неплох,но с прибабахами.
hcube> Посоветуйте среду для простенького проекта.
Именно для С++?

Если не именно, то пользуй с# (от MS, ессно; VS), и будь счастлив.
Херофобия - это иррациональный, неконтролируемый страх или тревожное переживание в момент предстоящего, а также существующего веселья. А вовсе не то, о чём Вы подумали.  46.0.2490.8646.0.2490.86
RU hcube #07.12.2015 17:08  @Татарин#07.12.2015 17:02
+
-
edit
 

hcube

старожил
★☆

Татарин> Если не именно, то пользуй с# (от MS, ессно; VS), и будь счастлив.

Не, на диалект пофиг, пойдет и шарп. Завтра попробую, VS экспресс вроде универсальная.
Убей в себе зомби!  47.0.2526.7347.0.2526.73
RU hcube #08.12.2015 14:53  @Татарин#07.12.2015 17:02
+
-
edit
 

hcube

старожил
★☆

Татарин> Если не именно, то пользуй с# (от MS, ессно; VS), и будь счастлив.

Да, шарпик помягче пошел. Изрядно.
Убей в себе зомби!  47.0.2526.7347.0.2526.73

Mishka

модератор
★★☆
digger> А вот и фиг : next является пойнтером на list,

Совершенно верно. Сам так написал.

digger> Способа объявить его пойнтером на текущий класс нет.
Поскольку наследование неизвестно как и когда, так и не может быть. Надо вводить динамический каст в наследнике. Он для этого и предназначен.

digger> Также нет гарантии,что каст будет работать, а вдруг язык напакостит.
Конспирологам — зачёт!

digger> Выкручиваются с помощью темплейтов, где всё более криво как визуально, так и бинарно.

С темплейтами — это generic programming. Вполне подходит. Только темплейты надо писать умно, чтобы не было взрывного роста классов. Специализациями надо играться. Можно посмотреть на исходники STL у того же Степанова. Или на библиотеку boost.

digger> Есть языки, где это работает, не считая языков c динамическим oпределением типов? А рассширения С? В чистом С при #pragma pack (1) это работает и гарантирует бинарную совместимость:

Прагма pack всего лишь говорит языку, что не надо делать alignment в структурах и классах. Т.е. дырочки оставлять для скорости работы.

digger> struct list_
Фигня поскипана.
 37.037.0

Mishka

модератор
★★☆
digger> Я это не люблю,

Это глупость.

digger> Темплейт вначале инициализирует контейнер default constructor'om

Чего? Как напишешь, так и будет. Можно вообще без default c-tor. Может всё-таки посмотреть, что умные люди делают, а потом говорить?
 37.037.0

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru