Dore: Ogre

Странности нашего городка

MEMSET(3)                 Linux Programmer's Manual                MEMSET(3)
NAME        
memset - fill memory with a constant byte
SYNOPSIS        
#include <string.h> void *memset(void *s, int c, size_t n);
DESCRIPTION        
The memset() function fills the first n bytes of the memory area pointed to by s with the constant byte c.

Кто-нибудь знает, почему c целоe, если заполняем память байтами?
Tags:
А как тогда работал memset? Он тоже заполнял память словами, а не байтами?
Сейчас уже не помню, но практически уверен, что да. Быстрее же. Память из 16-битных слов, регистры 16 бит, зачем заморачиваться. Можно, кстати, найти. где-то наверняка оригинальные тексты гуляют.
Хм, тогда ответ на мой вопрос - c слово потому, что в старину память заполняли словами. Но тогда непонятно, какая тут может быть совместимость со стариной, ведь если мой старинный код вызовет memset со словом, состоящим из двух различных байтов, то все равно ничего хорошего не выйдет.
Я бы тоже сказал "слово", в те годы, когда ассемблер дышал в спину, это было бы понятно. А вот насчет совместимости со стариной - хороший вопрос, никто ж не гарантирует, что старинный код должен работать. Ему место в Палате Мер и Весов. Хотя вот, недавно Эппл 1 на аукционе продали тысяч за 300. Там можно попробовать.
Так если совместимости все равно нет, то какая разница, что делали в старину? Почему в тот момент, когда отказались от совместимости и поменяли семантику мемсета, не поменяли его сигнатуру? Ведь один человек принял оба решения, одновременно? Это и безопаснее было бы - компилятор бы мог предупреждать, что кто-то передает слово туда, где теперь нужен байт.

Edited at 2018-09-28 03:46 pm (UTC)
К тому моменту это был уже точно не один человек, в Позиксе заседали десятки. И я помню все эти бесконечные войны между Позиксом, System V specs и прочими изводами в виде Дековского Ультрикса, БиЭсДи, еще бродящими версиями, основанными на 7 и пр. Совместимость тогда была проблемой, наш код пестрел ifdef-ами на десятки платформ. Даже уже в Штатах в начале 90-х, наши файловые системы должны были работать на нескольких Юниксах - условной компиляции было полно.
В смысле, один человек писал имплементацию мемсета, в байтах, а совсем другой - его декларацию, в словах? Серьезно, что ли?
Да нет, ну не до такой же степени. Сигнатуру брали из какого-нибудь стандарта, благо было из чего выбирать. Потом кто-то подпиливал компилятор под выбранный стандарт. Потом старые программы переставили работать. Потом кто-то вставлял ифдефы в старый код, а совсем другой человек решил править компилятор и третий - библиотечные функции. Тут на Линуса бочку катят, что мол грубый он и к людям невнимателен. А вы этих людей видели???

Скажем так, у меня от тех времен остались советские лагерные ощущения - "не верь, не бойся, не проси". Я никогда не верил написанному, просить было некого, а делать было надо. "Довьерьяй но провьерьяй"
Ну не знаю, я думал, libc пишут люди с седыми бородами, у которых все всегда портабельно, совместимо со всем и заголовки имеют смысл.

Edited at 2018-09-28 04:11 pm (UTC)
В те далекие годы так и было. Мне еще повезло познакомиться с Ритчи на одной из Юзниковских конференций. Я всю эту толпу помню, еще молодой МкКузик бегал с горящими глазами и вальяжный Бил Джой пил мартини в ресторане "Прага".

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