Хотел написать про работу системы управления памятью, но понял, что для полноценной статьи у меня не хватает практических знаний. Поэтому кратко
Куча
Баян
Помимо стека, о котором было рассказано в прошлой статье и который содержит локальные переменные, в "потребительской" программе в среднестатистической ОС еще бывают глобальные переменные и динамическая память. Глобальные переменные описываются внутри сегментов .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 ЭэВ (экза-электронвольт))
.
Да... Нам до таких энергий и скоростей ещё расти и расти.
Пространство-время– это математическая модель, которая объединяет три измерения пространства (длина, ширина, высота) с одним измерением времени в единый четырехмерный континуум. Вместо того, чтобы рассматривать пространство и время как отдельные и независимые сущности, мы рассматриваем их как взаимосвязанные и взаимозависимые аспекты единого целого. Это связанное состояние является чем-то типа сцены, на которой творится вся физика и вся наша жизнь. Но откуда оно взялось и как сформировалось?
Ну и да, я буду рад, если вы посмотрите мой ролик на YouTube по этой теме. Там всё разложено по полочкам и много чего интересного. Каждый просмотр важен.
Вопрос о происхождении пространства и времени– один из самых фундаментальных и завораживающих в физике. Это не просто вопрос “когда” и “где”, это вопрос о самой ткани реальности, о тех нитях, из которых сплетен наш мир. Ответить на него полностью мы пока не можем, но существующие теории и модели дают нам некоторое представление о проблеме. И проблема эта точно не самая простая.
Вообще теорий существует просто невероятное количество. Вот только если говорить именно про научные, да ещё и на сугубо физические подходы, то я насчитал их всего три. Давайте их и разберём.
Для начала отмечу, что особняком стоит взаимоотношение пространства и времени с информацией. Будет ли информация являться частью пространства-времени или это разные сущности? Правильного ответа нет, как нет и полного описания понятия "информация". Но в одном случае уместно полагать, что информация описывает ещё и пространство-время и становится его основой, а в другом - что информация появляется внутри пространства-времени. Вдумайтесь в этот момент.
Некоторые физики полагают, что пространство-время формируетсяв пределах масштабов Планка, то есть на масштабах, близких к одной триллионной доли метра. Другие сводят всё к взаимодействию кварков. Сложность лишь в том, что ни те, не другие не могут точно сказать, что именно происходит.
Не было никакого “ДО”
Одна из самых "хитрых" теорий построена на том, что пространство и время существуют вечно. Сама идея “до” теряет смысл, ведь “до” предполагает наличие времени, а его, как такового, вероятно и нет. Можно представить это как вопрос о том, что находится севернее Северного полюса. Понятие просто не имеет никакого смысла в данной системе координат.
Если сюда добавить разные подходы, связанные с зацикливанием поведения Вселенной и её физического состояния, то сам вопрос о формировании пространства-времени теряет всякий смысл.
Квантовые флуктуации
Эта теория построена на том, что в физике не может существовать пустоты. До формирования Вселенной (всё равно по какой причине) не было пустоты. Был набор квантовых флуктуаций. Они каким-то образом (опять-таки не важно каким) получили энергию и стали раскручиваться. Этот процесс позволил говорить о формировании не просто материи, а пространства и времени вместе с ней. Очень грубая аналогия - это как театр приехал на гастроли и привёз с собой всё необходимое. Сцену, актёров, декорации.
Но тут сама квантовая теория тонет в изобилии гипотез. Среди них можно выделить самые известные:
Теория струн:Представляет собой радикальный подход, заменяющий точечные частицы одномерными струнами, вибрирующими в многомерном пространстве. Пространство и время, в этом случае, возникают как эмерджентные свойства этих струн.
Петлевая квантовая гравитация:Подход, который квантует само пространство-время, представляя его в виде дискретной сети “спиновых сетей” и “спиновых пен”. В этой модели, пространство и время не являются непрерывными, а состоят из фундаментальных, квантованных “атомов”, а они появились после Большого взрыва.
Теория причинно-следственных множеств:Предполагает, что пространство-время состоит из дискретных элементов, связанных причинно-следственными связями. Время, в этом случае, является фундаментальным аспектом реальности, определяющим порядок этих связей. Они тоже сформировались когда-то при Большом взрыве.
Пространство-время как эмерджентное явление
В некоторых моделях, пространство и время не являются фундаментальными, а возникают какэмерджентныесвойства более фундаментальных объектов или состояний. Это подобно тому, как температура возникает как усредненное значение кинетической энергии молекул, хотя сами отдельные молекулы не имеют “температуры”.
Этот взгляд часто обыгрывал Эйнштейн. Когда он рассуждал на тему искривления пространства-времени для формирования гравитации, часто звучала мысль, что ни в коем случае нельзя рассматривать пространство и время как что-то уже существующее и искажающееся как простынь. Он склонялся к мысли, что массивные тела формируют вокруг себя некоторое окружение пространством, которое на фоне других точек является искаженным.
Одной из интересных идей является то, что пространство-время может быть связано сквантовой запутанностью. Квантовая запутанность – это явление, когда две частицы оказываются неразрывно связаны, независимо от расстояния между ними. Некоторые теории предполагают, что пространство-время “сшивается” благодаря запутанности между фундаментальными элементами реальности.
Ну и свежая не-физическая теория
Есть теория, которая сейчас довольно активно обсуждается в сети. Я бы не стал относить её именно к физической теории. А потому в заголовке упомянуты только три теории, а не четыре. Но просто считаю нужным про неё упомянуть. Это теориякосмического генома. Она чем-то похожа на теорию симуляции и превалирование космического программного кода.
Представьте себе, что Вселенная – это не хаотичный взрыв, а тщательно запрограммированный организм, управляемыйкосмическим геномом. Это не просто набор чисел, а фундаментальная информационная матрица, существующая вне пространства и времени, содержащая “Кодоны Вселенной” (KVU).
KVU – это квантовые состояния, как инструкции, определяющие свойства и отношения. Пространство рождается какэмерджентноесвойство, когда KVU взаимодействуют, сплетаясь в сети. Близость в пространстве – это степень их информационной связанности. Время – это последовательность активации KVU, создающая причинно-следственные связи. Квантовая запутанность - это нелокальная связь KVU, имеющих общего “родителя” - родительский KVU, связь вне пространства и времени.
Эволюция Космического Генома, мутации, ведут к изменению физических законов, создавая разнообразие вселенных в мультивселенной. Теория предлагает рассматривать Вселенную как колоссальный информационный процесс, где информация первична, а пространство и время – лишь её голографические проекции. Проверяемость пока сложна, но идея открывает двери для нового понимания фундаментальной природы реальности.
Вместо заключения
Происхождение пространства и времени всё равно остается открытым вопросом. Развитие теории квантовой гравитации и дальнейшие исследования в области космологии и теоретической физики, возможно, приблизят нас к пониманию этого фундаментального аспекта нашего существования. Какая ситуация в физике сейчас? Всё просто, никто в полной мере не понимает, откуда взялось пространство-время.
Великая депрессия остается одним из самых масштабных экономических потрясений в истории, продемонстрировавшим уязвимость нерегулируемых рынков и необходимость глубоких структурных реформ. Начавшись с обвала фондового рынка США в октябре 1929 года, депрессия быстро переросла в глобальный кризис, охвативший почти все аспекты экономики: производство, торговлю, финансы и занятость. Последствия были разрушительными, с массовой безработицей, банкротствами предприятий и стремительным снижением уровня жизни. Однако Великая депрессия также стала моментом, когда правительства и экономисты начали искать новые подходы для смягчения кризиса и предотвращения подобных событий в будущем, что привело к ряду системных реформ и инноваций.
Одним из наиболее ярких примеров адаптации стала политика «Нового курса» Франклина Делано Рузвельта. Этот комплекс мер включал широкомасштабные государственные инвестиции в инфраструктурные проекты, создание социальных программ, таких как система социального страхования, и усиление государственного регулирования финансовой системы. Ключевым нововведением стало учреждение Федеральной корпорации страхования вкладов (FDIC), которая восстановила доверие к банковской системе, гарантируя сохранность вкладов. Эти меры не только стабилизировали экономику, но и заложили основу для современной модели государственного участия в экономике.
Международная реакция на Великую депрессию также выявила необходимость координации усилий между странами. Например, переход многих государств от золотого стандарта позволил центральным банкам более эффективно управлять денежной массой, что стало важным шагом в развитии современной монетарной политики. Тем не менее, некоторые страны избрали протекционистский путь, как это было с принятием закона Смута-Хоули о тарифе в США (очень похожего на современные тарифные войны Трампа), который привел к росту торговых барьеров и усугубил глобальный экономический спад.
Основные уроки Великой депрессии и их последствия
Одним из самых значимых уроков Великой депрессии стало понимание, что экономические кризисы могут быть не просто преодолены, но и использованы как возможность для укрепления институтов и обновления подходов к управлению. Именно в этот период заложились основы современного кейнсианства, где государство берет на себя роль стабилизатора, компенсируя циклические спады экономики через активную фискальную политику. Великая депрессия, несмотря на свои разрушительные последствия, стала важным этапом в эволюции экономической мысли и практики, показав, что кризис может быть не только угрозой, но и возможностью для прогресса.
Продолжение: Промышленная революция: взаимодействие инноваций и социальных преобразований
Этот пост входит в Часть 8. Влияние мутаций: инновации и кризисы
Роль технологических, социальных и финансовых кризисов в преобразовании экономических систем. Анализ примеров внезапных изменений, таких как Великая депрессия, промышленная революция и цифровая трансформация.
СерияПроисхождение экономических систем путём естественного отбора
Кто интересуется развитием общественно-экономических формаций, подписывайтесь!
Финансовые катастрофы выступают мощными катализаторами экономических изменений, радикально трансформируя существующие модели управления и подходы к регулированию. Такие события, как Великая депрессия 1929 года, глобальный финансовый кризис 2008 года и долговой кризис еврозоны, выявляют уязвимости в экономических системах и заставляют государства, корпорации и финансовые институты пересматривать свои стратегии. Эти катастрофы не только подталкивают к немедленным действиям по стабилизации, но и закладывают основы для долгосрочных изменений, формируя новые правила и механизмы, чтобы предотвратить повторение подобных кризисов.
Примеры финансовых катастроф и их последствия
Великая депрессия показала слабости нерегулируемого капитализма, что привело к созданию множества новых инструментов государственного вмешательства. В США «Новый курс» Рузвельта ознаменовал переход к активной роли государства в экономике через программы социальной защиты, инфраструктурные проекты и финансовые реформы, такие как создание Федеральной корпорации страхования вкладов [1]. Эти изменения стали основой для формирования современной системы социальной экономики.
Финансовая катастрофа 1970-х годов, вызванная нефтяными шоками [2] и последующей стагфляцией, стала мощным катализатором экономических изменений. Рост цен на нефть в 1973 и 1979 годах резко увеличил производственные издержки, привёл к инфляции и экономическому спаду одновременно - явлению, которое классическая кейнсианская модель не могла объяснить. Это подорвало доверие к государственному вмешательству в экономику и стимулировало переход к неолиберальным подходам: дерегуляции, приватизации, сдерживанию инфляции через монетарную политику и снижению роли государства. В результате произошёл сдвиг от послевоенной модели госкапитализма к рыночному фундаментализму 1980-х годов.
Стагфляция (словослияние стагнация + инфляция) - одновременный экономический спад и рост цен
Глобальный финансовый кризис 2008 года, в свою очередь, обнажил системные риски, связанные с избыточной дерегуляцией банковской сферы и сложностью современных финансовых инструментов. В ответ были введены такие меры, как более жесткие требования к капиталу банков, стресс-тестирование финансовых организаций и программы количественного смягчения, направленные на поддержку ликвидности.
Финансовые катастрофы также ускоряют развитие инновационных подходов и технологий. Например, кризис 2008 года стимулировал развитие финтех-отрасли и технологий блокчейна, что привело к появлению криптовалют (биткоина) и альтернативных форм финансирования. Эти изменения знаменуют собой не только реакцию на кризис, но и фундаментальные сдвиги в экономической архитектуре. Однако такие инновации, как видно на примере криптовалют, нередко становятся объектами последующего контроля со стороны крупных корпораций и государств.
Биткоин был создан в 2008 году анонимным разработчиком под псевдонимом Сатоши Накамото. Введение биткоина часто рассматривается как реакция на глобальный финансовый кризис 2008 года, который выявил значительные недостатки традиционной финансовой системы. В своём программном документе «Bitcoin: A Peer-to-Peer Electronic Cash System» [3] Накамото подчеркнул необходимость создания системы электронных платежей, не зависящей от доверия к финансовым посредникам, что отражает стремление избежать проблем, проявившихся в ходе кризиса.
Долговой кризис еврозоны, разразившийся в 2010 году, стал результатом чрезмерной задолженности ряда стран (особенно Греции, Италии, Испании и Португалии) на фоне глобального финансового кризиса 2008 года. Он выявил структурные проблемы внутри Евросоюза: отсутствие фискального союза при наличии общей валюты, а также зависимость слабых экономик от внешнего кредитования. Кризис стал катализатором значительных экономических изменений: ужесточения бюджетной политики (введение политики жёсткой экономии), создания антикризисных фондов ЕС, усиления надзора за госфинансами стран-членов, а также привёл к росту евроскептицизма и переоценке модели неолиберального управления. В долгосрочной перспективе он ускорил дискуссию о необходимости реформировать европейскую экономическую архитектуру, в том числе усилив интерес к альтернативным денежным системам и цифровым валютам.
Каждая финансовая катастрофа неизбежно порождает дебаты о балансе между свободным рынком и государственным вмешательством. С одной стороны, кризисы требуют немедленных действий, чтобы смягчить их последствия, с другой - открывают окно возможностей для фундаментальных реформ. Эти изменения, однако, не всегда гарантируют устойчивость. Как показывает история, решения одного кризиса часто становятся основой для возникновения нового.
Литература
[1]Мальков В.Л.Великий Рузвельт. «Лис в львиной шкуре» : [рус.]. — М. : Эксмо, 2018. — 560 с. — (Величайшие менеджеры в истории). — ISBN 978-5-04-090372-6.
Продолжение: Великая депрессия: уроки адаптации и структурных реформ
Этот пост входит в Часть 8. Влияние мутаций: инновации и кризисы
Роль технологических, социальных и финансовых кризисов в преобразовании экономических систем. Анализ примеров внезапных изменений, таких как Великая депрессия, промышленная революция и цифровая трансформация.
СерияПроисхождение экономических систем путём естественного отбора
Кто интересуется развитием общественно-экономических формаций, подписывайтесь!
Как обычно, проблема терминологии существует только в описательном языке науки, но без этой проблемы мы не можем существовать, не положено. В русской фольклористике принято выделять в устном народном творчестве два близких жанра: былички и бывальщины.
На первый взгляд эти жанры очень похожи. И на второй и третий, если честно, тоже похожи. Настолько, что достаточно долго они считались в науке синонимичными. Спасибо Эрне Васильевне Померанцевой, благодаря которой в современной науке закрепился принцип, по которому мы теперь различаем былички и бывальщины (хотя, строго говоря, это же фольклор, иногда можно встретить тексты, которые нельзя однозначно отнести к той или иной категории). То есть, чтобы привязать пост к ивенту, мы до сих пор испытываем давление её точки зрения. :) Почитайте вот.
Итак, под быличкой мы понимаем меморат. То есть, рассказ о встрече с потусторонней силой, который имеет установку на достоверность и сохранил черты “свидетельского показания”, т.е. что-то произошло или с самим рассказчиком или с кем-то, кого он считает достоверным, авторитетным источником. Бывальщины же являются фабулатами. Это повествование, которое утратило особенности текста-воспоминания действующего лица-очевидца, этот жанр приближается к т.н. городским легендам, но всё так же является рассказом о встрече с чем-то потусторонним.
И да, существуют тексты “переходного характера”, но мы здесь о сложностях не говорим, нам лень, и вообще научпоп не про это. :) А всё это к чему? А это к следующей статье, в которой я расскажу про славянских русалок и покажу пару быличек.
Пока я тут распиливаю предложенную @JasonWoorhies тему аж на две статьи, заодно сообщу, что 20 апреля (воскресенье) в Одинцове в библиотеке 1 будет проходить мероприятие "Калейдоскоп культур".
Почему я про него знаю? Потому что буду там рассказывать про боснийские сказки с точки зрения предложенной В. Я. Проппом теории. :) Обложка для привлечения внимания и наличия в посте картинки)
А помимо этого мои коллеги расскажут много всего интересного про культуры разных концов земного шара.
Кто в это время будет в Москве/рядом - заходите. :)
Сегодня просто поделюсь с вами интересным роликом :)
Почти уверен, что твёрдое состояние воды ассоциируется у вас только лишь со льдом. С самым обычным холодным льдом. Это агрегатное состояние, которое появляется в результате охлаждения физической системы до низкой температуры. С точки зрения термодинамики у частиц есть тепловая энергия. Она, как вы возможно помните из курса физики, является мерой движения частиц. Пока температура высокая и энергии много, частицы сильно подвижны. При этом характерным агрегатным состоянием будут являться или газ, или жидкость. Они характеризуются хаотическим положением частиц, которое и проявляется из-за большой подвижности элементов системы. Когда температура падает, частички начинают потихоньку останавливаться.
При температуре, близкой к формированию твёрдого агрегатного состояния, частички замирают и упорядочиваются.
Получается, что вода замерзает из-за уменьшения интенсивности колебаний частичек, которое связанно преимущественно с отводом тепла. А что, если не отнимать у частичек энергию, а ограничить их движение и чисто механически подвинуть ближе друг к другу?
Получится ли лёд или твёрдое состояние? Или вообще что?
В этом ролике мы обсудим специфическое упорядочивание системы при её механическом сжатии. Да, по сути жидкое можно так уплотнить, что оно станет твёрдым.
Интересная и полезная заметка из книги "Секреты выращивания кактусов." Гапон В.Н., Батов С.Г.
Клетки апикальной меристематической ткани выделяют гормоны (группы ауксинов), подавляющие рост и развитие боковых ареол. Этот эффект называется апикальным доминированием. Его степень различна и фенотипически проявляется в интенсивности образования боковых побегов. Удалив первичную меристему стебля, можно стимулировать образование боковых побегов даже у недеткующихся видов — на этом основана культура маточников.
Я нашел вам хороший пример в виде Мелокактуса. В нормальных условиях он не отращивает деток. Но если его генеративный орган, в котором закладываются цветки для размножения, поврежден, то кактус начинает активно наращивать деток. Что и наблюдается на фото мелокактуса с острова Сент-Джон. Забавно, что уже небольшие детки отрастили внушительные цефалии ростом с себя.
Наверняка вы слышали эту байку. Лист бумаги можно сложить только 7 раз. Почему именно столько и откуда такое число? Да и правда ли это? Попробуйте провернуть это мероприятие с обычным офисным листочком и опишите результат в комментариях!
Но мне уже знаком ответ. Поэтому, продолжу повествование для тех, кто уже увидел результат теста.
Обычная офисная бумага имеет толщину около 0,1 мм и быстро увеличивается в размерах и "толстеет" при сгибании. Давайте прикинем процесс математически.
Складываембумагу 7 раз: без сгиба - 0,1 мм, первый сгиб - 0,2 мм, второй сгиб - 0,4 мм, третий сгиб - 0,8 мм, четвертый сгиб - 1,6 мм, пятый сгиб - 3,2 мм, шестой сгиб - 6,4 мм, седьмой сгиб - 12,8 мм. Согласитесь, что 12,8 - это не так-то и много.Последняя складка соответствует 128 листам бумаги. Достаточно сложно сложить лист даже уже в 5 раз.
Но проблема на самом деле даже ни в этом. Проблема в том, чторадиус сгиба в конечном итоге будет слишком большим, чтобы лист можно было сложить еще больше, не разорвав бумагу.
Представьте себе систему, которая состоит из слоёв. Например, тут очень хорошо подойдёт панель из вспененного материала, облицованного ПВХ. Такие панели активно используются для облицовки и утепления. Нам подойдёт любой аналогичный вариант, поэтому если этот материал вам не знаком, то представьте, что нечто относительно мягкое зажимается между жёсткими слоями.
Когда такую конструкцию пытаешься согнуть, то происходит интересный процесс. Слой ведут себя неравномерно и это более, чем очевидно. Тот слой, который оказывается снаружи угла будет не просто изгибаться и складываться. Онбудет стремиться к растяжению.
Пока внутренней слой тонкий, то система будет изгибаться. Но когда внутри толщина слоя всё увеличивается, в какой-то момент наступит предел, где для получения складки нужно будет интенсивно растягивать внешний слой. Если материал податливый, то это не будет проблемой. Он просто деформируется. Примерно так повёл бы себя лист алюминия. Но бумага - это другой материал. Она практически не растяжима.
Соответственно, пока у бумаги хватает пластичности, она образует складку. Когда складка уже формироваться не может - она рвётся.
С механической точки зрениясложить бумагу уже не получится. Это действительно невозможно физически. Потому что бумагу нужно не складывать, а рвать. И рвать нужно по сути кусок фанеры, толщиной 12,8 мм. Сможете порвать такой кусок руками? Скорее всего нет.
Полезно отметить, что размер листа играет роль. Это оказываетвлияние на минимальный радиус изгиба. Чем больше лист, тем меньше можно растягивать внешний слой. Поэтому 7 раз -это предел для листа офисного размера.
Лист бумаги большего размера можно сложить более 7 раз. Разрушители мифов однажды сложили лист бумаги размером с футбольное поле 11 раз.
Ну а как антипод тут поведёт себя какой-нибудь полимерный материал. Лист спасательного одеяла (одеяло из термомайлара) можно сложить минимум 12 раз руками. Толщина этих одеял всего 15 микрон. Пластичность этого материала высока и предел излома, который будет требовать порвать внешний слой, будет достигнут гораздо позже.
Такой простой процесс, а внутри спрятана столь интересная физика.
Проект "Геном человека" — международный научный проект по расшифровке и картированию всех генов человека. Начатый в 1990 году, он был завершен в 2003 году, определив последовательность примерно трех миллиардов пар оснований ДНК.
Результаты проекта революционизировали медицину, открыв путь к персонализированному лечению, генной терапии и лучшему пониманию наследственных заболеваний. Это один из самых амбициозных и успешных научных проектов в истории биологии.