Цифровая трансформация стала одной из ключевых характеристик современного общества, определяющей не только способы взаимодействия людей, но и фундаментальные основы экономики, политики и культуры. Этот процесс начался с локальных изменений (внедрение персональных компьютеров и создание первых сетевых инфраструктур), но со временем эволюционировал в глобальное явление, затрагивающее все аспекты человеческой жизни. Основой цифровой трансформации стало широкое распространение интернета, рост вычислительных мощностей и появление технологий обработки больших данных, что позволило компаниям, правительствам и индивидуальным пользователям переосмыслить подходы к управлению, производству и потреблению.
Ключевым элементом цифровой трансформации стала автоматизация процессов, которая затронула не только промышленные отрасли, но и сферу услуг. Искусственный интеллект, машинное обучение и алгоритмы анализа данных создали условия для оптимизации сложных операций, повышения эффективности и сокращения издержек. Однако, несмотря на очевидные выгоды, такие изменения сопровождались серьезными вызовами, включая сокращение рабочих мест, повышение уровня социального неравенства и усиление зависимости от технологических решений. Многие профессии, считавшиеся ранее незаменимыми, были трансформированы или вытеснены новыми технологиями, что породило необходимость в адаптации рабочей силы и пересмотре образовательных подходов.
Социальные и культурные аспекты цифровой трансформации не менее значимы, чем экономические. Широкое распространение социальных сетей и платформ для обмена информацией изменило структуру коммуникации, сделав ее более горизонтальной и интерактивной. Это привело к усилению общественного контроля над политическими и корпоративными институтами, но также породило феномен фейковых новостей и манипуляций общественным мнением. Более того, рост зависимости от цифровых технологий вызвал вопросы о правах на приватность, защите данных и этике использования искусственного интеллекта.
Глобализация, стимулируемая цифровой трансформацией, проявилась в формировании новых экономических связей и торговых маршрутов, а также в появлении транснациональных корпораций, чья деятельность распространяется по всему миру. Эти компании, например, Google, Amazon и Alibaba, формируют глобальную инфраструктуру, управляя данными, коммуникациями и финансами, что значительно усилило их влияние. Однако доминирование таких игроков также стало предметом дебатов о монополии, налоговой политике и справедливости распределения ресурсов.
Таблица иллюстрирует ключевые изменения, связанные с цифровой трансформацией
Цифровая трансформация, несмотря на все свои противоречия, остается движущей силой глобальных изменений. Она требует комплексного подхода, который учитывает не только технологический прогресс, но и социальные, культурные и этические аспекты. В конечном итоге, успех трансформации будет определяться способностью человечества использовать ее плоды для общего блага, минимизируя при этом негативные последствия.
Продолжение: Взаимосвязь кризисов и инноваций: модели ускоренного роста
Этот пост входит в Часть 8. Влияние мутаций: инновации и кризисы
Роль технологических, социальных и финансовых кризисов в преобразовании экономических систем. Анализ примеров внезапных изменений, таких как Великая депрессия, промышленная революция и цифровая трансформация.
СерияПроисхождение экономических систем путём естественного отбора
Кто интересуется развитием общественно-экономических формаций, подписывайтесь!
Кто это такие? Гляньте на картинку и сразу вспомните:
Это реальная фотография, даже не смейте спорить. Сделана в одним из известных парков.
Вроде как все знают, что это были травоядные, все, но только не палеонтологи. О рационе питания они могли судить только по косвенным признакам: строение и особенности износа их зубов. И всё... Других признаков о рационе нет, а зубы - ну это так, косвенно. Фекалии, найденые ранее рядом со скелетами так же не могли говорить о их рационе - неизвестно кому они принадлежали на самом деле.
Команде палеонтологов под руководством Стивена Поропата (Stephen F. Poropat) из Университета Кэртина удалось закрыть этот пробел. В центре внимания исследователей оказался сравнительно полный скелет молодого зауропода Diamantinasaurus matildae с формации Уинтон на северо-востоке Австралии. Возраст находки составил 94-101 миллион лет, что соответствует середине мелового периода.
В процессе извлечения остатков зауропода, общую длину которого оценили в одиннадцать метров, Поропат и его коллеги заметили между его спинными позвонками, спинными ребрами, крестцом и тазовым поясом необычный фрагмент горных пород с многочисленными окаменелостями растений внутри него. Исследователи пришли к выводу, что перед ними кололит (окаменевшее содержимое желудка и кишечника), содержащий последнюю трапезу динозавра.
Не волнуйтесь, камни не пахнут, потому она такая весёлая
Более подробный анализ содержимого кололита выявил большое количество прицветников
и мелких растительных фрагментов, многие из которых не достигали десяти
миллиметров в максимальном измерении. Идентифицируемые прицветники
в основном принадлежали вымершему хвойному дереву Austrosequoia wintonensis.
В кололите также присутствовали относительно крупные стебли и листья
голосеменных и цветковых растений, среди которых удалось
идентифицировать хвоинки, похожие на хвоинки араукарий (Araucaria).
Размеры большинства таких крупных фрагментов не превышали ста
миллиметров в максимальном измерении. Кроме того, авторы обнаружили
по крайней мере три плодовых тела семенных папоротников из рода Taeniopteris.
Таким образом, находка подтвердила устоявшееся представление, согласно которому зауроподы были растительноядными. Судя по окаменевшему содержимому желудка и кишечника, эти динозавры потребляли растения в значительном количестве и не отдавали предпочтения каким-либо их видам или систематическим группам. А хорошая сохранность растительных фрагментов внутри кололита свидетельствует в пользу еще одной популярной гипотезы, согласно которой зауроподы практически не пережевывали пищу, вместо этого проглатывая ее целиком и полагаясь на ферментацию в желудочно-кишечном тракте за счет симбиотической микробиоты.
Вот такие они - учёные. Вроде есть оьщепринятое мнение, но они всё одно сомневаются и им нужны железобетонные доказательства
Недавно мне написали из издательства «Питер» и предложили три научно-популярных книги на обзор. Я сразу же согласился, так как это очень интересно. Сразу же скажу, что это не реклама, обзоры я делаю бесплатно. Поэтому могу быть объективным и не будет конфликта интересов. Если мне будут писать из издательств, игровых студий или ещё откуда-нибудь с предложениями сделать обзор на произведения, которые они издали, — никогда не буду делать этого в рамках рекламы. Только честные и объективные обзоры! Если вы издатель и вас устраивает это условие, пишите! С радостью по мере сил посмотрю, и если будет интересно, сделаю материал в своём проекте.
А начну я с книги научно-популярного блогера, а точнее подкастера, Романа Юдаева «Звездануло: весело и доступно про проблемы современной физики и астрономии».
Книга небольшая: чуть больше двухсот страниц. Но это не недостаток. Ведь автор ведёт свой популярный подкаст и, наверное, к повествованию нужно относиться так же. Когда я прочитал начало, меня не покидало ощущение, что читаю не какую-нибудь научпоп-книгу про космос, где нужно ещё самому долго сидеть и думать, что же сказал автор. Особенно когда мало знаний. Это книга-рассказ. Скорее всего, автор, когда писал её, представлял, что записывает подкаст и именно разговаривает со слушателем/читателем. Это мне импонирует, так как я сам так пишу тексты. Выделяю несколько моментов, что обязательно хочу сказать, и пишу «от себя». Поэтому могу смело рекомендовать её детям и подросткам, которые либо начали изучать физику в школе, либо решили в более раннем возрасте прикоснуться к ней. Но её можно смело читать и взрослым, которым нужен хоть какой-то «вход» в мир научпопа и которые хотят начать познавать мир. Тут могу рассказать об одном недостатке книги. Да, есть маскот — гусь, который помогает читателю визуализировать то, о чём идёт рассказ, но иллюстраций в таком труде всё-таки мало. Наверное, можно было бы давать сноски на свой же подкаст (по выпускам) или на статьи в интернете, где больше про это рассказано. Ведь в чём плюс многих научпоп-роликов — это что всё визуализировано на экране. Роману Юдаеву в будущем пожелаю больше писать таких книг. Может, мы ещё увидим интересные книги от него. Ведь эта область безгранична, каждый год происходят новые открытия, которые завораживают.
Если вам интересны мои текстовые или видеообзоры, то подписывайтесь на меня на Вомбате! Постараюсь и дальше радовать вас интересным контентом. Буду очень рад подписке на мой YouTube-канал: https://www.youtube.com/@ivan_lutz
Ученые из Стэнфордского университета нашли в Израиле в пещере Ракефет остатки пивоварни и самого пива. Возраст этих находок – от 11 700 до 13 700 лет, то есть старше первых культивируемых зерновых на Ближнем Востоке. Ученые выяснили, что находки принадлежат представителям эпохи эпипалеолита, а именно Натуфийской культуры, которые умели готовить пиво.
"Это самый старый изготовленный человеком алкоголь в мире", – подчеркнула автор исследования профессор Ли Лиу. Кроме этого в пещере были найдены останки, что позволило ученым предположить, что пиво являлось частью поминальных пиров.
Первая в мире пивоварня
Натуфианцы считаются первыми людьми, которые сделали переход от собирательства к сельскому хозяйству, у них были ступы для измельчения ячменя, на месте поселений натуфианцев обнаружены остатки древнейших пшеничных лепёшек – возможно, натуфианцы первыми изобрели хлеб. Замечу походя, что производство пива и хлеба очень похоже – древний хлеб также замешивали на солоде или с добавлением солода – а у тех же шумеров в хозяйственных записях постоянно встречается слово kaš.ninda – пиво-хлеб.
Учёные исследовали остатки злаков на стенках сосудов для пивоварения и выяснили, что уже это пиво, которое варили в седой древности, делалось из солода, т.е. размельчённых в каменной ступе пророщенных зёрен ячменя, пшеницы, овса или бобовых. Этот рецепт пива, судя по его ингредиентам, был очень близок по технологии современным напиткам. Следы льна на этих сосудах свидетельствует о том, что рецептура приготовления пива была изучена в подробностях: известно, что добавление семян льна делает пиво особенно пенным.
В этой находке замечательно всё – ведь ещё недавно многие исследователи считали, что древнейшим пивом был хмельной напиток из разведённой в воде забродившей злаковой муки – но нет, самый древний рецепт пива был аналогичен современному! Первобытный человек сообразил, что пророщенные зёрна имеют сладкий привкус (при проращивании крахмал из зёрен расщепляется на полисахариды), что солод является условием дальнейшей ферментации крахмала, который находится в зёрнах злаковых. Поэтому и использовали пиво как источник углеводородов, что делало пиво важнейшим пищевым продуктом древности.
На этот раз новость радующая, в отличие от предыдущей. 29 мая 2025 года Китай запустил «Тяньвэнь-2», задачей которого будет изучение астероидов. Сначала попытаются "облегчить" квазиспутник земли - астероид 469219) Камоалева на целый килограмм его грунта, а потом ещё и бахнут взрывом для определения если в нём вода. Потом он полетит к Земле, скинет на голову китайцам капсулу с забором пробы, воспользуется гравитационным манёвром и отправится к Марсу, где снова воспользуется его гравитацией, отправившись уже к другому астероиду (7968) Эльст — Писарро. Его уже "грабить" вроде не планируется, просто выйдет на орбиту астероида и, как планируется, будет изучать его в течении года, хотя не исключены бомбардировки оного, дабы изучть его состав.
Частичное селфи
На данный момент он находится более чем в 3 млн. километрах от нас и 6 июня 2025 года отчитался сфоткав космос и уже расправленную солнечную батарею. Это его первый снимок, присланный на Землю.
ISpace не прекращает попыток прилунить свои модули на Луну. Первая миссия стартовала в декабре 2022 года. Весной 2023 года посадочный модуль Hakuto-R вышел на орбиту Луны, а 25 апреля включил тормозные двигатели и начал спуск со стокилометровой окололунной орбиты, который занял час
и должен был кончиться прилунением внутри кратера Атлас
в северо-восточной части видимой стороны Луны. Однако связь с ним
в расчетное время посадки не удалось установить,
дальнейший анализ телеметрии показал, что на заключительном этапе
спуска на Луну уровень топлива оказался у нижней отметки, после чего
скорость спуска резко увеличилась. Это позволяет предположить, что
у посадочного модуля закончилось топливо и его двигатели заглохли, после
чего с модулем была потеряна связь.
Кадр прямой трансляции, через десять минут попыток установить связь трансляция была прервана. Связь установить не удалось.
И вот примерно такая же участь постигла и вторую миссию.
А вот сфоткать поверхность Луны перед посадкой он успел.
Resilience отправился в космос в январе этого года, а в начале мая вышел
на окололунную эллиптическую орбиту. В конце мая аппарат перешел на
круговую орбиту с высотой сто километров, а вечером 5 июня 2025 года
начал спуск с нее в Море Холода на видимой стороне Луны.
Однако телеметрия с модуля была потеряна за менее чем две минуты до
расчетного времени касания поверхности Луны, после чего несколько часов
инженеры пытались наладить с аппаратом связь и перезагрузить его. На
пресс-конференции, посвященной
итогам посадки, представители ISpace объявили о завершении миссии из-за
невозможности установить связь с модулем. Анализ имеющихся данных
показал, что модуль успешно вертикализовался и включил двигательную
установку на торможение на высоте 20 километров. Однако на финальном
этапе снижения возникла задержка в получении достоверных данных от лидарапо расстоянию до поверхности и модуль не успел эффективно
погасить скорость снижения, совершив жесткую посадку.
Опять же постараюсь в научпоп и как можно проще. Собственно, каким транспортом доставляются Вам данные этого ресурса?
Оказывается что всё уже давно разработано и просчитано.. Причём далеко не просто, а толсто и многослойно и стандартизировано.
Нус.с-с-с. .Начнём с самого дна.
1. Физический уровень. Как известно у информации должен быть "носитель", вроде это очевидно, а как иначе передать один бит инфы, если не запулить камнем в лобешник адрессату, ну или "дубинкой по кумполу"? Это самый древний, яркий и "искромётный" пример передачи информации, Так же можно вспомнить почтовые письма, голубей или сводки СовИнформБюро. Некоторые олды вспомнят инфракрасные порты на кнопочных телефонах, большинство поглядят в сотовый телефон или на стену увидев там уровень сигнала LTE или же оптоволокно. Продвинутые вспомнят про китайские эксперименты с 5G или их рекорды по квантовой линии связи. Всё что тут упомянуто - это физический уровень передачи информации (про многое я не упомянул).
2. Канальный уровень. Т.к. вомбатяне тусуются на одном ресурсе, скажем так, "локализованы", то они могут общаться друг с другом более простыми методами, напрямую. Тут уже появляется понятие адресации. Каждый брошенный "снежок" или "жук" летит напрямую в цель, а иногда и "дубинка" от модераторов прилетает прямо в "кумпол" цели. Задача тут стоит не только в адресации, но и как можно дальше уйти от физического уровня. Т.е. тут решается вопрос как избавится от разницы в WiFi, кабель (опять же RJ45 или вообще среда RS-485) или инфракрасный пульт от телека. Всё это вынуждено делатся аппаратными средствами (тот же "свисток" USB-WiFi выполняет енту функцию (на самом деле больше, но основная эта))
3. Сетевой уровень. А как общаться в чуваками, которые "снаружи"? Например незарегенная "печенька" или "капибара" хочет почитать что тут у нас происходит? Тут вступает в дело "международная почта". Т.е. эдакий логистический центр, как и куда доставить сообщение на любом конце Земли, Луны, Марса или Kepler-90h. Именно на этом уровне работают такие страшные слова как IP4/6, MTU (вспоминаем "добрым ласковым" словом провайдеров, которые рубят бабло при раздаче турнета с сотового телефона). Именно на ентом уровне мы можем общаться со всем миром, а не только друг с другом (моя работа не позволяет ПЛК и пр. девайсы выводить выше канального уровня - всё внутри технологической сети и никакого доступа извне). Как быстро дойдёт Ваш битик к адрессату на другом конце Земли очень сильно зависит от этого уровня - именно он определяет каким путём битик полетит.
4. Транспортный уровень. О.... Наконец-то я добрался до ивента вомбата. Задача транспортного уровня, не только найти адрессата, но и обеспечить между страждущими прочную и уверенную интимную связь. С этого момента, вомбатяне которые соединились друг с другом могут обмениваться информацией напрямую. При этом есть возможность полигамности, т.е. один вомбат может соединяться со многими (а так на самом деле и происходит, даже если Вы этого не хотите - стоит только запустить браузер). Когда два компа установили между собой интимную связь - это как раз оно, и не важно передаём мы файлик по FTP или у нас открыта консоль с SSH/
5. Сеансовый уровень. Боже как много наплодили сущностей, но все они важны. Собственно говоря на ентом уровне как раз и происходит то самое "соитие", что и на предыдущем. Но тут добавляются новые возможности. Зашивровать те битики, которыми мы обмениваемся (на самом деле это можно сделать даже на физическом уровне - главное придумать как). Так же тут мы кожем контроллировать кто с кем как долго и в каких позах. Грубо говоря сеанс связи начинается в тот момент, когда на телефонном переговорном пункте Вас пригласили в кабинку (ну и что с Вами будут делать в кабинке - все предыдущие уровни волновать не должно)
6. Уровень представления. Не очень будет приятно, если Вы два часа ждали международного звонка, зашли в кабинку, взяли телефонную трубку а с Вами базарят на китайском или японском языке. А ещё хуже если вообще на каком-нибудь КОИ-7. Т.е. приложуха, которая по сети общается должна уметь распознавать на каком языке с ней базарят. Если это текстовый ZIP-архив, то она должна уметь его распаковывать, если это UNICODE-текст, должна уметь отрисовывать все какашки и пр. эмодзи.
7. Прикладной уровень. Это то, с чем мы постоянно имеем дело. Читая этот пост в браузере Вы имеете дело как раз с прикладным уровнем. Устанавливая приложуху из RuStore так же имеете дело с прикладным уровнем. Отправляя селфи на фоне речки в гугло-фото - опять же прикладной уровень. Да, мы видим только прикладной уровень и пользуемся им, Но без предыдущих шести ничего бы не получилось. Фоточка на фоне шашлыков для своего друга/подружки по любому отправится через физический уровень, и пофиг, будет ли это бумажная фотография, привязанная к лапке голубя или же спутниковая связ.
З.Ы. Старался как проще, надеюсь получилось. В комментах пинайте, если где ошибся - я терпеливый, не обижусь.
Уже около месяца журнашлюхи педалируют тему: "Мы нашли признаки жизни на экзопланете".
Кратко, в созвездии Льва есть красный карлик K2-18. Эта звёздочка находится в 124 световых годах от нас, вроде и близко, но всё-же далеко (Вояджеры улетели от Земли примерно на световые сутки). Красные карлики намного слабее и тусклее нашего Солнца, зона златовласки у них очень узкая и расположена очень близко к звезде.
Транзитным методом (это когда планета проплывает между нами-наблюдателями и родительской звездой) была открыта телескопом "Кеплер" в 2015м году. Относится к классу супер-земель (масса около 9 масс Земли), крутится близко к своему карлику (год там равен примерно 33 нашим дням) и очень вероятно является планетой-океаном.
Тут, помимо K2-18C (неподтверждена) самого карлика и нашей страдалицы нарисована зона обитаемости.
Во время прохода планеты между нами и звездой удалось изучить спектр атмосферы этой супер-земли. По данным телескопа "Джейм Уэбб" получалось, что там присутствует диметилсульфид и диметилдисульфид. Фишка этих двух веществ в том, что на Земле он вырабатывается в основном водорослями и фитопланктоном. Получение в промышленных масштабах - требуется катализатор. Т.е. эти вещества сами по себе в космосе образоваться не могут, в отличие от некоторых углеводородов (того же метана в космосе полно).
Вот на этом и погорели все, кто пытается раздуть сенсацию из ничего.
Учитывая, что условия для жизни на K2-18b не очень для зарождения жизни даже в примитивной форме, данные начали исследовать повторно и перепроверять. Оказалось, для того, что бы "Джеймс Уэбб" сумел зафиксировать следы этих веществ, их концентрация в атмосфере планеты должна быть раз 20 больше земной, что нереально получить так как водоросли и фитопланктон, даже если будут напряжённо пукать не смогут обеспечить. Но что самое интересное, с помощью моделирования исследователи показали, что введение в данные
достаточного количества метана делает их неотличимыми от тех наблюдений,
по которым обнаружили диметилсульфид.
Причина в том, что полосы поглощения излучения у метана и
диметилсульфида частично пересекаются. Если от источника приходит много
излучения, то можно отличить одно соединение от другого. Но K2-18 —
очень тусклая звезда, от которой до нас доходит немного электромагнитных
волн. (Источник разоблачения)
Мы снова видим, что ради громких заголовков журналисты опять изнасиловали учёных.
В ответ на пост. Естественно есть. Только это не совсем звёзды, как и гипотетические чёрные карлики.
Только вот как раз коричневые и есть, причём обнаружены и доказаны. А что это такое?
Нарисовал неизвестный художник, спёрто с nplus1.ru - ссылка в посте есть.
Да всё просто, представьте наш Юпитер, только раз в десять-двадцать жирнее. Да, гигант газовый, состоит в основном из водорода и гелия, но только "бессердечной суки" - гравитации ему не хватает, что бы сжать водород до начала термоядерной реакции. Потому оно вроде и не звезда. Но, в отличие от чёрного карлика внутри хватает "бурления" за счёт трения, что бы такой субзвёздный объект разогреть до температур от 300 К до 3000 К (э-э-э- К - это Кельвины, для Цельсия надо в уме прибавить 273). Т.е. они современными методами вполне себе обнаруживаются, имеют что-то вроде планет, но 3000 градусов с поверхности - маловато будет для обогрева спутник/планеты что бы там хоть что-то зародилось.
Что с ними делать - да ничего, просто изучать. Жизни такая система не даст, да и вообще толку никакого. Белый карлик хотя бы имеет достаточно накопленной энергии, что бы обогревать к-либо рядом, при условии, что становясь карликом он не выжег всё вокруг, будучи красным гигантом.
Хотел написать про работу системы управления памятью, но понял, что для полноценной статьи у меня не хватает практических знаний. Поэтому кратко
Куча
Баян
Помимо стека, о котором было рассказано в прошлой статье и который содержит локальные переменные, в "потребительской" программе в среднестатистической ОС еще бывают глобальные переменные и динамическая память. Глобальные переменные описываются внутри сегментов .bss и .data, резервируясь в памяти сразу после загрузки образа программы (по-правильному это называется процессом).
Динамическая память иначе называется кучей, так как представляет из себя кучу динамических данных, который могут появляться и исчезать во время работы.
Для работы с динамической памятью в C существует malloc(size_t), запрашивающий (выделяющий, аллоцирующий) у ОС кусок памяти указанного размера и возвращающий указатель на первый байт, и free(void *), принимающий этот указатель и возвращающий (освобождающий) кусок назад в ОС.
В C++ есть операторы new и delete, они устроены гораздо сложнее и я не буду их рассматривать, ибо не пишу на нем. Помимо запроса памяти у ОС они занимаются ее инициализацией.
Если по какой-то причине стандартной библиотеки языка в наличии не имеется, то в Windows за память отвечает HeapAlloc и устаревшие GlobalAlloc и LocalAlloc из времен Windows 3.11 (malloc к ним и обращается внутри. Еще есть парные HeapFree, GlobalFree и LocalFree). Они предоставляют больше контроля над результатом, но проприетарны для Windows. А полный список функций для работы с памятью в WinAPI есть здесь, их сотни на любой случай жизни. Можно даже внутри контекста чужого процесса выделить или освободить кусок памяти (обычно такое используется вирусами и прочей нечистью).
Утечки
А что будет, если постоянно выделять, но не освобождать? А еще лучше: выделять, но терять адреса выделенной памяти. ОС достаточно быстро подскажет правильный ответ.
В теории есть несколько возможных выходов, можно даже обработать подобный случай и, к примеру, экстренно освободить всё выделенное (только если не терять указатели) или попытаться спасти нужные данные из разваливающейся программы, но если никаких действий не предпринять, то ОС заставит процесс экстренно прекратить свою деятельность и существование.
Случай с потерей указателей на выделенную память называется утечкой памяти и ее последствия необратимы. Но как только ОС завершает выполнение процесса, то вся его память, даже утекшая, становится снова свободной.
Ленивые программисты и мусоросборка
Отслеживание правильности выделения и освобождения памяти является достаточно сложной и опасной задачей, особенно если требуется обеспечивать стабильность и безопасность (лучше даже не думать, что будет, если рукожопый программист забьет на MISRA и устроит утечку памяти в подсистеме тормозов в Тесле), и практически невыполнимой в некоторых парадигмах (особенно в функциональном программировании). Поэтому еще с древнейших времен (с 1959 года) существуют языки со сборкой мусора:
Особенности
Первое: в таких языках указателей или нет вообще, или они очень ограничены в пользовании (C#).
Второе: для работы с динамической памятью вместо указателей применяются ссылки. Ссылка по факту представляет из себя тот же указатель, только очень сильно ограниченный. Над ссылками запрещены все операции, кроме присваивания значения другой ссылки и разыменования, в то время как указатели имеют права и возможности обычных целых чисел.
Третье: Каждый выделенный кусок памяти всегда занят каким-то объектом.
Четвертое: такие языки всегда тянут за собой подсистему сборки мусора, которая самостоятельно учитывает каждый объект и выделенный под него кусок памяти, а еще подсчитывает количество активных ссылок на каждый подчиненный объект. Это называется подсчетом ссылок.
Пятое: как только процент использованной памяти переходит через порог, то запускается сборщик мусора, который сканирует все объекты и количество существующих на них ссылок. Если ссылок на объект нет (то есть он "утек"), то его память освобождается.
Минусы и проблемы
Дорого. При злоупотреблении сборщик мусора может запускаться слишком часто, а каждый его запуск вносит заметный лаг. Особенно критично это в играх.
Он не устраняет все возможные способы вызвать утечку памяти, к примеру просто выделяя бессмысленные данные, но сохраняя на них ссылки. Или если объект, который управляется сборщиком мусора будет содержать в себе то, что сборщиком мусора не управляется (открытые файлы или нативная память вне его подчинения).
А еще он изредка может удалять то, что удалять не нужно, поэтому появляются костыли уровня GC.KeepAlive() (а-ля самый маленький метод в C#).
Но несмотря не это, практически все современные языки используют сборку мусора, кроме C++ и Rust. C++ по большей части перешел на умные указатели, которые тоже считают количество активных ссылок, но делают это без сборщика мусора. А Rust использует свой уникальный Borrow Checker, который понимают только растофилы.
Собсвтенно говоря, начиная с первого класса и заканчивая шестым курсом института, мне казалось, что я неплохо понимаю в математике, все таки меньше пятерки у меня за все эти годы не было ни разу.
Я бы даже больше сказал: школу я закончил в 1975 году, а в институт поступил только в 1981 - просто не хотелось до этого, да и тогда не то что слишком уж захотелось - скорее, стало скучно...
И к экзаменам не готовился, и на математике мне попалась теорема не то синусов, не то косинусов, которую я не помнил совсем - помню, что что-то в треугольнике со сторонами и углами.
В результате пришлось ее сначала вывести по воспоминаниям, а потом - доказать. Экзаменатор, он же тогда - замдекана кафедры вышки, кажется, долго рассматривал мое доказательство, но придраться было не к чему.
Так я получил первую пятерку по математике в институте...
Но это я немного отвлекся.
Читаю всякую хрень, к математике отношения не имеющую, и вдруг там ГГ попадает на школьную олимпиаду по математике.
Стоит заметить, что я в олимпиадах не участвовал, их у нас в принципе не было, и я о них даже не слышал.
И были там приведены две задачки, для школьников, блин, и тут я понял, что не все у меня хорошо было с математикой...
Нет, вторая задачка была простая: имеется циферблат, как положено - стрелок две: часовая и минутная, но вот беда - они одинаковые.
Только ходят по "часовым" правилам.
И вопрос: сколько существует положений стрелок на обычном, двенадцатичасовом циферблате, что нельзя однозначно определить время.
Ну, тут достаточно все просто, и, хоть там ответа не было, найти его - дело трех минут. Ну, старый уже, мозги плесневелые, в школьные времена быстрее бы нашел.
А вот первая задачка - я даже не уверен, что и в школьные времена решил бы, но хорошо, что там и решение было, хоть и намеками.
Короче: имеем сферу, 12% поверхности сферы закрашено черным цветом, требуется доказать, что существует такой, вписанный в данную сферу, прямоугольный параллелепипед, все вершины которого попадают на незакрашенную часть поверхности.
И вот эту задачку, если бы не подсказка - хрен бы я решил, мозги не те.
Да и в школьные годы, скорее всего, не решил бы - уж слишком непривычный метод, хотя и не выходящий за пределы знаний средней школы...
Сразу же найдутся люди, которые скажут что это "+∞",т.е. "плюс бесконечность".
А вот нифига подобного. Бесконечность в математике это понятие, концепция, а не какое-то конкретное число. С ней можно работать с точки зрения математического формализма, но невозможно определить точное значение (помните, назови целое число и прибавь к нему единичку - повторяй пока жив/существует_вселенная - так и познаешь что такое бесконечность).
Ну что же, будем разбираться с конкретными значениями больших чисел. Для начала возмём общепризнанную шкалу названий десятичных множителей (ну привыкли мы к десяти пальцам на руках, потому и система счисления десятичная):
Честно спёрто с википедИи
Ну и естественно тоже самое, но только 1 делённая на какое-то "квекто"
Эти приставки стандартизированы по СИ, но мы-то понимаем, что числа могут быть намного боельше.
Естественно эти приставки не в полной мере удовлетворяют наши потребности. Та же физика (наука наблюдательная) запросто оперирует величинами, вроде 6,626 070 15⋅10^-34 кг·м2·с−1 (Дж·с) (постоянная Планка).
Конечно народ напридумывал другие величины, вроде:
100*10^78 - сто квинвигинтиллионов (не в системе СИ) — предполагаемое количество атомов в наблюдаемой Вселенной.
Гуголплекс (от англ.googolplex) — число, равное 10^googol (десяти в степени googol), то есть 10^10^100
Ну да ладно. Пока я был в стадии сперматозоида (и то не факт) во всю работал выдающийся математик и программист Дональд Эрвин Кнут. (как же я гонялся за его трёхтомником "Исскуство программирования", но даже первый том был мне, студенту, не по карману). Он подумал, а действительно, как записывать о-о-о-чень большие числа. Числа, у которых показатель степени той же десятки не влезает в тетрадь. И придумал "стрелку Кнута":
"Возведение в степень. Если мы пишем 3^4, то имеем в виду, что число 3 мы умножаем на себя 4 раза. Получаем 81.Здесь в дело вступают стрелки Кнута. В этой нотации 3↑4 — это то же самое, что и 3^4. Самое интересное начинается, когда мы добавляем несколько стрелок подряд."
И далее
"Тетрация. Если мы пишем 3↑↑4, то имеем в виду, что число 3 мы возводим в степень себя же 4 − 1 раза. Для этого мы сначала возводим 3 в степень 3, получаем 27. Затем возводим 3 в степень 27, получаем 7 625 597 484 987. И наконец возводим 3 в степень 7 625 597 484 987 — получаем настолько большое число, что записать его привычным способом просто невозможно. Представьте, что мы заполнили всю наблюдаемую Вселенную песком и каждую секунду заменяем все эти песчинки новыми. Если мы будем заниматься этим в течение 10 миллионов лет, то общее количество песчинок, побывавших в нашей Вселенной-песочнице, и на одну миллионную не приблизится к числу 3↑↑4. Но и это не всё."
Т.е. мы можем описать таким образом реально гигантские числа в короткой записи.
В 1977 году американский математик-любитель Мартин Гарднер выпустил статью, в которой описал число Грэма. Что самое интересное, это число возникло не с потолка, а в результате решений в области теории Рамсея (жуть жуткая и мне непостижимая). Что самое интересное, это самое большое число, которое использовалось в к-либо научных работах вообще. Через стрелочки Кнута оно выражается так:
Охренеть, не правда ли?
Не буду упоминать число Райо, т.к. суть этой формулировки я понять не в состоянии и тем более не смогу описать доступным языком, но определение формально чистое.
Автор про свободу движений задал вопрос: А в какой степени свободны Вы?
Мой ответ - В 156, и в 289.
Вопрос: Какой ответ верный?
Если сравнивать строение опорно-двигательного аппарата человека с различными системами механизмов, то можно выделить как отдельные крупные "узлы", например, локтевой сустав состоит из 3 частей- сам шарнир и 2 прикрепленных к нему кости, которые могут вращаться в суставной сумке (впадине).
Будем рассматривать механические системы, состоящие из твёрдых, нерастяжимых и негнущихся звеньев, соединённых шарнирами. Шарниры для начала рассмотрим двух типов: цилиндрические и шаровые.
Цилиндрический шарнир: с двумя свободными звеньями и с одним закреплённым звеном — опорой.
Где мы можем найти такое соединение в человеческом теле? Это, например, локтевой сустав. Межфаланговые суставы пальцев. Коленный сустав, в первом приближении, тоже подходит, хотя с ним всё несколько сложнее: тут реальная биомеханика сильно отходит от абстрактного механизма.
Цилиндрический шарнир, или шарнирная петля, это соединение двух звеньев, которое позволяет им вращаться вокруг общей оси. Или, если мы считаем одно звено неподвижно закреплённым — неподвижной опорой, — то этот шарнир позволяет второму звену вращаться вокруг оси шарнира.
Возьмём цилиндрический шарнир с одним закреплённым звеном. На рисунке закреплённое звено изображено просто как неподвижная опора. Свободное звено может двигаться только одним образом: поворачиваться вокруг оси шарнира, оставаясь при этом в одной плоскости. Его незакреплённый конец двигается при этом только по одной линии — дуге окружности с центром на оси шарнира.
Если мы зафиксируем плечевую кость, то наш шарнир будет закреплен и неподвижен.
Второй тип шарнира — это шаровой шарнир, где звенья вращаются вокруг общей точки. Опять же, можно считать одно звено неподвижной опорой, тогда второе звено может вращаться вокруг некоторой точки этого шарнира. Точки, а не оси.
Какие суставы в нашем теле подходят под эту модель? Плечевой и тазобедренный.
Шаровой шарнир допускает уже гораздо больше различных движений. Свободное звено может качаться в нём во все стороны. К тому же оно может поворачиваться вокруг собственной продольной оси, оставаясь на месте. Всё то же самое умеет делать и наше плечо. Незакреплённый конец свободного звена двигается при этом уже не по линии, а по участку сферы с центром в шарнире.
Для того, чтобы однозначно задать положение звена, нам потребуются три угла. Два из них задают наклон звена в пространстве, а третий — поворот звена вокруг собственной оси. Получаем три координаты и три степени свободы для шарового шарнира и плечевого сустава.
Человеческие суставы вообще устроены гораздо сложнее, чем простые шарниры. Приведём ещё пару примеров суставов, не подходящих под простейшие механические схемы.
Кажется, что коленный сустав вполне подходит под схему цилиндрического шарнира. Если мы зафиксируем бедро — например, сядем на стол, свесив ноги, — то колено будет качаться, рисуя дугу, так же, как свободное звено шарнира. Но, на самом деле, при согнутом колене голень может ещё и немного поворачиваться вокруг своей продольной оси, добавляя коленному суставу ещё одну степень свободы. Когда мы сгибаем колено, ослабляется натяжение некоторых связок коленного сустава, крепление голени становится более свободным и появляется возможность поворота, которой нет, когда колено выпрямлено. Получается, что коленный сустав имеет одну степень свободы при почти выпрямленном колене и две при согнутом.
Локтевой сустав мы тоже приводили как пример цилиндрического шарнира. И он действительно подходит под эту схему, если мы будем рассматривать крепление только локтевой кости. Но, говоря о лучезапястном суставе, мы заметили, что предплечье может поворачиваться, обеспечивая движение пронации/супинации кисти.
Это возможно из-за сложного устройства локтевого сустава, состоящего фактически из трёх отдельных суставов. В нём сходятся три кости — плечевая, локтевая и лучевая — и каждая пара костей соединяется своим суставом.
Локтевая кость крепится к плечевой суставом с одной степенью свободы, образуя цилиндрический шарнир. А вот лучевая соединяется с плечевой уже шаровидным суставом — аналогом шарового шарнира, с тремя степенями свободы. Подвижность лучевой кости относительно локтевой ограничивается двумя суставами, которыми они скреплены: в локте и в запястье.
Всё это сложное устройство приводит к тому, что лучевая кость может неким своеобразным образом проворачиваться вокруг локтевой. Кисть крепится именно к лучевой кости лучезапястным суставом и поэтому может воспользоваться её подвижностью. При этом локтевая кость остается неподвижной. Т. е. к одной степени свободы, которую имеет локтевой сустав, на протяжении предплечья добавляется ещё одна.
Заметим, что, хотя голень тоже состоит из двух костей — большеберцовой и малоберцовой, — но в ней отсутствует механизм, подобный предплечью, и обе эти кости двигаются как одна.
Соединим теперь три звена. Первое будет, как обычно, неподвижной опорой. Второе присоединим к нему цилиндрическим шарниром. А к свободному концу второго звена прикрепим ещё одно звено. Тоже цилиндрическим шарниром. Наш механизм для простоты сделаем плоским: пусть оси обоих шарниров будут параллельны, тогда все звенья будут двигаться в одной плоскости.
Сколько координат нам понадобится, чтобы задать положение всего механизма? Первое звено неподвижно, его положение известно. Второе звено мы можем повернуть в шарнире на какой-то угол. Не любой: угол поворота как-то ограничен неподвижным звеном, но нам это не важно. Одного этого угла нам достаточно, чтобы задать положение второго звена. Зададим этот угол.
При этом дальний конец первого звена окажется во вполне определённой точке. Мы можем рассчитать положение этой точки по заданному углу и длине этого звена. (Длину звена мы не считаем координатой, поскольку она постоянна.) В этой точке находится шарнир, которым крепится третье звено. Значит, чтобы задать положение и этого звена, нам достаточно задать угол его поворота (например, относительно второго звена) — точно так же, как для второго звена.
Получается, что задав две координаты — два угла — мы задаём положение всего нашего механизма. Значит, у него две степени свободы.
Заметьте, что соединив звенья двумя шарнирами, каждый из которых даёт одну степень свободы, мы получили две степени свободы. Т. е. степени свободы просто складываются.
В теле подобный механизм можно найти в пальцах руки: это два последовательных фаланговых сустава.
Теперь в нашем механизме из трёх звеньев заменим первый шарнир на шаровой, а второй так и оставим цилиндрическим.
Аналогией в нашем теле будет соединение предплечья и плеча с туловищем. При этом мы не учитываем способность предплечья поворачивать кисть.
Если вы помните, шаровой шарнир имеет три степени свободы. Прибавляя к ним одну степень свободы второго шарнира, цилиндрического, получаем четыре степени свободы. И действительно: положение второго звена (первое — неподвижное) мы задаём тремя углами. При этом положение второго шарнира и направление его оси вычисляется. Поэтому для задания положения третьего звена нам нужен ещё только один угол его поворота в цилиндрическом шарнире. Значит, чтобы задать точное положение всего механизма, нужны четыре угловые координаты. И наш механизм действительно имеет четыре степени свободы.
Выше мы писали, что если тело двигается по какой-либо поверхности, то у него две степени свободы. Три — если мы хотим учитывать также и поворот тела в этой плоскости. Будем двигать ладонью по столу. Вот тело, которое двигается по поверхности. Значит, у ладони три степени свободы. А где же семь?
Но мы также писали, что подсчёт степеней свободы зависит от модели, от задачи. Если нам важно только положение ладони на столе и неважно, что там дальше к ней крепится и что с ним происходит, то степени свободы три. Если же мы хотим знать и положение всей руки, то семь.
Действительность ещё сложнее. Если мы, сидя за столом, потянулись за хлебом, то мы включаем дополнительно сложную механику пальцев, а также, возможно, наклон и поворот туловища. Если мы будем рассматривать такую, более сложную, модель, то и количество степеней свободы у всей системы будет гораздо больше. Как наш мозг управляется с расчётом такой кучи координат — опять-таки тема, требующая отдельной статьи.
Количество степеней свободы опорно-двигательного аппарата (ОДА) человека зависит от типа суставов:
Одноосные суставыобладают одной степенью свободы, движения в них происходят только вокруг одной оси. В организме человека таких суставов насчитывается85. 2
Двуосные суставыимеют две степени свободы, движения в них происходят вокруг двух осей. В организме человека33двуосных сустава. 2
Многоосные суставыобладают тремя степенями свободы, движения в них происходят вокруг трёх осей. В организме человека таких суставов29. 2
Общее число возможных движений в суставах (так называемых степеней свободы) превосходит250.5
По подсчёту О. Фишера, учитывая возможные перемещения между корпусом, головой и конечностями, в теле человека не менее 107 степеней свободы1. Это не считая движений лица и внутри корпуса
В биомеханике человека число степеней свободы может быть значительным. Например:
Кисть относительно лопаткиимеет7 степеней свободы. Это значит, что кисть по отношению к лопатке ведёт себя как свободное, не закреплённое в пространстве тело. 3
Головаперемещается в сагиттальной и во фронтальной плоскостях и совершает вращательные движения, поэтому имеет3 степени свободы. 3
Верхняя конечностьимеет7 степеней свободы, то есть для обеих рук —14 степеней свободы. 3
Нижняя конечность(без суставов стопы) имеет6 степеней свободы, то есть обе ноги имеют вместе12 степеней свободы. 3
Движения в пястнофаланговых и межфаланговых суставах дают для каждой кисти и стопы19 степеней свободы. Таким образом, человеческое тело, не считая движений туловища, имеет105 степеней свободы. 3
Речь идёт не о социальных свободах, а более формализуемых - механических. Да-да, опять эта физика. Надеюсь хоть в этот раз смогу рассказать как можно попроще.
В теоретической механике есть понятие "число степеней свободы". Грубо говоря - это то число независимых перемещений механической системы. Слово независимый тут является ключевым, но вернёмся обратно. Пример: Столб вкопанный в землю имее степень свободы 0 - он вообще не может двигаться. Поршень в насосе или двигателе - степень свободы 1 - двигается только в одном направлении -вверх-вниз, крутиться поршню не даёт шатун. Ннежелательные перекладывания и люфты не учитываем - мы же играем в теорию, а не практику. 😉
Сейчас, для простоты, будем говорить исключительно о нашем, привычном евклибовом пространстве. Так вот свободная, не связанная с к-либо механической системой, геометрическая точка (ну со школы же должны помнить, что точка не имеет размера) имеет три степени свободы - вверх-вниз, влево-вправо и вперёд-назад. Движение под углом - это просто совокупность этих трёх движений, если мы должным образом повернём систему координат - всё встанет на свои места.
А вот любое, свободное трёхмерное тело, оказывается ещё может дополнительно и вращаться по трём осям:
Три вращения + три прямолинейных движения
Для твёрдого тела 6 - это максимальное кол-во степеней свободы.
Тут вроде всё понятно и доступно. Но механика исследует механизмы, зачастую сложные.
GIF
Этот механизм Чебышёва
имеет только одну степень свободы, так как его положение полностью
определяется углом поворота одного (любого) из трёх подвижных звеньев —
L2, L3 или L4.
Казалось бы должно быть много больше, но мы видим, что все звенья взаимосвязаны, и какую бы точку в каком бы звене мы не выбрали - она будет двигаться только по одному криволинейному пути. Это как поезд на рельсех - вперёд или назад, и пофиг как извивается Ж/Д дорога - путь будет только один.
Расчёт шарнирных систем и кол-во степеней свободы - это уже нехилая такая математика, потому не буду вам и себе пудрить мозг. Скажу только что у человеческой руки (без учёта пальцев кисти) семь степеней свободы, а жётско закреплённую роботизированную руку сделали с восемью степенями свободы (и тут железные ящики переплюнули кожанных мешков).
Вообще кол-во степеней свободы механизмов во многом зависит от количества звеньев - чем больше тем лучше. На практике же роборука должна обладать сервоприводами, поворотными механизмами + учитываются ещё и допустимые нагрузки - это уже достаточно сложная инженерная задача.
А теперь представьте, что шарниров море и каждый может не только изменять угол, но и вращаться на 360 (только вот в большинстве случаев это нах не нужно)
В довесок задачач со звёздочкой: какое кол-во степеней свободы у резинового мячика (ответ в спойлере)?
Ответ: бесконечное, потому как надо рассматривать деформацию мяча, т.е. каждая точка, каждая молекула мяча имеет свои степени свободы
Не рекомендуется принимать данную статью близко к сердцу или как истину в последней инстанции. Скорее как научпоп-грелку для мозгов. Тут довольно много упрощений, упущений или просто странно написанных моментов. Если что-то объяснено совсем криво, то добро пожаловать в комментарии.
Все сказанное далее применимо везде, но детали описаны для защищенного режима x86 (только я опустил префиксEдля регистров) и языков семейства C (в основном C и C++, местами C#). Для понимания рекомендуется знать про указатели и базово представлять, что происходит в процессоре.
Приятного чтения.
Думаю все помнят, что такое функция в математике
Начнем со сложного
Глоссарий
Чувствую, что большинство не имеет ни малейшего представления об указателях
В части про x86 я упоминал о том, что процессор представляет из себя бешенный самоуправляемый калькулятор, которому указом может быть разве что хранилище кода, аппаратный сброс и немаскируемое прерывание. И что у него есть системная шина, состоящая из шины адреса, шины данных и шины управления, к которой подключена память, хранящая данные и код.
А память это огромная одномерная полоска, в которой каждая ячейка имеет свой порядковый номер от 0 до 2^(разрядность шины адреса)-1. И указатель представляет из себя самую обычную численную переменную, хранящую номер (адрес) любой ячейки.
Я не понимаю, почему для многих это настолько сложная тема, а существенное количество новичков забрасывают изучение C после встречи с ними. Они в своей сути максимально элементарны (до тех пор, пока не нужно исправлять уязвимости и ошибки, которые появились в результате злоупотребления или неполного понимания нюансов).
Также существуют ссылки, так или иначе представляющие из себя подвид указателей, но обычно с запретом на арифметику с ними (основная сложность и опасность указателей) и/или подсчетом количества активных ссылок для сборки мусора.
Все языки или имеют указатели (Pascal, C, C++, блоки unsafe в C# и Rust), или являются ссылочными (Java, C#, Python, JS, т.д. (почти все современные языки)). С++ тоже имеет ссылки, но как синтаксический сахар над указателями, призванный упростить их передачу в функции и избавиться от проблемы нулевых указателей.
Ассемблер - если вы даже примерно не знаете, что это такое, то первую часть статьи вероятно можно пролистать и перейти на обсуждение парадигм.
Регистр - именованная численная переменная внутри процессора. Может иметь особое предназначение, а может просто использоваться для хранения любых чисел и арифметики. Их немного.
Инструкция - одиночная команда, представляет из себя последовательность из нескольких байт со специальным значением. Любая программа представляет из себя последовательность инструкций внутри памяти. Указатель на инструкцию, которая будет выполнена следующей, содержится в регистре IP, который сам увеличивается после выполнения каждой инструкции. По-хорошему стоило нарисовать пошаговую наглядную анимацию с демонстрацией всех регистров и куском ассемблерного кода, но мне лень, а в гугле я ничего толкового не нашел.
Метка - константа, содержащая адрес чего-либо. К примеру процедуры или глобальной переменной. Примерно как метка для goto в высокоуровневых языках, но универсальнее. Применяются при написании на ассемблере, в процессоре как таковые не существуют и разрушаются до обычных чисел при ассемблировании и линковке.
Разыменование - операция над указателем, когда тот превращается в переменную с адресом, который был записан в указателе (своеобразный пульт Д/У для переменной).
Парадигма - "стиль" написания и постройки архитектуры программы, частично определяется языком. Технически на том же C можно писать в практически любой парадигме (через костыли можно писать в стиле ООП, через макросы реализовать метапрограммирование, а через нестандартные расширения вообще ядерный бред), но родная для него - процедурная. А Go, к примеру, хоть и имеет недоклассы и методы, но лишен практически всех благ ООП и не сильно далеко ушел от C.
Синтаксический сахар - необязательная возможность, которая сокращает количество кода, повышает его читаемость или удобство поддержки
Стек
Большинство процессоров Фон-Неймановской архитектуры в своей конструкции предлагают механизмы стека. Кто играл в покер должны вспомнить стеки фишек. То есть некие значения, сложенные друг на друга (обычно это переменные, в частности адреса в памяти). При этом основными операциями являются добавление фишки на вершину (инструкция PUSH) и ее снятие (инструкция POP). Еще можно косвенно читать и заменять (перезаписывать) фишки относительно вершины (на вершину указывает регистр SP, неявно обновляется через POP и PUSH) или основания (указывает регистр BP) вглубь.
Стеки можно переключать (но не в MOS6502), это нужно для многозадачности
Помимо хранения локальных переменных стек позволяет делать довольно интересную вещь: мы можем положить на стек все необходимые аргументы (x в математике, но их может быть несколько), адрес следующей инструкции (взяв из указателя инструкции IP, это будет адрес возврата), после чего совершить прыжок на какой-нибудь другой адрес (сохранение адреса и прыжок делаются инструкцией CALL).
А на этом адресе может быть функция. Сначала она кладет текущий BP на стек, после чего приравнивает основание к вершине (BP к SP), тем самым создав для себя "новый стек" сразу после предыдущего (это еще называется стековым кадром), в котором якобы лежит только значение старого основания стека (BP), чтобы можно было восстановить его перед возвратом.
Серое это стековый кадр от предыдущей функции
После чего функция может прочитать переданные ей аргументы относительно основания своего стека вниз (технически это будет выход за границы текущего стека), выполнить с этим какие-либо действия (записать в файл, вывести в консоль, просто перемножить) и сохранить результат (обычно результат сохраняется не на стек, а в регистр AX).
После чего функция восстанавливает старое значение BP, сняв его со стека, и выполняет команду RET, которая снимает со стека адрес возврата и совершает переход на него, тем самым переключившись на инструкцию сразу после CALL.
И эта система так или иначе перекочевала в большинство высокоуровневых языков начиная с FORTRAN. К примеру в C CALL превратился в круглые скобки, RET в return, а адреса и метки в имена (при этом без скобок они все еще являются указателями, то есть адресами).
Пример кода (к сожалению, штатного форматирования не предусмотрено):
#include <stdio.h> int pow2(int x) { return x * x; } int main() { int y = pow2(16); // Вызов функции. В y будет сохранено число 256 printf("%p", pow2); // Без скобок вместо вызова просто выведет адрес функции return 0; // Возврат нуля из главной функции означает отсутствие ошибок. }
Такой стиль программирования называется процедурным (выделение кода в блоки называется структурным). А вот называть процедурный язык функциональным совершенно неправильно, ибо функциональное программирование ≠ процедурное, они даже в разных категориях (императивное и декларативное).
А теперь скомпилируем этот код и разберем ассемблерный листинг
Важно понимать, что стек в большинстве архитектур традиционно растет от больших адресов к меньшим (и в x86). То есть для того, чтобы отодвинуть его вершину вверх, от регистра SP нужно отнимать значения, а вот для ужимания и съедания ненужных значений к указателю на вершину значения прибавляют. И для доступа к значениям относительно основания или вершины это тоже важно учитывать. Это может звучать запутанно, но через время привыкаешь и всё становится очевидным.
Надеюсь это возможно будет разобрать. Код скомпилирован MSVC v19.28 для x86 со стандартными настройками в Godbolt
Post scriptum
Это всё довольно упрощенно. Как минимум, в защищенном режиме используется больше 5 разных соглашений о вызове, которые отличаются деталями реализации. Это было описание для cdecl, обычно используемого в C. Еще часто используются соглашения pascal, fastcall, thiscall, winapi и другие. Fastcall, к примеру, избегает хранения аргументов на стеке, если их возможно передать через регистры, что улучшает производительность. А winapi отличается от cdecl тем, что функция сама очищает стек от аргументов для себя при возврате. А еще я упустил, к примеру, сохранение регистров, которые функция может перезаписать и испортить, а потому обязана предварительно сохранить и перед возвратом восстановить, передачу переменного количества аргументов (как в printf) и возврат значений шире 32 бит (которые не влезут в EAX).
Плюс сейчас мало кто компилирует ПО под защищенный 32-битный режим, а в длинном режиме (AMD64) используется пара других соглашений, основанных на fastcall и имеющих несколько отличий друг от друга.
Так процедура или функция? Или подпрограмма?
Процедурное программирование предлагает делить код на подпрограммы, которые принято называть функциями и процедурами (функция обычно является наиболее понятным, частым и обобщенным названием, поэтому я его использую).
Процедура от функции отличается только тем, что функция возвращает какое-то значение (как в математике), а вот процедура этого не делает. Не во всех языках явно есть процедуры (в Pascal есть, но не в C). В таком случае их заменяют функции, возвращающие ничего (void, Unit, undefined, None).
Хотя и тут есть свои особенности. К примеру функция, возвращающая void в C и Java является прямым аналогом процедур, как-либо использовать возвращенное значение из такой функции невозможно, ибо его нет физически. А вот Unit в Kotlin это синглтон (а-ля единственная и уникальная константа уникального типа), ссылку на который можно присвоить в переменную, но в этом особого смысла нет. Undefined в JS и None в Python тоже уникальные константы специальных типов.
Но не тут-то было
Вроде бы процедура никогда не может ничего вернуть...
Только она этого никогда не делает напрямую. При она этом может записать результат в глобальную переменную, а еще часто принимает в себя указатели или ссылки, по которым может записать результат. Это еще удобно тем, что можно "вернуть" несколько значений. Пример:
void procedure(int x1, int *x2, int *x3) { // Функция ничего не возвращает, то есть это процедура *x2 = x1 * x1; // Разыменовываем указатель и записываем по его адресу результат. *x3 = x1 * x1 * x1; // Разыменовываем другой указатель и записываем по его адресу результат. } int y1, y2; procedure(16, &y1, &y2); // В y1 оказался результат, аналогичный прошлому примеру. А в y2 куб числа.
PS: оператор звездочка при указании типа превращает его в тип-указатель, а при применении на переменную-указатель разыменовывает ее до изначальной переменной. Амперсанд превращает переменную в указатель на нее (иногда еще называется оператором получения адреса).
То есть мы вернули сразу 2 разных значения из процедуры, которая якобы ничего не возвращает. Чудеса. Подобные чудеса есть в том числе в Pascal с явным делением на процедуры и функции (плюс там это сделано немного удобнее). Хотя механизм тут отличается от того, который используется в возврате значения из функции и совпадает с механизмом передачи обычных аргументов, поэтому никакой магии.
Еще про связь с математикой
Главное отличие функций в программировании от функций в математике в том, что они могут делать что-то на стороне и не обязаны возвращать одинаковый результат при одинаковых аргументах.
К примеру функция получения случайного числа по определению не может существовать в математике, если она не принимает в себя предыдущее случайное число или зерно для его видоизменения. Или функция записи в файл, возвращающая 0 в случае успеха и другое число при провале. Ко всему прочему, такая функция имеет побочный нематематический эффект, то есть запись в файл, что тоже недопустимо традиционной математикой без высоких абстракций.
Поэтому придумали чистые функции. По сути это ограничитель, которые делают функцию полным отражением таковой в математике. Им запрещено возвращать разные значения при одинаковых аргументах (точнее запрещено всё, что может такое позволить сделать), запрещено обращаться к нечистым функциям, запрещено обращаться к тому, что не является аргументом или локальной переменной, запрещены вообще любые действия, которые могут сделать что-то на стороне (даже функция sin() в C не всегда является чистой, ибо может зависеть от состояния FPU).
Чистые функции через ключевое слово pure явно есть в D и FORTRAN (проверка на чистоту во время компиляции), а также являются основой функционального программирования.
Чистая процедура тоже имеет право на жизнь, используя механизм со ссылками (на счет указателей не уверен из-за возможности арифметики над ними).
Функциональное программирование
Это очень сложная категория, которую постоянно путают с процедурным программированием. А еще это де-факто противоположный стиль: декларативный. Традиционное императивное программирование детально описывает процесс получения результата, а декларативное сам результат, без деталей реализации (хотя разделение обычно довольно нечеткое). При этом второй типичен для языков разметки типа HTML и CSS. То есть, условно, как одна и та же операция могла бы выглядеть в императивном и декларативном стиле:
document.tags.A.color = "blue" /* Императивный (JSSS). Сделать ссылки синими */
a { color: blue } /* Декларативный (CSS). Ссылки должны быть синими */
Почувствуйте разницу.
И функциональное программирование я никогда не изучал и слишком мало о нем знаю. Так что готовьтесь к ошибкам и не воспринимайте всё за чистую монету.
Внутри чистого функционального программирования
Основано полностью на математике, все функции обязаны быть чистыми. Операция присваивания запрещена (разрешены константы), переменных в привычном виде нет. Прикольно? Очень!
Во многих процедурных языках функции и процедуры являются объектами второго класса (не путать с классами из ООП), что не позволяет их свободно присваивать в переменные, передавать как аргументы в другие функции или возвращать из них (только через указатели). Функциональные языки расценивают функцию как объект первого класса, то есть их можно, а часто нужно передавать в другие функции напрямую.
Это дает некоторые преимущества, особенно в плане безопасности и при работе с многопоточностью (по причине неизменяемости данных и отсутствия глобального состояния), но вся концепция имеет один фатальный недостаток: вы мало чего полезного можете сделать, ибо что ввод, что вывод являются математически нечистыми, а потому запрещены. Вот такое вот гениальное изобретение безумных математиков.
Функциональное и процедурное программирование. Холст, масло
Каждый чисто функциональный язык выкручивается из этого по-своему, к примеру через монады. Это позволяет им существовать вне шуток и даже использоваться на практике.
Это не все особенности функциональных языков, но одни из самых важных. Самый известный такой язык: Haskell. Функциональные F#, Lisp, ML и многие другие не являются 100% чистыми.
Смешанное функциональное программирование
Последнее время часто используются смешанные языки, к примеру вместе с процедурным или объектно-ориентированным программированием, что избавляет от ограничений математики, но дает гибкость в том, что функциями можно оперировать как с любыми другими типами данных, а еще дает много очень удобного сахара вроде замыканий и лямбд. Это C#, Python, JS, частично Java и C++ (в них нужны костыли в виде интерфейсов из одного метода или оберток над указателями).
Особенности
Функции как объект первого класса. К примеру в C# это реализовано через систему делегатов, которые представляют из себя тип-обертку для функций:
Action<string> printer = Console.WriteLine; // Action<string> - тип-делегат. Неявно создаем его объект и присваиваем туда функцию printer("Hello, World!"); // Вызываем функцию через делегат
Локальные функции: как обычные, только вложенные в другую функцию (объявленные внутри нее)
void Func1() { // Глобальная функция void Func2() { // Локальная функция Console.WriteLine("В локальной функции"); } Func2(); }
Лямбды: возможность объявить безымянную функцию посреди кода (часто удобнее локальных)
var pow2AsLambda = x => x * x; // => - оператор лямбда-выражения pow2AsLambda(5); // Вернет 25
Замыкания (можно использовать вместе с лямбдами и локальными функциями):
int someValue = 42; var pow2AsLambda = x => x * x + someValue; // someValue будет захвачено замыканием, хотя напрямую не передано pow2AsLambda(5); // Вернет 67
Особенность замыканий в том, что они могут захватить локальную переменную родительской функции внутрь себя, продлевая ей время жизни за пределы блока с кодом. После чего такую лямбду можно передать в другую функцию, которая просто так не имеет доступа к someValue (в обычных условиях someValue вообще уже будет уничтожен), а вот переданная лямбда сможет ее прочитать или записать всегда и откуда угодно. И самое интересное то, что значение этой переменной будет сохранятся между вызовами к замыканию. То есть она становится глобальной, но видимой только из функции-замыкания.
ООП
Посмотрим на индекс TIOBE по популярности языков. Фиолетовым я пометил чистые функциональные языки. Языки, имеющие возможности, присущие функциональным языкам (смешанные) - синим, процедурным - красным, а объектно-ориентированным (ООП) - зеленым. Языки, в которых нельзя объявить функцию, принадлежащую самой себе или модулю, процедурными считать не совсем корректно (Java).
Не претендую на 100% точность
Видите фиолетовые точки? И я не вижу. А вот синих 12. В то же время красных и зеленых по 16. При этом реально применяемый чисто процедурный язык всего 1: С. Остальные имеют какую-либо встроенную поддержку других парадигм.
И сейчас практически всё большое ПО пишут в ООП. Ибо позволяет хоть как-то сдерживать структурированность кода после перехода с десятков тысяч строк к сотням (и миллионам).
Внутри
ООП является развитием идеи процедурного программирования. Проблема была в том, что помимо кода в программе существуют еще и данные, которые было бы неплохо связать с соответствующим им кодом. И через некоторое время после появления процедур появились структуры (они же записи в Pascal, не путать со структурным программированием).
Структуры были удобным способом объединить несколько переменных в единое целое. Пример:
typedef struct user_struct { char *username; int userid; int reputation; } user_t; user_t someuser = { "IvanKr08", 17002, 253 }; // Инициализируем значениями someuser.reputation += 10; // Обращаемся к полю
(Вместе с этим объявляем структуру новым типом через typedef, что не делается по умолчанию в C, в отличии от C++. Один из ярких примеров несовместимости C и C++):
После чего user_t превращается в новый тип, как int или char. Можно создать полноценную переменную типа user_t (или массив такого типа), а потом обратиться к какой-нибудь ее части (полю) через оператор точки (.). Можно сделать функцию, которая будет принимать или возвращать переменную типа user_t (к примеру someuser). Можно сделать указатель на user_t, тогда для обращение к полю используется оператор стрелки (->). Или можно встроить переменную типа одной структуры в другую, это тоже не запрещено. Внутри структурная переменная представляет из себя последовательно слепленные поля в одно целое.
Если поля разного размера, то часто добавляют пустоты между полей в целях выравнивания по размеру наибольшего поля и улучшения производительности, но это сложная тема
Возвращаемся к ООП
Суть ООП в том, что помимо полей структуры могут содержать процедуры и функции. Такая структура называется классом, переменная класса - объект, а процедура класса - метод.
Метод принципиально ничем не отличается от любой процедуры или функции, кроме того, что неявно принимает в себя специальный аргумент this (в Python это делается явно, в некоторых языках вместо this может быть self). Он содержит в себе ссылку/указатель на объект класса, от которого был вызван. Пример:
class User { public: char *username; int userid; int reputation;
void print() { printf("Пользователь \"%s\" (%i). Репутация: %i\n", this->username, this->userid, this->reputation); // Постоянно писать this-> не обязательно. Если локальной переменной с таким именем нет, то будет произведен доступ к полю } }; User someuser = { "IvanKr08", 17002, 253 }; // Инициализируем значениями someuser.print(); // Вызвали метод, print() неявно получил в себя указатель this, который указывает на someuser someuser.reputation += 10;// Обращаемся к полю someuser.print(); // Теперь вывод поменяется
Да, никто не мешает объявить обычную функцию, которая будет явно принимать в себя указатель на User и ничего не поменяется, и так повсеместно делают в C (тот же WinAPI на этом построен целиком и полностью), но ООП на самом деле крайне сложная, большая и холиварная тема, которая развивалась на протяжении 60 лет в разных направлениях и которую поднимать тут глупо. Только опишу еще несколько разновидностей методов:
Статичный метод - как обычный метод, только не получает в себя this и вызывается от имени класса, а не объекта (не someuser.method(), а User::method()). Зачем это нужно и в чем отличие от просто функции? Статичный метод можно спрятать за инкапсуляцией, плюс он привязан к классу, а не болтается в глобальном пространстве имен.
Конструктор - автоматически вызывается при создании нового объекта. Может иметь аргументы, тогда обязан явно вызываться как функция с именем класса, т.е. User("IvanKr08", 17002, 253)
Деструктор - есть в C++. В C# называется финализатором и имеет несколько важных отличий. Автоматически вызывается перед уничтожением объекта (к примеру выход из области видимости, явное удаление оператором delete или удаление сборщиком мусора в C#). Не может иметь аргументов.
Свойство - есть в Delphi и C#, куда перешел от первого. С точки зрения синтаксиса это поле, которое можно читать и записывать, только вместо прямого обращения в память вызываются соответствующие методы (set и get). Пример: ... int SomeProperty{ get =>42; set => Console.WriteLine("Set"); } ... test.SomeProperty = 10; // Значение никуда не сохранится, будет выведено "Set" в консоль Console.WriteLine(test.SomeProperty); // Всегда будет 42
Перегрузка оператора - специальный метод, который позволяет переопределить стандартные операции для типа. К примеру нельзя сложить два объекта User или User и число, но если перегрузить оператор +, то можно будет определить свою логику для этого (не обязательно, чтобы оно что-то реально складывало. Это может быть любое действие).
Индексатор - синоним перегрузки оператора квадратных скобок. Объект начинает вести себя как массив.
Функтор - перегрузка оператора круглых скобок (иначе называется перегрузкой оператора вызова функции). Позволяет "вызывать" объект так же, как и функцию. Звучит запутанно, но можно погуглить. Есть в C++. Также бывает функтор в функциональном программировании, но он не имеет ничего общего с функтором в C++.
Виртуальная функция (метод) - самый интересный и сложный тип, составляет основу полиморфизма. Вкратце объяснить его невозможно, но одним из ключевых принципов ООП является наследование, то есть один класс (наследник) копирует в себя все поля и методы другого класса (родитель), и может добавить новые. И суть в том, что указатель (ссылка) на объект класса-наследника может быть присвоен в переменную-указатель родительского типа. А самое интересное то, что любые обращения (к примеру вызовы методов), сделанные через родительский указатель, будут вести себя аналогично обращениям, сделанным напрямую через указатель с типом наследника. Это называется полиформизмом. Но это было бы не слишком полезным, если бы не возможность объявить метод в родительском классе виртуальным, а в наследнике полностью переопределить его код.
И то, что я забыл
Послесловие
Если вы осилили эти 3000 слов и даже смогли что-то понять, то найдите и распечатайте себе утешительную грамоту. А я устал и пойду искать смысл жизни...
UPD: исправлены косяки форматирования, очепятки, добавлено еще пару пунктов про разновидности методов и функциональное программирование.
Все хим. элементы являются отходами жизнедеятельности звёзд. Но только до железа. А вот более тяжёлые элементы - результат космических катастроф, как-то слияние белых карликов, нейтронных звёзд и пр. о-о-чень ярких событий.
Хим. элементов тяжелее железа очень мало, но они есть и мы добываем их в промышленных масштабах (сотые доли процента от массы нашей планеты, но всё же есть). И, по сравнению с массой нашей планетки теоретически могут накопиться весьма критические массы вибраниума, ураниума.
Уран, точнее Uranium, бывает во многих видах, но самые распространённые это злой и добрый Уран. Добрый уран, как и полагаяется всем добрым скуфам имеет повышенную массу с атомным числом в 238, а вот его злой брательник худой - "весит" всего 235, оттого и злой - "нетрония" не хватает стабилизировать ядро.
Появлялись эти элементы примерно в равных количествах, но "злые", то бишь радиактивные ядра, элементы, изотопы долго не живут. Вот потому и "злых" хим. элементов становится всё меньше и меньше.
Так, кажись меня опять "понесло", Пост о чём? Правильно, о ядрЁных реакциях в природе. При некоторой концентрации урановой руды с большим кол-ом 235го урана теоретически возможен не только ядрёный взрыв (а они вполне могли быть на заре формирования планеты), но и долгоиграющие атомные реакторы.
За счёт цепного деления порода разогревается, потом к-либо методом происходит выброс энергии и порода начинает "тлеть".
Теория это хорошо и увлекательно, только об этом сценарии никто и не думал, пока не открыли месторождение урания в Окло, в Габоне, посреди Африки. (СССР и после РФ являются крупнейшими в мире поставщиками обогащённого урана, но это не означает что у нас его дохрена - просто мы умеем его очень дёшево и много обогащать, потому как "на игле сидим").
Вот схема ентого реактора:
Геологический разрез естественного ядерного реактора Окло
1. Зоны деления
2. Песчаник
3. Слой урановой руды
4. Гранит
По расчётам реактор пахал около 1.8 миллиардов лет назад.
Реактор возник в результате затопления пористых богатых ураном пород
грунтовыми водами, которые выступили в качестве замедлителей нейтронов.
Тепло, выделявшееся в результате реакции, вызывало кипение и испарение
воды, что замедляло или останавливало цепную реакцию. После того, как
порода охлаждалась и распадались короткоживущие продукты распада,
поглощающие нейтроны и вызывающие отравление реактора,
реактор разотравлялся, вода конденсировалась, и реакция возобновлялась.
Этот циклический процесс продолжался несколько сотен тысяч лет.
Промышленная революция
стала поворотным моментом в истории человечества, изменив не только способы
производства, но и социальные, экономические и культурные структуры общества.
Начавшись в Великобритании в конце XVIII века, она распространилась по всему
миру, трансформируя аграрные общества в индустриальные. Основой этой революции
стали инновации, такие как паровой двигатель, механический ткацкий станок и
железные дороги, которые значительно повысили производительность труда и
ускорили процессы перемещения товаров и людей. Эти технологические прорывы не
только изменили производственные методы, но и создали основу для новых форм социального
взаимодействия.
Рост фабричного
производства и урбанизации привел к масштабному перемещению населения из
сельских районов в города, что вызвало серьезные изменения в социальной
структуре. На смену традиционным сельским общинам пришли промышленные города,
где формировался новый класс наемных рабочих. Эти изменения сопровождались
тяжелыми условиями труда, низкой оплатой и отсутствием социальных гарантий,
что, в свою очередь, способствовало появлению первых движений за права рабочих
и профсоюзов. Рабочий класс стал важной социальной силой, настаивавшей на
введении ограничений на рабочее время, улучшении условий труда и создании
систем социальной защиты.
Инновации, возникшие в
этот период, не только изменили производственные процессы, но и повлияли на
формирование новых экономических моделей. Переход от ручного труда к машинному
производству сопровождался концентрацией капитала и появлением крупных
промышленных предприятий. Это привело к усилению роли предпринимателей и
инвесторов, что стало основой для капиталистической экономической системы.
Однако концентрация богатства в руках узкой элиты породила глубокие социальные
неравенства, которые стали основой для дальнейших экономических и политических
изменений.
Rлючевые аспекты взаимодействия инноваций и социальных преобразований в рамках промышленной революции
Промышленная революция
также дала начало глобальной экономической интеграции, так как развитие транспорта
и коммуникаций способствовало росту международной торговли. Одновременно с этим
она вызвала серьезные экологические проблемы, такие как загрязнение воздуха и
воды, что стало вызовом для будущих поколений. Взаимодействие инноваций и
социальных преобразований, возникших в этот период, стало фундаментом для
модернизации общества, но также показало необходимость учета социальных и
экологических последствий технологического прогресса. Как показала промышленная
революция, изменение технических цепочек и повышение уровня автоматизации влияют
на общественные страты.
В XXI веке, когда
нейросети способны обрабатывать миллиарды транзакций, поведенческих паттернов и
логистических цепочек в динамике, экономика находится на пороге появления
кибернетического мета-координирующего слоя, способного заменять рыночные
сигналы на более точные и мягкие формы регулирования.
Сопоставление фаз автоматизации и социальных трансформаций
Во-первых, автоматизация
размывает границы между производителем и потребителем. Платформенные решения
делают возможной занятость без принадлежности к классу наемных работников в
привычном смысле - фрилансеры, курьеры, водители агрегаторов, авторы цифрового
контента становятся микро-предпринимателями, но без доступа к капиталу.
Возникает новая прекаризация - форма зависимости без прямой эксплуатации, но с
тотальным алгоритмическим контролем.
Во-вторых,
производственные цепочки укрупняются и централизуются, но при этом логистика и
кастомизация становятся гиперлокальными благодаря on-demand производству. Это
приводит к возникновению новой страты - технических медиаторов, тех, кто
настраивает цепочки, связывает потребности и мощности. Они заменяют
классических инженеров или финансистов и формируют инфраструктурный слой будущей
плановой экономики.
В-третьих, цифровой мета-координирующий
слой - это не «большой брат», а распределённый агент, встроенный в каждую
ячейку производства и потребления: от кофемашины до системы управления городом.
Такие системы уже сегодня меняют расстановку сил: доступ к данным становится
важнее, чем владение заводом. Класс капиталистов уже трансформируется в класс
операторов алгоритмов, а класс рабочих - в класс пользователей и управляемых
систем.
Шаги изменений социальных страт под воздействием автоматизации
И наконец, в условиях сверхавтоматизированных цепочек растёт важность
эмоционального, смыслового, гуманитарного труда - креативная индустрия, воспитание,
культура, уход, терапия. Это продолжает радикально изменять иерархию социальной
ценности профессий: труд блоггера (автора цифрового контента), например, уже
стал более значимым, чем труд оператора колл-центра, которого давно заменил ИИ.
Продолжение: Цифровая трансформация: от локальных изменений к глобальным мутациям
Этот пост входит в Часть 8. Влияние мутаций: инновации и кризисы
Роль технологических, социальных и финансовых кризисов в преобразовании экономических систем. Анализ примеров внезапных изменений, таких как Великая депрессия, промышленная революция и цифровая трансформация.
СерияПроисхождение экономических систем путём естественного отбора
Кто интересуется развитием общественно-экономических формаций, подписывайтесь!
В прошлом моём посте я понял, что не все вомбатяне имеют высшее техническое образование. Это не укор, просто гениальному хирургу или учителю начальных классов, да даже водителю или сварщику такие знания не нужны. Потому попытаюсь писать посты как можно проще.
И так, возникла проблема в понимании самой сути некоторых физ. понятий. Люди спутали заряд и энергию, хотя при этом получились правильные цифры.
И так. Школьный ликбез говорит, что есть мера измерения электрического заряда. Ещё древние греки заметили, что если ебонитовую палочку потереть об древнеегипетскую кошку, то к палочке начинает прилипать пыль, кусочки бумаги, клопы и пр. мелочь. Озадачились, а что же это за сила, которая ставит волосы дыбом после того как потереть башкой об воздушный шарик? Например Фалес (ну и имя, прости меня господи) Милетский считал что таким образом янтарь, в отличие от магнетита может стать магнитным. Т.е. сила притягивания имела такую же природу как и у магнитов. И это было за шесть веков до нашей эры. Он уже тогда предпологал, а может и знал, но не мог никому объяснить (теория попаданцев) уравнения Максвелла.
Ага. Масло в изношенном двигле тоже умеет магнитится 🤪
После этого ещё итальянец Гальвани (зоошизы на него не хватает) и над лягушками поиздевался, точнее над их частями - лапками. Эх вот не ездил бы Пётр-I в европу, может и в Петербурге расчленёнки небыло...
Так и появилось понятие электромагнетизма. Пора уже и к википедИи обратиться: "Электри́ческий заря́д (коли́чество электри́чества) — физическая скалярная (т.е. не имеет направления, как, к примеру, сила, которая направлена куда-то в пространстве) величина, показывающая способность тел быть источником электромагнитных полей и принимать участие в электромагнитном взаимодействии."
А из чего состоит-то та самая липездрическая сила, которая при контакте с фазным проводом заставляет нас дёргаться как те самые легушачьи конечности (надеюсь тег "Жесть"тут не нужен) у Гальвани?
Было ещё пару чуваков, которые изучали это самое электричество. Это естественно Кулон и его величество Ампер (мне по работе очень часто приходится иметь дело с тысячными долями ентого чувака, в основном от 0 до 20 милиАмперчиков). Что характерно, оба они французы, т.е. "лягушатники" (а мы ещё корейцев за собак ругаем...) Так мало того, что бедные лягушки (во Франции вообще среду стоит объявить выходным днём, по-типу "лягушачья" сиеста ), так Кулон ещё и Ампера протащил по узкому проводнику
А кто такой Ампер?
Ампер — сила неизменяющегося тока, который при прохождении по двум
параллельным прямолинейным проводникам бесконечной длины и ничтожно
малой площади кругового поперечного сечения, расположенным в вакууме на
расстоянии 1 метр один от другого, вызвал бы на каждом участке проводника длиной 1 метр силу взаимодействия, равную 2⋅10−7 ньютона.
Я тоже перечитал пару раз, что бы понять суть. Вот такая она "вики"
Грубо говоря, Ампер вычислил силу эл. тока проходящую по условным рельсам и вырази её в силе. Ну а Кулон пропустил Ампера через "проводник"... Вот такие они франецузы - извращенцы ещё те.
Тут появляется ещё один француз - Шарль Франсуа Дюфе, который заметил, что не все "эбонитовые палочки" и не все "коты" ведут себя одинаково. Некоторые притягиваются, а некоторые отталкиваются...
Ну ладно воду в ступе толочь. Пора уже и в "кванты" опускаться. Немец (ну а кто же ещё) Иоган Вильгельм Гитторф заметил свечение люминофора при приложении напряжения между люминофором и разогретым катодом. Подтянулась целая толпа немцев с англичанами и поняли - что-то летит от катода в сторону мишени.
Затем, всё это экспериментаторство вылилось в модель атома от господина Резерфорда (о - знакомая фамилия). В модели атома Резерворда как раз и появился электрон.
Естественно за енту тему впряглись все, кто мог хоть что-то, в том числе и Эйнштейн.
Да, тот самый язык. "Это он его показывает председателю нобель-коммитета, ждал то нобелевку за "относительность"" (шутка, просто пытался обломать паппараци, а вышло наоборот)
Он объяснил фотоэффект, это когда светом вышибаются электроны из из атома - на ентом принципе построены как светодиоды, так и фотоприёмники (когда жмакаете пимпачку на ИК-пульте телека - вспоминайте Эйнштена), за что получил нобелевку с присказкой "и другие заслуги", которые подразумевали теорию относительности (ну не мог коммитет признать такую революционную теорию).
Ну что же - электрон открыт, разогнан, потом его и изучат. Причём с офигительной точностью. Именно электрон виноват в "ебонитовой палочке в кошечку". К тому же, на данном этапе развития науки, электрон является реально неделимой частицей, в отличие от протона или нейтрона... Вот таки дела малята.
Неделимый? Да сколько его не долбали в экспериментах - всегда фотон получается, а фотон - ну так себе частица - оно массы не имеет. Вроде как есть(пока движется), а вроде как и нет (замедлить в среде можно, а вот остановить нет).
Вот и получилось, что есть массовая частица с электрозарядом. Меньше этого электрозаряда нет, есть только математические трюки про кварки (по одиночке они не существуют, а в паре, тройке или пентакварке - всегда получается заряд чётный электронному). Т.е. этот заряд является фундоментальным, и пока опровергнуть даже в теориях не получается.
Естественно этот заряд сначала рассчитали, а потом и подтвердили экспериментально.
Ввиду лёгкодоступности "липиздричества" измерить его удалось о-о-очень точно.
Масса: 9,109*10^−31 килограмм
Электрический заряд: −1,602176634*10^−19 Кулон
Спин: 1/2 (нет, это не вращение, это просто очередное квантовое число - означает свойства частицы, но ничего не объясняет, как и вся квантовая физика)
Ну и так как эта хрень, электрон (ну и позитрон конечно) является наименьшей неделимой частицей с зарядом, то по этому используют единицу измерения энергии, которая равна действию для перетаскивания этого электрона в электростатическом поле (конденсатор) с разностью потенциалов в 1 Вольт. И ентот эВ.равен заряду электрона в Кулонах, умноженный на разность потенциалов для переноса. Т.е. eV = qU, где q = 1,602 176 634*10^-19 (элементарный заряд) на U = 1 Вольт. Вот так и получается, что электронвольт кратен кулону
Вроде невозможность достижения скорости света в вакууме для объектов, обладающих массой покоя никого уже не удивляет. Я тут решил поинтересоваться, а до каких скоростей человечеству уже удалось достичь? Именно в вакууме т.к. в среде неинтересно - про свечение Вавилова-Черенкова и почему это имеет место быть мне ещё в школе рассказали.
То самое от Вавилова-Черенкова. Спёрто с википедии.
Естественно взор падает на элементарные частицы. В первую очередь начал смотреть на электроны (чем легче частица - тем легче её разогнать) и... обломался. Электрончики в ускорителях разгоняют слабо, всего до 91% от скорости света.
Ладно, глянем на самый-самый БАК:
Именно в этой трубе с бешенной скоростью летят протоны
Фишкой БАКа является то, что он заточен на ускорении протонов. Протоны разгоняются в двух встречных пучках и сталкиваются в области детекторов частиц:
Детектор CMS в ЦЕРН – один из двух наиболее мощных детекторов из когда-либо созданных. В среднем каждые 25 наносекунд в его центре сталкиваются новые группы частиц.
БАК способен разогнать протоны до энергии в 7 ТэВ (при этом масса протона увеличивается почти в 7000 раз) и скорости 299 792 455 м/с, всего 3 м/с не дотягивая до скорости света. А это 99,9999991% от скорости света. Впечатляет. И это у каждого пучка.
Ладно, а на что способна природа? Есть детектор “Fly’s Eye” который смотрит в небо и фиксирует взаимодействие космических частиц с атмосферой Земли. 15 октября 1991 года американские ученые зафиксировали очень быстрые протоны. Даже назвали их OMG-particles ("О Боже Мой" - частицы). Скорость этих частиц 99,99999999999999999999951% от световой с энергией порядка (3.2±0.9)×10^20 Эв (320 ЭэВ (экза-электронвольт))
.
Да... Нам до таких энергий и скоростей ещё расти и расти.