Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: 1 ... 146 147 148 [149] 150 151 152 ... 155   Вниз
  Печать  
Автор Тема: Общаемся обо всём!  (Прочитано 1048498 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4440 : 23-08-2017 16:36 » 

Менеджер памяти возвращает пустой указатель в случае, когда динамическое выделение запрошенного блока невозможно, т.е. "куча" исчерпана. Эта ситуация невозможна лишь при условии наличия бесконечной памяти. Непонятно только, почему "другие" архитектуры так оплошали.
Ситуация: Вы поручаете предоставить Вам 50 байт памяти, когда всего есть 1 КБ. Менеджер памяти возвращает "0" - это не правильно? Нет, всё верно, выделено 50 байт, адрес начала этого блока пространства "0". Такая ситуация не встречается у Интела, но в PIC есть такое понятие, как непрямая адресация. Через неё образуются зоны памяти, которые отсчитываются со своего нуля. Вообще, в любой системе, где код и данные лежат в разных пространствах, ситуация, что Вы получите начало адресного пространства при выделении вероятна. И это не будет ошибкой. А чтобы обойти эту ситуацию на "С" придётся заранее выделять специальную структуру, в которой будет храниться и адрес и состояние ошибки - это неудобно. С точки зрения математики, ноль - это тоже число.

Если выделять целую ячейку под бит, зачем тогда битовые поля?
Битовые поля, как я понимаю, метод организации структуры - в этом случае несколько полей компилятор сможет сшить в единый блок, мало того ещё для выравнивания может остаток заполнить нулевыми байтами, а не только битами. И далее, он в теневом для программиста режиме создаст маски, которыми потом будет отделять одно от другого. Для той же примерно цели применяется union.

Не вижу проблемы включить стандартный заголовок <fenv.h>, а в нужном месте вызвать fetestexcept().
Вот это как раз костыль, когда самого языка оказывается мало, и прибавляется библиотека, которая пытается как-то это причесать и обобщить.


Не ошибется, если я правильно расставлю приоритеты прерываний и спланирую обработку.
Если есть длинный процесс, например, приём пакета или вычисление в микропрограмме прерывания, то появляется шанс на то, что за это время один импульс может проскочить. Это отражается на конечной скорости реакции устройства. А вообще всё становится веселее, особенно, когда на Вашем устройстве кто-то другой вдруг вздумает запустить ещё и какой-нибудь датчик, и в его обработчик или поток будет всунут блок расчёта через итерации какого-нибудь синуса. И это сразу не проявится - скорости то достаточно, но раз в месяц что-нибудь будет обязательно случаться.

А ведь тот же STM32 производительнее раз в сотню.
Я это отношу уже к МП, просто производители решили убить двух зайцев.

Функция, вызываемая через CALL, будет пропущена. Функция, развернутая inline, будет выполнена. Если у них  есть побочные эффекты (а это нередкое явление), состояние программы будет разное.
Я имел ввиду, что с флагом установленным "e" выполняются только команды условного и безусловного переходов, а также команды работы с флагами, в предыдущем посте я это как бы уточнил вскользь, то есть пропуск CALL часть стратегии. Поэтому, развёрнутая функция просто будет представлена более длинной серией NOP. На состоянии программы это не отразится. Если тело блока не отработает ошибку, сбросив флаг, программа завершится. Тут всё решается внутри потока - никаких исключений, прерываний и иже с ними.

У нас просто разные мнения и подходы. Хотя иногда мы говорим об одном и том же, но разными словами.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4441 : 23-08-2017 18:05 » 

Цитата
А вообще всё становится веселее, особенно, когда на Вашем устройстве кто-то другой вдруг вздумает запустить ещё и какой-нибудь датчик,
Нет такого кто-то. Система для некто - закрыта.

Есть аппаратные прерывания, есть программные (те же исключения)

Если у вас есть долгие процессы, требующие непрерывность - отключайте прерывания.

Битовые операции.. Ага-ага.. расскажите про 51 серию там совсем нет битовых операций, и битовых регистров.

Не имеет значения не каком языке написан софт. Компилятор сам разберется.

Если вы ограничены памятью, то вам действительно самому нужно строить менеджер кучи (если она нужна)
Кучей может быть что угодно и размещаться где угодно. Но при малых объемах о куче вообще не имеет смысла говорить.

Если есть некие процессы требующие быстрого реагирования, то они разносятся в пространстве.
Не надо отдавать все на обработку МП. Задача управляющего МП сбор и реагирования на внешние сигналы.
И принимать решение важности сигнала.

Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4442 : 23-08-2017 18:08 » 

Ситуация: Вы поручаете предоставить Вам 50 байт памяти, когда всего есть 1 КБ. Менеджер памяти возвращает "0" - это не правильно?

Нет. Это признак того, что объем "кучи" исчерпан, и блок выделен не был.

Прекращаем импровизировать, берем в руки стандарт (например, ISO/IEC 9899:1999), читаем. Сначала описание malloc:

Цитата
7.20.3.3 The malloc function

Synopsis
   #include <stdlib.h>
    void *malloc(size_t size);


Description

The malloc function allocates space for an object whose size is specified by size and whose value is indeterminate.

Returns

The malloc function returns either a null pointer or a pointer to the allocated space.

Итак, всего две интерпретации результата вызова malloc: либо пустой указатель (неудача), либо указатель на запрошенный блок (успешное выделение). Теперь разбираемся с указателем:

Цитата
6.3.2.3 Pointers

...
3. An integer constant expression with the value 0, or such an expression cast to type void *, is called a null pointer constant.55) If a null pointer constant is converted to a pointer type, the resulting pointer, called a null pointer, is guaranteed to compare unequal to a pointer to any object or function.

