Под интегральное число как пишется

Всего найдено: 24 здравствуйте, уважаемая грамота! помогите, пожалуйста со следующим вопросом. пишутся ли числительные 1-2 машины, 1-2 человека через дефис?

Всего найдено: 24

Здравствуйте, уважаемая грамота! Помогите, пожалуйста со следующим вопросом. Пишутся ли числительные 1-2 машины, 1-2 человека через дефис? Или только через тире: 1—2 машины, 1—2 человека? Знаю, что один-два человека, но 1—2 человека. Но сотрудники на работе уверяют, что 1-2 человека только через дефис, объясняя это тем, что люди — одушевленные, можно вставить союз «или». С союзом согласна, но при чем здесь одушевленность? Плюс я думаю правильно: один-два человека, но 1—2 человека, т. е. числительные, выраженные цифрами, всегда пишутся через тире, но словами, если можно вставить союз «или», то через дефис. И есть ли правило, что числительные, выраженные цифрами в каких-то случаях пишутся через дефис? Кроме номеров телефона.

Ответ справочной службы русского языка

Вы правы. Между цифрами ставится тире без пробелов. От одушевленности/неодушевленности выбор знака не зависит. 

Здравствуйте. Как правильно писать выдох, насмешку «пф-ф», описание звука «пш-ш»? Вообще, как определиться нужно подобные наборы из согласных или гласных букв писать слитно или с дефисом. В словарях даётся «Мм», но «Р-р-р».

Ответ справочной службы русского языка

Рекомендации для таких случаев детально не разработаны. В Полном академическом справочнике под ред. В. В. Лопатина говорится лишь, что одна из функций дефиса — «передача протяжного звучания гласных, раскатистого р и других особенностей произношения, напр.: Антропка! Антропка-а-а!.. — кричал он с упорным и слезливым отчаянием, долго, долго вытягивая последний слог (Т.); Ну о-о-оченъ навязчивая реклама! (из газеты); Это было р-р-р-революционно!; «П-п-роходите, п-п-пожалуйста», — сказал он заикаясь»

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

А-а-ар-рр-а! 

 …тр-р-р-рр, тр-р-р-рр, тр-р-р-рр.

Рр-рота, подъем! 

 …фрр-рр-р-р…

Р-рас-спрямить спины! Рр-рысс-два! Рррыс-два!

Рот-тэ! Рр-р-ясь, сир-на! 

РР-РРР!

Сюр-р-р-р-пл-л-л-из!

М-мяор-р-р! 

― М-м-м… ― сказал Иван Никифорович.

― Спишь? ― Мм… чего, мам?… ― хрипло отозвалась дочь.

Как правильно писать: Подождите денек другой. Нужно ли ставить дефис после слова денек

Ответ справочной службы русского языка

Дефис нужен. Сочетания, имеющие значение приблизительного указания на количество или время чего-либо пишутся через дефис, ср.: день-другой, неделя-другая, напишет письмо-другое, год-два, два-три часа, раза три-четыре, человек двенадцатьпятнадцать, двое-трое мальчиков, вдвоём-втроём; Он вернется в марте-апреле. 

См. также фиксацию в орфографическом словаре.

Здравствуйте. Есть ли правило, которое уточняет написание сложных существительных (типа юридическое лицо-нерезидент, государственные органы-разработчики) через дефис? Как правильно пишутся подобные слова: физическое лицо(дефис)резидент или физическое лицо (тире) нерезидент?

Ответ справочной службы русского языка

В следующих случаях вместо дефиса должен употребляться знак тире.

1. В сочетаниях с приложением, если одна из частей содержит пробел.

Примеры с неоднословными определяемыми: встреча с гостями Олимпиады — иностранцами, старшего лейтенанта — артиллериста, участников войны — инвалидов, о Михаиле Булгакове — актёре, у научного сотрудника — космонавта. Ср. гости-иностранцы, лейтенант-артиллерист, воины-инвалиды, Булгаков-актёр, лётчик-космонавт.

Примеры с неоднословными приложениями: творчество поэтов — современников Пушкина; статьи о Горьком — общественном деятеле, о Маршаке — переводчике Шекспира; печальная судьба дома — памятника архитектуры; обратиться к директору — художественному руководителю; среди стран — участников переговоров. Ср. поэты-современники, Горький-писатель, Маршак-переводчик, дом-памятник, директор-распорядитель.

2. В сочетаниях с приложением, если одна из частей в свою очередь является сочетанием с приложением и содержит дефис, напр.: рассказ о студенте-медике — альпинисте; встреча с приятелем — шахматистом-любителем; у соседа — писателя-фантаста. Ср. студент-альпинист, сосед-писатель.

3. В парных конструкциях типа полудеревни — полу дачные поселки. Ср. полусон-полуявь.

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

5. В сочетаниях с цифровыми обозначениями, если цифре предшествует часть, содержащая пробел, напр.: операция «Меченые атомы — 2», сценарий фильма «Место встречи изменить нельзя — 2» (ср. фильм «Спрут-5»).

Добрый день! Подскажите, пожалуйста, нужна ли запятая перед «как» в «Это просто как раз-два-три» Очень жду ответ, Анастасия

Ответ справочной службы русского языка

Постановка запятой уместна.

Здравствуйте. Скажите, пожалуйста, как правильно писать «Ролик идет минуту-двадцать» или «Минуту двадцать» или «Минуту, двадцать»? Спасибо

Ответ справочной службы русского языка

Если имеется в виду «одну минуту двадцать секунд», то верно: Ролик идет минуту двадцать.

Здравствуйте. В 1 классе на уроке по правилам переноса сказали, что слово «едва» делится на слоги е-два и перенести слово, как ед-ва — нельзя. Правильно ли это? Спасибо.

Ответ справочной службы русского языка

Так перенести можно, если есть насущная необходимость.

Добрый день! Во фразе «молодой человек лет двадцати двух-двадцати трёх» корректно использовать дефис или тире? Речь идёт о приблизительности, то есть используется то же правило, что и в выражениях «день-другой, год-два, человек десять-пятнадцать, в марте-апреле», и значит, должен быть дефис — так ли это? Спасибо.

Ответ справочной службы русского языка

Поскольку числительное состоит из двух слов, вместо дефиса пишется тире: молодой человек лет двадцати двух — двадцати трех.

Как правильно пишется фразеологизм «раз,два и обчелся»

Ответ справочной службы русского языка

Корректно: раз-два и обчёлся.

Добрый день, уважаемая редакция! Спасибо вам за помощь, и подскажите, пожалуйста, требуется ли запятая перед тире? И нужно ли здесь вообще тире? Если не трудно, прокомментируйте ответ. А во втором предложении хотелось бы уверенности в постановке запятой. Большое спасибо!

1. Вы научитесь прекрасно плавать и нырять – и вы сделаете это всего за один-два месяца.
2. Посмотрите на плывущего стометровку чемпиона(,) и вы легко заметите, что он не может улучшить результат еще в два раза.

Ответ справочной службы русского языка

1. Между частями сложносочиненного предложения (перед и) можно поставить или запятую, или тире.

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

2. Запятая ставится между частями сложного предложения (основа первой части: посмотрите; основа второй: вы заметите).

Добрый день! Я работаю начальником ПТО сервисной фирмы.
Многие годы при оформлении служебных документов я писал: «начальник ПТО», «начальник ООТиЗ», «начальник ОК», «начальник ЦПРС №1», «начальник автоколонны №1».
Последние год-два отдел кадров не визирует приказы, где должности работников написаны как указано выше. Кадровики требуют писать: «начальник отдела ПТО», «начальник отдела ООТиЗ», «начальник отдела ОК», «начальник цеха ЦПРС №1» и даже «начальник автоколонны» Автоколонна №1″ , мотивируя это тем, что «начальник автоколонны» это должность, а «Автоколонна №1» — наименование подразделения. Я считаю, что такие требования — масло масляное. Пожалуйста рассудите, кто из нас прав?
Для справки :
ПТО — производственно-технический отдел;
ООТиЗ — отдел организации труда и заработной платы;
ОК — отдел кадров;
ЦПРС — цех подземного ремонта скважин.
Заранее спасибо!

Ответ справочной службы русского языка

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

Как правильно: «1-2 квартал» или «1-2 кварталы»

Ответ справочной службы русского языка

Правильно: 1-2 (один-два) квартала; 1-й и 2-й квартал(ы).

Озадачили вопросом: как правильно разбить на слоги слово «едва». Объясните, пожалуйста, правило разбиения слов в случае, когда подряд идут 2 согласных. Спасибо.

Ответ справочной службы русского языка

Возможны варианты слогораздела: е-два и ед-ва.

И в-четвертых, и в-пятых, и в-двадцать пятых. Смущает написание в-двадцать пятых. Правильно?

Ответ справочной службы русского языка

Верно (как в значении наречия, так и в качестве свободного сочетания): в двадцать пятых.

Здравствуйте, «Грамота»! Подскажите, пожалуйста, в предложении типа «ему потребовалось на это полтора (—) два года» между числительными должно ставиться тире с пробелами? Или, как и при написании числительных цифрами, тире без пробелов?

Ответ справочной службы русского языка

В данном случае, если имеется в виду «то ли полтора, то ли два», нужен дефис: полтора-два года.

ЗАДАНИЕ 10. ПРИСТАВКИ.

Буквы И/Ы после приставок.

После приставок, оканчивающихся на согласную
, вместо буквы И пишется буква Ы.

подЫграть, разЫграть, сЫграть — Играть

отЫскать, подЫскать, разЫскать — Искать

безЫдейный — Идейный

безЫнициативный — Инициативный

безЫндукционный — Индукционный

подЫнтегральный — Интегральный

предЫстория — История

предЫюльский — Июльский

КОГДА ЭТО НЕ РАБОТАЕТ.

1. Исключение. В слове взИмать
пишется буква И.

в однокоренных ПОСЛЕ ДРУГИХ ПРИСТАВОК пишется Ы согласно правилу: изЫмать

2. После приставок МЕЖ-
и СВЕРХ-
сохраняется буква И.

межИнститутский, межИмпериалистический, сверхИзысканный, сверхИндустриализация, сверхИнтересный

3. После иноязычных приставок ДЕЗ-, КОНТР-, ПОСТ-, СУБ-, СУПЕР-, ТРАНС-, ПАН-
буква И сохраняется.

дезИнформация, контрИгра, постИмпрессионизм, субИнспектор, суперИнтендант, трансИорданский, панИсламизм

4. Сложносокращённые слова не подчиняются данному правилу. Буква И сохраняется.

