Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.09.2015, 11:51   #11
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Сообщение от taras-proger Посмотреть сообщение
Просто он соответствует странному способу передачи изменяемого параметра. Это вообще-то вручную написано, такого компилятора нет и при вменяемых программистах-инструментальщиках не будет. Вопрос в том, почему в языкастых книгах для новичков не рассказано, что это в принципе возможно, но так делать не надо и почему именно так делать не надо.
1)тот код что вы привели этот тот код за который я бы увольнял.
есть инструкция XCHG, есть инлайн в конце концов.
ибо вместо всех этой мешанины мы могли просто передать две ссылки и все.
инструкций было бы меньше.
2)я уже сказал что это не способ, а изврат.ибо мы либо передаем копию, либо не передаем. что мы делаем с возвратом функции наше дело.
да и я говорил что это жутко не оптимально.
потому это не способ, это попытка ваша сделать монстра.
к книгах этого не пишут потому что его нет.
нет такого синтаксиса, нет и нет.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 18.09.2015, 16:58   #12
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,714
По умолчанию

Цитата:
Сообщение от taras-proger Посмотреть сообщение
Вопрос в том, почему в языкастых книгах для новичков не рассказано, что это в принципе возможно, но так делать не надо и почему именно так делать не надо.
Потому что существует и без того 100500 способов написать быдлокод, кэп.
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Старый 18.09.2015, 17:40   #13
DM_bite
Участник клуба
 
Аватар для DM_bite
 
Регистрация: 29.07.2008
Сообщений: 1,091
По умолчанию

Да уж, эту энергию, да в мирных целях...
Кто бы ты ни был - не думай о себе слишком (с)
DM_bite вне форума Ответить с цитированием
Старый 18.09.2015, 21:24   #14
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
это про какие механизмы речь идет, если не секрет?
Динамические массивы например. Векторы, списки и т.д.
Я не знаю, может ассемблерщикам и надо. В моей жизни и на Делфи и на c# вообще никогда не потребовалось поменять местами значения переменных . Нафига это в жизни? Да и даже если в будущем разово встретится - я через третью переменную обменяю и все равно будет круто, потому что компилятор подрежет как надо.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 18.09.2015 в 21:31.
Utkin вне форума Ответить с цитированием
Старый 18.09.2015, 21:58   #15
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Динамические массивы например. Векторы, списки и т.д.
скопировать вектор - одно, скопировать указатель на вектор - другое.
Цитата:
В моей жизни и на Делфи и на c# вообще никогда не потребовалось поменять местами значения переменных
Совсем никогда и никаких? А у меня в C и C++ такое очень часто делается.
Цитата:
Да и даже если в будущем разово встретится - я через третью переменную обменяю и все равно будет круто, потому что компилятор подрежет как надо.
Если сможет. Допустим такое
Код:
временный_список = список_1
список_1 = список_2
список_2 = временный_список
компилятор не сможет оптимизировать как надо, и это приведет к ненужному копированию тяжелых объектов и их содержимого. Зато если есть операция обмена содержимого списков, то её применение будет наилучшим выбором (например, свопнуть размер и указатель на первый элемент списка).

Цитата:
Но он ведь возможен, так как вызывающий код "знает", откуда он копировал параметр.
Это относится к устройству конкретных платформ, а не к языку, поэтому в "языкастых" книгах такое Вы врядли найдете. Это тематика для других книг.

Последний раз редактировалось Croessmah; 18.09.2015 в 22:01.
Croessmah вне форума Ответить с цитированием
Старый 18.09.2015, 22:12   #16
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,714
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Код:
временный_список = список_1
список_1 = список_2
список_2 = временный_список
компилятор не сможет оптимизировать как надо, и это приведет к ненужному копированию тяжелых объектов и их содержимого. Зато если есть операция обмена содержимого списков, то её применение будет наилучшим выбором (например, свопнуть размер и указатель на первый элемент списка).
В языках Делфи/С#/Java объекты - изначально ссылочные данные, поэтому там код выше физически и означает обмен двух указателей местами.

Цитата:
Совсем никогда и никаких? А у меня в C и C++ такое очень часто делается.
И что такого? А в ассме еще и куча разновидностей "goto" по флагам. А в С# и Java даже память прибирать не надо.
Благими намерениями устлана дорога на programmersforum.ru

Последний раз редактировалось MihalNik; 18.09.2015 в 22:19.
MihalNik вне форума Ответить с цитированием
Старый 18.09.2015, 22:15   #17
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
В языках Делфи/С#/Java объекты - изначально ссылочные данные, поэтому там код выше физически означает обмен двух указателей местами.
Я говорил про общий случай, а не про конкретный язык. Где-то поведение будет как Вы описали, где-то - как я.
В тех же плюсах, например, это приведет к копированию, зато std::swap сделает как надо, конечно, если у него есть оптимизированная реализация для этого, иначе также будет копирование, а с приходом C++11 стала доступна семантика перемещения, это вообще конфетка
Croessmah вне форума Ответить с цитированием
Старый 18.09.2015, 22:20   #18
MihalNik
МегаМодератор
СуперМодератор
 
Регистрация: 27.11.2012
Сообщений: 5,714
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Я говорил про общий случай, а не про конкретный язык. Где-то поведение будет как Вы описали, где-то - как я.
В тех же плюсах, например, это приведет к копированию, зато std::swap сделает как надо, конечно, если у него есть оптимизированная реализация для этого, иначе также будет копирование, а с приходом C++11 стала доступна семантика перемещения, это вообще конфетка
В С++ любой костыль - конфетка
Благими намерениями устлана дорога на programmersforum.ru
MihalNik вне форума Ответить с цитированием
Старый 18.09.2015, 22:44   #19
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Я говорил про общий случай, а не про конкретный язык.
А здесь нельзя без привязки к языку - речь идет не о языке, а о его реализации.
Цитата:
В С++ любой костыль - конфетка
Да, программист на С++ легко решает не существующие в Паскале проблемы .
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 18.09.2015, 23:07   #20
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Цитата:
Да, программист на С++ легко решает не существующие в Паскале проблемы
сказал человек, пишущий на C# так вот всегда и происходит. Каждый язык лучше приспособлен для одних задач и хуже - для других, если возникает необходимость писать много костылей, то, наверное, стоит задуматься о выборе другого инструмента. Ведь в конце концов же, если не получится отверткой забить гвоздь, то нужно либо гвоздь поменять на шуруп (изменить решение задачи), либо поменять отвертку на молоток (выбрать более подходящий язык/технологию), а еще лучше сразу определиться со всем инструментарием.

Цитата:
А здесь нельзя без привязки к языку - речь идет не о языке, а о его реализации.
ну так раз нельзя без привязки, значит какое-либо сравнение должно производиться только в определенном контексте, который, как правило, правильно подобрать просто невозможно.
Croessmah вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Есть ли такая возможность подключить больше одно HDD-SATA к BeagleBone/CubieTruck pompiduskus Компьютерное железо 0 04.10.2014 17:49
О книгах Halifath Помощь студентам 3 11.02.2010 08:00
DBGrid есть ли такая возможность Baharev БД в Delphi 10 28.11.2009 20:17
Почему такая разница между Integer и LongInt? k1r1ch Общие вопросы Delphi 13 13.10.2009 09:01
почему такая бяка??? Sjava Свободное общение 17 13.11.2006 08:37