---
55) The macro NULL is defined in <stddef.h> (and other headers) as a null pointer constant; see 7.17.

Итог: целочисленная константа нуль, взятая в качестве адреса, трактуется стандартом как пустой указатель, как бы нам ни хотелось обратного. Использовать такой указатель в программе нельзя, даже если с нуля начинаются целые залежи свободной памяти.

Нет, всё верно, выделено 50 байт, адрес начала этого блока пространства "0".

Не скажу за всю Одессу, ограничимся только GCC, мануал к которому лежит в пределах протянутой руки. Там указано, что линкер располагает в начале памяти секцию .data (инициализированные статические переменные), затем секцию .bss (неинициализированные статические переменные), затем идут "куча" и в конце - стек. Так что у "кучи" не так много шансов оказаться по нулевому адресу.

Не знаю, как решили эту проблему разработчики PIC (их мышление вообще весьма оригинально, судя по архитектуре младших моделей), но лично я бы пожертвовал байтом-двумя и сместил "кучу" с "проклятого" места, сохранив совместимость со стандартом.

С точки зрения математики, ноль - это тоже число.

У стандарта C свое мнение по данному вопросу, с которым мы уже ознакомились выше.

Битовые поля, как я понимаю, метод организации структуры

Да, способ плотно упаковать в слово цепочки из одного или нескольких бит.

Вот это как раз костыль, когда самого языка оказывается мало, и прибавляется библиотека, которая пытается как-то это причесать и обобщить.

А говорите - любите C. Тут без этих костылей шагу не ступить. Неужто забыли про errno? Если нет, то чем этот костыль хуже?

Идеологически правильный подход (исключения) почему-то тоже восторга не вызвал.

Если есть длинный процесс, например, приём пакета или вычисление в микропрограмме прерывания, то появляется шанс на то, что за это время один импульс может проскочить. Это отражается на конечной скорости реакции устройства.

Не делают так в правильных системах. Интерфейсы пакетного обмена обычно имеют собственную буферную память, которую можно считать в удобное время. Увлекаться вычислениями в программах обслуживания прерываний тоже не принято, это первое правило эмбеддера. Считайте в фоне, сколько угодно, а потом максимально быстро передайте готовый результат по прерыванию, когда получатель готов его принять.

А вообще всё становится веселее, особенно, когда на Вашем устройстве кто-то другой вдруг вздумает запустить ещё и какой-нибудь датчик, и в его обработчик или поток будет всунут блок расчёта через итерации какого-нибудь синуса. И это сразу не проявится - скорости то достаточно, но раз в месяц что-нибудь будет обязательно случаться.

Увы, в моем устройстве этого не может быть, потому что не может быть никогда. Итерировать синусы можно сколько угодно в фоновом низкоприоритетном процессе, который не мешает обслуживать прерывания. Если нужно очень быстро - извольте зашивать таблицы Брадиса в постоянную память. См. первое правило. Иначе никак, мне даже раз в месяц проблемы не нужны.

Даже несложная FreeRTOS позволяет легко справляться с такими задачами, обеспечивая приоритетную систему выполнения задач.

Я имел ввиду, что с флагом установленным "e" выполняются только команды условного и безусловного переходов, а также команды работы с флагами

А толку с тех условных переходов, если условия перехода вычисляются предыдущим кодом, который не выполняется? Это же генератор случайных чисел (и неуловимых глюков)
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4443 : 23-08-2017 19:04 » 

... , но лично я бы пожертвовал байтом-двумя и сместил "кучу" с "проклятого" места, сохранив совместимость со стандартом.
Возможно, зря я пример с памятью взял, так как это только запутало ситуацию. Предположим, что функция что-то вычисляет и требует полного использования регистра при возврате. В этой ситуации уплотнить её, использовав одно из её невозможных по вычислению значений в качестве флага, будет нельзя. Значит при ошибке внутри неё нужно будет организовать возврат состояния - тратить на это ячейку памяти дорого по одним причинам, а регистр дорого по другим. Сама идея, в теории, использовать контролируемый флаг процессора для сообщения об ошибке не лишена смысла.