медИнститут, педИнститут, спортИнвентарь, спорИгра, спецИнтернат

5. В сложных словах с первой основой ДВУХ-, ТРЁХ, ЧЕТЫРЁХ-
тоже сохраняется И.

двухИмпульсный, трехИмпульсный, трёхИонный, четырехИгольный

Задание
1
#11791

1) пред..нфарктное, без..дейный, небез..звестный

2) вз..мать, пред..стория, полит..нформация

3) пост..нфарктное, контр..ск, дез..нформация

4) трёх..онный, за..скрить, из..мать

5) сверх..нтуиция, под..грал, под..нтегральный

1) Предынфарктное, безыдейный, небезызвестный. Приставки оканчиваются на согласную. Поэтому в начале корня И заменяем на Ы.

Политинформация. Это сложносокращённое слово, приставки в нём нет. Корень, начинающийся с И, остаётся без изменений.

3) Постинфарктное, контриск, дезинформация. После приставок ПОСТ-, КОНТР- и ДЕЗ- пишем И, т.к. это иноязычные приставки; все они являются исключением для этого правила.

4) Трёхионный. В сложных словах с первой основой ДВУХ-, ТРЁХ-, ЧЕТЫРЁХ- в начале второй основы сохраняется И.

Заискрить. После приставки ЗА- оставляем И, т.к. это русская приставка, оканчивающаяся на гласный.

Изымать. Приставка оканчивается на согласную. Поэтому в начале корня И заменяем на Ы.

5) Сверхинтуиция. После приставки СВЕРХ- пишем И, т.к. эта приставка — исключение.

Подыграл, подынтегральный. Приставки оканчиваются на согласную. Поэтому в начале корня И заменяем на Ы.

Ответ:
13

Задание
2
#11792

Укажите варианты ответов, в которых во всех словах одного ряда пропущена одна и та же буква. Запишите номера ответов.

1) под..скать, от..граться, из..ди

2) без..нициативный, с..мпровизировать, пред..юньский

3) гос..мущество, транс..орданский, сверх..мпульсивный

4) до..сторический, мед..нститут, меж..нститутский

5) без..ллюзорный, с..здавна, по..стрепаться

1) Подыскать, отыграться, изыди. Приставки оканчиваются на согласную. Поэтому в начале корня И заменяем на Ы.

Во всех словах на месте пропуска Ы. Выписываем цифру 1.

2) Безынициативный, сымпровизировать, предыюньский. Приставки оканчиваются на согласную. Поэтому в начале корня И заменяем на Ы.

3) Госимущество. Это сложносокращённое слово, приставки в нём нет. Корень, начинающийся с И, остаётся без изменений.

Трансиорданский. После приставки ТРАНС- пишем И, т.к. это иноязычная приставка; все они являются исключением для этого правила.

Сверхимпульсивный. После приставки СВЕРХ- пишем И, т.к. эта приставка — исключение.

Во всех словах на месте пропуска И. Выписываем цифру 3.

4) Доисторический. Приставка оканчивается на гласную. Поэтому в начале корня И НЕ заменяем на Ы.

Мединститут. Это сложносокращённое слово, приставки в нём нет. Корень, начинающийся с И, остаётся без изменений.

5) Безыллюзорный, сыздавна. Приставки оканчиваются на согласную. Поэтому после приставки И заменяем на Ы.

Поистрепаться. Приставка оканчивается на гласную. Поэтому в начале корня И НЕ заменяем на Ы.

Ответ:
1234

Задание
3
#11793

Укажите варианты ответов, в которых во всех словах одного ряда пропущена одна и та же буква. Запишите номера ответов.

1) фин..нспектор, вз..мать, пере..начить

2) роз..ск, вз..скующий, за..звестковать

3) пост..мпрессионизм, об..скивающий, воз..меть

4) сверх..зысканный, меж..мпериалистический, раз..граться

5) без..нтересный, с..змала, пред..юньский

1) Фининспектор. Это сложносокращённое слово, приставки в нём нет. Корень, начинающийся с И, остаётся без изменений.

Взимать. После приставки ВЗ- пишем И, т.к. это исключение.

Переиначить. Приставка оканчивается на гласную. Поэтому в начале корня И НЕ заменяем на Ы.

2) Розыск, взыскующий. Приставки оканчиваются на согласную. Поэтому в начале корня И заменяем на Ы.

Заизвестковать. Приставка оканчивается на гласную. Поэтому в начале корня И НЕ заменяем на Ы.

3) Постимпрессионизм. После приставки ПОСТ- пишем И, т.к. это иноязычная приставка; все они являются исключением для этого правила.

Обыскивающий, возыметь. Приставки оканчиваются на согласную. Поэтому в начале корня И заменяем на Ы.

4) Сверхизысканный, межимпериалистический. После приставок СВЕРХ- и МЕЖ- пишем И, т.к. эти приставки — исключение.

Разыграться. Приставка оканчивается на согласную. Поэтому в начале корня И заменяем на Ы.

5) Безынтересный, сызмала, предыюньский. Приставки оканчиваются на согласную. Поэтому после приставок И заменяем на Ы.

Ответ:
15

Задание
4
#11794

Укажите варианты ответов, в которых во всех словах одного ряда пропущена одна и та же буква. Запишите номера ответов.

1) сам..здат, пере..збираться, пред..стория

2) из..мать, под..тожил, под..нтегральный

3) со..скатель, без..ндукционный, под..грали

4) меж..мпериалистический, фин..нспектор, вз..мать

5) четырёх..нтервальный, трёх..гольный, под..тог

1) Самиздат. Это сложносокращённое слово, приставки в нём нет. Корень, начинающийся с И, остаётся без изменений.

Переизбираться. Приставка оканчивается на гласную. Поэтому в начале корня И НЕ заменяем на Ы.

Предыстория. Приставка оканчивается на согласную. Поэтому в начале корня И заменяем на Ы.

2) Изымать, подытожил, подынтегральный. Приставки оканчиваются на согласную. Поэтому в начале корня И заменяем на Ы.

Во всех словах на месте пропуска Ы. Выписываем цифру 2.

3) Соискатель. Приставка оканчивается на гласную. Поэтому в начале корня И НЕ заменяем на Ы.

Безындукционный, подыграли. Приставки оканчиваются на согласную. Поэтому в начале корня И заменяем на Ы.

4) Межимпериалистический. После приставки МЕЖ- пишем И, т.к. эта приставка — исключение.

Фининспектор. Это сложносокращённое слово, приставки в нём нет. Корень, начинающийся с И, остаётся без изменений.

Взимать. После приставки ВЗ- пишем И, т.к. это исключение.

Во всех словах на месте пропуска И. Выписываем цифру 4.

5) Четырёхинтервальный. В сложных словах с первой основой ДВУХ-, ТРЁХ-, ЧЕТЫРЁХ- в начале второй основы сохраняется И.

Трёхигольный. В сложных словах с первой основой ДВУХ-, ТРЁХ-, ЧЕТЫРЁХ- в начале второй основы сохраняется И.

Подытог. Приставка оканчивается на согласную. Поэтому в начале корня И заменяем на Ы.

Ответ:
24

Задание
5
#11795

Укажите варианты ответов, в которых во всех словах одного ряда пропущена одна и та же буква. Запишите номера ответов.

1) со..змеримый, за..золировал, парт..мущество

2) пан..сламизм, за..ленный, вз..грать

3) дез..нформация, пост..ндустриальный, сан..нспектор

4) двух..мпульсный, от..граться, за..нтересовать

5) с..здавна, вз..скующий, с..мпровизировать

1) Соизмеримый, заизолировал. Приставка оканчивается на гласную. Поэтому в начале корня И НЕ заменяем на Ы.

Партимущество. Это сложносокращённое слово, приставки в нём нет. Корень, начинающийся с И, остаётся без изменений.

Во всех словах на месте пропуска И. Выписываем цифру 1.

2) Панисламизм. После приставки ПАН- пишем И, т.к. это иноязычная приставка; все иноязычные приставки являются исключением для этого правила.

Заиленный. После приставки ЗА- оставляем И, т.к. это русская приставка, оканчивающаяся на гласный.

Взыграть. Приставка оканчивается на согласную. Поэтому в начале корня И заменяем на Ы.

3) Дезинформация, постиндустриальный. После приставок ПОСТ- и ДЕЗ- пишем И, т.к. это иноязычные приставки; все они являются исключением для этого правила.

Санинспектор. Это сложносокращённое слово, приставки в нём нет. Корень, начинающийся с И, остаётся без изменений.

Во всех словах на месте пропуска И. Выписываем цифру 3.

4) Двухимпульсный. В сложных словах с первой основой ДВУХ-, ТРЁХ-, ЧЕТЫРЁХ- в начале второй основы сохраняется И.

Отыграться. Приставка оканчивается на согласную. Поэтому в начале корня И заменяем на Ы.

Заинтересовать. После приставки ЗА- оставляем И, т.к. это русская приставка, оканчивающаяся на гласный.

5) Сыздавна, взыскующий, сымпровизировать. Приставки оканчиваются на согласную. Поэтому в начале корня И заменяем на Ы.

Во всех словах на месте пропуска Ы. Выписываем цифру 5.

Ответ:
135

Задание
6
#11796

Укажите варианты ответов, в которых во всех словах одного ряда пропущена одна и та же буква. Запишите номера ответов.

1) вз..мать, пред..стория, меж..нститутский

2) небез..нтересный, с..грать, под..тожить

3) контр..гра, пед..нститут, сверх..нтересный

4) супер..гра, мед..нститут, вз..мать

5) дез..нформация, без..нициативный, под..грать

1) Взимать. После приставки ВЗ- пишем И, т.к. это исключение.

Предыстория. После приставки ПРЕД- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный.

Межинститутский. После приставки МЕЖ- пишем И, т.к. эта приставка — исключение.

2) Небезынтересный. После приставки БЕЗ- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный.

Сыграть. После приставки С- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный.

Подытожить. После приставки ПОД- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный.

Во всех словах на месте пропуска Ы. Выписываем цифру 2.

3) Контригра. После приставки КОНТР- пишем И, т.к. это иноязычная приставка; все иноязычные приставки являются исключением для этого правила.

Пединститут — сложносокращённое слово, приставок в нём нет. Корень, начинающийся с И, остаётся без изменений.

Сверхинтересный. После приставки СВЕРХ- пишем И, т.к. эта приставка — исключение.

Во всех словах на месте пропуска И. Выписываем цифру 3.

4) Суперигра. После приставки СУПЕР- пишем И, т.к. это иноязычная приставка; все иноязычные приставки являются исключением для этого правила.

