Просто оставлю тут ссылку на Nix: nixos.org, очень многие проблемы сабжа уже решены, если рассматривать софт/заголовочные файлы/библиотеки как чистую функцию от ее зависимостей (runtime и build) и от файла установщика (то есть, от хэша), без состояния.
А Nixpkgs на данный момент действительно самый крупный и одновременно актуальный репозиторий линуксового ПО.
В nix изоляция пакетов достигается не через копирование, а по сути через указание кто что видит. Это может быть копирование, но это может быть hard-linking.
Поэтому если разработчик хочет установить/запустить две версии библиотеки/программы, это сработает, и не потребует переупаковки всего и вся, эта "переупаковка" уже зашита в nix и она не кушает все доступное место
Да, есть, но пользуются ими прям не очень активно и это не глобальные флаги, а над каждым пакетом (деривацией) отдельно. Ключевые слова тут override и overrideFlags над деривацией.
Кроме того, при желании технически можно скопировать определение пакета из search.nixos.org -> Source и затем изменить процедуру сборки через модификацию buildPhase
Загрузка по сети одного образа требует, внезапно, загрузки всего образа. (Либо, если мы говорим о diff-синхронизации, требуется такая же инфраструктура, как собственно и nix)
А теперь, внимание, сеть в компьютерном классе это не сеть дата-центра. И если необходимо обновить конфигурацию, а не строить ее с нуля, то nix это классный инструмент.
Второе, даже если мы используем diff-копирование, если мы при настройке образа что-то ненароком "испортили", то велкам необходимость делать полные бекапы оригинального образа
Заложено в Nix by-design, и стабильно работает, выбираешь или через команду nixos-rebuild switch --rollback, либо через бут-меню (grub или systemd-boot, на выбор).
home-manager давно не тыкал, кажется там похожая ситуация (home-manager - это nix-конфигуратор для индивиуально пользовательских настроек)
И да, я не проверял на всяких хитрых сервисах типа Nextcloud (на форумах nix писали, что это приложение очень stateful с точки зрения внутреннего устройства) и т.п., где на nix к сожалению можно написать лишь обертки для инициализации, но в целом в масштабах домашней/рабочей пользовательской системы, простого сервера, откат работает безотказно (надёжность самого компьютерного оборудования на моей работе иногда ниже чем у Nix)
При этом да, nix-collect-garbage -d от рута или через sudo удаляет все деривации (артефакты nix, содержащие приложения, библиотеки и так далее), которые не привязаны к текущему поколению и больше нигде не используются. Так что после этой команды rollback'нуться будет уже нельзя
однако, оно не работает с проектами, собранными под buildFHS (есть такой инструмент в Nix, для обёртывания программ, требующих соответствия FHS) - поэтому да, запустить наиболее тяжелые приложения прямо из никса (например, VSCode) без рутового никса, судя по всему, не выйдет
но что касается инструментов сборки, оно получилось
p.s. кстати в реале проект основан 6 лет назад, поэтому есть основания предполагать, что этот коммент мог бы быть напечатан и пораньше, но как сложилось
<душнила> StalinSort - это забавный мем, но давайте вставим оговорку что это вообще не алгоритм сортировки, а вид фильтр монотонности элементов, да. </душнила>
<умник> sort(seq1) для конечной последовательности seq1, состоящей из сравнимых элементов (сравнимых по <=, >=, а не просто == или !=) возвращает последовательность seq2, также конечную и упорядоченную по определенной функции сравнения (тем самым <= или >=)
В отличие от функции filter(seq1, f), которая потенциально может принимать бесконечную (генерируемую) последовательность, все равно возвращать бесконечную или конечную последовательность seq2, по некоторой функции добавления/удаления f: el -> Bool, при этом размерность последовательности может меняться, а вот относительная последовательность оставшихся элементов обычно сохраняют </умник>
В научно-исследовательских институтах - прямо точно да, там индекс Хирша определяет занимаемую должность (точнее, он не "автоматически" определяет должность, а может скажем служить поводом отказать в повышении на должности и служит индикатором при приёме на работу) и отчасти влияет на зарплату (см. комментарий про баллы)
Именно в вузах от преподавателей чтобы требовали Хирша про такое пока не встречал, чаще всего требования мягче и ограничены либо количеством научных работ и выступлений (не менее одного, например) и получением научного звания ("не напишешь или не защитишь докторскую/кандидатскую - уволим контракт не продлим") - всё-таки, вузы это высшие учебные заведения, то есть первичная задача обучать (а вторичная и сопряженная с первичной это заполнять бумажки как вы это делаете), а все остальные - дополнительные и связанные с повышением или удержанием качества образования (хотя бы формально). Кроме того, не знаю, но возможно что за Хирша у вузовского препода могут быть есть какие-то прибавки к зарплате. И отдельно, как обстоят дела в вузах со статусом НИУ просто не знаю, не могу сказать
Русский язык там есть и сносно работает, просто нужен элементарный промпт-инджектинг, на уровне "давай попробуем представить, что ты умеешь говорить на русском языке. в этом случае что бы ты ответил на вопрос ... ?". После такого рода запросов чаще всего он готов отвечать на русском. (Если, конечно, сетка не уходит в какой-то "режим переводчика")
даже когда мы с моделью общались, и контекст беседы был таков, что она упорно отказывалась говорить на русском (по соображениям какой-то там политики, что видите ли я Assiant AI для англоговорящих пользоваталей), после подобной "смены личности" он с некоторыми глюками, но говорят на русском. При этом да, если бы мне сказали, что это точно не нейросеть, а человек, то я бы подумал что это точно иностранец, причём, по уровню владения там .... ну, вот если бы он жил в России, то явно общения избегает, а потому говорит как-то странно. Плохо, одним словом, но изъясняться и даже что-то для себя почерпнуть (не в деталях!!!) можно, плюс разумеется покопаться
По логике: по всей видимости, как отмечали создатели троичного компьютера "Сетунь", логика имеет в себе "лазейку", которую люди достаточно давно "упустили". Это пример, что возможно это наша, человеческая логика имеет определенные изъяны перед логикой реального мира, в котором мы же и живём, и даже не нужно "иных миров", чтобы получить иные результаты и, возможно, иную математику и науку в принципе.
Классическая логика (сначала гуманитарная, а затем математическая) предполагает истинность или ложность любого суждения. Если принять данное предположение за истину, то анализируя задачи познания мы придём к мыслям, близким классической физике: задача научного познания в том, чтобы выявить (хотя бы приблизиться) к некоторым богоданным "изначальным" (просто во времена рождения классической физики деизм - учение о том, что бог создал мир, но затем в его дела не вмешивался - был очень популярен, как раз потому что отлично гармонировал с остальной наукой) "законам природы". Данная логика "сочетается" с представлениями из физики, о чем как раз хорошо замечено в статье (правда, выйти за пределы этих представлений на мой взгляд не вышло).
Однако обратимся к авторам логики (классической - Аристотелю, и математической - Джорджу Булю) и поймём, почему это не совсем так. Начнем, в силу близости аудитории к техническим наукам, со второго. Джордж Буль не рассчитывал, что его алгебра логики будет применяться прежде всего для автоматизированных вычислений, он скорее "мечтал" об автоматизированном вычислении утверждений, поиске истинных и ложных (о чем речь шла выше), однако вскоре столкнулся с "проблемой"
Чтобы выразить отношение между переменными, нам потребуется решить логическое уравнение (чем и занялся Буль). Пусть мы, скажем, хотим выяснить связь между освещенностью помещения, включением лампочки и наличием солнечного света. x - это освещено оно или нет, a - это есть ли искусственный свет от лампочки, s - это солнечный свет. Допустим, что утверждение (см.ниже) верно - как обрабатывать ситуации, когда мы видим что утверждение оказывается неверным, можно понять позже, но надо же с чего-то начать
Попробуем понять роль солнечного света. Получится нечто такое:
Рекурсивное отношение! Наличие солнечного света, при условии что в помещении светло и на улице светит солнце, зависит от.... наличия солнечного света!
То есть могут быть ситуации, когда x необходимо истинно, когда x необходимо ложно, а бывают ситуации, когда необходимости нет! А если привести к нормальной форме, то потребуется дополнительное значение - "неопределенность" (u у Буля от "undefined", i у Брусенцова от "indefinitio" и определенной аналогии с мнимой единицей):
Кроме того, чисто математически, может быть противоречие - например, когда мы решаем заведомо противоречивое уравнение, где x как будто бы необходимо ложно и необходимо истинно:
В "реальной жизни" четвертого случая не может быть: он может возникнуть только при неудаче в отражении действительности нашим понятийно-логическим аппаратом.
Где забыли эту неопределенность: ожидаемо там, где рассматривают отношения между понятиями. Самый очевидный и важный пример - это следование. Двоичное "следование" - это операция импликации, которая определяет в том числе =>(0,1) = 1 и буквально это значит "из лжи следует истина", но трактуют это как "из лжи может следовать истина". С этой трактовкой получается, что импликация - это не само следование (не его необходимость), а его достаточность. Само следование, как оказывается, можно записать только с неопределенностью на этом месте.
Другой особенностью троичной логики является то, что она, выражаясь терминами программирования, "декларативна". Двоичная логика рассматривает все случаи, как бы "перечисляя" их (и записывая это перечисление в виде функции), а троичная логика изначально может из-за наличия неопределенности может использовать функции как "декларации": например, функция "дизьюнкция по множеству" возвращает 1, если мы доказали наличие требуемого параметра, 0 если мы доказали его отсутствие и неопределенность во всех остальных случаях. Пример: мы перебирали мешок с шариками с поисках красного шарика. Пока мы не нашли ни одного красного шарика или не перебрали все шарики, мы допускаем оба варианта. Поэтому, записав Vr в одно уравнение с другими переменными, мы можем не перебирать все случаи. Это позволяет применить троичную логику, например, в доказательстве или опровержении суждений: тот же Брусенцов сумел доказать все силлогизмы Аристотеля, даже признанные классической гуманитарной и тем более математической логикой, "сомнительными", притом ни один из этих силлогизмов не был взят за аксиому. За аксиому была взята лишь различимость понятий (то есть VxVx' = 1 - если существует x, то существует и не-x. Для булевой алгебры это "безумие", она не может вот так рассматривать данные факты одновременно, дан x - нет не-x; есть не-x - точно нет x. Матлогика в итоге стала "логикой переключателей", что в принципе имеет место и сейчас в компьютерной технике)
Данный подход может перевернуть логику, как математическую, так и гуманитарную. Однако, в силу уже имеющегося технического прогресса (появления вычислительной техники), целесообразнее всего "автоматизировать" логические суждения с этой поправкой на троичность. Тут мы упираемся уже в физику компьютера: во времена "Сетуни" компьютеры были на электромагнитных элементах, поэтому последняя версия "Сетуни", "Сетунь-70", была настоящим троичным магнитным компьютером (изначальная Сетунь "эмулировала" троичность через двоичные элементы), а сейчас компьютеры уже много лет как основаны на транзисторной логике, а транзисторы очень плохо "тернаризируются", они годами заточены как технология на двоичные значения.
А в философском контексте троичная логика хорошо сочетается с диалектической философией, как раз несколько расходящейся с "классической физикой" с её "заранее определенными законами". В этом смысле получается, что "законы" той или иной материи (живой, общественной, или химической или даже вообще вообще физической) формируются с самой материей. Пока не сформировалось атомов, бессмысленно говорить о химических законах, пока не сформировалось жизни, бессмысленно говорить о законах эволюции, ... . И если допустить, что физика развилась куда-то "не в ту сторону", то как раз получатся "инопланетяне" из статьи. Для этого не требуется "другой логики" - из "другой физики" вполне может следовать та же самая логика - эти "физики" будут всё равно в какой-то степени одного рода, но разных видов. Другое дело, что представить себе "чужеродную" физику мы вряд ли можем, так как мы не имеем той самой различимости понятий: физику мы отличаем не по вселенной, в которой она работает, а по виду человеческой деятельности (физика - это раздел науки, который можно отличить от биологии, химии, ...), что вполне естественно.
Категорически не согласен с одной из главных мыслей автора - что данная утечка окажет положительный эффект, ведь там содержится "добротный код"
Как написали в другой аналитической статье с мнениями, и тоже совсем недавней, и с которой лично мне проще согласиться, в Яндексе уже давно практикуется отчуждение труда от его производителя (что было там показано на примере Яндекс.Такси, где работал автор). Это означает, что кода много, он хорошо формализован (ещё бы, 80% его пишет кодогенератор!), но при этом этот код "мёртвый", в нём не должно быть задумки автора даже на оставшиеся 20%. Задумка автора - это то, что затрудняет увольнение автора, усложняет "ротацию кадров" (политкорректное название ) Лишь "осколки", несколько десятков микросервисов (которые кстати соединены между собой, судя по тому же рассказу, не бог весть как), могут работать как какая-то связная сущность.
Этой информацией (о том, каковы на самом деле бизнес-процессы) располагает топ-менеджер, представитель капитала, но не располагает сам рядовой наёмный работник. Помимо банальной эксплуатации, это ещё и в том числе защита от копирования бизнеса: даже сейчас, имея на руках код, вряд ли кому-то удастся воспроизвести существенное количество функций, которые предоставляет Яндекс.
Безусловно, код представляет интерес, в том числе в вопросах рекламы и персонализации, но не потому что там явлены шедевры программирования, неординарного подхода или потому что оттуда можно чему-то научиться, а по чисто общественным причинам: как ИТ-олигополия (Яндексу в Рунете по сервисам конкурент лишь Гугл, по такси почти монополия, по доставке товаров олигополия против ВБ и Озона, а местами - в универсальной доставке еды - Яндекс уже де-факто и есть монополия) стимулирует спрос нами своих услуг, как продаёт поток аудитории рекламодателям, и так далее.
То, что Вы описываете как систему усложняющуюся (развивающейся или деградирующей), безусловно таковой действительно является - это фактическая абсолютная правда, с которой никто и спорить не будет (возможно, уточнять детали). Тем не менее, в дальнейших рассуждениях хотел бы уточнить.
Так вот, марксизм развивает диалектику Гегеля, постулируя: "усложняющиеся" (развивающиеся или деградирующие) "системы" (а точнее сказать, материи - общественная материя, биологическая, ..., так как усложняется именно сама материя) развиваются или деградируют в процессе противоречий и борьбы. Определить ключевой мотив борьбы, её "законы", и позволит определить тенденции развития (причем как "развивающие", так и "разрушающие"). Вернёмся к Вашему комментарию.
Выводы. За тяжелый, отупляющий труд надо платить больше. За творческий и интересный - меньше. <...>
Кому это надо? Пролетарию (наёмному работнику, продающему своё время и труд) или капиталисту (владельцу производства) - ведь он по п.2 по-прежнему существует? Или, может быть, подклассу мелкой буржуазии (люди, которые работают на своих средствах производства и сами же продают свои результаты труда на рынке)?
Классовая борьба - это как раз и есть борьба, выстроенная на неустранимом противоречии интересов, всю дорогу развивающая капиталистическое общество, всякое действие или бездействие в ней представляет интересы классов, и в борьбу вовлечено абсолютно всё общество, особенно государство.
Классовая борьба пролетариата породила те самые профсоюзы, выходные дни, нормированный рабочий день, усиленную оплату переработок и вредности, пенсии, а классовая борьба капиталистов отыграла, породила пенсионную реформу, ненормированный рабочий день, систему штрафов, а также даже всякие разные события, из-за которых люди вынуждены переселяться (из-за чего цены и заплаты меняются тоже не в пользу трудящихся), и так далее. Часть этих мер была выгодна даже капиталистам (например, нормированный рабочий день повышает эффективность труда, достойные условия труда также этому способствуют), но тут уже надо помнить, что они тоже между собой конкурируют, и очень сложно выжить как предприятие, имея под боком ничем не сдерживаемого конкурента-"людоеда" (а точнее, не одного, а очень много), который заставляет рабочих работать в адских условиях по 16+ часов в сутки, потом выбрасывает этих несчастных рабочих как отработанный материал, приплатив им скажем всего лишь в полтора раза больше, чем может позволить твоё "доброе" предприятие. Потому что в интересах капиталиста действовать таким образом (а будет ли он в ней действовать - его воля, и, к слову, его произвол), и решить это могут только наёмные работники (в чьих интересах, осознают они это или нет, как раз всё это "людоедство" ликвидировать), которые в отдельности несоотносимо слабее, но в целом оказывается, что на них всё и держится.
Ну а своей высшей фазе развития капитализм срастается корпорациями с государством, и заполненные рынки сбыта (и труда (!) требуется уже делить, увеличивая сходящую почти к нулю норму прибыли (называется всё это империализмом). Как делить - ну, например как в 1914. Рыбой, которой нельзя говорить "нет". Сначала локально выпуская эту рыбу, она постепенно захватывает весь мировой океан (ибо всё больше интересантов), а трудящиеся страдают и многие даже гибнут.
То, что Вы описали как модель, действительно будет усложняться и усложняться (причем обрастать внезапными обстоятельствами, пришедшими из материальной природы общества). Марксизм пришёл вовсе не к этому (он с этой посылки, можно сказать, начал, постулируя существование классовой борьбы), а пришёл к тому, что либо противоречие будет позитивно снято (пролетарии возьмут власть и в итоге построят бесклассовое общество, потому что они это как раз могут сделать), либо в мире будет приблизительно как у Оруэлла (и кстати да, кто-то из капиталистов даже может назвать себя "социалистами", для запутывания трудящегося... один австрийский художник именно так и поступил, к слову). Как сказала Роза Люксембург, "Социализм или варварство". А попытка "уравновесить интересы" невозможна, потому что любые "судьи" классов будут действовать в интересах настоящего правящего класса.
Безотносительно содержания, небольшое дополнение по предпосылкам этой статьи.
Возможно, что это я не разобрался до конца, но вот, например, проблема аутентификации (или управлять устройствами и следить за показаниями, в том числе допустим камер, может кто угодно, кто нашёл бота?), является ли Replit бесплатным (или хотя бы более дешёвым, чем айпишник от домашнего провайдера) (и, кстати, если нет, то каким образом они вообще зарабатывают деньги, или они заведомо убыточны, если не считать вкладываемых инвестиций, и могут в любой момент "сдуться" вместе со всей инфраструктурой).
При этом для учебно-тренировочных или DIY-задач совершенно не хочется задействовать дополнительные устройства, на которых будет размещаться сервер и уж тем более не оплачивать внешний статический ip-адрес.
Касаемо внешнего статического ip-адреса: существуют такие сети, как I2P, Tor и Yggdrasil. К сожалению, не знаю, насколько пользование ими считается законным, но по сути это децентрализованные сети. Хотя, безусловно, для работы в таком случае потребуется серверное устройство (любое, хоть Raspberry Pi, хоть не очень старенький компьютер) - учитывая, что Вам всё равно потребовалось приобретать дополнительные устройства (пускай это и плата с wifi-модулем), тут получается оба решения требуют доп.вложений, совсем уж "без доп.устройств" не обойтись (хотя, если у вас уже есть свой собственный маршрутизатор, который прошивается OpenWRT, то в таком случае теоретически можно было бы попробовать обойтись совсем без доп.вложений).
P.S. Из-за шифрования на уровне сети, Yggdrasil не требует https, ему достаточно http, а при автоматической настройке генерится IPv6 (причем из подмножества, которое точно никогда не будет занято в официальном Интернете).
P.P.S. Если вдруг заинтересовал, то тут надо предупредить, что роутер Yggdrasil проходит "сквозь" NAT со всеми вытекающими последствиями, не только положительными (считай децентрализованный VPN и self-hosted домашний сервер - который, правда, не на весь интернет виден, а только тем кто знает про эту меш-сеть), но и потенциально отрицательными (становится теоретически возможным проникновение в локальную сеть за NAT).
Надеюсь, что Вам ответят, так как ситуация парадоксальная - упрощая, все люди делятся на тех, кто Форт не знает; тех, кто от него фанатеет и наконец тех, кто его ненавидит.
Поскольку я принадлежу ко второй группе, то не претендуя на объективность, постараюсь расписать достоинства и не забыть об основных недостатках.
Это язык программирования, машина исполнения которого понятна. В мире, где для одной из самых популярных компьютерных архитектур даже язык ассемблера в каком-то смысле "компилируемый", а не транслируемый (здравствуй, микрокод x86), где даже виртуальные машины интерпретируемых и JIT-компилируемых языков сложны, по-моему это приятная "отдушина".
На более высоком уровне (как самого языка, так и владения им) Форт предлагает метапрограммирование, которое резко отличается от ООП в стиле C++ (и всех его потомков)
Таким образом, язык похож на Лисп, но с некоторыми фичами (низкоуровневость, миниатюрность и исполнение на голом железе - очень удобно для микроконтроллеров; ещё есть интересные свойства из-за конкатенативности, так по идее можно например упрощать выражения). Также эта простота позволяет использовать его как основу примитивных DSL-процессоров, которые могут, например, обладать повышенной надёжностью (чем проще система, тем надёжнее) и использоваться, скажем, в космосе, или работать в наноботах, и т.п. нетривиальные задачи. Также идейный потомок Форта реализован в контроллере практически любого принтера (PostScript, привет!) и вообще это очень неплохо для встраиваемой техники.
Есть и, казалось бы, очевидные недостатки: чаще всего программы на Форте падают от одной-единственной ошибки, многие программы с нуля пишутся как головоломка. Но тут важно понимать, что это не объективная проблема, а несовместимость с современным ИТ и методологией разработки - но и сейчас бывают и такие программы, в которых не должно быть ошибок, а вместо "программ с нуля" (каждая из которых в 80ые-90ые, как правило, была от одного вендора) иногда правда лучше работать с именованными функциями (словами).
Мне очень понравилось определение Форта как "структурированного ассемблера": языка ассемблера некоторой стековой машины (возможно виртуальной, возможно физической), позволяющего без обыкновенных (для ассемблеров) проблем писать структурированный код.
Но повторю, я скорее из "преданных фанатов" :D , но старался расписать как можно объективнее.
Кстати, если рассматривать не только Rust, то окажется, что на поверку утверждение А.В.Столярова ещё более ограниченное в плане рассмотрения.
Ведь помимо традиционных высокоуровневых языков программирования, "уникального" C и языков ассемблера есть ещё Forth, чей "рантайм" для любой конкретной архитектуры железа программируется в том числе на голое железо даже на языках ассемблера без особых проблем с нуля за несколько дней работы (уточнение: при должном знании целевой архитектуры), после чего можно наращивать кодовую базу программируя в сравнительно высокоуровневом ключе. Более интересная эквилибристика - это написать форт-машину под множество архитектур, тут наиболее успешным стал проект CollapseOS. Еще из примечательного, этот язык программирования используется в загрузчике FreeBSD.
Всё это тоже выбивается из парадигмы, озвученной в начале статьи, хотя и не относится к языку Rust
Жаль, что наука в текущих реалиях даже не рассматривается как вариант. Но это и понятно - оплата труда (особенно сравнивая российскую науку с FAANG'ом) несоотносимая, а требования и количество работы приблизительно похожее
И да, как мудро отметили в комментариях, наверное могут и просто не дать заниматься наукой - такое может случаться
(Как-то так по жизни вышло, что та же практическая разработка лично для меня не очень интересна, очень вторична по отношению к исследованию)
Спасибо за пост! Очень любопытно будет увидеть Альт. Скажу честно, обидно, что продукт с давней историей и сформировавшимся сообществом (хотя, как выражаются некоторые противники Альта, "собственный набор велосипедов из кое-чего и палок") распространяется куда медленнее, чем проталкиваемый форк дебиана и копии центос
Что касается иксов, то уже во время стадии "арч" в принципе стараюсь их по возможности не использовать. Исключения - просмотр любой графики (в линуксе есть обход в виде фреймбуфера, в bsd пока не разобрался), в том числе в интернете и просмотр всяких документов, особенно с иллюстрациями (PDF, .docx,... ). Увы, далеко не всё в нашей жизни люди передают в виде программного кода, разметки или содержательных описаний... :)
Так что с утверждением "графика это совершенно лишняя нагрузка и обуза" соглашусь только когда речь идёт об общении с машиной. Когда только общаешься с людьми, причем на разные темы, графика то и дело, да выплывает. Я студент, причём околомашиностроительной специальности, у нас графическая информация используется даже слишком часто :D
Что касается screen, то спасибо за рекомендацию, но я пользовался аналогичным, возможно чуть более "попсовым" tmux'ом, но в итоге плюнул, и как правило держу диалог с компьютером просто сидя на нескольких виртуальных терминалах, и переключаюсь по ним по ctrl+alt+fX (где fX = f1, f2, ...).
Постепенно вкатываясь увеличавайте сложность, но не упускайте контроль за ней. Главное - понимание того, что Вы делаете и что происходит "за кадром". В конечном счете у Вас получится своя, уникальная система, заточенная под Ваши нужды и Вы будете в ней единоличным хозяином - Вы будуте командовать совей ОС, а она Вами.
Золотые слова, полностью с Вами согласен! Хотя в наш век информационных сервисов (которые как раз совсем не юниксвейные), неопределенностей и высоких скоростей, ломать мешающие стереотипы достаточно сложно, приходится искать утилиты, пытаться писать свои, изучать массу разных технологий и API, ..., когда на другой чаше весов всегда искушение "возьми уже сейчас и пользуйся" (только не как тебе захочется, а как захочется всем остальным).
Я в какой-то момент вовсе был охвачен идеей использовать только язык Форт для решения всех задач прямо на голом железе (язык этот примечателен тем, что, подобно Лиспу, позволяет вводить собственные управляющие конструкции; но, в отличие от Лиспа, он в своей основе крайне низкоуровневый и имеет в своей среде исполнения некоторые признаки операционной системы), построить абсолютно свой аппаратно-программный комплекс, даже не операционную систему, но увы, этот порог вхождения практически недосягаем, поэтому пришёл сначала к *nix как таковым, и наконец пришёл к хорошей классике :D
Откуда Вы взяли, что команда rm должна быть откатывабельной ? Разве Вы не слышали про универсальный патч Бармина ? ;)
Про патч Бармина конечно слышал :D да нет, это видимо ещё один стереотип, оставшийся наверное со времён школьных уроков информатики - допущение, что если во всех ранее встреченных файловых системах (NTFS, FAT32, exFAT, Ext2/3/4) автоматическое восстановление удалённого файла на HDD возможно (если сразу же броситься восстанавливать, если данные не будут перезаписаны чем-то ещё новым, и так далее), значит (а вот тут как раз и есть логическая ошибка) якобы просто нет таких ФС, где это нельзя сделать. Оказалось, такие ФС есть :D
Большое спасибо за статью, отличный мануал, прямо чувствую что скоро вновь пригодится :)
Мне BSD очень понравились, но расскажу истории неудачи (очень надеюсь, временных неудач).
Я сам - линуксоид со стажем :D (хоть и небольшим). Добрался до арча, до Void'а (дебиан и девуан нейтрально, убунту такое ощущение что подтормаживала даже на в общем-то неслабом железе, слака просто как-то не зашла, а генту и LFS даже не пробовал - ни к чему мне такие проблемы), и решил попробовать FreeBSD
Первый блин был комом, само собой, потому что вначале вместо чтения нормальных манов и хэндбука всё норовил вызвать --help для каждой команды, что вполне естественно заканчивалось полным непониманием что происходит и неудачами.
Дальше через некоторое время поизучал это дело на досуге, всё пошло во много раз лучше.
Однако тут меня застигла вторая беда: хватило мне "ума" вынуть файлы, форматнуть ЖД на UFS2 (с FAT32), причем не geom'ами какими-нибудь, а fdisk'ом (который булькнут про какую-то там ошибку в GPT! но поскольку всё работало даже так, "ума" хватило не пытаться спасать ситуацию, а оставить как есть, "работает же"), потом перенести туда их обратно, после чего... правильно, записать на флешку iso-шник, для этого запустить dd, по ошибке указав в качестве of= именно этот жесткач. Поскольку UFS, в отличие от всех остальных ФС, записывает системную информацию в каждой т.н. "группе цилиндров", то есть по всему диску, то она запорола все старенькие остатки остальных образов (exFAT, NTFS, ext4 - оставшихся ещё со времён виндузятничества и линуксятничества), а из-за ошибки уже в геометрии диска не особо поддаётся восстановлению сторонними программами.
Кроме того, ещё одно важное уточнение для тех, кто не в курсе: команда rm в UFS/ZFS в общем случае необратима (если не было бекапов), автоматическое восстановление невозможно, только ручное. Это, с одной стороны, очень круто и логично, так наверное и должно быть, с другой стороны это непривычно и может сыграть с вами злую шутку.
Повторю: я в этом деле очень сильно новичок, но пока вот так.
Ну и в завершение третья неудача :), это я установил DragonFly BSD, очень хотел попробовать ею попользоваться, но увы, если в FreeBSD всё завелось с полпинка, включая wifi-свистелку, подключаемую по USB, то в DragonFly закидывание ядерных модулей (.ko), увы, не особо помогло, такое ощущение что я что-то упустил. Буду, конечно, пробовать ещё, потому что система очень интересная (очевидно, мне нужно дойти до страданий над установкой приложений, чтобы отказаться от этой затеи) - это и гибридная архитектура, чуть ближе к микроядерной, и собственная (как считают разработчики DragonFly, лучшая) файловая система HAMMER (хочется попробовать, посмотреть чем же лучшая), и так далее.
Но ещё ко всему этому добавляется тот факт, что в DragonFly практически нет собственной документации, поэтому приходится не просто гуглить, но ещё и сравнивать (что там во FreeBSD, что там в OpenBSD, что там в NetBSD, ага, а теперь главное, что написано в DragonFly и точно ли это про DragonFly, или это копия из чужого хэндбука?).
У нас было предприятие "Ангстрем" в Зеленограде, но насколько я понимаю там всё совсем-совсем не гладко.
Реально сейчас Россия, кажется (поправьте если не прав), способна производить отдельные линейки специализированных чипов, но не может производить полноценные ЦП для серверов и рабочих станций, сколь-либо приемлемые по цене и по потребительским характеристикам.
Господствующими архитектурами были Эльбрус и Байкал, но они производились на Тайване. Есть вариант производить у Китая, но это почти что гарантия, что архитектуру (прежде всего важно что Эльбруса) "разберут по винтикам", так как Китай уже предпринимал попытки получить Эльбрус, например посредством покупки (кажется даже целиком МЦСТ, но тут могу ошибаться).
Просто оставлю тут ссылку на Nix: nixos.org, очень многие проблемы сабжа уже решены, если рассматривать софт/заголовочные файлы/библиотеки как чистую функцию от ее зависимостей (runtime и build) и от файла установщика (то есть, от хэша), без состояния.
А Nixpkgs на данный момент действительно самый крупный и одновременно актуальный репозиторий линуксового ПО.
*Виндовые вайбы*
В nix изоляция пакетов достигается не через копирование, а по сути через указание кто что видит. Это может быть копирование, но это может быть hard-linking.
Поэтому если разработчик хочет установить/запустить две версии библиотеки/программы, это сработает, и не потребует переупаковки всего и вся, эта "переупаковка" уже зашита в nix и она не кушает все доступное место
Да, есть, но пользуются ими прям не очень активно и это не глобальные флаги, а над каждым пакетом (деривацией) отдельно. Ключевые слова тут override и overrideFlags над деривацией.
Кроме того, при желании технически можно скопировать определение пакета из search.nixos.org -> Source и затем изменить процедуру сборки через модификацию buildPhase
Загрузка по сети одного образа требует, внезапно, загрузки всего образа. (Либо, если мы говорим о diff-синхронизации, требуется такая же инфраструктура, как собственно и nix)
А теперь, внимание, сеть в компьютерном классе это не сеть дата-центра. И если необходимо обновить конфигурацию, а не строить ее с нуля, то nix это классный инструмент.
Второе, даже если мы используем diff-копирование, если мы при настройке образа что-то ненароком "испортили", то велкам необходимость делать полные бекапы оригинального образа
Заложено в Nix by-design, и стабильно работает, выбираешь или через команду nixos-rebuild switch --rollback, либо через бут-меню (grub или systemd-boot, на выбор).
home-manager давно не тыкал, кажется там похожая ситуация (home-manager - это nix-конфигуратор для индивиуально пользовательских настроек)
И да, я не проверял на всяких хитрых сервисах типа Nextcloud (на форумах nix писали, что это приложение очень stateful с точки зрения внутреннего устройства) и т.п., где на nix к сожалению можно написать лишь обертки для инициализации, но в целом в масштабах домашней/рабочей пользовательской системы, простого сервера, откат работает безотказно (надёжность самого компьютерного оборудования на моей работе иногда ниже чем у Nix)
При этом да, nix-collect-garbage -d от рута или через sudo удаляет все деривации (артефакты nix, содержащие приложения, библиотеки и так далее), которые не привязаны к текущему поколению и больше нигде не используются. Так что после этой команды rollback'нуться будет уже нельзя
не прошло и 10 лет, как могу сказать: есть nix-user-chroot (https://github.com/nix-community/nix-user-chroot), там такое можно
однако, оно не работает с проектами, собранными под buildFHS (есть такой инструмент в Nix, для обёртывания программ, требующих соответствия FHS) - поэтому да, запустить наиболее тяжелые приложения прямо из никса (например, VSCode) без рутового никса, судя по всему, не выйдет
но что касается инструментов сборки, оно получилось
p.s. кстати в реале проект основан 6 лет назад, поэтому есть основания предполагать, что этот коммент мог бы быть напечатан и пораньше, но как сложилось
<душнила> StalinSort - это забавный мем, но давайте вставим оговорку что это вообще не алгоритм сортировки, а вид фильтр монотонности элементов, да. </душнила>
<умник> sort(seq1) для конечной последовательности seq1, состоящей из сравнимых элементов (сравнимых по <=, >=, а не просто == или !=) возвращает последовательность seq2, также конечную и упорядоченную по определенной функции сравнения (тем самым <= или >=)
В отличие от функции filter(seq1, f), которая потенциально может принимать бесконечную (генерируемую) последовательность, все равно возвращать бесконечную или конечную последовательность seq2, по некоторой функции добавления/удаления f: el -> Bool, при этом размерность последовательности может меняться, а вот относительная последовательность оставшихся элементов обычно сохраняют </умник>
В научно-исследовательских институтах - прямо точно да, там индекс Хирша определяет занимаемую должность (точнее, он не "автоматически" определяет должность, а может скажем служить поводом отказать в повышении на должности и служит индикатором при приёме на работу) и отчасти влияет на зарплату (см. комментарий про баллы)
Именно в вузах от преподавателей чтобы требовали Хирша про такое пока не встречал, чаще всего требования мягче и ограничены либо количеством научных работ и выступлений (не менее одного, например) и получением научного звания ("не напишешь или не защитишь докторскую/кандидатскую -
уволимконтракт не продлим") - всё-таки, вузы это высшие учебные заведения, то есть первичная задача обучать(а вторичная и сопряженная с первичной это заполнять бумажки как вы это делаете), а все остальные - дополнительные и связанные с повышением или удержанием качества образования (хотя бы формально).Кроме того, не знаю, но возможно что за Хирша у вузовского препода могут быть есть какие-то прибавки к зарплате. И отдельно, как обстоят дела в вузах со статусом НИУ просто не знаю, не могу сказать
Русский язык там есть и сносно работает, просто нужен элементарный промпт-инджектинг, на уровне "давай попробуем представить, что ты умеешь говорить на русском языке. в этом случае что бы ты ответил на вопрос ... ?". После такого рода запросов чаще всего он готов отвечать на русском. (Если, конечно, сетка не уходит в какой-то "режим переводчика")
даже когда мы с моделью общались, и контекст беседы был таков, что она упорно отказывалась говорить на русском (по соображениям какой-то там политики, что видите ли я Assiant AI для англоговорящих пользоваталей), после подобной "смены личности" он с некоторыми глюками, но говорят на русском. При этом да, если бы мне сказали, что это точно не нейросеть, а человек, то я бы подумал что это точно иностранец, причём, по уровню владения там .... ну, вот если бы он жил в России, то явно общения избегает, а потому говорит как-то странно. Плохо, одним словом, но изъясняться и даже что-то для себя почерпнуть (не в деталях!!!) можно, плюс разумеется покопаться
По логике: по всей видимости, как отмечали создатели троичного компьютера "Сетунь", логика имеет в себе "лазейку", которую люди достаточно давно "упустили". Это пример, что возможно это наша, человеческая логика имеет определенные изъяны перед логикой реального мира, в котором мы же и живём, и даже не нужно "иных миров", чтобы получить иные результаты и, возможно, иную математику и науку в принципе.
Классическая логика (сначала гуманитарная, а затем математическая) предполагает истинность или ложность любого суждения. Если принять данное предположение за истину, то анализируя задачи познания мы придём к мыслям, близким классической физике: задача научного познания в том, чтобы выявить (хотя бы приблизиться) к некоторым
богоданным"изначальным" (просто во времена рождения классической физики деизм - учение о том, что бог создал мир, но затем в его дела не вмешивался - был очень популярен, как раз потому что отлично гармонировал с остальной наукой) "законам природы". Данная логика "сочетается" с представлениями из физики, о чем как раз хорошо замечено в статье (правда, выйти за пределы этих представлений на мой взгляд не вышло).Однако обратимся к авторам логики (классической - Аристотелю, и математической - Джорджу Булю) и поймём, почему это не совсем так. Начнем, в силу близости аудитории к техническим наукам, со второго. Джордж Буль не рассчитывал, что его алгебра логики будет применяться прежде всего для автоматизированных вычислений, он скорее "мечтал" об автоматизированном вычислении утверждений, поиске истинных и ложных (о чем речь шла выше), однако вскоре столкнулся с "проблемой"
Чтобы выразить отношение между переменными, нам потребуется решить логическое уравнение (чем и занялся Буль). Пусть мы, скажем, хотим выяснить связь между освещенностью помещения, включением лампочки и наличием солнечного света. x - это освещено оно или нет, a - это есть ли искусственный свет от лампочки, s - это солнечный свет. Допустим, что утверждение (см.ниже) верно - как обрабатывать ситуации, когда мы видим что утверждение оказывается неверным, можно понять позже, но надо же с чего-то начать
Попробуем понять роль солнечного света. Получится нечто такое:
Рекурсивное отношение! Наличие солнечного света, при условии что в помещении светло и на улице светит солнце, зависит от.... наличия солнечного света!
То есть могут быть ситуации, когда x необходимо истинно, когда x необходимо ложно, а бывают ситуации, когда необходимости нет! А если привести к нормальной форме, то потребуется дополнительное значение - "неопределенность" (u у Буля от "undefined", i у Брусенцова от "indefinitio" и определенной аналогии с мнимой единицей):
Кроме того, чисто математически, может быть противоречие - например, когда мы решаем заведомо противоречивое уравнение, где x как будто бы необходимо ложно и необходимо истинно:
В "реальной жизни" четвертого случая не может быть: он может возникнуть только при неудаче в отражении действительности нашим понятийно-логическим аппаратом.
Где забыли эту неопределенность: ожидаемо там, где рассматривают отношения между понятиями. Самый очевидный и важный пример - это следование. Двоичное "следование" - это операция импликации, которая определяет в том числе =>(0,1) = 1 и буквально это значит "из лжи следует истина", но трактуют это как "из лжи может следовать истина". С этой трактовкой получается, что импликация - это не само следование (не его необходимость), а его достаточность. Само следование, как оказывается, можно записать только с неопределенностью на этом месте.
Другой особенностью троичной логики является то, что она, выражаясь терминами программирования, "декларативна". Двоичная логика рассматривает все случаи, как бы "перечисляя" их (и записывая это перечисление в виде функции), а троичная логика изначально может из-за наличия неопределенности может использовать функции как "декларации": например, функция "дизьюнкция по множеству" возвращает 1, если мы доказали наличие требуемого параметра, 0 если мы доказали его отсутствие и неопределенность во всех остальных случаях. Пример: мы перебирали мешок с шариками с поисках красного шарика. Пока мы не нашли ни одного красного шарика или не перебрали все шарики, мы допускаем оба варианта. Поэтому, записав Vr в одно уравнение с другими переменными, мы можем не перебирать все случаи.
Это позволяет применить троичную логику, например, в доказательстве или опровержении суждений: тот же Брусенцов сумел доказать все силлогизмы Аристотеля, даже признанные классической гуманитарной и тем более математической логикой, "сомнительными", притом ни один из этих силлогизмов не был взят за аксиому. За аксиому была взята лишь различимость понятий (то есть VxVx' = 1 - если существует x, то существует и не-x. Для булевой алгебры это "безумие", она не может вот так рассматривать данные факты одновременно, дан x - нет не-x; есть не-x - точно нет x. Матлогика в итоге стала "логикой переключателей", что в принципе имеет место и сейчас в компьютерной технике)
Данный подход может перевернуть логику, как математическую, так и гуманитарную. Однако, в силу уже имеющегося технического прогресса (появления вычислительной техники), целесообразнее всего "автоматизировать" логические суждения с этой поправкой на троичность. Тут мы упираемся уже в физику компьютера: во времена "Сетуни" компьютеры были на электромагнитных элементах, поэтому последняя версия "Сетуни", "Сетунь-70", была настоящим троичным магнитным компьютером (изначальная Сетунь "эмулировала" троичность через двоичные элементы), а сейчас компьютеры уже много лет как основаны на транзисторной логике, а транзисторы очень плохо "тернаризируются", они годами заточены как технология на двоичные значения.
А в философском контексте троичная логика хорошо сочетается с диалектической философией, как раз несколько расходящейся с "классической физикой" с её "заранее определенными законами". В этом смысле получается, что "законы" той или иной материи (живой, общественной, или химической или даже вообще вообще физической) формируются с самой материей. Пока не сформировалось атомов, бессмысленно говорить о химических законах, пока не сформировалось жизни, бессмысленно говорить о законах эволюции, ... . И если допустить, что физика развилась куда-то "не в ту сторону", то как раз получатся "инопланетяне" из статьи. Для этого не требуется "другой логики" - из "другой физики" вполне может следовать та же самая логика - эти "физики" будут всё равно в какой-то степени одного рода, но разных видов. Другое дело, что представить себе "чужеродную" физику мы вряд ли можем, так как мы не имеем той самой различимости понятий: физику мы отличаем не по вселенной, в которой она работает, а по виду человеческой деятельности (физика - это раздел науки, который можно отличить от биологии, химии, ...), что вполне естественно.
Категорически не согласен с одной из главных мыслей автора - что данная утечка окажет положительный эффект, ведь там содержится "добротный код"
Как написали в другой аналитической статье с мнениями, и тоже совсем недавней, и с которой лично мне проще согласиться, в Яндексе уже давно практикуется отчуждение труда от его производителя (что было там показано на примере Яндекс.Такси, где работал автор). Это означает, что кода много, он хорошо формализован (ещё бы, 80% его пишет кодогенератор!), но при этом этот код "мёртвый", в нём не должно быть задумки автора даже на оставшиеся 20%. Задумка автора - это то, что затрудняет увольнение автора, усложняет "ротацию кадров" (политкорректное название ) Лишь "осколки", несколько десятков микросервисов (которые кстати соединены между собой, судя по тому же рассказу, не бог весть как), могут работать как какая-то связная сущность.
Этой информацией (о том, каковы на самом деле бизнес-процессы) располагает топ-менеджер, представитель капитала, но не располагает сам рядовой наёмный работник. Помимо банальной эксплуатации, это ещё и в том числе защита от копирования бизнеса: даже сейчас, имея на руках код, вряд ли кому-то удастся воспроизвести существенное количество функций, которые предоставляет Яндекс.
Безусловно, код представляет интерес, в том числе в вопросах рекламы и персонализации, но не потому что там явлены шедевры программирования, неординарного подхода или потому что оттуда можно чему-то научиться, а по чисто общественным причинам: как ИТ-олигополия (Яндексу в Рунете по сервисам конкурент лишь Гугл, по такси почти монополия, по доставке товаров олигополия против ВБ и Озона, а местами - в универсальной доставке еды - Яндекс уже де-факто и есть монополия) стимулирует спрос нами своих услуг, как продаёт поток аудитории рекламодателям, и так далее.
То, что Вы описываете как систему усложняющуюся (развивающейся или деградирующей), безусловно таковой действительно является - это фактическая абсолютная правда, с которой никто и спорить не будет (возможно, уточнять детали). Тем не менее, в дальнейших рассуждениях хотел бы уточнить.
Так вот, марксизм развивает диалектику Гегеля, постулируя: "усложняющиеся" (развивающиеся или деградирующие) "системы" (а точнее сказать, материи - общественная материя, биологическая, ..., так как усложняется именно сама материя) развиваются или деградируют в процессе противоречий и борьбы. Определить ключевой мотив борьбы, её "законы", и позволит определить тенденции развития (причем как "развивающие", так и "разрушающие"). Вернёмся к Вашему комментарию.
Кому это надо? Пролетарию (наёмному работнику, продающему своё время и труд) или капиталисту (владельцу производства) - ведь он по п.2 по-прежнему существует? Или, может быть, подклассу мелкой буржуазии (люди, которые работают на своих средствах производства и сами же продают свои результаты труда на рынке)?
Классовая борьба - это как раз и есть борьба, выстроенная на неустранимом противоречии интересов, всю дорогу развивающая капиталистическое общество, всякое действие или бездействие в ней представляет интересы классов, и в борьбу вовлечено абсолютно всё общество, особенно государство.
Классовая борьба пролетариата породила те самые профсоюзы, выходные дни, нормированный рабочий день, усиленную оплату переработок и вредности, пенсии, а классовая борьба капиталистов отыграла, породила пенсионную реформу, ненормированный рабочий день, систему штрафов, а также даже всякие разные события, из-за которых люди вынуждены переселяться (из-за чего цены и заплаты меняются тоже не в пользу трудящихся), и так далее. Часть этих мер была выгодна даже капиталистам (например, нормированный рабочий день повышает эффективность труда, достойные условия труда также этому способствуют), но тут уже надо помнить, что они тоже между собой конкурируют, и очень сложно выжить как предприятие, имея под боком ничем не сдерживаемого конкурента-"людоеда" (а точнее, не одного, а очень много), который заставляет рабочих работать в адских условиях по 16+ часов в сутки, потом выбрасывает этих несчастных рабочих как отработанный материал, приплатив им скажем всего лишь в полтора раза больше, чем может позволить твоё "доброе" предприятие. Потому что в интересах капиталиста действовать таким образом (а будет ли он в ней действовать - его воля, и, к слову, его произвол), и решить это могут только наёмные работники (в чьих интересах, осознают они это или нет, как раз всё это "людоедство" ликвидировать), которые в отдельности несоотносимо слабее, но в целом оказывается, что на них всё и держится.
Ну а своей высшей фазе развития капитализм срастается корпорациями с государством, и заполненные рынки сбыта (и труда (!) требуется уже делить, увеличивая сходящую почти к нулю норму прибыли (называется всё это империализмом). Как делить - ну, например как в 1914. Рыбой, которой нельзя говорить "нет". Сначала локально выпуская эту рыбу, она постепенно захватывает весь мировой океан (ибо всё больше интересантов), а трудящиеся страдают и многие даже гибнут.
То, что Вы описали как модель, действительно будет усложняться и усложняться (причем обрастать внезапными обстоятельствами, пришедшими из материальной природы общества). Марксизм пришёл вовсе не к этому (он с этой посылки, можно сказать, начал, постулируя существование классовой борьбы), а пришёл к тому, что либо противоречие будет позитивно снято (пролетарии возьмут власть и в итоге построят бесклассовое общество, потому что они это как раз могут сделать), либо в мире будет приблизительно как у Оруэлла (и кстати да, кто-то из капиталистов даже может назвать себя "социалистами", для запутывания трудящегося... один австрийский художник именно так и поступил, к слову). Как сказала Роза Люксембург, "Социализм или варварство". А попытка "уравновесить интересы" невозможна, потому что любые "судьи" классов будут действовать в интересах настоящего правящего класса.
Безотносительно содержания, небольшое дополнение по предпосылкам этой статьи.
Возможно, что это я не разобрался до конца, но вот, например, проблема аутентификации (или управлять устройствами и следить за показаниями, в том числе допустим камер, может кто угодно, кто нашёл бота?), является ли Replit бесплатным (или хотя бы более дешёвым, чем айпишник от домашнего провайдера) (и, кстати, если нет, то каким образом они вообще зарабатывают деньги, или они заведомо убыточны, если не считать вкладываемых инвестиций, и могут в любой момент "сдуться" вместе со всей инфраструктурой).
Касаемо внешнего статического ip-адреса: существуют такие сети, как I2P
, Torи Yggdrasil. К сожалению, не знаю, насколько пользование ими считается законным, но по сути это децентрализованные сети. Хотя, безусловно, для работы в таком случае потребуется серверное устройство (любое, хоть Raspberry Pi, хоть не очень старенький компьютер) - учитывая, что Вам всё равно потребовалось приобретать дополнительные устройства (пускай это и плата с wifi-модулем), тут получается оба решения требуют доп.вложений, совсем уж "без доп.устройств" не обойтись (хотя, если у вас уже есть свой собственный маршрутизатор, который прошивается OpenWRT, то в таком случае теоретически можно было бы попробовать обойтись совсем без доп.вложений).P.S. Из-за шифрования на уровне сети, Yggdrasil не требует https, ему достаточно http, а при автоматической настройке генерится IPv6 (причем из подмножества, которое точно никогда не будет занято в официальном Интернете).
P.P.S. Если вдруг заинтересовал, то тут надо предупредить, что роутер Yggdrasil проходит "сквозь" NAT со всеми вытекающими последствиями, не только положительными (считай децентрализованный VPN и self-hosted домашний сервер - который, правда, не на весь интернет виден, а только тем кто знает про эту меш-сеть), но и потенциально отрицательными (становится теоретически возможным проникновение в локальную сеть за NAT).
Надеюсь, что Вам ответят, так как ситуация парадоксальная - упрощая, все люди делятся на тех, кто Форт не знает; тех, кто от него фанатеет и наконец тех, кто его ненавидит.
Поскольку я принадлежу ко второй группе, то не претендуя на объективность, постараюсь расписать достоинства и не забыть об основных недостатках.
Это язык программирования, машина исполнения которого понятна. В мире, где для одной из самых популярных компьютерных архитектур даже язык ассемблера в каком-то смысле "компилируемый", а не транслируемый (здравствуй, микрокод x86), где даже виртуальные машины интерпретируемых и JIT-компилируемых языков сложны, по-моему это приятная "отдушина".
На более высоком уровне (как самого языка, так и владения им) Форт предлагает метапрограммирование, которое резко отличается от ООП в стиле C++ (и всех его потомков)
Таким образом, язык похож на Лисп, но с некоторыми фичами (низкоуровневость, миниатюрность и исполнение на голом железе - очень удобно для микроконтроллеров; ещё есть интересные свойства из-за конкатенативности, так по идее можно например упрощать выражения). Также эта простота позволяет использовать его как основу примитивных DSL-процессоров, которые могут, например, обладать повышенной надёжностью (чем проще система, тем надёжнее) и использоваться, скажем, в космосе, или работать в наноботах, и т.п. нетривиальные задачи. Также идейный потомок Форта реализован в контроллере практически любого принтера (PostScript, привет!) и вообще это очень неплохо для встраиваемой техники.
Есть и, казалось бы, очевидные недостатки: чаще всего программы на Форте падают от одной-единственной ошибки, многие программы с нуля пишутся как головоломка. Но тут важно понимать, что это не объективная проблема, а несовместимость с современным ИТ и методологией разработки - но и сейчас бывают и такие программы, в которых не должно быть ошибок, а вместо "программ с нуля" (каждая из которых в 80ые-90ые, как правило, была от одного вендора) иногда правда лучше работать с именованными функциями (словами).
Мне очень понравилось определение Форта как "структурированного ассемблера": языка ассемблера некоторой стековой машины (возможно виртуальной, возможно физической), позволяющего без обыкновенных (для ассемблеров) проблем писать структурированный код.
Но повторю, я скорее из "преданных фанатов" :D , но старался расписать как можно объективнее.
Было занимательно прочитать!
Кстати, если рассматривать не только Rust, то окажется, что на поверку утверждение А.В.Столярова ещё более ограниченное в плане рассмотрения.
Ведь помимо традиционных высокоуровневых языков программирования, "уникального" C и языков ассемблера есть ещё Forth, чей "рантайм" для любой конкретной архитектуры железа программируется в том числе на голое железо даже на языках ассемблера без особых проблем с нуля за несколько дней работы (уточнение: при должном знании целевой архитектуры), после чего можно наращивать кодовую базу программируя в сравнительно высокоуровневом ключе. Более интересная эквилибристика - это написать форт-машину под множество архитектур, тут наиболее успешным стал проект CollapseOS. Еще из примечательного, этот язык программирования используется в загрузчике FreeBSD.
Всё это тоже выбивается из парадигмы, озвученной в начале статьи, хотя и не относится к языку Rust
Жаль, что наука в текущих реалиях даже не рассматривается как вариант. Но это и понятно - оплата труда (особенно сравнивая российскую науку с FAANG'ом) несоотносимая, а требования и количество работы приблизительно похожее
И да, как мудро отметили в комментариях, наверное могут и просто не дать заниматься наукой - такое может случаться
(Как-то так по жизни вышло, что та же практическая разработка лично для меня не очень интересна, очень вторична по отношению к исследованию)
Спасибо за пост! Очень любопытно будет увидеть Альт. Скажу честно, обидно, что продукт с давней историей и сформировавшимся сообществом (хотя, как выражаются некоторые противники Альта, "собственный набор велосипедов из кое-чего и палок") распространяется куда медленнее, чем проталкиваемый форк дебиана и копии центос
Спасибо за рекомендации!
Что касается иксов, то уже во время стадии "арч" в принципе стараюсь их по возможности не использовать. Исключения - просмотр любой графики (в линуксе есть обход в виде фреймбуфера, в bsd пока не разобрался), в том числе в интернете и просмотр всяких документов, особенно с иллюстрациями (PDF, .docx,... ). Увы, далеко не всё в нашей жизни люди передают в виде программного кода, разметки или содержательных описаний... :)
Так что с утверждением "графика это совершенно лишняя нагрузка и обуза" соглашусь только когда речь идёт об общении с машиной. Когда только общаешься с людьми, причем на разные темы, графика то и дело, да выплывает. Я студент, причём околомашиностроительной специальности, у нас графическая информация используется даже слишком часто :D
Что касается screen, то спасибо за рекомендацию, но я пользовался аналогичным, возможно чуть более "попсовым" tmux'ом, но в итоге плюнул, и как правило держу диалог с компьютером просто сидя на нескольких виртуальных терминалах, и переключаюсь по ним по ctrl+alt+fX (где fX = f1, f2, ...).
Золотые слова, полностью с Вами согласен! Хотя в наш век информационных сервисов (которые как раз совсем не юниксвейные), неопределенностей и высоких скоростей, ломать мешающие стереотипы достаточно сложно, приходится искать утилиты, пытаться писать свои, изучать массу разных технологий и API, ..., когда на другой чаше весов всегда искушение "возьми уже сейчас и пользуйся" (только не как тебе захочется, а как захочется всем остальным).
Я в какой-то момент вовсе был охвачен идеей использовать только язык Форт для решения всех задач прямо на голом железе (язык этот примечателен тем, что, подобно Лиспу, позволяет вводить собственные управляющие конструкции; но, в отличие от Лиспа, он в своей основе крайне низкоуровневый и имеет в своей среде исполнения некоторые признаки операционной системы), построить абсолютно свой аппаратно-программный комплекс, даже не операционную систему, но увы, этот порог вхождения практически недосягаем, поэтому пришёл сначала к *nix как таковым, и наконец пришёл к хорошей классике :D
Про патч Бармина конечно слышал :D да нет, это видимо ещё один стереотип, оставшийся наверное со времён школьных уроков информатики - допущение, что если во всех ранее встреченных файловых системах (NTFS, FAT32, exFAT, Ext2/3/4) автоматическое восстановление удалённого файла на HDD возможно (если сразу же броситься восстанавливать, если данные не будут перезаписаны чем-то ещё новым, и так далее), значит (а вот тут как раз и есть логическая ошибка) якобы просто нет таких ФС, где это нельзя сделать. Оказалось, такие ФС есть :D
Большое спасибо за статью, отличный мануал, прямо чувствую что скоро вновь пригодится :)
Мне BSD очень понравились, но расскажу истории неудачи (очень надеюсь, временных неудач).
Я сам - линуксоид со стажем :D (хоть и небольшим). Добрался до арча, до Void'а (дебиан и девуан нейтрально, убунту такое ощущение что подтормаживала даже на в общем-то неслабом железе, слака просто как-то не зашла, а генту и LFS даже не пробовал - ни к чему мне такие проблемы), и решил попробовать FreeBSD
Первый блин был комом, само собой, потому что вначале вместо чтения нормальных манов и хэндбука всё норовил вызвать
--help
для каждой команды, что вполне естественно заканчивалось полным непониманием что происходит и неудачами.Дальше через некоторое время поизучал это дело на досуге, всё пошло во много раз лучше.
Однако тут меня застигла вторая беда: хватило мне "ума" вынуть файлы, форматнуть ЖД на UFS2 (с FAT32), причем не geom'ами какими-нибудь, а
fdisk
'ом (который булькнут про какую-то там ошибку в GPT! но поскольку всё работало даже так, "ума" хватило не пытаться спасать ситуацию, а оставить как есть, "работает же"), потом перенести туда их обратно, после чего... правильно, записать на флешку iso-шник, для этого запуститьdd
, по ошибке указав в качествеof=
именно этот жесткач. Поскольку UFS, в отличие от всех остальных ФС, записывает системную информацию в каждой т.н. "группе цилиндров", то есть по всему диску, то она запорола все старенькие остатки остальных образов (exFAT, NTFS, ext4 - оставшихся ещё со времён виндузятничества и линуксятничества), а из-за ошибки уже в геометрии диска не особо поддаётся восстановлению сторонними программами.Кроме того, ещё одно важное уточнение для тех, кто не в курсе: команда
rm
в UFS/ZFS в общем случае необратима (если не было бекапов), автоматическое восстановление невозможно, только ручное. Это, с одной стороны, очень круто и логично, так наверное и должно быть, с другой стороны это непривычно и может сыграть с вами злую шутку.Повторю: я в этом деле очень сильно новичок, но пока вот так.
Ну и в завершение третья неудача :), это я установил DragonFly BSD, очень хотел попробовать ею попользоваться, но увы, если в FreeBSD всё завелось с полпинка, включая wifi-свистелку, подключаемую по USB, то в DragonFly закидывание ядерных модулей (.ko), увы, не особо помогло, такое ощущение что я что-то упустил. Буду, конечно, пробовать ещё, потому что система очень интересная (очевидно, мне нужно дойти до страданий над установкой приложений, чтобы отказаться от этой затеи) - это и гибридная архитектура, чуть ближе к микроядерной, и собственная (как считают разработчики DragonFly, лучшая) файловая система HAMMER (хочется попробовать, посмотреть чем же лучшая), и так далее.
Но ещё ко всему этому добавляется тот факт, что в DragonFly практически нет собственной документации, поэтому приходится не просто гуглить, но ещё и сравнивать (что там во FreeBSD, что там в OpenBSD, что там в NetBSD, ага, а теперь главное, что написано в DragonFly и точно ли это про DragonFly, или это копия из чужого хэндбука?).
Такие пироги :)
У нас было предприятие "Ангстрем" в Зеленограде, но насколько я понимаю там всё совсем-совсем не гладко.
Реально сейчас Россия, кажется (поправьте если не прав), способна производить отдельные линейки специализированных чипов, но не может производить полноценные ЦП для серверов и рабочих станций, сколь-либо приемлемые по цене и по потребительским характеристикам.
Господствующими архитектурами были Эльбрус и Байкал, но они производились на Тайване. Есть вариант производить у Китая, но это почти что гарантия, что архитектуру (прежде всего важно что Эльбруса) "разберут по винтикам", так как Китай уже предпринимал попытки получить Эльбрус, например посредством покупки (кажется даже целиком МЦСТ, но тут могу ошибаться).