LINUX.ORG.RU

QT и stl в одном проекте, приводить ли все к единообразию.

 ,


0

3

Добрый вечер, достался проект для рефакторинга в котором параллельно с QT классами есть небольшое количество stl классов, примерно около 5% от объема проекта. Работать с этим проектом и исправлять баги в нем мне, вот думаю заменить контейнеры stl на контейнеры QT. Проект не критичный к скорости, нет никаких сверхтребований по производительности или объему, основная задача, стабильность работы и простота поддержки. Чем топорней тем лучше, с stl не работал уже несколько лет, многие вещи приходится подсматривать в документации из-за этого и хочу все удалить, что бы каждый раз не тратить время на проверку и анализ. Прав ли я или есть какие то подводные камни?


Прав ли я или есть какие то подводные камни?

Прав, подводных камней нет.

CrossFire ★★★★★
()
Ответ на: комментарий от commagray

Да нет, обычный десктоп для обработки данных.

da17
() автор топика
Ответ на: комментарий от commagray

Ну сколько можно в каждой теме поднимать один и тот же непринципиальный вопрос?

Надо уже модераторов просить сносить их как флуд в техразделах.

CrossFire ★★★★★
()
Последнее исправление: CrossFire (всего исправлений: 1)
Ответ на: комментарий от CrossFire

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

da17
() автор топика
Ответ на: комментарий от da17

Это, наверное, было обращено к комментатору с QuickTime (QT). Ибо тулкит называется Qt.

TwinBlade
()
Ответ на: комментарий от CrossFire

Надо уже модераторов просить сносить их как флуд в техразделах.

Уж таков уровень местных технических специалистов - не знают название фреймфорка, на котором «пишут код» и постоянно путают фреймворк для построения GUI и фреймворк для работы с аудио/видео-данными. А потом ещё и удивляются, почему это их неправильно понимают. Это всё равно, что задавать вопрос о Pascal'е, подразумевая Oberon, или спрашивать о тонкостях Си, имея ввиду C++.

alex-w ★★★★★
()

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

Но вообще, если взялся именно за рефакторинг, stl — это последнее, о чем стоит заботиться, лучше окунуться в дизайн, а там контейнеры уже сами собой подтянутся.

staseg ★★★★★
()
Ответ на: комментарий от alex-w

Уж таков уровень местных технических специалистов...

... что по теме сказать нечего, но обязательно прикопаются к регистру.

Это всё равно, что задавать вопрос о Pascal'е, подразумевая Oberon, или спрашивать о тонкостях Си, имея ввиду C++

Нет, это все равно что задавать вопрос о Pascal'е написав PASCAL.

не знают название языка, на котором «пишут код» и постоянно путают язык программирования для начинающих и библиографическую базу данных 1973 года. А потом ещё и удивляются, почему это их неправильно понимают.

починил

https://en.wikipedia.org/wiki/PASCAL_(database)

CrossFire ★★★★★
()
Последнее исправление: CrossFire (всего исправлений: 3)
Ответ на: комментарий от alex-w

Что за чертов бред я прочитал?

А потом ещё и удивляются, почему это их неправильно понимают.

Ни один кукоретик еще не понял неправильно, вы докапываетесь, просто чтоб было, чем кстати характеризуете свой уровень.

staseg ★★★★★
()
Ответ на: комментарий от CrossFire

Даа... чем только не отмазываются, прикрывая свою безграмотность.

... что по теме сказать нечего, но обязательно прикопаются к регистру.

И это говорит типа «программист». Надо полагать, что в своём коде ты также обращаешься с регистрами при поименовке переменных, классов и методов.

alex-w ★★★★★
()
Ответ на: комментарий от alex-w

И это говорит типа «программист». Надо полагать, что в своём коде ты также обращаешься с регистрами при поименовке переменных, классов и методов.

Сейчас бы общение на форуме приравнять к написанию кода.

CrossFire ★★★★★
()
Ответ на: комментарий от staseg

кукоретик
характеризуете свой уровень

Кто бы говорил.

RazrFalcon ★★★★★
()
Ответ на: комментарий от hobbit

Можно хоть один пример на этом форуме, где я написал бы неграмотно?

Тем не менее, абсолютно все прекрасно понимают о чем идет речь, но в каждой теме пишут одно и то же. Я выше приводил пример с Pascal, ну написал кто-то в другом регистре, это не меняет вообще ничего.