Мединститут — сложносокращённое слово, приставок в нём нет. Корень, начинающийся с И, остаётся без изменений.

Взимать. После приставки ВЗ- пишем И, т.к. это исключение.

Во всех словах на месте пропуска И. Выписываем цифру 4.

5) Дезинформация. После приставки ДЕЗ- пишем И, т.к. это иноязычная приставка; все иноязычные приставки являются исключением для этого правила.

Подыграть. После приставки ПОД- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный.

Ответ:
234

Задание
7
#11797

Укажите варианты ответов, в которых во всех словах одного ряда пропущена одна и та же буква. Запишите номера ответов.

1) пед..нститут, пред..дущий, без..нициативный

2) дез..нтеграция, небез..звестный, вз..грать

3) сверх..збыточный, пере..грать, пост..мперский

4) пере..начить, меж..здательский, вз..мать

5) с..мпровизировать, под..скать, из..мать

1) Пединститут. Это сложносокращённое слово, приставки в нём нет. Корень, начинающийся с И, остаётся без изменений.

Предыдущий. После приставки ПРЕД- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный.

Безынициативный. После приставки БЕЗ- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный.

2) Дезинтеграция. После приставки ДЕЗ- пишем И, т.к. это иноязычная приставка; все иноязычные приставки являются исключением для этого правила.

Небезызвестный. После приставки БЕЗ- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный.

Взыграть. После приставки ВЗ- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный.

3) Сверхизбыточный. После приставки СВЕРХ- пишем И, т.к. эта приставка — исключение.

Переиграть. После приставки ПЕРЕ- оставляем И, т.к. это русская приставка, оканчивающаяся на гласный.

Постимперский. После приставки ПОСТ- пишем И, т.к. это иноязычная приставка; все иноязычные приставки являются исключением для этого правила.

Во всех словах на месте пропуска И. Выписываем цифру 3.

4) Переиначить. После приставки ПЕРЕ- оставляем И, т.к. это русская приставка, оканчивающаяся на гласный.

Межиздательский. После приставки МЕЖ- пишем И, т.к. эта приставка — исключение.

Взимать. После приставки ВЗ- пишем И, т.к. это исключение.

Во всех словах на месте пропуска И. Выписываем цифру 4.

5) Сымпровизировать. После приставки С- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный.

Подыскать. После приставки ПОД- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный.

Изымать. После приставки ИЗ- пишем Ы (вместо И), т.к. это русская приставка, оканчивающаяся на согласный. Важно помнить: это слово не является исключением.

Во всех словах на месте пропуска Ы. Выписываем цифру 5.

Ответ:
345

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

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

Чтобы точно знать, в каких случаях после приставок будет писаться буква -и, а в каких -ы, рекомендуем освежить в памяти основные правила.

Необходимо усвоить!

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

    Важно! Это правило правописания букв -ы и -и после приставок неприменимо к сложносокращенным словам. Например, спортинвентарь
    .

Выбирайте образовательный сайт «Школково» для качественной подготовки к аттестационному тестированию по русскому языку!

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

Опытные педагоги «Школково» уверены, что, постепенно переходя от простого к более сложному, учащиеся старших классов смогут определить наиболее трудные для себя темы и таким образом улучшить базовые знания. Сначала выпускникам предлагается еще раз повторить основной теоретический материал ( , суффиксов и проч.). Сделав это, учащиеся могут ознакомиться с конкретными примерами и попрактиковаться в выполнении упражнений. Обширный банк заданий представлен в соответствующем разделе сайта «Школково». Перечень упражнений постоянно дополняется нашими педагогами.

Не стоит откладывать подготовку на потом, начинайте занятия своевременно! Посмотрите задания по теме «Правописание гласных -и, -ы после приставок», выберите вначале наиболее простые из них и попробуйте их выполнить. Если при этом вы не столкнулись с особыми сложностями, можете смело переходить к более серьезным упражнениям. А если определенные трудности все-таки появились, тогда рекомендуем вам добавлять в свое расписание регулярные занятия на нашем сайте.

Мы осуществляем подготовку учащихся в онлайн-формате. Это означает, что заниматься на образовательном портале «Школково» могут не только выпускники из Москвы, но и учащиеся, проживающие в других городах России.

Правило написания буквы и/ы после приставок на согласный касается разных случаев написания слов с начальной буквой И или Ы в корне слова. Выбор буквы определяется тем, русская или иноязычная приставка предшествует корню слова.

Правописание буквы Ы после русских приставок на согласный

Если в морфемном составе слова имеется русская приставка, которая заканчивается на согласный, за исключением букв «ж» и «х», после неё в корне пишем букву Ы.

Примеры:

  • инфаркт — преды
    нфарктный;
  • инициативный — безы
    нициативный;
  • искусный — безы
    скусный;
  • иронизировать — сы
    ронизировать.

Примечание.

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

Примечание.

Исключение:
взимать; взимание.

Эти два слова пишутся в соответствии с их произношением.

Буква И после приставок меж- и сверх-

В русской орфографии после букв «ж», «ш», «х», «ч», «щ» не пишется буква Ы, поэтому после приставок меж- и сверх- в корне сохраняется начальная буква И.

Примеры:

  • игровой — межи
    гровой,
  • институтский — межи
    нститутский,
  • издательский — межи
    здательский,
  • интересный — сверхи
    нтересный и так далее.

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

Алгоритм написания приставок Ы и И

Написание буквы И в сложных словах

В сложных словах с первой частью двух-, трёх-, четырёх- после буквы «х» пишется только буква И.

Примеры:

  • двухигольный,
  • трехимпульсный,
  • четырёхигровой.

В составе сложных слов есть сокращёное первое слово, а второе сохраняет в корне начальную букву И.

Примеры:

  • спорти
    нвентарь (спортивный инвентарь),
  • специ
    нструмент (специальный инструмент).

Написание буквы И после иноязычных приставок

Если в морфемном составе слова имеются иноязычные приставки дез-, контр-, пан-, пост-, супер-, суб-, транс-, то в корне слов сохраняется начальная

Примеры:

  • дези
    нформация, дези
    нсекционный, дези
    нтегральный;
  • контри
    гра, контри
    тог, контри
    ск;
  • пости
    мпрессионизм, пости
    нфарктный;
  • пани
    сламистский, пани
    роничный;
  • супери
    гровой, супери
    зящный, супери
    нтересный;
  • транси
    ранский, транси
    ндийский; суби
    нспектор.

Таким образом, при сочетании приставки, которая оканчивается на согласный, с корнем или другой приставкой, начинающейся с И, по общему правилу пишем букву Ы.

Пример:
предыдущий, розыск, предыстория.

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

97.
Вместо и

после приставок, которые оканчиваются на согласный, произносится и пишется ы:

разы
грать, преды
дущий, безы
скусственный, поды
тожить, безы
дейный, преды
стория, небезынтересно
и т. п.

В двух случаях после согласного звука приставки пишется и

:

1) в словах с приставками меж-

и сверх-

, например: межи
нститутские
(соревнования), сверхи
зысканные
(манеры);

2) после иноязычных приставок, например: суби
нспектор, пани
сламизм, контри
гра.

98.
Приставки, оканчивающиеся на согласный, кроме з

, пишутся по общему правилу, т.е. не изменяют этого согласного: с
бавить, с
пилить, под
бить, под
пилить
и т. д.

Вот почему в начале русских слов никогда не пишется зб, зг, зд, зж,

а пишется сб, сг, сд, сж,

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

99.
Приставки же из-

, низ-

, воз-

, вз-

, раз-

, роз-

, без-

, чрез-

и через-

пишутся с буквой з

перед гласными и перед звонкими согласными, а перед глухими согласными эти приставки пишутся с буквой с:

раз
бить — рас
пилить, воз
делать — вос
кликнуть, низ
вергнуть — нис
ходить, из
бить — ис
портить, без
дарный — бес
правный, без
аварийный — бес
партийный
и т. д.

Примечание. Не следует упускать из виду, что правило касается только приставок
, т. е. что оно не имеет никакого отношения к корню, например: возка
(где воз
— корень) или низкий
, низший
(где низ
— корень).

100.
Приставка роз- (рос-)

пишется только под ударением, когда в ней слышится о:

ро́спись,
но: распи́ска;
ро́звальни,
но: развали́ться
.

101.
Чтобы не ошибиться в правописании приставок пере-

, пре-

, при-

, надо понимать значение этих приставок. Смысл приставки пере-

— «вновь», «по-иному», «через»: перекрасить, перегнать, перескочить.
Основной смысл приставки при-

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

имеет два основных значения: 1) означает высокую степень качества: предобрый, пренеприятный;
2) имеет в книжных словах тот же смысл, что в простых словах имеет приставка пере-

. Например: преломление
(ср: переломить
), преобразовать, превратить
(ср: переворотить
) и т. п.

Следует различать слова (значение их см. в словаре): прибыть, прибывать, прибытие
и пребывать, пребывание;
придел
и предел,
определить;
приёмник
и преемник
, преемственный
; призреть
, призирать
, призрение
и презреть
, презирать
, презрение
; приступить
и преступить
, преступник
, преступление
.

Конспект урока по русскому языку в 5 «А» классе.

ТЕМА УРОКА


:

Буква Ы и И после приставок, оканчивающихся на согласный.


ТИП УРОКА:


Урок объяснения нового материала.

ЦЕЛИ УРОКА:

    Формирование орфографических умений по новой теме.

    Познакомить учащихся с опознавательными признаками и графическим обозначением орфограммы.

    Формировать умение осознано воспринимать, формулировать правило.

ОБОРУДОВАНИЕ УРОКА:

    Учебник по русскому языку. Русский язык. Практика. 5 кл. : учеб. для общеобразовательных учреждений / А.Ю. Купалова, А.П. Еремеева, Г.К. Лидман – Орлова и др.; под ред. А.Ю. Купаловой. – 2 – е изд., стереотип. – М.: Дрофа, 2013. – 270 с.

    Рабочая тетрадь по русскому языку.

    Раздаточный материал (карточки).

Ход урока

Этап урока


1.Оргмомент.

Действия учителя

Здравствуйте, дети! Садитесь. Откройте тетради и запишите сегодняшнее число и слова: Классная работа.

Посмотрите на доску. Там записаны пары слов. Перепишите их к себе в тетрадь и выделите приставки и корень.

Слова на доске:

1)именной – поимённый – безымянный

2)интересный – неинтересный – безынтересный

3)играть – наиграть – отыграть — сыграть

4)искать – поискать – разыскать

5)исторический – доисторический – предысторический

6) индеветь – заиндеветь – обындеветь

