Последние темы Поиск
Общие форумы
Специализированные форумы
ПроцессорыРазгон и охлаждениеСистемные платыМодули памятиВидеосистемаTV- и FM-тюнеры, видеовход, видеовыходЦифровое видео: захват, монтаж, обработкаМониторы и другие устройства отображенияЦифровое фотоБеспилотные летательные аппаратыЦифровой звукProAudio: Профессиональное звуковое оборудованиеСтереосистемыДомашний кинотеатр: проигрыватели и источники сигналаДомашний кинотеатр: аудиосистемаДомашний кинотеатр: ТV и проекторыМагнитные и SSD накопителиОптические носители информацииСетевые носители информацииПериферияКорпуса, блоки питания, UPSСети, сетевые технологии, подключение к интернетуСистемное администрирование, безопасностьСерверыНоутбуки, нетбуки и ультрабукиПланшеты и электронные книгиМобильные телефоны, смартфоны, кпк, коммуникаторыМобильные гаджетыОператоры и технологии мобильной связиТелефония, телекоммуникации, офисные АТСБытовая техника
Программы
Игры
Авторские форумы
Прочие форумы
Форумы поддержки портала iXBT.com
Архивы конференции
Архив "О Конференции"Архив "Процессоры"Архив "Разгон и охлаждение"Архив "Системные платы"Архив "Модули памяти"Архив "Видеосистема"Архив "Видеозахват"Архив "Мониторы и другие устройства отображения"Архив "Цифровое изображение"Архив "Цифровой звук"Архив "Периферия"Архив "Корпуса, блоки питания, UPS"Архив "Коммуникации: сети и сетевые технологии"Домашний интернет, модемы (архив)Архив "Системное администрирование, безопасность"Архив "Мобильная связь"Программы Microsoft: Windows, Office, Server, Windows LiveАрхив "OС и системное ПО"Архив "Программы: Интернет"Архив "Программирование"Форум прикладных программистовАрхив "Электронные устройства и компоненты"Архив "Околокомпьютерный Флейм & Общий"Архив "Полемика (Злобный Флейм)"Околоавтомобильный ФлеймФорум ремонтниковВопросы компании IntelФотокамеры SamsungФорум о магазине приложений RuStoreФорум по продукции компании Huawei
Справка и сервисы
Другие проекты iXBT.com
Страницы:Кликните, чтобы указать произвольную страницуназад12360616263646566676869далее
Panda: Какой язык программирования выбрать в РФ? Java, PHP, Python, C#, Rust, C++, JavaScript (часть 2)
Трезвая морда
unregistered
Ответить
Т
Трезвая морда unregistered
10 дней назад / 19 марта 2025 00:43
А массив структур содержит члены одного типа.
1kvolt
Member
519/1995 ответов, #5 в рейтинге
8 лет на iXBT, с марта 2017
Чаще пишет в "Общий" (28%)
Россия, Мурманск
Инфо Ответить
1kvolt Member
10 дней назад / 19 марта 2025 00:45
Трезвая морда
А массив структур содержит члены одного типа.

Да, если это структуры, определённые как тип. Напихать в массив произвольных структур не получится, неа.
Трезвая морда
unregistered
Ответить
Т
Трезвая морда unregistered
10 дней назад / 19 марта 2025 00:49
1kvolt
Да, если это структуры, определённые как тип.
Получается что тип данных.

Добавление от 19.03.2025 00:49:

пользовательский тип данных
1kvolt
Member
520/1996 ответов, #5 в рейтинге
8 лет на iXBT, с марта 2017
Чаще пишет в "Общий" (28%)
Россия, Мурманск
Инфо Ответить
1kvolt Member
10 дней назад / 19 марта 2025 00:55
Трезвая морда
Получается что тип данных.
Добавление от 19.03.2025 00:49:

пользовательский тип данных