А говорите - любите C.
Любовь зла. Улыбаюсь

Идеологически правильный подход (исключения) почему-то тоже восторга не вызвал.
?

А толку с тех условных переходов, если условия перехода вычисляются предыдущим кодом, который не выполняется? Это же генератор случайных чисел (и неуловимых глюков)
Я не сказал, что у меня уже готовое решение. Пока только идея.

Как я вижу работу МП: есть выделенный поток управления, главная задача которого - это доступ к железу, организации памяти, созданию потоков и их переключению. Сами потоки изолированы от железа, не должны порождать никакие прерывания, исключения, чтобы не нарушить расчётного времени собственного исполнения в диспетчере задач, и сделать систему более "прозрачной". В свою очередь, приход и уход данных с сетевой карты или диска также не должен быть прерыванием. Просто, приняв данные, канал связи должен выставить флаг о приёме, чтобы ОС в свободное от выполнения потоков время сумела спокойно проанализировать эти данные и предпринять необходимое. То есть, с точки зрения системы, прерывания для МП не так важны, его задачи не должны гарантировать время, вспомним, что таймеры в том же Linux гарантируют время не меньшее, чем заказанное. То есть, попросив 1 мс можно получить 10 мс, 1 с, но никак не 1 мс или меньше. А с точки зрения МК, которые обслуживают жёсткий режим по времени, прерывания важны, но их не может быть много, я сторонник, если нужно, вставить несколько МК, чем вставить один МП и заниматься отладкой его программных компонентов по времени.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4444 : 23-08-2017 19:35 » 

Комбинация "xor eax, ex + push eax..." быстрее чем при использовании других регистров и намного быстрее и компактнее, чем заполнение нулевыми литерами.

А ты уверен?
xor eax, eax может быть закодирован одной из двух операций:
XOR r32, r/m32
XOR r/m32, r32
И никакого преимущества над другими РОН регистрами.
С push таже ситуация:
PUSH r32
PUSH r/m32
Никакого преимущества.
Кстати, PUSH imm32 работает с той же скоростью. Различие только в размере инструкций в предвыборке. В цикле скорость один в один.

Добавлено через 12 минут и 43 секунды:
Проблема в стандарте IEEE 754, то есть FPU работает с такими категориями данных, которые трудно встречаются в реальных задачах. И программист их не отрабатывает, ссылаясь попросту на то, что их появление маловероятно.

Это что за такие трудности? Просвети, пожалуйста.

Исключение суть прерывание, ...

Слово "исключение" стало слишком многогранным.
Исключение в программировании — это дальний переход с отмоткой стека. Си это умеет. Для С++ это еще вызов деструкторов для автоматических объектов.
Исключение процессора — это действительно прерывание программы. В таком варианте лучше его и не называть исключением, дабы не путаться и не путать других.

...
Далее, все CALL инструкции при поднятом флаге ошибки пропускаются, а безусловные и условные переходы выполняются.
...

C-style. Исключения в языках, поддерживающих их, позволяют упростить обработку ошибок и не заставлять программиста обрабатывать ошибку на всех уровнях.


Добавлено через 4 минуты и 33 секунды:
в рамках системы Интела, да, ситуация когда менеджер памяти вернёт 0 невозможна

Разве Intel научился делать бесконечную память? И даже если так, как быть с конечной разрядностью адреса?

POSIX совместимые ОС могут добывать память из ниоткуда убивая при ООМ самый жирный процесс. В Linux, чтобы убийства не были стихийными, можно задать вес процессу (напоминает nice). Но и тогда я бы не стал утверждать, что память никогда не кончится.
« Последнее редактирование: 23-08-2017 19:52 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4445 : 23-08-2017 20:11 » 

А ты уверен?
Нет, не уверен, так как процессоры меняются. Просто вспомнил из рекомендаций к 80486, что по возможности стоит использовать "al ah ax eax" везде, где только можно. Вроде тогда считал и действительно выходило выгоднее.

Но суть разговора была вообще в другом - в декларации вызова, что возврат параметра идёт через аккумулятор и только. И что его мало, чтобы вернуть разом и статус функции и результат функции.

Это что за такие трудности? Просвети, пожалуйста.
Я же там писал, например, проверка на уход в область денормализованных чисел. С точки зрения математики должно быть всё отточено идеально, но не всегда я практически это вижу.

Исключение процессора — это действительно прерывание программы. В таком варианте лучше его и не называть исключением, дабы не путаться и не путать других.
Только под этим я и понимаю исключение. А про ловлю ошибок через механизмы языка throw-catch я уже писал ранее - без аппаратной поддержки это повлечёт перерасход чего-нибудь. Структуры служебные появятся.