Что интересного вы заметили в этих словах?

Молодцы!

Совершенно верно. А как вы думаете, почему?

Да! Так какая же тема нашего сегодняшнего урока?

Почти в каждом правиле есть исключения. Так вот, исключение из нашего сегодняшнего правила слово ВЗИМАТЬ. Почему?

Ребята, а еще есть такие приставки, когда после них мы пишем в корне И, не смотря на то, что они оканчиваются на согласный. Это приставки МЕЖ и СВЕРХ.

Межинститутский, сверхизысканный, сверхинтересный.

В русском языке много слов с иноязычными приставками. Такими как: КОНТР — , СУБ-, ТРАНС, ПАН-, -ДЕЗ, _СУПЕР, -ПОСТ. После этих приставок в корне тоже будет писаться буква И.

Давайте обобщим все вышесказанное.

Нарисуем себе схему нашего нового понятия.

А теперь давайте проверим, хорошо ли мы поняли новое понятие.

Диктуются слова, ученики записывают под диктовку, выделяют приставку, орфограмму и комментируют написание Ы или И.

Подытожить, безыдейный, розыгрыш, дезинфекция, предыдущий, безысходный, межиздательский, контригра, безынициативный, субинспектор, заинтересовать,

предыстория, предыюльский, дезинформировать, межинститутский,

сыграть, взимать.

Вам даны предложения. Из них вы выписываете слова с интересующей нас орфограммой, объясняете ее написание.

1) Я отыщу секрет и ларчик вам раскрою. (И.Крылов)

2) К вечеру разыгралась метель.

3) Мы решили отыскать брод.

4) В предыдущем номере была интересная статья о дельфинах.

5) Надо было подыскать надежное место.

6) Я не терял надежды разыскать дорогу.

Сделаем упражнение, которое дано вам в карточках:

1. Без…дейная информация, без…мпульсный датчик, без…нициативный помощник, небез…нтересный фильм, без…скровая сварка, без…скусный рассказ, без…сходное положение, вз…мать налоги, вз…гравшее самолюбие, вз…скательный вкус, дез…нтегральная схема, из…сканная обстановка, предложить контр…гру, предъявить контр…ск, меж…гровая тренировка, меж…нститутская конференция, меж…рригационный период, меж…здательское соглашение.

2. Раз…гранный жребий, уголовный роз…ск, сверх…зысканные манеры, с…грать шутку, с…змала закаляться, затеять с…знова.

Вы сегодня хорошо поработали и усвоили новый материал. Что будем делать дома?

На дом упражнение 639
. Урок окончен, до свидания!

Действия учеников

Дети здороваются и садятся. Делают записи в тетрадях.

Дети записывают слова в тетрадь и выделяют приставки.

Что иногда буква И в корне после приставки сохраняется, а иногда меняется на букву Ы.

Буква И в корне НЕ МЕНЯЕТСЯ на Ы, когда приставка оканчивается на гласный, а вот когда приставка оканчивается на согласный, то И в корне меняется на Ы.

Буква Ы после приставок, оканчивающихся на согласный.

Приставка ВЗ, оканчивается на согласный, по правилу должны писать Ы, но так как это исключение, пишем И.

Дети записывают слова, выделяют приставки и корень.

Итак,

буква Ы после приставки пишется если:

    Приставка оканчивается на согласный, кроме приставок МЕЖ и СВЕРХ.

    Приставка не иноязычная.

Буква И пишется после приставки, если:

    Приставка оканчивается на гласный.

    Приставка иноязычная.

    Приставка МЕЖ, СВЕРХ.

.Согл Ы,кроме МЕЖ, СВЕРХ+иноязычные

приставки.

Дети записывают слова, выделяют приставки, комментируют написание букв И, Ы к корне.

Тренироваться писать буквы Ы, И после приставок.

Правописание приставок и соседних с ними букв часто вызывает затруднение не только у школьников, но и у взрослых людей. Это объясняется еще и тем, что данный раздел орфографии несколько раз не очень удачно реформировался. Рассмотрим одну из трудных тем.

Гласные после приставок

«Зачем эти правила? Можно писать так, как слышится!» – такие фразы приходилось слышать, наверное, всем. Но на самом деле писать так, как слышишь, совсем неудобно. И правило, которое мы сейчас будем рассматривать — подтверждение этому факту.

Дело в том, что правописание И и Ы после приставок противоречит основному, фонематическому, принципу русской орфографии. Эти слова пишутся по несвойственному ей фонетическому принципу: как слышится, так и пишется. Однако от ошибок это отнюдь не уберегает, скорее напротив, провоцирует их. Это объясняется тем, что многие из нас отнюдь не отличаются идеальным фонетическим слухом, который встречается не чаще, чем идеальный музыкальный. Иначе мы легко делали бы фонетические разборы, и учить бы ничего не пришлось.

Основной принцип русской орфографии — фонематический. Это значит, что в слабой позиции (например, безударной) пишется то же, что и в сильной (например, под ударением).

Проблема еще и в том, что ни одна из гласных, указывающих на смягчение предыдущего согласного, на самом деле не смягчает последнюю букву приставки. Если за ней следуют Е, Ё, Ю, Я, то после приставки перед этой гласной ставится твердый знак. Если же в этом месте оказывается И, то она превращается в Ы.

Ы или И?

Итак, правило гласит: после приставки на согласную первая буква корня И переходит в Ы
.

Примеры

: розыск (искать), безынициативный (инициатива), подыграть (играть).

Кроме того, И сохраняется и после приставок сверх-, меж-.

Правило «Ы И после приставок» имеет одно исключение
. Это слово взимать
, его надо запомнить.

Кроме того, правописание Ы/И после приставок требует написания буквы И, если в этом месте производится перенос слова на другую строку; то есть, например, если мы переносим слово «разыграть», мы оставляем на стоке «раз», а на следующей продолжаем «играть», а не «ыграть».

Объясняется это «неполноправием» Ы. Эта буква обозначает звук, но не фонему (так ученые называют звук не речи, а языка — модель звука в нашем сознании). Поэтому Ы не может быть первой буквой русского слова, не пишется после Ж, Ш и т.д. И мы все, действительно, ощущаем, что с этой буквой «что-то не так», поэтому на такое нетрудное на самом деле правило часто бывают ошибки; задания на него включены в ЕГЭ.

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

Примеры
:

  • Разыскать.
  • Подыграть.
  • Безыскусный.
  • Безынициативный.
  • Отыграться.
  • Предыстория.
  • Безыдейный.
  • Подытожить.
  • Взыскать.
  • Взимать — искл.
  • Сверхинтеллектуальный.
  • Межинститутский.
  • Дезинфекция.
  • Постимпрессионизм.

Что мы узнали?

После приставки на согласный в корнях, начинающихся на И (-иск-, -инициатив-, -игр-), и предшествующей приставке из- (ис-) вместо И пишется Ы. Это правило основано на фонетическом принципе (пишем так, как слышим). Исключение: взимать. И, а не Ы пишется (сохраняется) также после приставок сверх-, меж- и иноязычных. Буква И пишется и в сложных словах.

Тест по теме

Оценка статьи

Средняя оценка: 4.3
. Всего получено оценок: 159.

https://ria.ru/20211124/antiprivivochniki-1760594229.html

Жестокая правда о ковиде: что пытаются скрыть

Жестокая правда о ковиде: что пытаются скрыть — РИА Новости, 24.11.2021

Жестокая правда о ковиде: что пытаются скрыть

Главврач больницы № 40 (более известной как «Коммунарка») Д. Н. Проценко вместе со своими коллегами-докторами обратился к известным противникам вакцинации от… РИА Новости, 24.11.2021

2021-11-24T19:14

2021-11-24T19:14

2021-11-24T19:14

авторы

вакцинация

москва

коммунарка (москва)

россия

коронавирус covid-19

коронавирус в россии

вакцинация россиян от covid-19

/html/head/meta[@name=’og:title’]/@content

/html/head/meta[@name=’og:description’]/@content

https://cdnn21.img.ria.ru/images/07e4/0c/03/1587469542_0:0:2736:1539_1920x0_80_0_0_0fb13f20379636f1fc47dccef432e8bc.jpg

Главврач больницы № 40 (более известной как «Коммунарка») Д. Н. Проценко вместе со своими коллегами-докторами обратился к известным противникам вакцинации от COVID-19 — политикам, артистам, трибунам.Вероятно, врачи надеются, что зрелище того, как «как люди ведут борьбу за каждый глоток воздуха», несколько умерит демагогическое рвение борцов с прививками. Все-таки они ведь тоже люди, и зрелище мучительного умирания тех, кто послушался борцов, должно же хоть некоторых смутить и вразумить.Метод жестокий, но бывает действенным. По крайней мере, я вспомнил семейное предание о 1944-м. Двадцать первого июля войска 3-го Прибалтийского фронта на плечах отступающего немца стремительно освободили Псков. Захватив трофеи: немцу было не до эвакуации матценностей. Среди трофеев был железнодорожный эшелон с древесным (метиловым) спиртом. К тому времени рейх испытывал серьезные трудности с горючим и широко использовал метанол в качестве автомобильного топлива.На войне всякий трофей пригодится, и — не пропадать же добру — командование распорядилось использовать немецкий древесный спирт для заправки ГАЗов и «Студебеккеров». Но вследствие органолептического сходства метилового спирта с этиловым начались отравления.Если даже сейчас люди травятся метанолом, то что же хотеть от солдат, только что отволгнувших после боя. Бабушка одного моего знакомого, служившая в медсанбате, рассказывала о подобных отравлениях при захвате эшелона со спиртом в Кенигсберге.Оттого при сцене из фильма «Освобождение», где красноармеец и жолнеж Войска Польского по-братски пьют спирт, нацеженный из цистерны, меня охватывал ужас. Девяносто процентов за то, что спирт был метиловый. С соответствующими последствиями.Сколь это было распространено в конце войны и сколько народу полегло, неизвестно, но в Пскове командование предупредило деда: в случае если в его роте будет ЧП с метанолом, он пойдет под трибунал. Перспектива трибунала сильно изощряет ум. Отобрав бойцов, сильно склонных к дегустации жидкостей, он повел их в санчасть, где в тяжких муках и кровавой рвоте умирали те, кто попробовал. После чего ЧП в его роте не было — зрелище было слишком тяжким.Очевидно, Проценко имел в виду нечто подобное. Но не на таких напал.Актриса, телеведущая и противница прививок М. В. Шукшина обвинила Д. Н. Проценко и его коллег в подмене понятий: «Считаю неправильным желание политтехнологов столкнуть лбами условных прививочников и антипрививочников. Предлагаю всем вместе написать письмо президенту России с требованием прекратить вакханалию в СМИ и на всех федеральных каналах».В Пскове 1944 года она, верно, обвинила бы моего деда-политтехнолога в желании столкнуть лбами условных метанольщиков и антиметанольщиков. И потребовала бы написать письмо товарищу Сталину с требованием прекратить вакханалию вокруг трофейного спирта.Яблочный активист А. Ю. Мельников пошел дальше: «Кого еще позвать в «Коммунарку»? Прежде всего, оптимизаторов медицины, тех, кто ликвидировал инфекционные больницы. И тех, кто в правительстве месяцами блокирует одностороннее и безусловное признание в России западных вакцин, дав возможность выбора для прививок тем, кто не доверяет российским препаратам».То есть в ответ на предложения врачей посмотреть воочию, как выглядит умирание от заразы, и тем самым отрезвить демагогов и их паству, то есть совершить действие, которое сейчас может сократить количество смертей, опытный софист переключает тему и начинает рассуждать про оптимизацию (сколь актуально это именно сейчас?) и про отсутствие закупок «Пфайзера» (лоббизм — дело выгодное, беда в том, что паства демагогов отрицает любую вакцину — хоть «Спутник V», хоть «Пфайзер»).Конечно, Проценко и его коллеги считают, что, покуда есть жизнь, всегда остается надежда, но в своей надежде на простые человеческие реакции антиваксеров и демагогов они проявляют чрезмерный оптимизм. Есть печальный диагноз, который пишется по-латыни — casus incurabilis, то есть «случай неизлечимый».

