|
(Не)доработки языков программирования, которые хотели ли бы вы |
|
|
|
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, 06:38
|

Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 20-01-05
Из: Зеленоград
Пользователь №: 2 070

|
Цитата(GetSmart @ Feb 22 2010, 15:13)  Почему не делают в ЯВУ возврат из функций несколько переменных?
Вроде бы несложно было бы объявить функцию типо так: (int,int,char) funcname(char); Хмм... А чем вас возврат функцией структуры не устраивает? Код typedef struct { int a; char b; char c; } T_S3;
T_S3 s3func(int i) { T_S3 s3; s3.a = i+1; s3.b = i+2; s3.c = i+3; return s3; }
int test3(void) { int i; i = s3func(1).a; return s3func(i).b; } Листинг от IAR ARM 5.2 CODE \ In section .text, align 4, keep-with-next 1325 T_S3 s3func(int i) 1326 { \ s3func: \ 00000000 0200 MOVS R2,R0 \ 00000002 82B0 SUB SP,SP,#+8 1327 T_S3 s3; 1328 s3.a = i+1; \ 00000004 481C ADDS R0,R1,#+1 \ 00000006 0090 STR R0,[SP, #+0] 1329 s3.b = i+2; \ 00000008 881C ADDS R0,R1,#+2 \ 0000000A 6B46 MOV R3,SP \ 0000000C 1871 STRB R0,[R3, #+4] 1330 s3.c = i+3; \ 0000000E C91C ADDS R1,R1,#+3 \ 00000010 6846 MOV R0,SP \ 00000012 4171 STRB R1,[R0, #+5] 1331 return s3; \ 00000014 03C8 LDM R0!,{R0,R1} \ 00000016 02B0 ADD SP,SP,#+8 \ 00000018 03C2 STM R2!,{R0,R1} \ 0000001A 7047 BX LR ;; return 1332 } 1333
\ In section .text, align 4, keep-with-next 1334 int test3(void) 1335 { \ test3: \ 00000000 00B5 PUSH {LR} \ 00000002 83B0 SUB SP,SP,#+12 1336 int i; 1337 i = s3func(1).a; \ 00000004 0121 MOVS R1,#+1 \ 00000006 6846 MOV R0,SP \ 00000008 ........ BL s3func \ 0000000C 0099 LDR R1,[SP, #+0] 1338 return s3func(i).b; \ 0000000E 6846 MOV R0,SP \ 00000010 ........ BL s3func \ 00000014 6846 MOV R0,SP \ 00000016 0079 LDRB R0,[R0, #+4] \ 00000018 03B0 ADD SP,SP,#+12 \ 0000001A 00BD POP {PC} ;; return 1339 }
|
|
|
|
Сообщений в этой теме
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 _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 GetSmart vmp, это то же самое как и передавать указатель на... Feb 24 2010, 09:20 dxp Цитата(GetSmart @ Feb 24 2010, 15:20) vmp... Feb 24 2010, 10:04 _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
|
|
|