C-style. Исключения в языках, поддерживающих их, позволяют упростить обработку ошибок и не заставлять программиста обрабатывать ошибку на всех уровнях.
Не понял?

POSIX совместимые ОС могут добывать память из ниоткуда убивая при ООМ самый жирный процесс. В Linux, чтобы убийства не были стихийными, можно задать вес процессу (напоминает nice). Но и тогда я бы не стал утверждать, что память никогда не кончится.
И тут тоже.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4446 : 23-08-2017 20:30 » 

Ну ты вспомнил. Уже и Пентиум устарел лет на 20. Технический прогресс, однако.

Для возврата может использоваться любое число регистров. Главное, чтобы вызывающий и вызываемый использовали единый протокол.
Ты упоминал Борланд... У них там есть fastcall соглашение, как раз максимизирует регистровую передачу при вызовах.

Результат вычисления валидных нормализованных плавающих чисел предсказуем: это валидное нормализованное значение, либо одно из специальных для данной инструкции: inf и nan. Причем нечисла тоже предсказуемы и зависят от аргументов. Проверь до и/или после. На сложные места напиши тесты.

У тебя необоснованное предубеждение перед try-catch.
В стандарте Си есть longjmp: http://www.cplusplus.com/reference/csetjmp/longjmp/
Делаешь setjmp, уходишь на любой уровень вложенности, выполняешь longjmp и практически бесплатно возвращаешься к setjmp. Это и есть пресловутый try. От longjmp к setjmp передается int — можно считать это кодом ошибки.
Что на самом деле было? Функция setjmp сохранила контекст: адрес инструкции и адрес указателя стека до ее вызова. Функция longjmp восстановила стек, передала int (через стек) и сделал goto. Что тут должно тормозить? А вот возвращаться назад с кодом ошибки через несколько вызовов, вот это точно тормоз.

C-style распространения ошибки — это обнаружения ошибки на одном уровне и передача ее следующему уровню в иерархии.

Цитата
И тут тоже.
http://shtsh.blogspot.ru/2012/04/oom-killer.html
« Последнее редактирование: 23-08-2017 20:55 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4447 : 23-08-2017 20:56 » 

Для возврата может использоваться любое число регистров. Главное, чтобы вызывающий и вызываемый использовали единый протокол.
На NASM могу передать и то и то, используя, например, пару EAX-EBX, но как это представить на "С" - возврат двух параметров от функции?

Мне видится только один вариант: сделать заблаговременно структуру, и передавать в функцию указатель на неё, а саму функцию делать void. В любом виде для этого потребуется оборот с памятью и ещё много чего.

Ты упоминал Борланд... У них там есть fastcall соглашение, как раз максимизирует регистровую передачу при вызовах.
fastcall опасен, так как не стандартизирован. Раньше было так: запускаем в функцию EAX-EBX-ECX-EDX-далее стек, а выход EAX. Сейчас, например, TCC делает примерно так: CX-DX-стек, а выход EAX. В общем, это можно использовать только в пределах локального проекта. Но проблему возврата с двумя параметрами это не решает.

Результат вычисления валидных нормализованных плавающих чисел предсказуем: это валидное нормализованное значение, либо одно из специальных для данной инструкции: inf и nan. Причем нечисла тоже предсказуемы и зависят от аргументов. Проверь до и/или после. На сложные места напиши тесты.
Я о чём: за весь период я не знаю ни одной практической задачи, когда мне приходилось целенаправленно анализировать INF, например. Поэтому, я считаю, что сам стандарт перегружен, и проще было бы программисту просто сообщить об ошибке в результате, не вызывая ни исключения, ни прерывания - оставаясь в рамках основного потока.

Так я и проверяю, но на это уходят ресурсы.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4448 : 23-08-2017 21:03 » 

... Структуры служебные появятся. ...

Ты экономишь байты, тратя время, силы и придумывая новые велосипеды. Я писал и под 51 со 128 байтами (их них 32 - 4 банка РОН, стек тоже в этой "куче"), и под PIC, включая самый младший (16 байт). Не надо распространять эти практики на все программирование. Контроллеры тоже нынче обрастают памятью.
« Последнее редактирование: 23-08-2017 21:07 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4449 : 23-08-2017 21:05 » 

А вот возвращаться назад с кодом ошибки через несколько вызовов, вот это точно тормоз.
Ну, у нас был несколько гипотетический разговор. Я имел ввиду, что если в теле функции произошла ошибка, то следует установка такого флага, далее, в уровне из которого был совершён вызов функции она должна быть отработана. Если отработка не произошла, то программа завершается аппаратно. Тут нет никаких вызовов, но детали нужно ещё продумать. И оценить: было бы это эффективным?
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4450 : 23-08-2017 21:13 » 