https://ria.ru/20211124/zona-1760451622.html

https://ria.ru/20211124/koronavirus-1760453873.html

https://ria.ru/20211124/privivka-1760450941.html

https://ria.ru/20211124/shukshina-1760532018.html

https://ria.ru/20211110/antiprivivochniki-1758383204.html

москва

коммунарка (москва)

россия

РИА Новости

internet-group@rian.ru

7 495 645-6601

ФГУП МИА «Россия сегодня»

https://xn--c1acbl2abdlkab1og.xn--p1ai/awards/

2021

Максим Соколов

https://cdnn21.img.ria.ru/images/102132/50/1021325094_0:0:772:771_100x100_80_0_0_00368990cdfa1153b421f77aefd5ef9c.jpg

Максим Соколов

https://cdnn21.img.ria.ru/images/102132/50/1021325094_0:0:772:771_100x100_80_0_0_00368990cdfa1153b421f77aefd5ef9c.jpg

Новости

ru-RU

https://ria.ru/docs/about/copyright.html

https://xn--c1acbl2abdlkab1og.xn--p1ai/

РИА Новости

internet-group@rian.ru

7 495 645-6601

ФГУП МИА «Россия сегодня»

https://xn--c1acbl2abdlkab1og.xn--p1ai/awards/

https://cdnn21.img.ria.ru/images/07e4/0c/03/1587469542_6:0:2737:2048_1920x0_80_0_0_c149caf093c1cfecc3ecccac5370eac0.jpg

РИА Новости

internet-group@rian.ru

7 495 645-6601

ФГУП МИА «Россия сегодня»

https://xn--c1acbl2abdlkab1og.xn--p1ai/awards/

авторы, вакцинация, москва, коммунарка (москва), россия, коронавирус covid-19, коронавирус в россии, вакцинация россиян от covid-19, обязательная вакцинация

Главврач больницы № 40 (более известной как «Коммунарка») Д. Н. Проценко вместе со своими коллегами-докторами обратился к известным противникам вакцинации от COVID-19 — политикам, артистам, трибунам.

«Мы все сейчас немного заняты, и вы, наверное, догадываетесь чем. Однако, учитывая то, сколько людей вас читают, слушают и прислушиваются, мы найдем время для того, чтобы провести вас по красным зонам, реанимациям и патологоанатомическим отделениям наших больниц. Может, после этого вы измените свою позицию, и меньше людей будет умирать».

Вероятно, врачи надеются, что зрелище того, как «как люди ведут борьбу за каждый глоток воздуха», несколько умерит демагогическое рвение борцов с прививками. Все-таки они ведь тоже люди, и зрелище мучительного умирания тех, кто послушался борцов, должно же хоть некоторых смутить и вразумить.

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

На войне всякий трофей пригодится, и — не пропадать же добру — командование распорядилось использовать немецкий древесный спирт для заправки ГАЗов и «Студебеккеров». Но вследствие органолептического сходства метилового спирта с этиловым начались отравления.

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

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

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

Очевидно, Проценко имел в виду нечто подобное. Но не на таких напал.

Актриса, телеведущая и противница прививок М. В. Шукшина обвинила Д. Н. Проценко и его коллег в подмене понятий: «Считаю неправильным желание политтехнологов столкнуть лбами условных прививочников и антипрививочников. Предлагаю всем вместе написать письмо президенту России с требованием прекратить вакханалию в СМИ и на всех федеральных каналах».

В Пскове 1944 года она, верно, обвинила бы моего деда-политтехнолога в желании столкнуть лбами условных метанольщиков и антиметанольщиков. И потребовала бы написать письмо товарищу Сталину с требованием прекратить вакханалию вокруг трофейного спирта.

Яблочный активист А. Ю. Мельников пошел дальше: «Кого еще позвать в «Коммунарку»? Прежде всего, оптимизаторов медицины, тех, кто ликвидировал инфекционные больницы. И тех, кто в правительстве месяцами блокирует одностороннее и безусловное признание в России западных вакцин, дав возможность выбора для прививок тем, кто не доверяет российским препаратам».

То есть в ответ на предложения врачей посмотреть воочию, как выглядит умирание от заразы, и тем самым отрезвить демагогов и их паству, то есть совершить действие, которое сейчас может сократить количество смертей, опытный софист переключает тему и начинает рассуждать про оптимизацию (сколь актуально это именно сейчас?) и про отсутствие закупок «Пфайзера» (лоббизм — дело выгодное, беда в том, что паства демагогов отрицает любую вакцину — хоть «Спутник V», хоть «Пфайзер»).

Конечно, Проценко и его коллеги считают, что, покуда есть жизнь, всегда остается надежда, но в своей надежде на простые человеческие реакции антиваксеров и демагогов они проявляют чрезмерный оптимизм. Есть печальный диагноз, который пишется по-латыни — casus incurabilis, то есть «случай неизлечимый».

Язык Си — один из наиболее влиятельных языков программирования за всю историю. Он стал незаменимым инструментом разработки операционных систем, сместив с этого пьедестала языки ассемблера. Изучение Си обязательно для любого уважающего себя программиста. Этот язык любим за свою внешнюю простоту и ненавидим за беспощадность к ошибкам. Благодаря ему у нас есть ядро Linux и тысячи уязвимостей в нём же в придачу. Попробуем понять, что же такое этот противоречивый язык Си — благословение или проклятие?

История языка Си берёт свое начало в недрах американской компании Bell Labs и тесно связана с судьбой операционной системы UNIX. Ее создатели, Кен Томпсон и Деннис Ритчи, разрабатывали свой проект для компьютеров PDP-11, и первые два года их основным инструментом был язык ассемблера. Трудоёмкость написания машинного кода вынуждала искать ему замену, которой в конечном итоге и стал язык Си. С его помощью было полностью переписано ядро операционной системы и большая часть утилит. Язык Си позволял создавать эффективные низкоуровневые программы на PDP-11, практически не используя при этом язык ассемблера.

Со временем встал вопрос портирования UNIX на новые аппаратные платформы. Использование языка Си значительно упростило эту задачу. Ведь если бы в разработке применялся только язык ассемблера, то тогда операционную систему пришлось бы переписывать под каждую компьютерную архитектуру. С другой стороны, исходники UNIX все еще содержали немало кода, созданного специально для компьютера PDP-11. Да и сам язык Си далеко не всегда точно отражал особенности и детали той или иной аппаратной платформы. Последнее еще больше затрудняло процесс переноса и лишало язык одного из его главных достоинств — прозрачной и понятной генерации машинного кода. Чем больше компьютерных архитектур захватывал Си, тем менее очевидной становились его связь с низким уровнем.

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

Необходимо было понять, как эффективно реализовать высокоуровневые конструкции языка Си, сохранив при этом его низкоуровневые свойства. Попыткой решить эту проблему стала публикация в 1989 году первого стандарта языка. Его принято называть «ANSI C» или «C89», и именно на него мы будем ссылаться в дальнейшем. Создатели стандарта решили окончательно разорвать связь Си с архитектурой PDP-11 и сделать язык полностью высокоуровневым. Была введена так называемая «абстрактная машина» — воображаемый исполнитель кода на языке Си (раздел 2.1.2.3, «Program execution»):

Семантические описания в этом Стандарте описывают поведение абстрактной машины, в которой вопросы оптимизации не имеют значения.

Это означает, что оптимизации компилятора не будут влиять на работу программы, пока её исходный текст согласуется со стандартом. Абстрактная машина должна была решить две проблемы одновременно. Во-первых, следование стандарту давало возможность создавать легко переносимые программы на языке Си. Во-вторых, абстрактная машина могла предоставить компиляторам свободу для оптимизаций. Вот только возникает вполне резонный вопрос — а чем тогда язык Си отличается от любого другого компилируемого языка высокого уровня? Ответ кроется в тексте стандарта. Чтобы всё-таки дать теоретическую возможность программистам писать низкоуровневые процедуры, а значит непереносимые, было введено ещё одно понятие — неопределённое поведение (undefined behavior, раздел 1.6, «DEFINITIONS OF TERMS»):

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

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

Возьмём следующий фрагмент кода на языке Си:

int x = 1;
x = x << sizeof(int) * 8;

Попробуем предположить, какой результат у нас получится. Допустим, мы скомпилировали этот код для процессоров архитектуры ARM. Инструкция битового сдвига в рамках этой аппаратной платформы определена так, что итоговым значением переменной «x» должен быть «0». С другой стороны, мы можем транслировать нашу программу в машинный код архитектуры x86. И уже там битовый сдвиг реализован таким образом, что значение «x» не изменится и останется равным «1». Мы могли бы сделать вывод, что результат работы данного фрагмента кода зависит от того, для какой аппаратной платформы мы его скомпилировали. Но на самом деле это не так.