CrossFire ★★★★★
()
Ответ на: комментарий от CrossFire

Тем не менее, абсолютно все прекрасно понимают о чем идет речь, но в каждой теме пишут одно и то же. Я выше приводил пример с Pascal, ну написал кто-то в другом регистре, это не меняет вообще ничего.

Тогда, следуя твоей логике, эти два куска кода идентичны:

#include <iostream>
using namespace std;
int main() 
{
    int a = 10;
    cout << "A=" << A << endl;
    return 0; 
}

#include <iostream>
using namespace std;
int main() 
{
    int a = 10;
    cout << "A=" << a << endl;
    return 0; 
}
alex-w ★★★★★
()
Ответ на: комментарий от alex-w

Полагаю, этот код написан на реистрозависимом с++, тогда эти куски не идентичны. Люди коммуницируют на регистронезависимом языке, поэтому засунь свой баттхерт обратно и поглубже.

Ты заголовок топика скомпилировать не можешь, наркоман?

staseg ★★★★★
()
Ответ на: комментарий от RazrFalcon

В этом надо винить мерзкого человека, который решил, что C и С должны быть на одной кнопке.

peregrine ★★★★★
()

вот думаю заменить контейнеры stl на контейнеры QT

Вот смотри, в Qt6 выкинут QList, и опять все переписывать придется :)

Контейнеры - пожалуй самая простая часть stl, имеет смысл поучить. Тем более у тебя там скорее всего не std::priority_queue, а самые обчыные вектора с мапами.

annulen ★★★★★
()
Ответ на: комментарий от annulen

Вот смотри, в Qt6 выкинут QList, и опять все переписывать придется :)

Мы жеж ведь еще в 2015 обсудили, что не выкинут?)

Контейнеры - пожалуй самая простая часть stl, имеет смысл поучить.

Учи или нет, а если не пользуешься — все равно забывается.

Тем более у тебя там скорее всего не std::priority_queue, а самые обчыные вектора с мапами.

Заменить не вопрос, но когда все единообразно, даже банально в плане стиля кода, без винегрета с подчеркиваниями и верблюдами — это приятно.

CrossFire ★★★★★
()

В Qt контейнеры не такие гибкие как в stl. К примеру аналог vector::emplace_back() отсутствует. По этому я бы задумался лучше над дизайном, ведь в некоторых местах Qt контейнеры вообще могут оказаться т.н. bottleneck-ом.

Хотя, ради удобочитаемости...

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от commagray

Снова придираемся к вещам понятным из контекста?

Deleted
()
Ответ на: комментарий от CrossFire

На лоре обсудили в 2015, а разработчики Qt обсуждают только в 2017, слоупоки какие :)

fluorite ★★★★★
()
Ответ на: комментарий от alex-w

именно так: использую регистрово-независимый язык, в целях унификации всё затем приводится к строчным буквам автоматикой

anonymous
()
Ответ на: комментарий от annulen

пожалуй самая простая часть stl

Разве? 100500 нюансов и исключений - не самая простая задача. Вот попробуйте объяснить новичку разницу между push_back и emplace.

RazrFalcon ★★★★★
()
Ответ на: комментарий от KennyMinigun

Только в Qt приложении всё равно придётся использовать Qt контейнеры, и все выгоды от stl пропадут от постоянной конвертации.

RazrFalcon ★★★★★
()
Ответ на: комментарий от RazrFalcon

Вот попробуйте объяснить новичку разницу между push_back и emplace.

Ну, допустим, это потребует некоторых усилий. И? Каковы ваши рекомендации?

Пользоваться только push_back-ом, поскольку это выглядит проще?

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Проект не критичный к скорости, нет никаких сверхтребований по производительности или объему, основная задача, стабильность работы и простота поддержки.

Это и есть суть Qt. stl намного сложнее.

RazrFalcon ★★★★★
()
Ответ на: комментарий от RazrFalcon

Ваша неспособность использовать STL так, чтобы не было больно, давно известна. Тем не менее, был бы признателен, если бы вы ответили на поставленный вопрос.

eao197 ★★★★★
()
Ответ на: комментарий от RazrFalcon

100500 нюансов и исключений - не самая простая задача.

o rly? открываешь документацию, там все описано про каждый метод контейнера, что он делает и какие у него гарантии.