Для возврата может использоваться любое число регистров. Главное, чтобы вызывающий и вызываемый использовали единый протокол.
На NASM могу передать и то и то, используя, например, пару EAX-EBX, но как это представить на "С" - возврат двух параметров от функции?

Мне видится только один вариант: сделать заблаговременно структуру, и передавать в функцию указатель на неё, а саму функцию делать void. В любом виде для этого потребуется оборот с памятью и ещё много чего.

Либо так, либо делать отдельный стек данных. Например, Perl так работает. Отдельный стек вызовов, отдельный стек данных. Позволяет передавать в функцию любое число аргументов, позволяет передавать функции свои же аргументы в следующий вызов без копирования (ну, если такое допустимо), позволяет вернуть любое число значений.
Возвращаясь к Си. У GCC есть тип unsigned long long (128 бит). На 64-битных платформах он даже возвращается в паре регистров. Извратившись через union туда можно напихать несколько меньших значений. Но лучше все таки передавать указатель на структуру.
« Последнее редактирование: 23-08-2017 21:15 от RXL » Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4451 : 23-08-2017 23:23 » 

Как я вижу работу МП: есть выделенный поток управления, главная задача которого - это доступ к железу, организации памяти, созданию потоков и их переключению. Сами потоки изолированы от железа, не должны порождать никакие прерывания, исключения, чтобы не нарушить расчётного времени собственного исполнения в диспетчере задач, и сделать систему более "прозрачной".

1. Что даст такая "прозрачность"? Я не смог придумать ей достойного применения.
2. Как определить значение "расчётного времени собственного исполнения" в программе, имеющей условные операторы (т.е. не зацикленной монотонно на одной последовательности инструкций).
3. Какая катастрофа случится, если это расчетное время нарушится, если программа изолирована от внешнего мира и не имеет никакого отношения к системам реального времени?

В свою очередь, приход и уход данных с сетевой карты или диска также не должен быть прерыванием. Просто, приняв данные, канал связи должен выставить флаг о приёме, чтобы ОС в свободное от выполнения потоков время сумела спокойно проанализировать эти данные и предпринять необходимое.

Это возврат в эпоху первых компьютеров. Считали очередную колоду перфокарт, запустили на выполнение. Остальные терпеливо ждут своей очереди. Опрос флага готовности устройства вполне приемлем для потехи вроде ардуины, у которой главное назначение - "лишь бы не курили за гаражами", но совершенно непригоден для чего-то большего.

То есть, с точки зрения системы, прерывания для МП не так важны, его задачи не должны гарантировать время

И сразу же ставите крест на обработке видео, аудио, всякие скайпы и тому подобное. Ну и на игры динамичнее тетриса заодно.

я сторонник, если нужно, вставить несколько МК, чем вставить один МП и заниматься отладкой его программных компонентов по времени.

Как я недавно выяснил на практике, именно этим заклинанием открывается портал в ад. Консультирую один проект (сейчас в нем перерыв на летние отпуска), в котором, к сожалению, даже нехилую многослойную плату успели под это дело развести. Успел заказать переразводку, а пока пытаюсь как-то выкрутиться с тем, что есть.

Межпроцессорные коммуникации посложнее межпроцессных.

Но суть разговора была вообще в другом - в декларации вызова, что возврат параметра идёт через аккумулятор и только. И что его мало, чтобы вернуть разом и статус функции и результат функции.

Мы ведь вроде пришли к тому, что нет никакого аккумулятора в общем случае. Есть на нескольких простейших 8-битных архитектурах, которые не задают тренда. И есть на процессорах Intel, которые затесались в эту плохую компанию. Для них гораздо типичнее использование в качестве ЦП ПК, а не управляющего МК (да, я знаю про платы для встраивания на x86, но по архитектуре это тот же ПК, да и тиражи не того порядка, что у МК). Ну а для типичных задач ПК язык C не слишком адекватен. Гораздо больший интерес он представляет для МК (хотя и тут C++ сильно наступает на пятки).

Поэтому слово "аккумулятор" лучше вообще изъять из обращения. С ним обсуждение теряет общность. Получается нечто вроде "вы можете заказать у нас любой автомобиль при условии, что это будет Форд-Т черного цвета".

про ловлю ошибок через механизмы языка throw-catch я уже писал ранее - без аппаратной поддержки это повлечёт перерасход чего-нибудь. Структуры служебные появятся.

Я как-то давненько набросал для клуба статью "Обработка исключений на языке C",  в которой описана простейшая, но полнофункциональная обработка исключений на C. Дополнительная аппаратная поддержка не требуется, "перерасход чего-нибудь" не обнаружен, накладные расходы ("служебные структуры") - одно слово на исключение. Задействован штатный механизм языка C - переходы longjmp.