Нет, получается, что их можно определять как тип данных. А можно и не определять. Иными словами, структура как тип данных - это частный случай структур как концепции организации данных.
Трезвая морда
unregistered
Ответить
Т
Трезвая морда unregistered
10 дней назад / 19 марта 2025 00:59
Ну допустим определили как тип данных, ваши стопятьсот функций уже не посыпятся, так как они будут работать с определённым типом данных.
areex
Member
2391/47708 ответов, #2 в рейтинге
23 года на iXBT, с февраля 2002
Чаще пишет в "Юмор" (50%)
Инфо Ответить
areex Member
10 дней назад / 19 марта 2025 01:19
1kvolt
Мы же говорили об ООП изначально. Забыл уже что ли?
И какое отношение имеют си и ее структуры к ооп?

Я написал выше, почему.
Ну я тебе привел привел. Какой из них быстрее. То что ты это скажешь было понятно сразу, я и не спрашивал. Типичное ожидание верхогляда.

Я же тебе написал, что не шарю в ассемблере.
Погоди, ты на серьезных ща утверждаешь, что одно быстрее другого. Как ты это вычисляешь, если даже не можешь подсчитать? Рот палец ветер?
Передача по значение займет один такт в современных CPU. Максимум три. Вторая, передача по указателю, особенно при промахе кеша, может занять сотни тактов.
Но тебя это совершенно не смущает. Белые люди тебе сказали, что он быстрее...

А потом просто возьми структурку чуть-чуть побольше и посчитай ещё раз.
Ну взял. И?

Во-вторых, ни они, ни Hance не писали, что им что-то непонятно в моих письменах.
И как из этого следует, что им понятно? У тебя еще и с логикой проблемы?

Ну давай, поясни, как ты добавишь адрес человека, и емайл, и телефон, например, не раздувая структуры.
Этот разговор уже сильно больше срача на форуме и ты не самый благодарный слушатель, чтобы мне не лень было дизайн всерьез обсуждать. Про это есть много книжек. Да и проблемы как таковой тоже нет. Не будет она принципиально влиять на передачу по ссылке или значению. Кроме случая когда очень много полей и они все используются в одной функции.

В книгах и MSDN. Нигде ни разу не встречал передачи структуры по значению, кроме случаев, когда собственно шёл рассказ о самом наличии этой возможности.
В каких книгах? 70 годов? В MSDN с помощью структур эмулируется версионность. Там вообще другие сценарии. Там нужна вся структура даже если это будет медленнее. Если мы говорим о WinAPI.

Исправлено: areex, 19.03.2025 01:15

Добавление от 19.03.2025 01:19:

1kvolt
Я же написал, по каким. Записи которых на Ютубы выкладывают.
Так там все выкладывают. В том числе и с академиками. Ты уж сам выбираешь какие смотреть.

Приводить пример и просить объявить ещё одну переменную этого типа надо?
Я же тебе привел пример?! Уточни с какого раза до тебя доходит?
К сообщению приложены файлы:
1kvolt
Member
521/1997 ответов, #5 в рейтинге
8 лет на iXBT, с марта 2017
Чаще пишет в "Общий" (28%)
Россия, Мурманск
Инфо Ответить
1kvolt Member
10 дней назад / 19 марта 2025 01:41
Трезвая морда
Ну допустим определили как тип данных, ваши стопятьсот функций уже не посыпятся, так как они будут работать с определённым типом данных.

Так я не писал, что они посыпятся. Я писал, что переделывать их потом замахаешься, когда придёт время осознания, что надо было передавать по указателю.

areex
И какое отношение имеют си и ее структуры к ооп?

Да откуда я знаю?
Мы обсуждали странную не имеющую смысла классификацию программирования, потом как-то перешли на ООП, потом почему-то свалились в обсуждение структур в С. ЕМНИП так прошёл наш день. Как всё это получилось именно так - я хз.

Ну я тебе привел привел. Какой из них быстрее. То что ты это скажешь было понятно сразу, я и не спрашивал. Типичное ожидание верхогляда.

