Pull to refresh
20
0
Дмитрий Чернов @cher-nov

в экономике, так сказать, необходим

Send message

Если уж затронута тема общения по линиям проводного радиовещания, а не только телефонии, то почему не упомянули такое явление как радиосвязь на средних волнах в конце шкалы радиоприемника. В конце 70-х там и музыку крутили и общение было . Речь не идет про правильных радиолюбителях на 160 или 80м диапазоне.

Звучит очень интересно. Можете рассказать поподробнее? Если есть, где почитать про это - ещё лучше.

Вот именно, поэтому понимают что просто наличие полезных ископаемых "ничего не означает".

К слову, если пересчитывать количество полезных ископаемых по отношению к численности населения, то не так-то уж их в России и много по сравнению с какой-нибудь Туркменией или Саудовской Аравией. А если брать по величине территории, то и подавно. Один из самых известных медиа-мифов же, ещё из советских времён.

В итоге имеем заброшенный mypal. Причем последняя версия к pale moon вообще отношения не имела и была основана на прямую на базе firefox. Но кое кто всё равно плакал и стонал что его обижают.

Так забросили только вариант на основе Pale Moon, а вариант на основе Firefox и дальше продолжает разрабатываться: https://github.com/Feodor2/Mypal68/

Не устану рекомендовать new pale moon, репа гуглится.

Да вот что-то совсем ничего не гуглится. Ни по "new pale moon", ни по "new moon".

Пока я в один прекрасный день не прочитал Basics of Calculus, написаный в 1913 году. В нём, на примерах быка и блох, по-человечески объяснялось, что такое dx/dt.

Есть ссылка под рукой? Google по запросу "Basics of Calculus 1913" точных совпадений не выдаёт.

А если ещё и подскажете, где скачать, так вообще чудесно. :)

Казахи в Казахстане - 70%
Русские в России - 80%

Всё как обычно...

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

Мы и сейчас иногда общаемся на форуме по ремейкам старых игр.

А что это за форум такой, не подскажете?

Нет бы написать, что именно эта книга вдохновила в своё время юного Джона Кармака.

David Kushner, «Masters of DOOM» (перевод Михаила Бочарова, 2019)

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

Книга Hackers: Heroes of the Computer Revolution стала для него настоящим откровением. Про хакеров Кармак уже знал: в 1982 году вышел диснеевский фильм «Трон», где разработчик видеоигр, которого играл Джефф Бриджес, взломал игру так, чтобы попасть внутрь неё, а в 1983-м в фильме «Военные игры» юный геймер в исполнении Мэттью Бродерика взломал правительственную компьютерную систему и чуть не устроил конец света. Но книга о хакерах была другой – там всё было по-настоящему. В этой книге рассказывалось о вундеркиндах, изменивших мир, и их культуре: экспериментах с мейнфреймами в MIT в пятидесятые и шестидесятые, самодельных программах, которыми изобиловала Кремниевая долина в семидесятые, и независимых компаниях по разработке игр, возникших в восьмидесятые. Герои книги вовсе не были похожи на стереотипных гиков-отщепенцев – напротив, их жизненные пути максимально разнились. Отчисленный из Гарварда Билл Гейтс, автор интерпретатора бейсика для Altair и основатель самой крупной в мире корпорации по разработке ПО. Разработчики игр: «Слаг» Расселл, Кен и Роберта Уильямс, Ричард Гэрриот. Два Стива, Джобс и Возняк, создатели Apple II и большие любители компьютерных игр. Все они были хакерами.

«Для многих людей в профессиональной среде слово „хакер“ имеет саркастический оттенок, – писал Леви в предисловии. – Считается, что хакеры – это или изгои, или непрофессиональные программисты, которые пишут код грязно, отступая от принятых стандартов. Это не так. За уродливой маской хакеров скрываются мечтатели, искатели приключений, творческие люди, которые не боятся рисковать… Те, кто раньше всех предвидел, как персональные компьютеры перевернут нашу жизнь».

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

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

А Вы пробовали? У меня NP300E7A 2012 года (многократно ремонтировавшийся и уже с самопальной крышкой, гыг), вот по техпаспорту он тоже не поддерживает больше 8 ГБ оперативки. Однако на деле же сам чипсет умеет вдвое больше, как выяснилось. И это без каких-либо особых настроек.