Я о чём: за весь период я не знаю ни одной практической задачи, когда мне приходилось целенаправленно анализировать INF, например. Поэтому, я считаю, что сам стандарт перегружен, и проще было бы программисту просто сообщить об ошибке в результате, не вызывая ни исключения, ни прерывания - оставаясь в рамках основного потока.

Именно такое средство Вы и назвали "костылем" - функцию, которая не вызывает ни исключения, ни прерывания и просто говорит о том, что в процессе вычисления имела место ошибка. Чего же еще желать-то?

если в теле функции произошла ошибка, то следует установка такого флага, далее, в уровне из которого был совершён вызов функции она должна быть отработана. Если отработка не произошла, то программа завершается аппаратно.

А если я желаю обработать ошибку, скажем, на пятом уровне вложенности вызова, а не на первом? Такого флага мне даром не надо.

P.S. Почему-то по всей беседе красной линией проходит тема мифического перерасхода ресурсов, растраты народных тактов и прочей микрооптимизации. Не буду повторно давать ссылку на статью по этой теме, она проходила не так давно. Но уподобляться умной Эльзе, не убедившись в реальном наличии проблемы, неконструктивно (в статье множество примеров тому).
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Люсь
Модератор

ru
Offline Offline
Пол: Женский

WWW
« Ответ #4452 : 24-08-2017 18:26 » 

IMHO такого кризиса (как и возраста) реально не существует. Это лишь удобный эвфемизм, когда хорошее воспитание и обстановка не позволяют прямо сказать "@#$нутый на всю голову".

Жжешь Жжешь
Как я люблю твой стиль мышления ))
Записан

Посторонним просьба не беспокоить!
-------------------------------------------------
O (I) Rh +
Люсь
Модератор

ru
Offline Offline
Пол: Женский

WWW
« Ответ #4453 : 24-08-2017 18:48 » 

Ну вы и понаписали... Но я рада вас всех видеть )) Джоника еще не хватает )
Записан

Посторонним просьба не беспокоить!
-------------------------------------------------
O (I) Rh +
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #4454 : 25-08-2017 05:36 » 

Люсь, привет )
Записан

Люсь
Модератор

ru
Offline Offline
Пол: Женский

WWW
« Ответ #4455 : 25-08-2017 17:36 » 

Алексей++, и тебе привет )
Записан

Посторонним просьба не беспокоить!
-------------------------------------------------
O (I) Rh +
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4456 : 26-08-2017 16:10 » 

Жжешь Жжешь
Как я люблю твой стиль мышления ))

За годы жизни у многих постепенно вырабатывается этакий ненаписанный личный энциклопедический словарь: слева - завуалированное понятие, справа - что в действительности за этим стоит. "Кризис среднего возраста" - это страница из моей энциклопедии.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Люсь
Модератор

ru
Offline Offline
Пол: Женский

WWW
« Ответ #4457 : 27-08-2017 13:57 » 

Кризис среднего возраста - это стиль жизни, я б сказала.
Записан

Посторонним просьба не беспокоить!
-------------------------------------------------
O (I) Rh +
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4458 : 27-08-2017 17:59 » 

Каждый раздел моей ненаписанной энциклопедии - это своего рода стиль жизни. Например, "принципиальный", "вспыльчивый", "практик" и многие другие.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4459 : 27-08-2017 19:13 » 

Кризис среднего возраста - это стиль жизни, я б сказала.
Я фильм смотрел: "Премия Дарвина" ("The Darwin Awards" выпуска 2006 года), там раскрыта тема кризиса среднего возраста и других кризисов. Посмотреть очень рекомендую, весьма поднимает настроение.

Например, "принципиальный", "вспыльчивый", "практик" и многие другие.
Насчёт "вспыльчивого" интересно послушать, сам иногда думаю: откуда вообще идёт наглость? От неосознанности последствий или от избытка защищённости, когда все выходки кто-то прикрывает.
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4460 : 27-08-2017 20:08 » 

Насчёт "вспыльчивого" интересно послушать

Вот моя субъективная интерпретация эпитета "вспыльчивый".

Каким он видит себя: бесстрашный мачо, способный смело высказать свою точку зрения и настоять на ней. Не тварь дрожащая, а право имеет. При этом все средства хороши: если нужно повысить голос или тряхнуть оппонента за грудки, ничего страшного, ради истины можно.

Каким он выглядит в глазах окружающих: самовлюбленный хам, наглая агрессивная мразь без тормозов, которая волей судьбы оказалась в окружении, не способном дать достойный отпор (или еще не исчерпавшем лимит терпения). В иной ситуации проще проигнорировать "вспыльчивого", чем мараться. Тем более что для поединка вы будете вынуждены опуститься до его уровня, ведь ему до вашего не подняться, а на разных параллельных плоскостях вам не сойтись. После такого вынужденного спуска даже победа не обрадует.