В действительности данный фрагмент кода может быть обработан компилятором любым возможным и невозможным образом. Причина в следующем: согласно тексту стандарта языка Си битовый сдвиг на величину, большую или равную размеру выражения в битах, является неопределённым поведением. Получается, нет никакой гарантии, что этот кусок кода вообще будет работать. В действительности, даже в рамках одной архитектуры один и тот же компилятор может сгенерировать совершенно разные исполняемые файлы. Приведём примеры компиляции и запуска программы с печатью значения переменной «x». В обоих случаях мы используем компилятор gcc версии 10.2.1 для целевой архитектуры x86-64.

$ cat test.c
#include <stdio.h>

int main()
{
    int x = 1;
    x = x << sizeof(int) * 8;
    printf("%dn", x);
    return 0;
}
$ gcc test.c -o test
$ ./test
1
$ gcc -O test.c -o test
$ ./test
0

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

Рассмотрим чуть более сложный пример. Ещё одной разновидностью неопределённого поведения является разыменование нулевого указателя. Его тривиальным вариантом будет следующий фрагмент кода:

* (char *) 0;

Разумеется, никто в здравом уме не станет писать что-то подобное в своей программе. Однако совсем необязательно делать разыменование нулевого указателя явным образом, чтобы вызвать неопределённое поведение. В цикле статей «What Every C Programmer Should Know About Undefined Behavior» на сайте blog.llvm.org приводится фрагмент кода, подтверждающий это:

void contains_null_check(int *p)
{
    int dead = *p;
    if(p == 0)
        return;
    *p = 4;
}

Пример может показаться надуманным, но он позволяет немного лучше понять работу компилятора языка Си. Последний использует различные механизмы оптимизации, но здесь нам интересны лишь два. Один из них удаляет лишний, «мертвый» код, а второй вычёркивает бесполезные проверки на нулевой указатель. Если к вышеописанному фрагменту кода будет применён первый механизм оптимизации, то он преобразует функцию следующим образом:

void contains_null_check(int *p)
{
    if(p == 0)
        return;
    *p = 4;
}

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

void contains_null_check(int *p)
{
    int dead = *p;
    if(0)
        return;
    *p = 4;
}

Так как мы разыменовываем указатель до его проверки, то компилятор спокойно решает, что сам указатель никогда не будет нулевым. Благодаря этому сравнение «p == 0» заменяется на выражение, всегда возвращающее ложь. Затем компилятор запускает первый механизм оптимизации и убирает «мертвый» код:

void contains_null_check(int *p)
{
    *p = 4;
}

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

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

Оптимизации компилятора могут затрагивать также и функции стандартной библиотеки языка Си, в том числе, к примеру, memset. Она широко и печально известна за обилие ошибок, которые допускают программисты при её вызове. Заголовок функции выглядит следующим образом:

void *memset(void *ptr, int value, size_t num);

memset записывает «num» байтов со значением «value» по адресу «ptr». Несмотря на то, что параметр «value» имеет тип int, в действительности используется лишь его младший байт. Функция активно применяется для обнуления больших массивов данных, однако компилятор и сам частенько любит вставить её вызов туда, где это нужно и не очень. Так, любопытный случай обсуждался 15 апреля 2018 года на форуме osdev.org. Пользователь под ником ScropTheOSAdventurer создал тему, в которой рассказал о процессе разработки собственной учебной операционной системы. На свою беду он разрешил компилятору оптимизировать исходный код проекта, в результате чего последний перестал работать. В процессе отладки программист обнаружил ошибку в следующем фрагменте кода:

void *memset(void *ptr, int value, size_t num)
{
    unsigned char *ptr_byte = (unsigned char *) ptr;
    for(size_t i = 0; i < num; ptr_byte[i] = (unsigned char) value, i++);
    return ptr;
}

Для своей операционной системы разработчик решил использовать собственную реализацию функции memset. Но он не учёл, что в процессе трансляции компилятор gcc обнаружит в этом коде весьма заманчивую возможность для оптимизации. Фактически функция была в итоге преобразована к следующему виду:

void *memset(void *ptr, int value, size_t num)
{
    return memset(ptr, value, num);
}

Вполне вероятно, что среди разработчиков компилятора gcc были непревзойденные мастера софистики. В любом случае способности компилятора к оптимизациям явно превосходят все доступные человеческому разуму пределы.

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

int check_password(const char *pwd)
{
    char real_pwd[32];
    get_password(real_pwd);
    return !strcmp(pwd, real_pwd);
}

Есть лишь одна проблема — после вызова check_password в стеке останется строка с настоящим паролем пользователя. Если в вашей программе есть хотя бы одна уязвимость, позволяющая читать данные из памяти, то существует реальная вероятность украсть пароль из стека. Примером подобной уязвимости стал печально известный баг «Heartbleed». Чтобы снизить возможные риски, проще всего очистить содержащий пароль фрагмент стека:

int check_password(const char *pwd)
{
    int result;
    char real_pwd[32];
    get_password(real_pwd);
    result = !strcmp(pwd, real_pwd);
    memset(real_pwd, 0, sizeof(real_pwd));
    return result;
}

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

Одной из наиболее коварных разновидностей неопределённого поведения является strict aliasing. Термин может быть переведён как «строгое наложение», однако традиционного названия на русском языке у него не существует. По этой причине мы будем использовать оригинальный английский термин. Текст стандарта дает такое описание для strict aliasing (раздел 3.3, «EXPRESSIONS»):

Значение объекта должно быть доступно только с помощью lvalue-выражения одного из следующих типов:

— объявленный тип объекта,

— квалифицированная версия объявленного типа объекта,

— знаковый или беззнаковый тип, соответствующий объявленному типу объекта,

— знаковый или беззнаковый тип, соответствующий квалифицированной версии объявленного типа объекта,

— тип массива, структуры или объединения, который включает в себя один из вышеупомянутых типов среди своих членов (включая, рекурсивно, член внутренней структуры, массива или объединения),

— символьный тип.

Проще всего strict aliasing проиллюстрировать на конкретном примере:

int x = 42;
float *p = &x;
*p = 13;

Чтобы вызвать неопределенное поведение, достаточно обратиться к какой-либо переменной по типу, несовместимому с объявленным. Это ограничение можно обойти, применив символьный тип (char), на который не распространяются правила strict aliasing:

int x = 42;
char *p = &x;
*p = 13;

Вот только расчленение переменной на символы может оказаться трудоемкой задачей. Придется учитывать размер данных, а также используемый порядок байтов. Избежать неопределённого поведения можно также с помощью объединений (union):

union u { int a; short b };
union u x;
x.a = 42;
x.b = 13;

Впрочем и этот метод не лишён недостатков — объединение должно содержать члены со всеми возможными типами, которые будут использованы программой. Все это серьёзно осложняет применение «type punning» или так называемого каламбура типизации — намеренного нарушения системы типов. Эта техника необходима для более гибкого низкоуровневого управления памятью машины.

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

int get_pixel(const char *buf, int width, int x, int y)
{
    buf += get_header_size(buf);
    return ((const int *) buf)[y * width + x];
}

При вызове функции ей передается адрес области данных с содержимым файла, включая его заголовок, ширину изображения, а также координаты пикселя, цвет которого следует вернуть. Вместо типа int мы могли бы выбрать любой другой с известным нам размером. Но все это неважно, потому что функция get_pixel абсолютно неверна с точки зрения стандарта, так как нарушает правила strict aliasing. Чтобы использовать каламбур типизации, придется переписать весь код, связанный с используемым буфером, в том числе и тот, который ответственен за чтение файла.

Существует огромное количество примеров программ, не удовлетворяющих правилам strict aliasing. В их число входит знаменитая функция вычисления быстрого обратного квадратного корня из игры Quake 3:

float FastInvSqrt(float x)
{
    float xhalf = 0.5f * x;
    int i = *(int *) &x;
    i = 0x5f3759df - (i >> 1); /* What the fuck? */ 
    x = *(float *) &i;
    x = x * (1.5f - (xhalf * x * x));
    return x;
}

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

Остается один вопрос — зачем вообще нужен этот strict aliasing? Все дело в том, что он позволяет создателям компиляторов применять крайне агрессивные оптимизации исходного кода. Правила strict aliasing распространяются на обращения к любой памяти, в том числе и динамической. Так комитет стандартизации отметил, что следующий фрагмент кода (источник):

void f(int *x, double *y)
{
    *x = 0;
    *y = 3.14;
    *x = *x + 2;
}

может быть преобразован таким образом:

void f(int *x, double *y)
{
    *x = 0;
    *y = 3.14;
    *x = 2;
}

Согласно правилам strict aliasing указатель y не может содержать адрес того же участка памяти, что и указатель x. Именно этот факт и позволяет заменить выражение «*x = *x + 2» на «*x = 2». Активное использование компиляторами подобных оптимизаций сломало огромное количество старого кода. Так, в письме от 12 июля 1998 года один из разработчиков компилятора gcc Jeff Law, отвечая на вопросы по strict aliasing и связанными с ним ошибками, пишет (источник):

> Существует очень много кода, который нарушает правила strict aliasing. Одним из таких примеров является «переносимая» универсальная функция контрольной суммы IP, которая содержится в исходных кодах BSD для работы с сетями.

ИМХО, такого кода становится все меньше и меньше — современные компиляторы уже какое-то время используют strict aliasing в анализе, в результате чего люди были вынуждены исправлять свой код. Безусловно, это не относится к Linux и некоторым другим свободным проектам, так как они используют только gcc.

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

Укажите им на стандарт языка Си :-) :-)

Правила strict aliasing для компилятора gcc можно разрешить, используя флаг «-fstrict-aliasing», и запретить флагом «-fno-strict-aliasing». Последний рекомендуется применять, если вы не уверены, нарушаете ли вы текст стандарта — скорее всего, нарушаете. Говоря об упомянутом в письме ядре Linux, его автор Линус Торвальдс также дал свою оценку strict aliasing в частности и работе комитета в целом. Так, критикуя желание одного из разработчиков операционной системы лишний раз перестраховаться от нарушения стандарта, Линус написал такое письмо (источник):

Честно говоря, все это кажется мне сомнительным.

И я не о самих изменениях — с этим я могу смириться. Но вот обоснование этих самых изменений — абсолютная и полная чушь, причем весьма опасная.

Дело в том, что использование объединений для реализации каламбура типизации — это обычный и СТАНДАРТНЫЙ для этого способ. В действительности он является документированным для gcc, и используется в том случае, если вы, будучи не слишком умным (оригинал: «f*cking moron»), применили «-fstrict aliasing», и теперь вам необходимо избавиться от всего того ущерба, который навязывает этот мусорный стандарт.