Я, например, с Урала.

А я с Дальнего Востока. Знаете, как про нас остальная Россия говорит? "Крестьяне да каторжники". Обижает ли это меня? Ничуть. Попробуйте додуматься, почему.

И есть стереотип, отмеченный Ясуловичем в "Самой обаятельной и привлекательной": "Нет, она точно с Урала", не говоря о высказываниях Жириновского (и если не ошибаюсь, Соловьева). И если мне скажут: "ты такой толковый, даже не верится, что с Урала" - мне тоже будет обидно. Потому что завуалированное высказывание "По всем признакам ты должен быть тупой, и нутром чую, что должен быть тупой, а ты не тупой" - это нифига не комплимент.

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

И вот ещё одна неоднозначная ситуация. Тут меня явно никто обидеть не хотел, но разговор случился показательный. Недавно я сидела с коллегой, и мы говорили на технические темы. В конце разговора мой коллега обронил фразу: «Знаешь, я вот тебя слушаю и не могу поверить, что разговариваю на технические темы с девушкой, да и ещё со светлыми волосами». Directed by Robert B. Weide ©

Ситуация как раз однозначная: Вас похвалили за несоответствие стереотипу, а Вы предпочли обидеться, поскупившись на benefit of the doubt. И это считается достаточно хорошим уровнем "софт-скиллов"? Да уж.

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

Это с военной приёмкой-то, да ещё и в шестидесятых, до "разрядки"? Довольно сомнительно.

Вы откуда это взяли?

Лично я против названия "звук" для языка, который к звуку даже отношения не имеет, но "протому что просто красиво".

Так речь здесь не про тот sound, который audio, а тот, который soundness и в "safe and sound".

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

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

Выглядит очень костыльно.

Но это общепринятый способ для всего WinAPI. К слову, в обычном Си также есть похожая идиома с приведением выражения к void. Чтобы такое выглядело чуть менее костыльно, подобные стопки следует писать уже после return, в самом хвосте кода функции.

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

В стандартном переносимом Си (по крайней мере, до C99 включительно) такого делать нельзя.
https://stackoverflow.com/questions/8 776 810/parameter‑name‑omitted‑c-vs‑c

«Согласно протоколу, при подлёте «Луны-25» к Луне бортовой компьютер станции должен был подать на «БИУС-Л» команду на включение акселерометров. Программисты эту команду подали (это было видно по циклограмме), то есть, по сути, тоже все сделали правильно, за исключением одного. Их программное обеспечение не проанализировало ответную реакцию «БИУС-Л», по сути, просто не убедилось, что блок измерения угловых скоростей запущен в работу. А дублирование команды для проверки запуска модуля в программе не было», - рассказали источники СМИ.

Звучит буквально как ошибка наподобие вызова malloc() без проверки на NULL.

А ничего, что даже сама Microsoft отказалась от поддержки всех этих версий?

Ничего. Потому что это вообще-то не вопрос поддержки, а вопрос общей инженерной культуры. Если бы стандартная библиотека во-первых не была монолитной, во-вторых поддерживала бы opt-in подход к её использованию, а в-третьих не была бы намертво приштопана к самому языку на уровне всех этих lang_items, то необходимости в столь жестокой deprecation policy попросту бы не было.

Есть простой критерий оценки качества системного языка программирования и его прикладной реализации. Суть его в следующем: обычный helloworld, написанный на данном языке и собранный некоторой реализацией, в идеале должен по умолчанию запускаться везде, где есть совместимый API текстового вывода и поддержка формата полученного исполняемого файла. И чем больше танцев с бубном для этого требуется (как вот здесь, например), тем меньше такой инструмент для системного программирования подходит. Потому что он попросту не даст вам соорудить что-нибудь столь же переносимое (а значит универсальное), как, скажем, утилиты SysInternals или NirSoft.

в Rust 1.76.0 разработчики планируют отказаться от Windows 7, 8 и 8.1, оставив Windows 10 в качестве минимальной версии для компилятора и целей сборки.

Это, конечно, финиш полный и абзац. Шёл 2023 год, а разработчики стильно-модно-молодёжных языков программирования так и не научились делать стандартные библиотеки с opt-in и без монолитности.

