реклама на сайте
подробности

 
 
> (Не)доработки языков программирования, которые хотели ли бы вы
GetSmart
сообщение Feb 22 2010, 12:13
Сообщение #1


.
******

Группа: Участник
Сообщений: 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
Причина редактирования: Тема переименованна по просьбе автора


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
GetSmart
сообщение Feb 24 2010, 09:20
Сообщение #2


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



vmp, это то же самое как и передавать указатель на структуру в качестве параметра функции. Код будет 100% одинаковым. Переменнаяя/результат будет располагаться в стеке. Но т.к. современные компиляторы (сами) стараются располагать переменные в регистрах, то вместо этого устаревшего варианта возврата результата через стек пора бы уже вводить возврат результата (множественного) через регистры. Раньше было рано, а теперь в самый раз smile.gif


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
dxp
сообщение Feb 24 2010, 10:04
Сообщение #3


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) *
Но т.к. современные компиляторы (сами) стараются располагать переменные в регистрах, то вместо этого устаревшего варианта возврата результата через стек пора бы уже вводить возврат результата (множественного) через регистры. Раньше было рано, а теперь в самый раз smile.gif

Это всегда было и было отдано на откуп реализации. А если структура не лезет в регистры, то тут никакие новые правила языка не помогут - все равно будет передавать через память.


--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th June 2025 - 13:42
Рейтинг@Mail.ru


Страница сгенерированна за 0.0148 секунд с 7
ELECTRONIX ©2004-2016