Вот попробуйте объяснить новичку разницу между push_back и emplace.

Разве это не очевидно из сигнатуры? В Qt этой проблемы нет только потому, что emplace (пока) не реализовали.

annulen ★★★★★
()
Ответ на: комментарий от RazrFalcon

Только в Qt приложении всё равно придётся использовать Qt контейнеры

Методов, принимающих или возвращающих контейнеры в Qt, по большому счету, не так уж много. В основном они используют QList, так что не важно, какие ассоциативные контейнеры и связные списки использует приложение

annulen ★★★★★
()
Ответ на: комментарий от staseg

Люди коммуницируют на регистронезависимом языке, поэтому засунь свой баттхерт обратно и поглубже.

То есть ты ещё и правила письменного русского языка не знаешь (письменного, потому что общение идёт в письменной форме). Особенно интересно звучит фраза о независимости регистров в разрезе письменного немецкого языка, которым тебе приходится пользоваться.

alex-w ★★★★★
()
Ответ на: комментарий от alex-w

В вербальном языке, на котором действительно происходит коммуникация, нет никаких регистров. Письменный язык — проекция, да, со своими правилами, но... Какое отношение к этим правилам может иметь Qt, QT или qt?

staseg ★★★★★
()
Ответ на: комментарий от CrossFire

QT - аббревиатура от названия QuickTime (и да, есть QuickTime framework, ныне устаревший), Qt - название (имя собственное). Pascal и PASCAL - имена собственные языка программирования и базы данных. Причём Pascal еще и довольно типичное французское имя.

«QT и stl в одном проекте, приводить ли все к единообразию.» - речь идёт о приведении к единообразию использования фреймворка QuickTime и стандартной библиотеки шаблонов.

Правильно с точки зрения письменного русского языка будет «Qt и STL в одном проекте — приводить ли все к единообразию?»

alex-w ★★★★★
()
Ответ на: комментарий от annulen

Разве это не очевидно из сигнатуры?

Я к тому, что для понимание этого метода нужно понимать Move semantics, которая сама по себе опасная штука. В итоге получаем усложнение на ровном месте. В этом плане Qt тупо проще (понятное дело у move есть преимущества).

RazrFalcon ★★★★★
()
Ответ на: комментарий от annulen

открываешь документацию, там все описано про каждый метод контейнера, что он делает и какие у него гарантии.

Суть в сложности, а не в доке. Qt даёт больше гарантий и он проще в использовании/поддержке.

RazrFalcon ★★★★★
()
Ответ на: комментарий от alex-w

«QT и stl в одном проекте, приводить ли все к единообразию.» - речь идёт о приведении к единообразию использования фреймворка QuickTime и стандартной библиотеки шаблонов.

С чего вы взяли, что речь идет о стандартной библиотеке шаблонов? Чтобы речь шла о ней, нужно было написать STL, а тут вообще какое-то неведомое сочетание букв без всякого смысла.

Иван — имя собственное. ИВАН — все еще имя собственное в каком-нибудь машиночитаемом бланке, и никто не подумает, что может быть это аббревиатура от Износостойкий Вариометр Ангеографической Направленности.

CrossFire ★★★★★
()
Последнее исправление: CrossFire (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Благодарю за ответ. Я, правда, не знаю, как в emplace_back можно увидеть головную боль от use after move, но за ответ спасибо.

eao197 ★★★★★
()
Ответ на: комментарий от staseg

Какое отношение к этим правилам может иметь Qt, QT или qt?

Приведу простой пример письменного языка: Dick и dick - первое, довольно распространенная британская фамилия (и распространенное сокращение от имени Ричард), второе - эвфемизм для полового члена. И когда ты увидишь текст вида «Hi, dick», то что ты вынесешь из этой фразы? В русском языке тоже полно таких примеров: АВМ и Авм - первое, это название серии аналоговых вычислительных машин, второе - название реки; АГА и Ага - академия гражданской авиации и утвердительное междометие; АДА и Ада - организация и имя... И т.п.

Во многих случаях из контекста всё сразу становится понятно, в данном же случае и Qt, и QT отсылают к разным фреймворкам и однозначно понять о чём речь нельзя. Можно только сделать предположение, что спросивший имел ввиду Qt и на основании этого уже ответить.

alex-w ★★★★★
()
Последнее исправление: alex-w (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.