Энди, что послужило причиной для всего этого идиотизма? И не надо говорить мне, что текст стандарта «недостаточно ясный». Текст стандарта, совершенно ясно, является дерьмовой чушью (см. выше о правилах strict aliasing), и в таких случаях его нужно игнорировать. Для этого необходимо использовать средства компилятора, чтобы избежать ущерба. Аналогично нужно поступать и в ситуациях, где нет полной ясности.

Это то, почему мы используем «-fwrapv», «-fno-strict-aliasing» и другие флаги.

Я уже говорил об этом раньше и повторю еще раз: когда текст стандарта противоречит реальности — он является обычным куском туалетной бумаги. Он не имеет абсолютно никакой важности. В действительности, вместо него я лучше возьму рулон настоящей туалетной бумаги — так хотя бы я не испачкаю свою задницу чернилами (оригинал: «won’t have splinters and ink up my arse»).

Видимо, Линус Торвальдс плохо изучил язык Си — настоящему программисту на Си такое в голову бы не пришло.

Впрочем, одним лишь strict aliasing стандарт не полон. Чтобы вызвать неопределённое поведение, необязательно даже разыменовывать указатель:

void f(int *p, int *q)
{
    free(p);
    if(p == q) /* Undefined behaviour! */
        do_something();
}

Использование значения указателя после того, как память по нему была освобождена, запрещено текстом стандарта (раздел 4.10.3, «Memory managment functions»):

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

Программисту важно понимать, что указатели в Си не являются низкоуровневыми. Стандарт постарался полностью искоренить какую-либо связь языка с реальным миром. Даже сравнение указателей, ссылающихся на разные объекты, объявлено неопределённым поведением (раздел 3.3.8, «Relational operators»):

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

Вот небольшой фрагмент кода, демонстрирующий некорректное с точки зрения стандарта сравнение:

int *p = malloc(64 * sizeof(int));
int *q = malloc(64 * sizeof(int));
if(p < q) /* Undefined behaviour! */
    do_something();

Однако наиболее интересным примером здесь будет служить исходный код следующей программы:

#include <stdio.h>

int main()
{
    int x;
    int y;
    int *p = &x + 1;
    int *q = &y;
    printf("%p %p %dn", (void *) p, (void *) q, p == q);
    return 0;
}

Если транслировать приведенный выше текст компилятором gcc, передав ему флаг «-O», то полученный исполняемый файл при запуске выдаст примерно следующую строку:

0x1badc0de 0x1badc0de 0

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

Большая часть примеров, связанных с работой указателей, была взята с сайта kristerw.blogspot.com. На нём вы сможете найти больше информации о текстах стандарта языка Си, а также загадочных оптимизациях компиляторов.

Может показаться, что в случае выключенных оптимизаций все вышеописанные проблемы обойдут вас стороной. Просто не передавайте компилятору флаг «-O», и вы получите тот результат, на который рассчитываете. Но на самом деле это не так. В январе 2007-ого года на сайте gcc.gnu.org пользователь под ником felix-gcc выложил исходный код следующей программы:

#include <assert.h>

int foo(int a) {
  assert(a + 100 > a);
  printf("%d %dn",a + 100, a);
  return a;
}

int main() {
  foo(100);
  foo(0x7fffffff);
}

Функция foo проверяет на переполнение сумму поданного знакового числа и константы «100». Как известно, на подавляющем большинстве компьютерных архитектур отрицательные числа задаются в виде дополнительного кода. В случае переполнения такое число меняет знак на противоположный, благодаря чему проверка «a + 100 > a» возвращает ложь. В теле функции main felix-gcc дважды вызывает foo. Сначала он подает на вход число, которое не приведёт к переполнению. Затем, исходя из того, что размер типа данных int равен четырем байтам, felix-gcc вызывает foo с наибольшим положительным числом данного типа. Логично предположить, что в таком случае сравнение вернёт ложь, и assert прервёт работу программы. Однако вот какой вывод получил felix-gcc после запуска исполняемого файла:

200 100
-2147483549 2147483647

Фактически gcc решил удалить проверку на переполнение, и это при том, что никаких флагов компилятору передано не было. И что еще интереснее, ранние версии gcc при тех же условиях не убирали проверку, в результате чего получаемая программа вела себя иначе. На резонную просьбу felix-gcc исправить неожиданный баг компилятора ответил пользователь под ником Andrew Pinski. Будучи разработчиком gcc, Andrew Pinski заметил, что данное поведение не является ошибочным. Более того, он сам оказался автором изменения в коде компилятора, которое и создало столь странный результат. Далее приводится фрагмент диалога felix-gcc и Andrew Pinski. Комментарии излишни:

Andrew Pinski
Переполнение знакового числа — это неопределённое поведение в тексте стандарта языка Си, используйте беззнаковый тип или флаг «-fwrapv».

felix-gcc
Вы должно быть шутите?
Различные проблемы безопасности вызваны переполнениями чисел, и вы просто так говорите мне, что в gcc 4.1 я больше не могу тестировать их для знаковых типов? Вы явно чего-то не понимаете. ДОЛЖЕН быть способ обойти эту проблему. Существующее программное обеспечение использует знаковые числа, и я не могу просто поменять тип на беззнаковый — мне все равно нужно проверить переполнение! Не похоже, что я мог бы использовать какой-нибудь обходной путь для этого. Что вы хотите от меня — чтобы я привел тип к беззнаковому, сдвинул вправо на один, затем сложил или что вообще?!
ПОЖАЛУЙСТА, ОТМЕНИТЕ ЭТО ИЗМЕНЕНИЕ. Оно создаст СЕРЬЁЗНЫЕ ПРОБЛЕМЫ БЕЗОПАСНОСТИ во ВСЕВОЗМОЖНЫХ ПРОГРАММАХ. Меня не волнует, что ваши стандартизаторы говорят о том, что gcc исправен. ВСЕ ЭТО ПРИВЕДЁТ К ТОМУ, ЧТО ЛЮДЕЙ ВЗЛОМАЮТ. Я обнаружил эту проблему, так как одна из проверок безопасности, которая предотвращает взлом, провалилась.
ЭТО НЕ ШУТКА. ИСПРАВЬТЕ ЭТО! СЕЙЧАС ЖЕ!

Andrew Pinski
Я не шучу, стандарт языка Си прямо говорит, что переполнение знакового числа — это неопределённое поведение.

felix-gcc
Так, послушайте, Эндрю, вы что, действительно думаете, что эта проблема исчезнет, если вы продолжите закрывать баги достаточно быстро? Проверка, которую я написал, покрывала все возможные ситуации. Не требуется даже уточнения того, что за тип используется — указатель, беззнаковое или знаковое число. Ну, указатели вы тоже сломали, но ваши изменения были исправлены. Парень, который сделал это тогда, должен появиться здесь, нам нужен кто-то с трезвой головой и видением ситуации как у него.
Давайте посмотрим правде в глаза — вы облажались по полной (оригинал: «fucked up this royally»), и теперь вы пытаетесь прикрыть все ошибки как можно скорее, чтобы никто не заметил, сколько ущерба вы нанесли. Вы, сэр, непрофессиональны и позорите команду разработчиков gcc. Эта ошибка останется открытой до тех пор, пока вы не вернёте все обратно или не сделаете упомянутый вами флаг по умолчанию. Пока вы будете ломать программы, чьи авторы по глупости включили оптимизации, мне всё равно. Но я не позволю вам делать моё окружение менее безопасным только потому, что ваш непрофессионализм не позволяет вам разобраться с оптимизациями после того, как было показано, что они наносят больше вреда, чем пользы. Сколько еще доказательств вам необходимо предоставить? Боже мой, да autoconf считает, что ваши «оптимизации» нужно отключать повсеместно. Вы вообще замечаете взрывы вокруг самих себя?

Andrew Pinski

http://c-faq.com/misc/sd26.html

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

felix-gcc
МОЙ КОД НЕ СЛОМАН.
Попытки обесценить проблему или оскорбить меня ничего не решат.

Andrew Pinski
Вы написали ошибку, поэтому я и решил, что ваш код сломан.

felix-gcc
Итак, скажите мне, какая часть моей аргументации вам непонятна? Я мог бы использовать слова попроще, чтобы вы смогли меня понять на этот раз.
Ребята, ваша задача — это не просто реализовать стандарт Си. Вы также обязаны не нарушать работу программ, которые зависят от вас. А от вас зависит МНОГО программ. Когда вы нарушили точность вычислений с плавающей точкой, то вы сделали это доступным с помощью флага (-ffast-math). Когда вы добавили strict aliasing, вы так же сделали эту функцию доступной через флаг (-fstrict-aliasing). Если я правильно помню, вы тогда тоже цитировали текст стандарта, пока люди с более адекватным пониманием мира вас не остановили. И я собираюсь оставить эту ошибку открытой до тех пор, пока не повторится та же история.

Andrew Pinski
Я думаю, нам не следовало делать это необязательным, но меня не было в тот момент, когда было принято это решение. Также помните, что у нас был релиз, когда strict aliasing был включен, но затем нам пришлось его отключить по умолчанию. За это время люди исправляли свои программы, пока оптимизация была активна. И мы уже сделали оптимизацию знакового переполнения опциональной с помощью «-fwrapv». Я не понимаю, к чему вы приводите свои аргументы.

felix-gcc
Вы не можете просто так потенциально сломать кучу свободного ПО лишь потому, что изменили свое мнение по поводу того, какую свободу вам дает стандарт.
Повзрослейте или уйдите, позволив более ответственным людям заниматься вашими делами.

Andrew Pinski
Подождите, но эта оптимизация была еще с 1994-ого года, и если какой-либо код, начиная с этого момента, использовал знаковое переполнение, то авторы этих программ сами напросились.

felix-gcc
Знаете ли вы, что ракета Ариан-5 взорвалась (и могла убить людей!) из-за ошибки переполнения? Что если люди погибнут из-за того, что вы решили, что стандарт позволяет вам выкидывать проверки безопасности, написанные людьми?

Andrew Pinski
Я уже показал вам, как проверять знаковое переполнение до того, как оно произойдет, а не после. Вы можете научить других специалистов по безопасности тому, как писать этот код.

felix-gcc
Еще раз: НЕ ИМЕЕТ ЗНАЧЕНИЯ ТО, ЧТО ГОВОРИТ СТАНДАРТ. Вы сломали программы, и люди пострадали от этого. Теперь верните все обратно. Меньшее, что вы можете, это сделать «-fwrapv» по умолчанию. Вам все еще придётся заставить его работать правильно (я слышал, что он неверно работает в определенных ситуациях), но это уже другая история.