Я же написал уже два раза - я не шарю в ассемблере.
В первом примере функция, принимающая по значению, имеет на одну инструкцию больше. Но я не в курсе, которая из функций сколько циклов процессора тратит на самом деле. Если ты в курсе - так и написал бы сразу.
Во втором примере (из этой цитаты) инструкции вроде одинаковые и их одинаковое количество. Вероятно, и скорость исполнения будет одинаковой. Кроме того, есть у меня подозрение, что компилятор оптимизировал в данном случае и заменил передачу по значению на передачу по указателю. Что лишний раз доказывает, что по значению передавать не оптимально. Но это - подозрение, в ассемблере - ещё раз! - я не шарю.
Тут всего четыре инструкции, можешь вкратце написать, что именно в них происходит?

Передача по значение займет один такт в современных CPU. Максимум три.

Меня смущает, что в обоих случаях инструкции одинаковые, а также наличие каких-то DWORD PTR и адресов со смещениями. Умный компилятор выкинул нахрен твои передачи по значению, как мне кажется.

Ну взял. И?

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

И как из этого следует, что им понятно? У тебя еще и с логикой проблемы?

Когда люди не понимают - они переспрашивают. Как ты, ага.

Не будет она принципиально влиять на передачу по ссылке или значению. Кроме случая когда очень много полей и они все используются в одной функции.

См. выше - сдаётся мне, что компилятор не дурак и выкидывает на мороз твою передачу по значению даже в случае всего двух используемых полей.
Надеяться, что компилятор исправит за тебя твой говнокод, - ИМХО так себе затея. Зачем раскидывать грабли, если можно не раскидывать?

Добавление от 19.03.2025 01:41:

areex
Ты уж сам выбираешь какие смотреть.

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

Я же тебе привел пример?! Уточни с какого раза до тебя доходит?

Это адресовано было Трезвая морда, по поводу структур и массивов как типов.
Varcom
Member
125/34901 ответов, #10 в рейтинге
13 лет на iXBT, с октября 2011
Чаще пишет в "Авто" (46%)
Инфо Ответить
V
Varcom Member
9 дней назад / 19 марта 2025 06:48
1kvolt
Нигде ни разу не встречал передачи структуры по значению
Про json-ы всякие слышал? Да и вообще концепт "разделения по данным"?

Добавление от 19.03.2025 06:48:

Трезвая морда
допустим определили как тип данных, ваши стопятьсот функций уже не посыпятся, так как они будут работать с определённым типом данных.
Ну как сказать... а там вдруг ОРМ или сериализатор какой через рефлекшены в стеке вызовов окажется неожиданно.
Hance
Member
2103/40400 ответов, #1 в рейтинге
24 года на iXBT, с февраля 2001
108 фото на iXBT.photo
Чаще пишет в "Политика" (51%)
Ватикан
Инфо Ответить
Hance Member
9 дней назад / 19 марта 2025 08:46
1kvolt
Заметь, функций уже довольно много - и все они традиционно получают всю структуру по значению. Рано или поздно твой проектик просто встанет колом, гоняя в памяти туда-сюда копии этих структур

В терминах БД: разбиваете широкую таблицу на несколько 1:1 и джойните при необходимости соединяя по id. Но это не так уж и частый случай. Это значит, что сущность представлена в нескольких boundary context: один слепой мудрец щупает ногу слона и говорит что слон похож на столб, другой мудрец щупает х...т и говорит что слон похож на шланг,...

Добавление от 19.03.2025 08:46:

А если это сложная не плоская структура, то передаём по указателю добавив один символ. Делов то. Но это может привести к проблемам и не должно поощряться.

Исправлено: Hance, 19.03.2025 09:02