Хабр в этот раз почему-то не прислал оповещение мне на почту, заметил ответ только сейчас.

Конечно, хорошо бы найти конкретный блок asm-команд с ошибкой. Но как? У меня в других местах есть аналогичные вызовы функций типа real*4, где возвращаемое значение не используется. И там аналогичные баги вроде не возникают. "Минимальная программа", которую я пытался сделать в самом начале (вызов таймера из моей корявой функции + вызов ГСЧ из того же модуля) работала корректно.

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

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

Да, именно это и нужно сделать в первую очередь.

Но дизассемблер, который я вижу у себя в VS, это какая-то жуть. Я в нем вообще ничего понять не могу, хотя когда-то очень давно в DOS-фортране я даже сам писал asm-функции в критически тормозных местах программы (работа со строками и др.). Из-за чего у меня до последнего времени сохранялись иллюзии, что если я открою asm-код, то некоторые буквы смогу узнать. Спасибо оптимизирующему компилятору Intel, что он меня от этих иллюзий избавил...

А как тогда сравнивать, если даже не могу найти в дизассемблере то место, где это присвоение происходит?!

Выложите оба варианта дизассемблированного вида функции screen_putl0_time() на Pastebin и пришлите мне или сюда ссылки. Попробую разобраться.

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

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

Сейчас у меня возникла еще одна мысль: как я понял, состояние FPU может периодически сбрасываться (очищаться). Возможно, возникновение бага как-то зависит от этой политики?

«Состояние FPU» — это довольно‑таки общее понятие, подразумевающее сразу несколько вещей в совокупности: operating environment (control word, status word, tag word, instruction pointer, data pointer, and last opcode) и register stack. Первое, естественно, по ходу выполнения x87-инструкций может частично меняться. Но нас это уже не интересует, потому что, как мы выяснили, проблема возникает из‑за остаточных значений в register stack.

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

То есть вы предлагаете эмулировать референсное поведение даже там, где это не нужно/не эффективно, я правильно понял?

Нет. Как раз я предлагаю писать стандарты таким образом, чтобы подобные ситуации в принципе не возникали. Без reference implementation же определять точки возможной неэффективности можно лишь путём тычка опытным пальцем в небо.

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

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

Что значит "естественно, сам по себе"? UB - это когда никакое конкретное поведение не гарантируется стандартом, всего-навсего.

Это означает, что в reference implementation места, требующие явной поддержки со стороны исполнительного устройства, становятся видны сразу, и по ним уже можно ориентироваться, что стандартизировать, а что оставить на волю implementation-defined / unspecified / undefined поведения. А не как сейчас, когда, скажем, в C23 realloc(ptr, 0) вдруг превратился в самый настоящий UB, а malloc(0) как был, так и остался implementation-defined, и всё это произошло по щучьему велению.

Референсный компилятор вполне может компилить в байт-код по типу "ассемблера MIX" Кнута или p-code Вирта, на момент создания С оба уже были, а синтаксис Си в отличие от тех же плюсов разбирается любым стандартным (т.е. многократно проверенным) лексером/парсером.

О, спасибо большое — Вы у меня этот комментарий с языка сняли. :)

Должно ли поведение этой виртуальной машины любой ценой эмулироваться везде, даже там, где это неэффективно/вредно?

Если речь идёт о стандарте — то да, должно. Но тут надо определиться. Либо мы хотим стандартизировать язык программирования, и тогда документ надо писать по образцу A Commentary on the UNIX Operating System (то есть в виде неформальных поясняющих записок к формальному строгому описанию). Либо же мы идём по стопам условного Pascal, где за всю историю накопилось множество едва совместимых друг с другом диалектов (и да, я знаю, что для него тоже стандарт сделали, но на него всем было наплевать ещё тогда). Тоже вполне себе вариант, со своими плюсами. К слову — это весьма вероятное будущее Rust в свете появления gcc‑rs.

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

UB в таком случае начинает возникать естественно, в ходе дела, и перестаёт описываться произвольным образом. А не как сейчас в стандартах Си и C++: хачю штобы харошые праграмы на харошых мафынах роботале, а нихарошые на нихарошых нироботале, вотЪ! (и ладонью по столу).

Information

Rating
5,063-rd
Location
Владивосток, Приморский край, Россия
Registered
Activity