|
(Не)доработки языков программирования, которые хотели ли бы вы |
|
|
|
Feb 22 2010, 12:13
|
.
     
Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753

|
Почему не делают в ЯВУ возврат из функций несколько переменных? Вроде бы несложно было бы объявить функцию типо так: (int,int,char) funcname(char); а потом аналогично использовать при вызове: (a,b,c) = funcname('A'); причём даже в некоторых местах так: (,,e) = funcname('A'); таким образом не используя часть переменных/регистров То есть по сути ситуация аналогичная передаче параметров через регистры, когда (ну например в АРМ) первые 3 параметра передаются в регистрах. И возврат результата по логике строго аналогичен процессу передачи параметров, только не "в", а "из". Обычно возврат нескольких параметров делают через передачу ссылок, что в некоторой степени универсальнее, т.к. можно часть ссылок не использовать в зависимости от "нити" алгоритма. Однако, такой способ требует выделение места в стеке или в другой раме под ссылочные переменные. Что на современном уровне компиляторостроения не есть гуд. Хранение и передача (возврат) переменных в регистрах - предпочтительнее.
Сообщение отредактировал Omen_13 - Feb 22 2010, 14:14
Причина редактирования: Тема переименованна по просьбе автора
--------------------
Заблуждаться - Ваше законное право :-)
|
|
|
|
|
 |