Andrew Pinski
Он будет по умолчанию в тех языках, где определено именно такое поведение. Я дал вам способ написания проверок переполнения, и если вам не нравится то, что говорит стандарт языка Си, то это не моя вина.
Запомните: компилятор gcc также является оптимизирующим компилятором, и если вам нужны оптимизации, то вы должны следовать правилам того языка, на котором вы пишете, вместо создания неверных программ, что и происходит с Си и Си++ в целом.

felix-gcc
В ранних версиях компилятора такое поведение происходило только в случае включённых оптимизаций. Если немножко присмотреться, то окажется, что все ваши аргументы ничего не стоят.
Потому как gcc 4.1 выкидывает этот код уже без включённых оптимизаций. Вот и все ваши аргументы.
Пожалуйста, сделайте «-fwrapv» по умолчанию, и я заткнусь.

Andrew Pinski
Попробуйте проверить время исполнения программы с «-fwrapv» и без него. Вы увидите, что без него код работает быстрее.

Пытаясь уйти в обсуждение оптимизаций компилятора, Andrew Pinski решил тем самым оправдать свою позицию. В процессе он, однако, упомянул куда более «интересную» аргументацию:

Тот факт, что человек написал проверку переполнения неверным образом, не является основанием для наказания людей, которые на самом деле сделали это правильно, используя способ, описанный в документации. Это моя позиция — вы пытаетесь наказать людей, которые написали свои проверки так, как это предполагает стандарт языка Си.

А в самом конце обсуждения Andew Pinski заявил следующее:

Я бы принял вашу идею о включении «-fwrapv» по умолчанию, если бы не существовало способа для проверки переполнения до того, как оно случилось, но он есть. Да, мы сломаем код, который был написан, исходя из предположения о том, что знаковое переполнение возможно. Но я думаю, что это та цена, которую мы можем принять.

В заключение хочется привести еще одну цитату Линуса Торвальдса:

Разработчики gcc больше заинтересованы в попытках выяснить, что еще им позволяет делать стандарт, чем в том, как заставить вещи действительно работать.

И в этом, похоже, заключена главная проблема языка Си. Но подобное не могло произойти на пустом месте — в конечном итоге мы сами позволили этому случиться. Язык Си уже очень давно перестал выполнять возложенные на него функции и превратился в уродливую пародию на самого себя. Но мы этого не заметили, потому что смирились с тем, что наши программы не работают. Мы, как программисты, настолько привыкли к ошибкам, что они стали неотъемлемой частью нашей жизни. Зачастую на отладку и тестирование программ уходит больше времени, чем на проектирование и написание самого кода. И ведь это немудрено — людям свойственно ошибаться. Большую часть багов и уязвимостей программисты вносят случайно, совершенно не задумываясь, и мы ничего не можем с этим сделать. Однако неизбежность ошибок не оправдывает их существование. Задача программиста в том, чтобы писать код, который работает. Даже если это неочевидно, трудно и невозможно, мы не имеем права делать ошибки. Потому что иначе все бессмысленно, и мы перестаем понимать, что можно делать, а что нельзя, что красиво, а что уродливо. В погоне за эффективностью разработчики компиляторов забыли о том, для чего на самом деле нужен язык Си. Он инструмент программиста, а плохим инструментом нельзя написать хорошую программу. Эта история — показательный пример того, что не всякая деятельность плодотворна, и не каждое изменение ведет к лучшему результату. Стараниями комитета стандартизации и разработчиков компиляторов мы в конечном итоге потеряли язык Си. Как инструмент разработки он стал абсолютно бесполезен и даже вреден, и мы обязаны признать это. В противном случае наши программы никогда не будут работать. Пренебрежительное отношение к ошибкам должно уйти в прошлое, а вместе с ним должен умереть и язык Си.

P.S. Если вы все ещё верите, что язык Си можно спасти, ознакомьтесь по ссылке со следующей выдержкой за авторством одного из двух редакторов текста стандарта языка Си:

Мы позволим компилятору лгать вам. Мы будем лгать вашему коду. И когда дела пойдут плохо — ошибка, «обосратушки», утечка памяти — мы торжественно покачаем головами.

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

Соавтор статьи: @aversey

Изначальная публикация: cmustdie.com

|

Российская компания «Релэкс» с 2017 г. без лишнего шума развивает собственную масштабируемую реляционную СУБД под названием Soqol и сумела довести ее до стадии MVP. Уникальная архитектура системы позволила совместить лучшие черты реляционных и резидентных решений. Проведенные разработчиками тесты показывают значительное превосходство отечественного решения над PostgreSQL в производительности. Примечательно, что на серверах с российскими процессорами «Эльбрус» Soqol справляется с обработкой транзакций в TPC-C-тестах HammerDB лучше, чем PostgreSQL – на машинах похожей конфигурации на базе чипов Intel.

СУБД Soqol

Как стало известно CNews, воронежская ИТ-компания «Релэкс» ведет разработку отечественной реляционной системы управления базами данных (СУБД) Soqol (читается: «Сокол»). СУБД ориентирована на работу в кластерных системах, сочетает в себе преимущества реляционных и резидентных (in-memory) решений – удобство использования и высочайшую производительность, говорится на официальном сайте проекта.

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

СУБД может работать на аппаратных платформах под управлением процессоров Intel (x64) и «Эльбрус». Как рассказал директор по маркетингу компании «Релэкс» Денис Хохлов на конференции Elbrus Partner Day, состоявшейся 13 декабря 2021 г., компания сотрудничает с МЦСТ, российским бесфабричным разработчиком микропроцессоров.

falcon-600.jpg

Маскотом СУБД Soqol является сокол. В названии продукта обыгрывается созвучность русского наименования этой хищной птицы и английской аббревиатуры SQL («эс-кью-эл»), обозначающей язык структурированных запросов, который используется для взаимодействия с реляционными БД

Сотрудничество предполагает совместную разработку отдельной версии под современные «Эльбрусы» командами обеих компаний. По словам Хохлова, наработки, полученные в процессе, помогают лучше оптимизировать в том числе и версию под процессоры Intel.

Разработка Soqol стартовала в 2017 г. К 2020 г. у «Релэкс» был готов минимально жизнеспособный продукт (minimum viable product, MVP). Сегодня, согласно информации, опубликованной на сайте проекта, Soqol включает в себя все элементы современной СУБД. Выход альфа-версии продукта намечен на январь 2022 г. Релиз, как ожидается, состоится в декабре 2022 г.

Производительность

В ходе выступления Денис Хохлов продемонстрировал результаты тестирования Soqol на аппаратных платформах с применением процессоров архитектур x64 и «Эльбрус» в сравнении с другой, крайне популярной реляционной СУБД с открытым исходным кодом – PostgreSQL. Для замера производительности использовался тест TPC-C от HammerDB, являющийся стандартом де-факто для проведения оценки скорости обработки различных транзакций СУБД в многопользовательском режиме.

Детальные характеристики испытательных стендов в ходе выступления Хохлов не озвучил. Однако из презентации ясно, что в основе конфигурации на базе микросхем Intel лежит двухпроцессорная система с применением процессоров линейки Xeon e5 v4. Конкретный представитель семейства спикером упомянут не был, но, судя по заявленным базовой тактовой частоте в 2,2 ГГц и наличию 40 логических ядер в сумме, это, вероятно, Xeon e5 2630 v4, поставки которого стартовали в I квартале 2016 г.

С конфигурацией стенда на отечественном «железе» все чуть более очевидно: в ее состав вошли четыре процессора «Эльбрус-8С», работающие на частоте 1,2 ГГц (всего 32 физических ядра в сумме). Стоит отметить, что модель «Эльбрус-8С» можно условно назвать современником Xeon e5 2630 v4, ее серийное производство тоже началось в 2016 г.

Производительность СУБД Soqol на различных аппаратных платформах в сравении с PostgreSQL. Источник: презентация «Релэкс»

По итогам тестирования СУБД Soqol в конфигурации с процессорами Intel на пике выдала 2,6 млн транзакций в минуту. PostgreSQL в аналогичных условиях смогла похвастаться лишь Intel 330 тыс., то есть примерно в восемь раз более слабым результатом. Soqol на отечественном «железе» продемонстрировал производительность на уровне 478 тыс. транзакций в минуту.

Как раскрыть все возможности 5G?

Интернет

Под интегральное число как пишется

Проанализировав данные показатели, можно прийти к выводу о том, что серверы на Intel по-прежнему значительно производительнее машин сопоставимого «возраста» на процессорах «Эльбрус», в чем на собственном опыте недавно убедился Сбербанк. Однако нельзя не отметить, что СУБД Soqol демонстрирует высокую скорость обработки транзакций как на Intel, так и на «Эльбрусах». Причем на российских серверах он показывает более высокие результаты, нежели PostgreSQL на Intel – примерно в полтора раза.

Использованные при замере производительности СУБД сервера на Intel и «Эльбрусах» представитель «Релэкс» назвал «формально близкими по вычислительной мощности», несмотря на то, что в них задействованы процессоры отличающихся архитектур и в разном количестве.

По словам Хохлова, особенность работы СУБД заключается в том, что большая часть времени тратится на доступ к оперативной памяти и на обмен данными с клиентом, а непосредственных вычислений не так уж и много, поэтому при сравнении конфигураций следует учитывать такие важные факторы как скорость работы памяти и архитектуру доступа к ней, оперативность переключения контекста. Также следует иметь в виду реализованную в процессорах Intel технологию hyperthreading, которая позволяет разделить каждое физическое ядро на два логических. Такие возможности распараллеливания вычислений, по оценке специалистов «Релэкс», обеспечивают прирост производительности при использовании процессоров Intel до 40% и выше.

Ключевые архитектурные особенности Soqol

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

Чем знаменита компания «Релэкс»

Флагманским продуктом «Релэкс» является СУБД «Линтер». Она, по заявлению представителей компании, разработана «с нуля», без использования открытых технологий. Система прошла сертификацию в Министерстве обороны и ФСТЭК. В редакции «Линтер Бастион» обеспечивает защиту информации, составляющей государственную тайну с грифом до «совершенно секретно» включительно.

Как увеличить инвестиции в ИТ-инсорсинг в полтора раза

ИТ в банках

Под интегральное число как пишется

«Релэкс», по данным официального сайта, также разрабатывает программное обеспечение на заказ для таких отраслей как медицина, строительство, промышленность, электронная коммерция и финансы, телеком, информационные технологии и государственное управление.

  • Какой дисплей для смартфона лучше: AMOLED или IPS?

  • Под каким деревом сидел зайка в сказке у страха глаза велики
  • Под каблуком у женщины рассказ
  • Под колесо как пишется слитно или раздельно
  • Под ковром как пишется слитно или раздельно
  • Под запретом как пишется