areex
Member
2392/47709 ответов, #2 в рейтинге
23 года на iXBT, с февраля 2002
Чаще пишет в "Юмор" (50%)
Инфо Ответить
areex Member
9 дней назад / 19 марта 2025 08:49
1kvolt
Да откуда я знаю?
Полностью запутался и утерял контекст? Бывает.

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

В первом примере функция, принимающая по значению, имеет на одну инструкцию больше
Ну хватит уже позориться-то. Давай помогу тебе воспользоваться чат-ботом, подозрительный ты наш.
объясни что делает этот код? какая функция быстрее?
foo:
mov rax, rdi
shr rax, 32
add eax, edi
ret

bar:
mov eax, dword ptr [rdi + 4

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

Надеяться, что компилятор исправит за тебя твой говнокод, - ИМХО так себе затея. Зачем раскидывать грабли, если можно не раскидывать?

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

Когда люди не понимают - они переспрашивают. Как ты, ага.
Это какой-то природный закон? Или все же у людей должен быть интерес?
Hance
Member
2104/40401 ответов, #1 в рейтинге
24 года на iXBT, с февраля 2001
108 фото на iXBT.photo
Чаще пишет в "Политика" (51%)
Ватикан
Инфо Ответить
Hance Member
9 дней назад / 19 марта 2025 09:05
areex
Остальные участники это никак не комментируют. Немного Hance, но он все как раз понимает
72x52, 13.3Kb

Добавление от 19.03.2025 08:58:

areex
какая функция быстрее
Так это всё в регистрах.
Речь шла о чём то вроде
001{
002  "id": "123e4567-e89b-12d3-a456-426614174000",
003  "personalInfo": {
004    "fullName": {
005      "firstName": "Иван",
006      "lastName": "Петров",
007      "patronymic": "Сергеевич"
008    },
009    "birthDetails": {
010      "dateOfBirth": "1990-05-15",
011      "placeOfBirth": {
012        "city": "Москва",
013        "country": "Россия"
014      }
015    },
016    "contacts": {
017      "emails": [
018        "ivan.petrov@example.com",
019        "ivan.p@work.com"
020      ],
021      "phones": [
022        {
023          "type": "mobile",
024          "number": "+7 (999) 123-45-67"
025        },
026        {
027          "type": "home",
028          "number": "+7 (495) 765-43-21"
029        }
030      ]
031    }
032  },
033  "residence": {
034    "currentAddress": {
035      "street": "ул. Тверская, д. 25, кв. 12",
036      "city": "Москва",
037      "postalCode": "125009",
038      "country": "Россия"
039    },
040    "previousAddresses": [
041      {
042        "street": "пр. Мира, д. 15, кв. 7",
043        "city": "Санкт-Петербург",
044        "postalCode": "190000",
045        "country": "Россия",
046        "years": ["2005-2010"]
047      }
048    ]
049  },
050  "professionalInfo": {
051    "education": [
052      {
053        "institution": "МГУ им. Ломоносова",
054        "degree": "Бакалавр",
055        "field": "Компьютерные науки",
056        "years": "2008-2012",
057        "thesis": {
058          "title": "Анализ алгоритмов машинного обучения",
059          "supervisor": "Проф. Сидоров А.А."
060        }
061      }
062    ],
063    "workExperience": [
064      {
065        "company": "Яндекс",
066        "position": "Старший разработчик",
067        "period": "2015-2023",
068        "projects": [
069          {
070            "name": "Поисковый алгоритм Yandex 3.0",
071            "role": "Tech Lead",
072            "technologies": ["Python", "Kubernetes", "TensorFlow"]
073          }
074        ]
075      }
076    ],
077    "certifications": [
078      {
079        "name": "AWS Certified Solutions Architect",
080        "year": 2020,
081        "expiration": 2025
082      }
083    ]
084  },
085  "family": {
086    "maritalStatus": "married",
087    "spouse": {
088      "fullName": "Мария Петрова",
089      "birthDate": "1992-08-23"
090    },
091    "children": [
092      {
093        "fullName": "Алексей Петров",
094        "birthDate": "2018-03-10",
095        "gender": "male"
096      }
097    ],
098    "parents": {
099      "father": {
100        "fullName": "Сергей Петров",
101        "birthDate": "1965-11-30"
102      },
103      "mother": {
104        "fullName": "Ольга Петрова",
105        "birthDate": "1968-07-12"
106      }
107    }
108  },
109  "health": {
110    "bloodType": "A+",
111    "allergies": ["пыльца", "арахис"],
112    "medicalHistory": [
113      {
114        "diagnosis": "Аппендицит",
115        "date": "2010-09-01",
116        "hospital": "ГКБ № 15"
117      }
118    ]
119  },
120  "digitalFootprint": {
121    "socialNetworks": [
122      {
123        "platform": "LinkedIn",
124        "url": "linkedin.com/in/ivanpetrov"
125      }
126    ],
127    "lastLogin": "2023-10-20T15:32:45Z"
128  }
129}
Но тут тоже лучше передавать по значению а не мутировать на месте. Ибо это бизнес сущность.

Добавление от 19.03.2025 08:59:

Или хранить в нескольких boundary context

Добавление от 19.03.2025 09:05:

areex

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

Это для простейших: чисел, и т.п.
Но да. Теперича не то, что давеча. А лет 35 назад учили что по ссылке дешевле. Это я хорошо помню.
areex
Member
2393/47710 ответов, #2 в рейтинге
23 года на iXBT, с февраля 2002
Чаще пишет в "Юмор" (50%)
Инфо Ответить
areex Member
9 дней назад / 19 марта 2025 09:17
Hance
Речь шла о чём то вроде
Речь была о передаче параметров по ссылку или по значению. Чувак совершенно не понимает как работают современные компиляторы. И вообще находится на пики глупости, по Даннингу-Крюгеру, или стремится к нему.

Но да. Теперича не то, что давеча. А лет 35 назад учили что по ссылке дешевле. Это я хорошо помню.
35 лет назад, в принципе, было все тоже самое. Будучи большим любителем ассемблера, каковым любой станет сидя на pdp11, 6502 и z80, я помню культурный шок (а че так можно было?!), когда компилятор hello world просто распихал по регистрам, ни разу не обратившись к памяти.
Hance
Member
2105/40402 ответов, #1 в рейтинге
24 года на iXBT, с февраля 2001
108 фото на iXBT.photo
Чаще пишет в "Политика" (51%)
Ватикан
Инфо Ответить
Hance Member
9 дней назад / 19 марта 2025 09:20
Трезвая морда
Массив тип данных?
Чем структура отличается от массива?

Массив это неопределенное количество однотипных элементов.
Кстати, и массив и структура размещаются в памяти одним непрерывным куском. А объект нет.

зачем я всё это пишу? надо прекращать
Varcom
Member
126/34903 ответов, #10 в рейтинге
13 лет на iXBT, с октября 2011
Чаще пишет в "Авто" (46%)
Инфо Ответить
V
Varcom Member
9 дней назад / 19 марта 2025 09:24
Hance
Массив это неопределенное количество однотипных элементов.
Разве не определенное? Ну, кроме unmanaged языков, где он скорее указатель со смещением.
Hance
Member
2106/40403 ответов, #1 в рейтинге
24 года на iXBT, с февраля 2001
108 фото на iXBT.photo
Чаще пишет в "Политика" (51%)
Ватикан
Инфо Ответить
Hance Member
9 дней назад / 19 марта 2025 09:39
Varcom
Если ещё динамические массивы.
Ну хорошо, да.

Добавление от 19.03.2025 09:31:

Надоела дискуссия

Вопрос:
Объект в ООП передаётся по ссылке не из-за скорости, а чтобы обеспечить полиморфизм подтипов? Раст использует структуры. Но что если она станет большой?

Ответ

Добавление от 19.03.2025 09:39:

Занятно, но среди топ-20 языков позволяющих писать без ООП с хорошей производительностью и полиморфизмом кроме Раст ничего пока и нет.
Разве что Go — близок к требованиям, но его полиморфизм ограничен интерфейсами, а дженерики появились недавно
Трезвая морда
unregistered
Ответить
Т
Трезвая морда unregistered
9 дней назад / 19 марта 2025 12:13
Даже динамический массив под капотом каждый раз создаётся новый, а старый удаляется при изменение размеров.
1kvolt
Member
522/2004 ответов, #5 в рейтинге
8 лет на iXBT, с марта 2017
Чаще пишет в "Общий" (28%)
Россия, Мурманск
Инфо Ответить
1kvolt Member
9 дней назад / 19 марта 2025 12:59
Hance
А если это сложная не плоская структура, то передаём по указателю добавив один символ. Делов то.

А в теле функций точки на стрелочки Пушкин исправлять будет?

areex
Ты этим так невероятно гордишься, что решил вставлять к любой случайной взятой цитате? Или как этот тут понимать?

Гордится тут нечем. Пишу много раз, потому что ты то ли понять не можешь с одного, то ли забываешь сразу.

mov rax, rdi: Копирует 64-битное значение из регистра rdi в регистр rax.

А в регистре это значение откуда взялось?

Чувак совершенно не понимает как работают современные компиляторы. И вообще находится на пики глупости, по Даннингу-Крюгеру, или стремится к нему.

Ты уже о себе в третьем лице говорить начал?
Hance
Member
2107/40409 ответов, #1 в рейтинге
24 года на iXBT, с февраля 2001
108 фото на iXBT.photo
Чаще пишет в "Политика" (51%)
Ватикан
Инфо Ответить
Hance Member
9 дней назад / 19 марта 2025 13:58
Пойду, напишу что-то на Go
Только что IDE нормальная появилась, всё готово из коробки. Goland.
Ну и rustrover тоже свежачок

Добавление от 19.03.2025 13:58:

C# никак от ООП не уйдет
И это мешает уже даже на стадии проектирования
Varcom
Member
127/34905 ответов, #10 в рейтинге
13 лет на iXBT, с октября 2011
Чаще пишет в "Авто" (46%)
Инфо Ответить
V
Varcom Member
9 дней назад / 19 марта 2025 14:14
Hance
C# никак от ООП не уйдет
И это мешает уже даже на стадии проектирования

Чем мешает-то?
Ваш ответ:

Нет значка Нет значка Вот тут! Лампочка Восклицание Вопрос Класс! Улыбка Злость Огорчение Поговорим? Краснею Подмигивание Ругаю ОдобряюBIUdelSxsupxsuboffsp spoilerqurlimgvideo• list1. list1 codeprecenter-hr-rusQWE→ЙЦУ
файлыочистить
Ваше имя: Авторизуйтесь Предпросмотр В полную форму
вставить выделенную цитату в окно ответа
Если Вы считаете это сообщение ценным для дискуссии (не обязательно с ним соглашаться), Вы можете поблагодарить его автора, а также перечислить ему на счет некоторую сумму со своего баланса (при отзыве благодарности перечисленная сумма не будет вам возвращена).
Также вы можете оценить сообщение как неудачное.
В течение суток можно 20 раз оценить сообщения разных участников (купите Premium-аккаунт, либо оплачивайте оценки сверх лимита).
Если Вы считаете это сообщение ценным для дискуссии (не обязательно с ним соглашаться), Вы можете поблагодарить его автора, а также перечислить ему на счет некоторую сумму со своего баланса (при отзыве благодарности перечисленная сумма не будет вам возвращена).
Также вы можете оценить сообщение как неудачное.
В течение суток можно 20 раз оценить сообщения разных участников (купите Premium-аккаунт, либо оплачивайте оценки сверх лимита).
Страницы:Кликните, чтобы указать произвольную страницуназад12360616263646566676869далее