Ответов
|
Feb 24 2010, 10:04
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(GetSmart @ Feb 24 2010, 15:20)  vmp, это то же самое как и передавать указатель на структуру в качестве параметра функции. Код будет 100% одинаковым. Переменнаяя/результат будет располагаться в стеке. Не факт. Структура по семантике языка возвращается по значению. Как на самом деле реализуется, зависит от платформы, тут надо смотреть доку на конкретную платформу. Например, у Blackfin/VDSP по поводу структур сказано следующее: Return Values •For functions returning aggregate values occupying fewer than or equal to 32 bits, the result is returned in R0. •For aggregate values occupying greater than 32 bits, and fewer than or equal to 64 bits, the result is returned in register pair R0, R1. •For functions returning aggregate values occupying more than 64 bits, the caller allocates the return value object on the stack and the address of this object is passed to the callee as a hidden argument in register P0. И примеры приведены: Код --------------------------------------------------------------------------------- Function Prototype | Parameters Passed as | Return Location --------------------------------------------------------------------------------- struct s2 { | a in R0, | in R0 (s.t and s.u) char t; | b in R1, | and in R1 (s.v) char u; | c in R2 | int v; | | } | | | | struct s2 test(int a, | | int b, int c) | | --------------------------------------------------------------------------------- struct s3 { | a in R0, | in *P0 (based on value char t; | b in R1, | of P0 at the call, not char u; | c in R2 | necessarily at the int v; | | return) int w; | | } | | | | struct s3 test(int a, | | int b, int c) | | --------------------------------------------------------------------------------- Цитата(GetSmart @ Feb 24 2010, 15:20)  Но т.к. современные компиляторы (сами) стараются располагать переменные в регистрах, то вместо этого устаревшего варианта возврата результата через стек пора бы уже вводить возврат результата (множественного) через регистры. Раньше было рано, а теперь в самый раз  Это всегда было и было отдано на откуп реализации. А если структура не лезет в регистры, то тут никакие новые правила языка не помогут - все равно будет передавать через память.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
Сообщений в этой теме
GetSmart (Не)доработки языков программирования Feb 22 2010, 12:13 DpInRock Оккам не одобряет. Feb 22 2010, 12:25 Моисей Самуилович Цитата(DpInRock @ Feb 22 2010, 15:25) Окк... May 22 2018, 18:19 Leka Для софт-процессора с 1К "регистров" у м... Feb 22 2010, 12:56 CaPpuCcino ну, всё зависит от того, о каких ЯВУ вы говорите. ... Feb 22 2010, 13:25 GetSmart Да, я говорю о Си к примеру. Паскаль аналогично. Д... Feb 22 2010, 13:46 CaPpuCcino Цитата(GetSmart @ Feb 22 2010, 16:46) Ста... Feb 22 2010, 14:40 Dog Pawlowa Цитата(GetSmart @ Feb 22 2010, 16:13) Поч... Feb 22 2010, 14:45 zltigo Цитата(GetSmart @ Feb 22 2010, 15:13) Одн... Feb 22 2010, 14:45 GetSmart Цитата(zltigo @ Feb 22 2010, 19:45) .. то... Feb 22 2010, 15:02  CaPpuCcino Цитата(GetSmart @ Feb 22 2010, 18:02) Why... Feb 22 2010, 15:28  zltigo Цитата(GetSmart @ Feb 22 2010, 18:02) Это... Feb 22 2010, 16:48   GetSmart Цитата(zltigo @ Feb 22 2010, 21:48) 1. Ес... Feb 22 2010, 17:47    zltigo Цитата(GetSmart @ Feb 22 2010, 20:47) Ещё... Feb 22 2010, 18:46     ReAl Цитата(zltigo @ Feb 22 2010, 20:46) А уро... Feb 22 2010, 22:37 Leka "...доработки языков программирования, которы... Feb 22 2010, 15:37 SasaVitebsk Честно говоря, тоже не понимаю зачем это надо. Как... Feb 22 2010, 20:12 sasamy Цитата(SasaVitebsk @ Feb 23 2010, 00:12) ... Jan 28 2012, 21:27 iiv Цитата(SasaVitebsk @ Feb 23 2010, 01:12) ... Apr 29 2017, 15:19  Эдди Цитата(iiv @ Apr 29 2017, 18:19) в GNU-C ... May 4 2017, 05:20   ar__systems Цитата(Эдди @ May 4 2017, 00:20) В gcc5 э... May 4 2017, 11:40 Xenia Отчего бы не помечтать
Тогда я и свою мечто озвуч... Feb 22 2010, 21:02 vmp Цитата(GetSmart @ Feb 22 2010, 15:13) Поч... Feb 24 2010, 06:38 _Pasha Я бы хотел, чтоб в сях(да и паскале тоже) наконец-... Feb 24 2010, 07:22 sigmaN Сэр, по-моему у вас возникают дурные мысли по прич... Feb 24 2010, 07:32 _Pasha В принципе, было бы на 100% эффективным введение с... Feb 24 2010, 07:35 AlexandrY LUA может возвращать переменные пачками.
http://ww... Feb 24 2010, 08:25 _Pasha Цитата(GetSmart @ Feb 24 2010, 12:20) Пер... Feb 24 2010, 13:06 GetSmart Структура - структурой. А я предлагаю "симмет... Feb 24 2010, 15:04 GetSmart Ещё недоработку обнаружил. Volatile.
Этот квалифи... Jan 28 2012, 05:29 _Pasha Цитата(GetSmart @ Jan 28 2012, 08:29) Но ... Jan 28 2012, 09:00  GetSmart Цитата(_Pasha @ Jan 28 2012, 14:00) Кодvo... Mar 6 2012, 05:49 toweroff Цитата(GetSmart @ Jan 28 2012, 09:29) Ещё... Jan 28 2012, 13:36 sonycman Цитата(GetSmart @ Jan 28 2012, 09:29) Ещё... Jan 28 2012, 13:44  Сергей Борщ QUOTE (sonycman @ Jan 28 2012, 15:44) А е... Jan 28 2012, 14:37   GetSmart Цитата(Сергей Борщ @ Jan 28 2012, 19:37) ... Jan 29 2012, 02:42   ReAl Цитата(Сергей Борщ @ Jan 28 2012, 16:37) ... Mar 7 2012, 06:58    GetSmart Цитата(ReAl @ Mar 7 2012, 11:58) А вообще... Mar 7 2012, 07:17 vitan Цитата(GetSmart @ Feb 22 2010, 16:13) Поч... Jan 28 2012, 07:49 _Ivana А мне бы хотелось вот какую доработку - чтобы напи... Jan 29 2012, 10:03 _Pasha Цитата(GetSmart @ Jan 29 2012, 05:42) Чем... Jan 29 2012, 11:42 GetSmart Цитата(_Pasha @ Jan 29 2012, 16:42) Дык, ... Jan 29 2012, 12:10 sigmaN Я тут про прерывания подумал...
В стандарте языка ... Jan 30 2012, 01:34 Alex-sh Добрый вечер. Я знаю что мой вопрос несколько не в... Mar 6 2012, 19:16 ReAl Не понял вопрос.
Какая запись и где должна быть ну... Mar 7 2012, 17:22 _Pasha До кучи Mar 9 2012, 07:46 GetSmart Цитата(_Pasha @ Mar 9 2012, 12:46) До куч... Mar 9 2012, 11:23 GetSmart Хотел красиво оптимизировать Си-код, выполняющий о... Apr 13 2017, 16:08 ar__systems Цитата(GetSmart @ Apr 13 2017, 11:08) Хот... May 4 2017, 03:27 sigmaN Цитатачто де пиши на С++, но там аналогичный код с... Apr 30 2017, 08:29 Эдди Вообще-то, сокеты входят в stdlib — для работы с ... May 4 2017, 15:22 Grizzzly Цитата(Эдди @ May 4 2017, 18:22) Вообще-т... May 4 2017, 17:55 RabidRabbit Цитата(Эдди @ May 4 2017, 18:22) Скажем, ... May 7 2017, 11:00 Эдди Предлагаю не рассматривать всякие альтернативы. Об... May 4 2017, 18:01 Kane Цитата(Эдди @ May 4 2017, 21:01) Предлага... May 5 2017, 14:32  TSlicer Цитата(Kane @ May 5 2017, 15:32) Вы бы с ... May 5 2017, 17:17 GetSmart Продолжаем фантазировать.
Надо что-то вроде инкомп... May 21 2018, 17:32 jcxz 1. Было-бы лучше, если бы в си, при объявлении ини... May 22 2018, 03:16  haker_fox QUOTE (jcxz @ May 22 2018, 11:16) 1. Было... May 22 2018, 05:31  Forger Цитата(jcxz @ May 22 2018, 06:16) 1. Было... May 22 2018, 06:57   jcxz Цитата(Forger @ May 22 2018, 09:57) Дык, ... May 22 2018, 08:15    ViKo Цитата(jcxz @ May 22 2018, 11:15) И что? ... May 22 2018, 08:25     jcxz Цитата(ViKo @ May 22 2018, 11:25) Не согл... May 22 2018, 08:45      ViKo Цитата(jcxz @ May 22 2018, 11:45) Блин... May 22 2018, 09:03    Forger Цитата(jcxz @ May 22 2018, 11:15) Теперь ... May 22 2018, 08:49     Nixon Цитата(Forger @ May 22 2018, 11:49) Поэто... May 22 2018, 09:13      Forger Цитата(Nixon @ May 22 2018, 12:13) Кодcon... May 22 2018, 09:25     jcxz Цитата(Forger @ May 22 2018, 11:49) Это л... May 22 2018, 14:20      Forger Цитата(jcxz @ May 22 2018, 17:20) Всё что... May 22 2018, 14:41       jcxz Цитата(Forger @ May 22 2018, 17:41) Элеме... May 22 2018, 15:11        Forger Цитата(jcxz @ May 22 2018, 18:11) Как Вы ... May 22 2018, 16:00         jcxz Цитата(Forger @ May 22 2018, 19:00) Учест... May 22 2018, 16:35          Forger Цитата(jcxz @ May 22 2018, 19:35) А прогр... May 22 2018, 16:57          _pv Цитата(jcxz @ May 22 2018, 22:35) Но лучш... May 23 2018, 08:18        _pv Цитата(jcxz @ May 22 2018, 21:11) Эти сво... May 22 2018, 16:08        XVR Цитата(jcxz @ May 22 2018, 18:11) наприме... May 23 2018, 12:04         jcxz Цитата(XVR @ May 23 2018, 15:04) Это как ... May 23 2018, 18:49  ViKo Цитата(jcxz @ May 22 2018, 06:16) 5. Было... May 22 2018, 07:42  k155la3 Цитата(jcxz @ May 22 2018, 06:16) 1. Было... May 22 2018, 09:18 Nixon Кодtemplate < int...Params > struct AAA {
... May 22 2018, 10:07 Forger Цитата(Nixon @ May 22 2018, 13:07) добро ... May 22 2018, 10:33  haker_fox QUOTE (Forger @ May 22 2018, 18:33) В дан... May 22 2018, 13:00   Forger Цитата(haker_fox @ May 22 2018, 16:00) Мы... May 22 2018, 13:47    Nixon Цитата(Forger @ May 22 2018, 16:47) Имхо,... May 22 2018, 13:54     Forger Цитата(Nixon @ May 22 2018, 16:54) IAR AR... May 22 2018, 14:05 haker_fox QUOTE (Forger @ May 22 2018, 21:47) Анало... May 23 2018, 00:33 Forger Цитата(haker_fox @ May 23 2018, 03:33) Ед... May 23 2018, 06:36  haker_fox QUOTE (Forger @ May 23 2018, 14:36) Подав... May 23 2018, 07:00   Forger Цитата(haker_fox @ May 23 2018, 10:00) Я ... May 23 2018, 07:57
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|