Easyelectronics.ru

Электроника для всех
Текущее время: 24 авг 2019, 00:07

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 15 ] 
Автор Сообщение
 Заголовок сообщения: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 18:42 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2291
Откуда: Китай, Пекин
в продолжение этой темы

на текущий момент обнаружено что...

самым оптимальным способом вернуть примитив который может быть пустым такой
Код:
typedef struct 
{
    UseVarPack_10_ * IS_EXISTS;
    struct
    {
        size_t d1;
        size_t d2;
    } IF_EXISTS;
} P10_arrayVarPack;

extern inline P10_arrayVarPack nullable_filed()
{
    if(....)   return (P10_arrayVarPack) {0};// return "NULL"
    ....
    return (P10_arrayVarPack) {p10, { p10->D[1], p10->D[2] } };
}


extern inline предотвращает лишнее копирование возвращаемого значения

использование

Код:
P10_arrayVarPack arrayVarPack = p10_arrayVarPack() ;

if(arrayVarPack.IS_EXISTS)
  {
          assert(arrayVarPack.IF_EXISTS.d1 == 2 );
          assert(arrayVarPack.IF_EXISTS.d2 == 2 );
          on_VarPack( arrayVarPack.IS_EXISTS );
}


удалось добиться желаемого эффекта того, что погромист неизбежно вынужден продираться через все эти IS_EXISTS IF_EXISTS и если уж "забил на это болт", а в Cишечке это можно делать "легко и приятно", то сам себе буратино.

расширенный вариант, когда дополнительно, нужно возвращать некоторые значения если поле пустое
Код:

typedef struct {
   bool IS_EXISTS;
   
   union {
      struct {
         uint8_t value;
         uint8_t value1;
         uint8_t value3;
      } IF_EXISTS;
      
      struct {
         uint64_t value;
      } IF_EMPTY;
   };
} EE;


_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 18:55 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2291
Откуда: Китай, Пекин
ещё одна ситуёвина.
когда функция возвращает указатель....
в сишечке возвращаемое значение всегда нужно проверять на NULL

а что если..... у вас в коде на Си функция, которая возвращает указатели, И которые никогда не могут быть NULL ??

значит проверка результата на NULL - будет банальным нагревом воздуха.

в С++ и Rust, на этот случай, есть reference & - специальный указатель, который ни при каких условиях не может быть NULL.

сейчас возвращаю по значению структуру, в которой упакован указатель
Код:
typedef struct {
   Something * NEVER_NULL;
} NEVER_NULL;


============================================
всё это RUST идеология перенесённая на почву сишечки.

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 19:08 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 676
Удивительно бессвязно выражаете мысль, что сказать то желали ? Для контроля возврата можно использовать несколько вариантов - динамический (cleanup) и статический (returns_nonnull)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 19:18 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2291
Откуда: Китай, Пекин
О! пиксель подплинтусовый нарисовался и уже успел отложить пирамидку банальностей.

в Rust ты можешь API организовать таким образом, что его использовать неправильно не возможно.
я ищу некоторое отдалённое подобие того, что увидел в Rust

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 19:20 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2291
Откуда: Китай, Пекин
Цитата:
Для контроля возврата можно использовать несколько вариантов - динамический (cleanup) и статический (returns_nonnull)

Удивительно связно выражаете мысль, как вам это удаётся??? но гугление ничего не дало.
был бы благодарен если б развернули.

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 19:23 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 676
В любом компилируемом языке API можно сделать как дырявое, так и дуракоустойчивое ! Это в основном решается алгоритмом механизма API.

Наслаждайтесь:GCC Function attributes


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 19:28 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2291
Откуда: Китай, Пекин
Цитата:
Наслаждайтесь

спасибо. но не удалось.

мой код работает в мире, который значительно шире чем GCC.

Цитата:
API можно сделать

чем собственно и занят.

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 19:31 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 676
У меня открылось на Ура ! Попробуйте так:
https://gcc.gnu.org/onlinedocs/gcc/Comm ... Attributes

Откуда вы знаете что шире, если вы ширину GCC не знаете ?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 19:32 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2291
Откуда: Китай, Пекин
а я и не говорил что не открывается..
насладиться не удалось ибо не портабельный код неинтересен.

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 19:42 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 676
А с чего вы взяли, что код "не портабельный". С каких пор управление компиляцией стало "не портабельно". И да, на GCC написан GNU Linux, который портирован на все что можно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 19:52 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2291
Откуда: Китай, Пекин
спасибо за экскурс - КО.
Цитата:
С каких пор управление компиляцией стало "не портабельно"

с тех пор, как их стало больше одного.

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 30 апр 2019, 22:00 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 676
Что вы хотели сказать отсылкой к таблице компиляторов Си, я не понял. Ну а ваше утверждение по поводу "портабельно" весьма субъективно, и GNU Linux тому пример.
А факт - самая упрямая в мире вещь.(с) Воланд. Мастер и Маргарита.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 01 май 2019, 06:34 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2291
Откуда: Китай, Пекин
Цитата:
Что вы хотели сказать отсылкой

на платформе windows компилятор MSVC даёт самый производительный код.
хоть и у них случаются баги, типа того что я недавно обнаружил
но на фоне windows - линукс микроб
Изображение
и компилировать код на windows под GCC - мягко говоря неразумно.

_________________
unirail.org


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 01 май 2019, 13:14 
Старожил

Зарегистрирован: 17 дек 2014, 04:38
Сообщения: 676
cheblin писал(а):
на платформе windows компилятор MSVC даёт самый производительный код.

Сомнительное утверждение учитывая универсальность программ под виндовс. Поясню свою мысль, когда мы устанавливаем линукс, мы собираем (или берем готовую сборку) под конкретное железо, включая соответствующие опции компилятора. По этому программы собранные на одном компе могут не работать или работать со сбоями на другом без пересборки. Но это дает более оптимальный код с задействованными опциями процессора. На винду же сборка идет универсальная, то есть минимально используя особенности платформы, используя только универсальные команды, доступные всем процессорам.
Цитата:
но на фоне windows - линукс микроб

Да ладно, может в персоналках - да, но если посчитать все, что на линукс - телефоны, роутеры, промышленное оборудование, бытовая техника. Боюсь не такой уж и микроб.
Цитата:
и компилировать код на windows под GCC - мягко говоря неразумно.

То же сомнительно, я под виндовс писал на разных компиляторах (borland, zortech, watcom), msc - далеко не самый оптимальный (самый маленький код "Hello world" 1100 байт, генерировал watcom). Я конечно с gcc не сравнивал, но учитывая предидущий опыт, не думаю что мелкомягкие родили шедевр.
И к тому же винда то же написана на ASM и C, на которые натянута ООПешная обертка. Кто писал на WinAPI тот знает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Пустые и НЕ пустые значения
СообщениеДобавлено: 01 май 2019, 14:00 
Старожил
Аватара пользователя

Зарегистрирован: 11 апр 2016, 18:04
Сообщения: 2291
Откуда: Китай, Пекин
Цитата:
на платформе windows компилятор MSVC даёт самый производительный код.

а так видно?
Цитата:
я под виндовс писал на разных компиляторах

и что? во всех этих случаях прокатывали атрибуты от GCC ?
Цитата:
1100 байт

производительность кода измеряют не в байтах

_________________
unirail.org


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 15 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB