Автор сокрушается про UB, но не задумывается, каким образом осуществляется взаимодействие с C/C++ в других языках и не владеет спецификой системного программирования на C/C++.
Автор работает в Google над BoringSSL (местным форком OpenSSL для использования у них же в Chrome/Chromium и т.п.). Т.е. он действительно занимается разработкой прикладного софта, а не компиляторов.
При портировании Rust на конкретную платформу, само собой, это всё нужно учитывать
У него задача не портировать Rust на конкретную платформу, а задизайнить API библиотеки так, чтобы при взаимодействии с кодом на Rust не терять в эффективности, и не вызывать когнитивный диссонанс.
В исследовании фактически то же самое: в мелких fixed-price задачах время получалось даже дешевле, чем в fixed-time.
Это значит, что фрилансер, решая дешёвые задачи, должен больше (дольше) пахать за те же деньги. Даже без относительно накладных расходов на администрирование проекта.
С ростом вознаграждения количество времени, которые люди готовы вам отдать, наоборот снижается. Получается, что такие задачи фрилансеру будут выгоднее.
Раньше в школьной математике не давали логику. Поэтому информатику у нас реально мало кто понимал. Мне случайно попалась книжка, где счисление предикатов объясняли на пальцах и это было как откровение.
В зависимости от компилятора, NULL может быть определен по разному.
#define NULL ((void *)(0))
#define NULL ((char *)0)
#define NULL 0L
#define NULL 0
Но здесь это не важно. Важно, что передача такого значения в memcpy это по стандарту UB. Поэтому если договорится пустые слайсы представлять в таком виде, то перед вызовом подобных функций придется добавлять явную проверку.
Здесь нет проблем если так писать кастомный код на С, когда интероперабельность с Rust это ваша цель.
Но как решение уровня API оно не выглядит подходящим, поскольку подробный стиль не является нормальным ни для C, ни для C++.
slice это термин из Rust. Он определяет "окно", через которое можно смотреть на массив данных за ним. Фактически это указатель, у которого определенны начало и конец (или длина).
В некоторых случаях полезно иметь возможность работать со слайсами нулевой длины (можно рассматривать например как аналог пустой строки в выражении "abc" + "").
Автор размышляет на тем, каким образом можно эффективно представить такое вот пустое значение в C и C++, чтобы при выполнении типичных операций обойтись лишних проверок. Например конкатенация с помощью двух пустых слайсов это валидное действие (как для строк "" + ""), но в случае наивной реализации - как пары значений (NULL, 0) - может привести к memcpy(NULL, NULL, 0), что в стандарте внезапно определено как UB.
Изначально предполагалось, что данную воздушную гавань удастся построить за 5 лет и 2 000 000 000 € . Не удалось. В итоге бюджет и сроки выросли в три раза – до 14 лет и 6 000 000 000 €. И это не говоря про дату открытия, которую успели перенести аж 5 раз!
"Дед мой говорит: бери оценки и умножай на 3.1415" (c) Юноша. В этом смысле они уложились.
По моим ощущениям цифры на таких сайтах порядком занижены. Если ваша зарплата меньше даже этого, значит вам платят реально гроши. Поэтому и повышают тоже без особых вопросов. Вот дальше уже интереснее.
чтобы среднего разработчика нанять у нас в компании, нужен бюджет порядка $200к-$300к в год (зарплата, соц. пакет и т.п.) - такую сумму просто так никто не выделит, исключительно чтобы средний менеджер смог кому-то "преподать урок"
Зависит от размера компании. Если у вас 100 человек с такими зряплатами, то нанять ещё одного будет стоить аж целый 1%. Официантам чаевые больше оставляют. Тем более, вы же не на свои деньги его покупаете, а на деньги компании. У меня перед глазами было много случаев, когда после увольнения одного гения-трудоголика на его место брали 3-5 нормальных. И знаете, все в итоге были только счастливы.
Информация о вашей зарплате может не быть коммерческой тайной, но является конфиденциальной информацией которую банки, налоговая, и другие службы не могут передавать третьим лицам.
Когда у меня жена работала чиновником, то их ежегодно заставляли сдавать декларацию о доходах всех близких родственников - с указанием источников, счетов, недвижимости и т.п. Потом все это выкладывалось в паблик.
Т.е. там, допустим, конкатенация строк плюсом вообще не создаст проблем, потому что вы всегда видите, что складываете строки
Если код тайпчекается это ещё не значит, что в нем нет ошибок. С точки зрения математики есть вполне конкретные ожидания, какие свойства должны выполняться для плюса. Если они не выполняются, то в этом месте возникают лишние трения. А так да, программирование лояльно относится к неймингу - "хоть горшком назови, только в печку не ставь".
То есть, даже после того, как вы его пофиксили, вы не можете быть в этом уверены (что не помешает на радостях напиться). Вот это — действительно страшно, а причина сему — unmanaged-среда.
JS в этом смысле managed с ног до головы, поэтому о таких вещах ни кто здесь даже не задумывается.
Я тоже когда-то писал COM/DCOM и могу сказать, что современные инструменты реально ушли далеко вперёд, в смысле количества разложенных граблей, на которые может случайно наступить разработчик.
А если всё делать так, чтобы разные сущности всегда обозначались разными символами – может не хватить символов
В программировании есть два греха: когда одинаковые по сути вещи называют разными именами, и когда разные называют одинаково.
Если серьезно - посмотрите на хаскель. Здесь любую бинарную функцию можно записать как инфиксный оператор.
(+) 1 2 можно записать как 1 + 2
Не хватает одного символа? Просто возьмите больше: два, три, .. - сколько надо. Здесь в этом смысле полный коммунизм - каждому по потребности: name <- read <$> getLine
тут надо использовать оператор умножения (см. термины "полугруппа", "моноид")
В этом смысле любой бинарную операцию можно назвать умножением. Но на практике думаю в этом мало толку.
Автор работает в Google над BoringSSL (местным форком OpenSSL для использования у них же в Chrome/Chromium и т.п.). Т.е. он действительно занимается разработкой прикладного софта, а не компиляторов.
У него задача не портировать Rust на конкретную платформу, а задизайнить API библиотеки так, чтобы при взаимодействии с кодом на Rust не терять в эффективности, и не вызывать когнитивный диссонанс.
Parallel Computing это взгляд со стороны теории как на вычислительную проблему.
Parallel Programming - со стороны возможностей, предоставляемых Execution Model для вашего языка или фреймворка и конкретным Runtime.
Разница между ними как между правилами дорожного движения и инструкцией по управлению автомобилем.
Distributed Computing - вычислениями в абстрактных распределенных средах (distributed systems), где несколько компьютеров соединены сетью.
В исследовании фактически то же самое: в мелких fixed-price задачах время получалось даже дешевле, чем в fixed-time.
Это значит, что фрилансер, решая дешёвые задачи, должен больше (дольше) пахать за те же деньги. Даже без относительно накладных расходов на администрирование проекта.
С ростом вознаграждения количество времени, которые люди готовы вам отдать, наоборот снижается. Получается, что такие задачи фрилансеру будут выгоднее.
Раньше в школьной математике не давали логику. Поэтому информатику у нас реально мало кто понимал. Мне случайно попалась книжка, где счисление предикатов объясняли на пальцах и это было как откровение.
Можете привести примеры приложений где это стоит использовать на практике, а в каких случаях лучше поискать другие альтернативы?
Возможно вы имели какой-то конкретный случай, а так есть os.sched_setaffinity .
Гарантий ни кто не даст. Поэтому такими вещами занимаются не в Европе или США, а в Малайзии, Индии и т.п., где учёные стоят копейки.
В зависимости от компилятора, NULL может быть определен по разному.
Но здесь это не важно. Важно, что передача такого значения в memcpy это по стандарту UB. Поэтому если договорится пустые слайсы представлять в таком виде, то перед вызовом подобных функций придется добавлять явную проверку.
Здесь нет проблем если так писать кастомный код на С, когда интероперабельность с Rust это ваша цель.
Но как решение уровня API оно не выглядит подходящим, поскольку подробный стиль не является нормальным ни для C, ни для C++.
slice это термин из Rust. Он определяет "окно", через которое можно смотреть на массив данных за ним. Фактически это указатель, у которого определенны начало и конец (или длина).
В некоторых случаях полезно иметь возможность работать со слайсами нулевой длины (можно рассматривать например как аналог пустой строки в выражении "abc" + "").
Автор размышляет на тем, каким образом можно эффективно представить такое вот пустое значение в C и C++, чтобы при выполнении типичных операций обойтись лишних проверок. Например конкатенация с помощью двух пустых слайсов это валидное действие (как для строк "" + ""), но в случае наивной реализации - как пары значений (NULL, 0) - может привести к memcpy(NULL, NULL, 0), что в стандарте внезапно определено как UB.
"Дед мой говорит: бери оценки и умножай на 3.1415" (c) Юноша. В этом смысле они уложились.
Рынок вакансий это рынок соискателей - работодатель идёт за покупками, когда ему реально горит.
Зарплатные торги внутри это рынок работодателя. Здесь подгорает лишь у сотрудника, а работодателю и так хорошо.
Поэтому торги на входе это просто ритуал, а внутри - уже искусство.
По моим ощущениям цифры на таких сайтах порядком занижены. Если ваша зарплата меньше даже этого, значит вам платят реально гроши. Поэтому и повышают тоже без особых вопросов. Вот дальше уже интереснее.
Зависит от размера компании. Если у вас 100 человек с такими зряплатами, то нанять ещё одного будет стоить аж целый 1%. Официантам чаевые больше оставляют. Тем более, вы же не на свои деньги его покупаете, а на деньги компании. У меня перед глазами было много случаев, когда после увольнения одного гения-трудоголика на его место брали 3-5 нормальных. И знаете, все в итоге были только счастливы.
Когда у меня жена работала чиновником, то их ежегодно заставляли сдавать декларацию о доходах всех близких родственников - с указанием источников, счетов, недвижимости и т.п. Потом все это выкладывалось в паблик.
Интересно, что это была за компания (если это тоже не какой-то секрет)?
Если код тайпчекается это ещё не значит, что в нем нет ошибок. С точки зрения математики есть вполне конкретные ожидания, какие свойства должны выполняться для плюса. Если они не выполняются, то в этом месте возникают лишние трения. А так да, программирование лояльно относится к неймингу - "хоть горшком назови, только в печку не ставь".
Благодарите родителей за то, что у вас есть хобби. Многие начинают ненавидеть любимое занятие, когда оно превращается в работу.
JS в этом смысле managed с ног до головы, поэтому о таких вещах ни кто здесь даже не задумывается.
Я тоже когда-то писал COM/DCOM и могу сказать, что современные инструменты реально ушли далеко вперёд, в смысле количества разложенных граблей, на которые может случайно наступить разработчик.
Удовольствие :)
В программировании есть два греха: когда одинаковые по сути вещи называют разными именами, и когда разные называют одинаково.
Если серьезно - посмотрите на хаскель. Здесь любую бинарную функцию можно записать как инфиксный оператор.
Не хватает одного символа? Просто возьмите больше: два, три, .. - сколько надо. Здесь в этом смысле полный коммунизм - каждому по потребности: name <- read <$> getLine
В этом смысле любой бинарную операцию можно назвать умножением. Но на практике думаю в этом мало толку.