Простите, но долгосрочный арендодатель не предоставляет тот же сервис: в частности, частую уборку и стирку белья, т.е. арендатор, сдавая это жилье в субаренду, добавляет к услуге некоторую ценность, и, соответственно, стоимость.
и поле типа string — это указатель на «string itself», который напрямую cast'ится в ASCIIZ строку. И нам достпуна вся та же магия с указателями, мы можем так же понавставлять нулей и работать с созданными подстроками функциями сишной библиотеки, если очень хочется.
Вы, собственно, прочитали комментарий, на который отвечали? Судя по всему, нет.
В смешанном подходе вы сможете все сделать точно так же, за исключением инициализации константой (но это именно языкозависимая фишка, конкретно относящаяся к упомянутому мною Delphi, из которого я притащил пример смешанного подхода).
const char *p = str + 4; // внезапно тоже строка в ASCIIZ
Будет
var
s: string;
p: pchar;
s := '1,2,3,4,5';
p := pchar(str) + 4;
Здесь мы можем использовать p как ASCIIZ строку.
char *endp = NULL;
long val = strtol(p, &endp, 10); // и endp тоже не менее внезапно строка
То же самое, если мпортируем strtol откуда-нибудь
var
val: integer;
endp: pchar;
val := strtol(p, @endp, 10);
if (endp — str >= sizeof(str) — 1) // strlen()? А шо ента и, главное, зачем?
А здесь вместо sizeof я буду использовать обычный стандартный length:
if cardinal(endp) - cardinal(str) >= length(str) - 1 then
Итак, мы проверяем знание оператора запятая, хотя из этого мы не можем извлечь никакой информации о знании языка C. Вроде бы как напрашивается вывод…
Вы непоследовательны и нелогичны.
Я сказал, что это необходимое, но не достаточное условие. Вы понимаете, что это значит? Это значит, что мы проверяем, не отсутствует ли данное знание у человека, и выбраковываем по факту отсутствия в качестве одного из этапов.
Не. Это как: «Я взял на улицу зонт, следовательно идет дождь» — не следует.
Человек объявляет, что набирает разработчиков, знающих язык Си и проверяет это знание тем или иным образом. Ваш довод, о том, что данный кандидат, зная Си, может не знать других вещей, необходимых в работе, не отменяет необходимость проверки на знание языка. Эти две проверки связаны через конъюнкцию.
Вы решаете вопрос «как средствами языка Си достичь xyz», в то время, как я просто отметил, что комбинированный подход — удобен, потому что наметился спор (см. выше) на тему, какие строки лучше — asciiz или паскалевского типа.
Не вижу никакой проблемы. Длина строки остается прежней, т.е. равна длине буфера.
А уж если мы начинаем играть в упомянутые выше ASCIIZ игры, то и пользоваться будем, соответственно, указателями и функциями типа strlen.
Можно использовать комбинированный подход, как в Delphi: есть и длина строки (и refcount еще для меньшего кол-ва операций копирования) и терминальный 0. Поэтому можно и всегда быстро длину узнать, и передать в C, где нужен ноль на конце. Можно ту же самую замену разделителей на 0 провести, с выделением указателей на каждую подстроку, формальная длина строки при этом останется той же.
Здесь есть другой аспект, с которым иногда приходится встречаться. Если по некоему адресу хранится указатель, или блок указателей, его лучше инициализировать, обнулять, потому что проверка валидности указателя, которая ставится в ifах и assertах, может выстрелить только при нулевом указателе, дав нам стек для отладки, а в ином случае там может оказаться мусор, который при этом является валидным адресом памяти, и ошибка уплывет дальше, где ее фиг поймаешь.
Но почему не написать более простую альтернативу ls — функцию, которая берёт произвольный каталог, или рабочий каталог по умолчанию, и возвращает список файлов из него, не обращая внимания на флаги?
Ну так понятно — раз так в 500 удобнее работать с буфером в своей памяти, в котром лежать данные типа «запись», структура и последовательной полей которой известна, чем читать строку символов, ее парсить в ту же запись — удобное внутреннее представление, чтобы отфильтровать. А потом окажется, что в новой версии легковесная ls выдает больше или меньше полей, или меняет последовательность, и старые программы-фильтры сдохнут. Или придется добавлять флаг вида «дай новый более удобный вывод», что опять приводит к раздутию.
А потом, как всегда внезапно, придет осознание, что для наиболее частого сценария надо вместо одной команды запускать конвейером две, причем вторая будет просто тупо брать первое поле — имя файла, выкидывая остальное, делая сериализацию/десериализацию данных пустой тратой процессорного времени. Альтернатива — опять же добавить флагов вида «дай краткую инфу-дай полную инфу».
Т.е. как ни крути, раздутие будет. Философия «сложим все из кирпичиков» хороша, но не универсальна. Как обычно — любая догма, как «запихать все в одну программу», так и «всегда разбивать на кирпичи», проигрывает взвешенному подходу.
Сразу видно уши фотографа. Недавно читал где-то о том, что в одной из крупных газет США был циркуляр-рекомендация о подборке фотографий для статей о СССР. Рекомендовалось выбирать зимние или осенние фотографии, потому что это как раз создает необходимую мрачную картинку — все одноцветное, бесформенное. Или просто грязное, в лужах.
1). Категорически неочевидно как из блестящего владения оператором «запятая» следует хорошее знание языка C
Никак. Необходимое, но не достаточное условие.
2). Кроме того само по себе знание C не нужно никакому бизнесу, кроме разработчиков компиляторов. «Знаешь C? Ну, возьми с полки пирожок. Нам интересно как ты поможешь нам в разработке нашего вэб-сервера».
Ну, наверно, если гражданин нанимает работников, проверяя знание языка Си, то именно им он как раз и нужен, не? Знание этого языка является необходимым условием для приема на работу именно в эту фирму. Необходимым, т.е. проверка на знание A, B и C из моего предыдущего комментария последует отдельно.
Собеседование — это формат переговоров, весьма сжатый по времени. В текущей реальности только гугл и сопоставимые компании могут мурыжить кандидатов 6-ю собеседованиями, для более приземленных компаний нужно за час-полтора принять решение о, том, будем ли мы сотрудничать с этим человеком.
Даже в маленьких конторах проводят по 2-3 собеседования, это нормально.
на котором кандидату ( видимо на должность C программиста ) задавали бы вопросы про оператор «запятая», сложение числа со строкой и приоритет операций? Готов человек блестяще решивший эту задачку писать операционные системы, базы данных или какие-нибудь cache oblivious алгоритмы
Так это совершенно разные проверки. Если вам нужен человек знающий хорошо язык XYZ и при этом владеющий дополнительно навыками A, B, C, проверять вы будете и то, и другое, верно?
Неправда, и ровно об этом я и написал. Но кое у кого дислексия, судя по всему.
Простите, у вас русский язык не родной? Я русским по белому написал: "если импортируем strtol откуда-нибудь"
Ничего удивительного. Комбинированный подход, о котором я написал, берет лучшее из обоих миров — в нем можно работать и так и так.
и поле типа string — это указатель на «string itself», который напрямую cast'ится в ASCIIZ строку. И нам достпуна вся та же магия с указателями, мы можем так же понавставлять нулей и работать с созданными подстроками функциями сишной библиотеки, если очень хочется.
В смешанном подходе вы сможете все сделать точно так же, за исключением инициализации константой (но это именно языкозависимая фишка, конкретно относящаяся к упомянутому мною Delphi, из которого я притащил пример смешанного подхода).
Будет
Здесь мы можем использовать p как ASCIIZ строку.
То же самое, если мпортируем strtol откуда-нибудь
А здесь вместо sizeof я буду использовать обычный стандартный length:
И этот length имеет сложность O(1).
Вы непоследовательны и нелогичны.
Я сказал, что это необходимое, но не достаточное условие. Вы понимаете, что это значит? Это значит, что мы проверяем, не отсутствует ли данное знание у человека, и выбраковываем по факту отсутствия в качестве одного из этапов.
Человек объявляет, что набирает разработчиков, знающих язык Си и проверяет это знание тем или иным образом. Ваш довод, о том, что данный кандидат, зная Си, может не знать других вещей, необходимых в работе, не отменяет необходимость проверки на знание языка. Эти две проверки связаны через конъюнкцию.
А уж если мы начинаем играть в упомянутые выше ASCIIZ игры, то и пользоваться будем, соответственно, указателями и функциями типа strlen.
Ну так понятно — раз так в 500 удобнее работать с буфером в своей памяти, в котром лежать данные типа «запись», структура и последовательной полей которой известна, чем читать строку символов, ее парсить в ту же запись — удобное внутреннее представление, чтобы отфильтровать. А потом окажется, что в новой версии легковесная ls выдает больше или меньше полей, или меняет последовательность, и старые программы-фильтры сдохнут. Или придется добавлять флаг вида «дай новый более удобный вывод», что опять приводит к раздутию.
А потом, как всегда внезапно, придет осознание, что для наиболее частого сценария надо вместо одной команды запускать конвейером две, причем вторая будет просто тупо брать первое поле — имя файла, выкидывая остальное, делая сериализацию/десериализацию данных пустой тратой процессорного времени. Альтернатива — опять же добавить флагов вида «дай краткую инфу-дай полную инфу».
Т.е. как ни крути, раздутие будет. Философия «сложим все из кирпичиков» хороша, но не универсальна. Как обычно — любая догма, как «запихать все в одну программу», так и «всегда разбивать на кирпичи», проигрывает взвешенному подходу.
По тем же лекалам снимают. Про «сраный совок», как оно видится из-за океана.
Никак. Необходимое, но не достаточное условие.
Ну, наверно, если гражданин нанимает работников, проверяя знание языка Си, то именно им он как раз и нужен, не? Знание этого языка является необходимым условием для приема на работу именно в эту фирму. Необходимым, т.е. проверка на знание A, B и C из моего предыдущего комментария последует отдельно.
Даже в маленьких конторах проводят по 2-3 собеседования, это нормально.
Так это совершенно разные проверки. Если вам нужен человек знающий хорошо язык XYZ и при этом владеющий дополнительно навыками A, B, C, проверять вы будете и то, и другое, верно?