Когда в окружении появляется сильная личность, способная поставить хама на место, у "вспыльчивого" тут же рефлекторно срабатывает мускул, втягивающий язык в задний проход и надежно фиксирующий его там до поры. Внезапно выясняется, что он вполне способен себя контролировать, да и вообще славный малый. По крайней мере, до тех пор, пока новый лидер не отлучится надолго...

"Вспыльчивые" в интернете - это вообще особое явление. Просто бесценный подарок для троллей: заводится с пол-оборота, закатывает колоритнейшие истерики. Самый апофеоз - классическое: "Все, ты труп! Я тебя вычислил по IP!" (как вариант - TCP, UDP, HTTP или другое умное сочетание букв, смысла которого "вспыльчивый" не понимает, но точно помнит, что именно так принято пугать в интернете).
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4461 : 28-08-2017 07:24 » 

Когда в окружении появляется сильная личность, способная поставить хама на место, у "вспыльчивого" тут же рефлекторно срабатывает мускул, втягивающий язык в задний проход и надежно фиксирующий его там до поры.
Вот с этим есть нюанс: большая часть хамов понимают только силу, а попытки договориться принимаются за слабость. Однако, есть некоторый правовой интервал, когда поведение не рассматривается однозначно по закону. Вообще, в любом конфликте обычно участвуют не две, а четыре стороны: первая, вторая, государство и заинтересованные люди. Таким образом, победив силой, можно напороться на заявление в полицию о побоях со стороны пострадавшего. Получается, что с присутствием такой личности напряжение будет присутствовать однозначно и неопределённо долго, и если говорить о рабочем коллективе, то практика показывает: многое зависит от руководителя. В отдельных случаях он может покрывать бесчинства и дебоши, преследуя некую неизвестную сотрудникам цель. Так стоит ли упираться в желании отряхнуть сандалии и пойти искать другое место, когда командная игра идёт против Вас? Я сразу вспоминаю поговорку: "Если Вы работаете на козла, то это означает, что Вы баран."

А в быту несколько тяжелее, тут может встретиться странное поведение со стороны органов правопорядка в купе с диким правовым вакуумом, чаще образованным именно процессуальной частью. Большинство конфликтов возникают и растут именно из-за того, что правоотношения никто не регулирует.
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4462 : 28-08-2017 07:54 » 

Получается, что с присутствием такой личности напряжение будет присутствовать однозначно и неопределённо долго, и если говорить о рабочем коллективе, то практика показывает: многое зависит от руководителя.

На работе такие конфликты решаются обычно довольно просто, даже без вмешательства руководителя. Просто негромко, но четко говоришь "вспыльчивому" коллеге: "Любезный, приберегите свой тон для общения дома с женой и тещей; на работе будем общаться согласно корпоративной этике" (благо у нас даже кодекс этой самой этики имеется и изучается всеми сотрудниками со сдачей зачета). Обычно отрезвляет. Если нет, диалог завершается коротко: "В таком случае пошел вон". На этом непосредственное общение заканчивается, все дальнейшее общение со мной "вспыльчивый" будет вести через своего руководителя.

За 17 лет работы на нынешнем месте до второго сценария дошло лишь дважды.

А в быту несколько тяжелее

Когда тяжелее, а в некоторых аспектах все же легче. Простой хрестоматийный пример: дележка драгоценного места для стоянки автомобиля возле многоквартирного дома. Классическое поле битвы маститого быдла... ой, простите, "вспыльчивых" разных калибров, которые "всегда тут ставил, и будет ставить, а кто сунется - сожгу тачку нахер!", и вменяемых жильцов, которые де-юре имеют те же права, но вот де-факто...

Можно поучаствовать в этом балагане с захватом мест на газонах (и без того не слишком пышных) и тротуарах, обнесением самозахваченных мест всякими тросиками, цепями и блокираторами, ежеутренними разборками, кто кому перекрыл выезд. А я вместо этого предпочел приобрести подземный гараж в соседнем дворе и самоизолировался от этих страстей навеки. Согласен, малодушное решение, но до чего же комфортно на душе от невмешательства в эту борьбу в дерьме - не передать словами.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4463 : 28-08-2017 07:55 » 

Сейчас в России можно почти все. Главное бить аккуратно, чтобы не потянуло на тяжелые повреждения или хуже. Это теперь административка и штраф, если пострадавший самостоятельно докажет в суде. Все для народа: пей, гуляй, мочи друг друга. И грубые нарушения ПДД тоже пустяки: лети на красный, гоняй от ГИБДД, хоть круги на перекрестке с дымом из под шин рисуй - пусть сперва докажут, что это был ты, после - небольшой штраф. А вот с государственным флагом ходить нельзя, это нарушение каких-то неведомых законов. В общем, славное время для хамов.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.

Хз, я не очень просто не очень во всё это верю, во всякие там сатурны и прочую поебень.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4464 : 28-08-2017 11:59 » 

Согласен, малодушное решение, но до чего же комфортно на душе от невмешательства в эту борьбу в дерьме - не передать словами.
Да, нет, решение нормальное, поступаю также.

Сейчас в России можно почти все.
... можно почти всё, но не всем. Улыбаюсь

Силовой подход опасен тем, что может привести к ситуации "Прав тот у кого больше прав." Иными словами, как пример, у дядьки полицейского горит раскрываемость, и невинный синяк под глазом могут представить в виде покушения на убийство. В уме подозреваемого будет крутиться: "Как бы отмазаться от этого", а у дядьки: "Премия, внеочередной отпуск и досрочная обеспеченная пенсия." В этом, вероятно, состоит часть ключа, почему, например, бытовые преступления оформляются за день, а какого-нибудь маньяка, который грохнул не один десяток людей, ищут по тридцать лет! А действительно, зачем он полиции нужен, так ведь можно и своему здоровью ущерб причинить, куда проще караулить пока очередной водитель, например, превысит лимит скорости - вполне безопасно и прибыльно.
Записан
BlueWhite
Интересующийся

il
Offline Offline

« Ответ #4465 : 04-09-2017 07:23 » 

Понравилось про "вспыльчивый" - напомнило СССР с его "отсутствием предпосылок к проституции" и "перевоспитание воров в заключении под стражу".
Т.е. знаний 0 - рассуждений масса.
Вспыльчивость - если мы говорим о ее реальности - это тип характера обусловленный химией мозга, гуглите причины злости андреналин и прочие химические элементы от которых зависит быстро вы злитесь, или можете спокойно смотреть в лицо матерящегося быдла.
Записан
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4466 : 04-09-2017 13:07 » 

Вспыльчивость - если мы говорим о ее реальности - это тип характера обусловленный химией мозга, гуглите причины злости андреналин и прочие химические элементы от которых зависит быстро вы злитесь, или можете спокойно смотреть в лицо матерящегося быдла.
Да, темперамент имеет место быть, но я согласен с Dale в том, что несмотря на всю биологическую предрасположенность к агрессии, степень этой агрессии можно серьёзно регулировать. В деморализованном разнузданном обществе вероятность дебошей заметно больше, чем в организованном. При явной неадекватности человека необходимо предпринять меры, и тут мы сталкиваемся с законодательными нюансами и пробелами в процессуальной части.
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #4467 : 04-09-2017 13:54 » 

Да, темперамент имеет место быть

Это лишь один из вариантов попытаться объяснить причину, не лучше и не хуже других. Не это главное.

Мудак ведет себя как мудак, потому что он - мудак. Вот так просто, в духе Оккама.

Вот теперь можно поиграть в ученых и поискать ответ на вопрос, почему случилось так, что он - мудак. Возможно, предки-мудаки передали ему ущербные гены. Возможно, биоалхимия, гормоны и прочие глюконаты аденинтрифосфата стимулируют рост железы наглости. А может, просто рядом не оказалось никого, способного вовремя начистить рыло, когда мудачество только формировалось у личинки мудака. Все это вторичные детали. В основе - формула выше.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Aether
Молодой специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4468 : 04-09-2017 15:20 » 

Вот теперь можно поиграть в ученых и поискать ответ на вопрос, почему случилось так, что он - мудак.
Что такое вспыльчивый на производстве: работают два токаря примерно одного возраста. Один спокойный, а второй шило в известном месте, то подшутит над первым, то высмеет. Со временем, стимулированная пассивностью первого и безынициативностью руководства наглость привела к тому, что второй первому начал давать пендали. В один момент, когда точка кипения была всё таки превышена, вспыльчивый получил по голове разметочным штангенциркулем, вместе с ухом отвалился кусок черепа.
Результаты: дурак похоронен, руководство напечатало объяснительных на пачку листов А4, получило выговор, но осталось у руля. А вот по сути потерпевший был приговорён к сроку, в ходе которого он будет работать бесплатно. Мало того, после возвращения, это клеймо может тянуться весьма долго.

Выводы следующие: систему можно организовать так, что общество будет обогащаться разными недружелюбными элементами. Причём, пока первые воюют со вторыми на этом крепко наживаются третьи.
Записан
Sla
Модератор

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #4469 : 04-09-2017 20:52 » 

BlueWhite, вот скажите.. дата регистрации 2013, 5 сообщений.
Да тут люди с 1000 уже не приходят. Что вы здесь делаете?
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: 1 ... 146 147 148 [149] 150 151 152 ... 155   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines