image


Никита Прокопов (nikitonsky), автор «Моё разочарование в софте» рассуждает о маленькой, но очень важной детали, как не туда свернула ИТ-отрасль. Предлагаю обсудить.

«Иногда я жалею, что развитие компьютеров пошло не тем путем, которым могло бы. Одна из таких деталей — различение папок и файлов.

Почему папка не работает как просто еще один тип файла? Казалось бы, программисты должны уметь в абстракции и переиспользование, но вот конкретно здесь почему-то не получилось.

В командной строке чтобы скопировать папку нужно писать дополнительные ключи. Чтобы создать или удалить папку нужны отдельные команды. Приложить папку к письму нельзя. Загрузить папку на сайт нельзя. Удалить или скопировать папку с 100к файлами занимает миллион лет, хотя один файл такого же суммарного размера может скопироваться за полсекунды. Да что там, даже размер папки посмотреть уже нетривиальная какая-то операция.

Все это, конечно, неудобно, поэтому возникла целая индустрия архиваторов: способ взять папку и сделать из нее файл. Множество программ изобретали с нуля способы упаковать в один файл несколько файлов. Условный docx, jar и почти все игры. В исполняемые файлы тоже умеют засовывать другие файлы, нужные во время исполнения. Все это ТОЛЬКО ради того, чтобы на выходе не дай бог не получилась папка.

А ведь насколько круче было бы, если бы вместо доморощенного архива, тупо склеивающего файлы в непрозрачный формат, я мог бы просто зайти внутрь файла файловым менеджером и посмотреть, что там лежит!

Делать с этим, наверное, уже что-то поздно. Но может быть рано или поздно компьютеры переизобретут, и этот человек совершенно случайно прочитает этот пост и сделает все правильно. Пишу это для тебя!»

(публикуется с разрешения автора)
Канал Никиты: Стой под стрелой

Еще заплюсованные посты Никиты на Хабре


Комментарии (27)


  1. AAbrosov
    26.04.2022 22:17
    +6

    Упаси боже от таких переизобретений. Даже то, что уже не очень, всегда можно испортить еще сильнее. Для примера можно посмотреть на датасеты в z/OS, вам не понравится.


    1. drblez
      26.04.2022 22:41

      А что не так с датасетами? Когда я работал с з/ос я не парился))) Пересел на мсдос, не хватало функциональности датасетов, потом привык и не парюсь ))))

      В общем, как мне кажется, написанное в статье имеет место. Может не так сурово, но добавить тип файла, который был бы папкой, фактически, поддерживаемый на уровне ос, было бы полезно. А там, глядишь, народ бы втянулся )))


    1. ermouth
      26.04.2022 22:43

      Датасеты это реликт с дофайловых времён, они для концепции файлов – предки, не другая ветвь эволюции.


      1. AlB80
        27.04.2022 00:23
        +1

        Ага, сейчас, конечно.

        Датасет это набор записей, то есть структура заведомо более сложная, чем последовательность байт (файл). Ваше непонимание z/OS датасетов происходит от того, что в этой системе перепрыгнули через файловую абстракцию (последовательность байт), лепят датасеты сразу поверх дисковых треков/цилиндров. Сейчас работа напрямую с треками/цилиндрами звучит дико, но тут так заведено. Античное IT.


        1. ermouth
          27.04.2022 00:45

          Безо всяких «конечно» концепция record/dataset появилась гораздо раньше концепции «файл».

          И да, просто последовательность байт – это запись, а никак не файл.

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


          1. AlB80
            27.04.2022 01:20

            Концепция датасет/запись перешагнула концепцию файловая система/файл. Неудобно или непривычно, но так получилось. Люди решали практические задачи.

            А что же такое файл, как не последовательность байт? Именованная последовательность байт?


            1. ermouth
              27.04.2022 01:46

              Концепция датасет/запись перешагнула концепцию файловая система/файл. Неудобно или непривычно

              Да нормально для некоторых задач, совсем не только в экзотике кстати водится.

              Насчёт «перешагнула», ну это как посмотреть. Понятно, что во всамделишном хайлоаде, да особенно если там механика на шпинделях, вся эта концепция, реализованная вместо ФС, уделывает любую ФС по производительности и по гарантиям всухую.

              Тем не менее, в реальном мире задачи обычно поразнообразнее, чем заполнять блины однотипными записями, и потому все эти датасеты реализуют всё же поверх ФС, а не вместо неё.

              Заодно прикладываются и все плюшки ФС, а если вам не нужно каких-то запредельных гарантий перфоманса под нагрузкой близкой к 100%, общий перфоманс с ФС на совр. железе и получше может оказаться. Не смотря на то, что датасеты в результате в файлах лежат.


              1. AlB80
                27.04.2022 02:03

                Насчёт «перешагнула», ну это как посмотреть.

                Посмотрим с другой стороны. Какая "файловая система/файл" может предложить из коробки индексированный по ключу доступ к записям переменной длины?

                Так что ваше высказывание:

                Датасеты это [...], они для концепции файлов – предки, не другая ветвь эволюции.

                ошибочно до наоборот.


  1. apachik
    26.04.2022 22:21
    +13

    можем устроить. мы же инженеры.
    но потом не обижайтесь, что станет трудно (долго) добавлять внутрь новый файл или удалять уже существующий в папке


  1. hurtavy
    26.04.2022 22:23
    +6

    просто зайти внутрь файла файловым менеджером

    Откройте для себя нормальные файловые менеджеры. Хотя даже виндовый умеет в zip


  1. vagon333
    26.04.2022 22:32
    +2

    Удалить или скопировать папку с 100к файлами занимает миллион лет, хотя один файл такого же суммарного размера может скопироваться за полсекунды.

    Желание понятное, но надежность файловой системы важнее.
    Представьте в базе данных транзакцию на 100к записей: кажду запись (файл) нужно отработать отдельно. Отсюда и задержка.
    Раньше, с FAT, было масса проблем как раз из-за ненадежности файловых операций, с NTFS стало надежнее.

    Вроде не перевод, но фразы ниже словно сгенерены ботом:
    > Казалось бы, программисты должны уметь в абстракции и переиспользование ...
    > Еще заплюсованный посты Никиты на Хабре


    1. RUTSTER
      26.04.2022 23:25
      +1

      Вроде не перевод, но фразы ниже словно сгенерены ботом:
      > Казалось бы, программисты должны уметь в абстракции и переиспользование ...

      "уметь в ..." - распространенное сленговое выражение


  1. iliasam
    26.04.2022 22:33
    +1

    Почему папка книга не работает как просто еще один тип файла страницы?

    чтобы скопировать папку книгу нужно писать дополнительные ключи иметь типогафию, копира недостаточно. Приложить папку книгу к письму[бумажному] нельзя.

    И так дальше в том же духе.


    1. masai
      26.04.2022 23:10

      Не совсем корректная аналогия. Например, страница вполне может работать как книга.


  1. paranoya_prod
    26.04.2022 22:39
    +5

    Все это, конечно, неудобно, поэтому возникла целая индустрия архиваторов: способ взять папку и сделать из нее файл.

    Странное предположение об назначении архиваторов. Автор не задумывался о том, что основное назначение данных программ в том, чтобы файл или файлы просто уменьшить в размере из-за того, что стоимость хранения 1МБ была высока и скорость передачи, если говорить об отправки письма, была не велика и могла занимать долгие и долгие часы? А не для того, чтобы из кучи файлов сделать один.

    Фактически, папка и есть файл, по крайней мере в FAT, только это особый файл, он не содержит данные, а содержит только список файлов.

    Все остальные минусы папок пошли оттого, что файловые системы изначально разрабатывались тогда, когда компьютеры были медленными. Да, можно было сделать у папки параметр "объём" и обновлять его каждый раз, когда происходят изменения внутри, но! папки умеют вложенность, и чем больше вложенность, тем большее число раз приходилось бы обновлять объём у каждой вышестоящей папки, а это время. И тогда автор бы очень сильно возмущался, почему так долго копируется один файл.

    Копирование одной папки со 100к файлами и одного файла такого-же объёма имеют существенную разницу - надо на каждый файл создавать структуру в таблице распределения файлов, а это всё тоже время, время найти таблицу, время найти свободное место в таблице, время найти свободные блоки в разделе с данными. А один файл это только один раз обратиться к таблице размещения файлов и создать там только одно имя для нового файла.


    1. vvviperrr
      26.04.2022 23:03
      +4

      >Автор не задумывался о том, что основное назначение данных программ в том, чтобы файл или файлы просто уменьшить в размере

      архивирование (archiving) и сжатие (compressing) - разные операции, не всегда зависимые.


    1. tmnhy
      26.04.2022 23:06
      +1

      Вы путаете архиватор и программу сжатия данных. Исторически архиватор как раз и использовался только для упаковки многих файлов в один архив во время записи на ленту. Без сжатия.

      А программы сжатия данных с функцией архивации стали называть в быту "архиваторами" сравнительно недавно.

      Это уточнение не отменяет бредовости высказанных (или пересказанных) автором мыслей. Потому что он упускает важную составляющую - ФС. А о многом просто не знает, например, что блочное устройство с ФС может быть обычным файлом.


      1. ermouth
        26.04.2022 23:13
        +5

        То-есть это даже сохранилось в расширениях, tar – это как раз tape archive, без сжатия, а живее всех живых.


        1. hw_store
          26.04.2022 23:28
          +1

          дьявол побери, а я предыдущие 28 лет думал, что это реально от слова tar - то есть как бы склеить файлы смолой. А всё от того, что во времена СМ ЭВМ был только железячником


          1. ermouth
            26.04.2022 23:39
            +1

            СМ-4, ДЕМОС, рискну предположить )


    1. masai
      26.04.2022 23:12
      +2

      Странное предположение об назначении архиваторов. Автор не задумывался о
      том, что основное назначение данных программ в том, чтобы файл или
      файлы просто уменьшить в размере из-за того, что стоимость хранения 1МБ
      была высока и скорость передачи, если говорить об отправки письма, была
      не велика и могла занимать долгие и долгие часы? А не для того, чтобы из
      кучи файлов сделать один.

      Изначально архиваторы как раз и были предназначены для того, чтобы много файлов превратить один. Например, CPIO или TAR ничего не сжимают. Да и сейчас их часто используют без сжатия. Компрессоры были отдельными программами. Но потом появились форматы, объединяющие оба качества, и архиватором стали называть и программу для сжатия.


  1. amarao
    26.04.2022 23:16
    +4

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

    Всё волшебство команды mv (которая делает атомарное переименование) возможно только в условиях СУБД, в качестве которой выступает ядро ОС. Вам дают транзакции, целостность и т.д. - а взамен вы должны пользоваться только интерфейсами ядра.

    Сравните выгрузку 100000000 строк из SQL базы со временем копирования той же самой базы на файловом/блочном уровне. Почему-то медленее. Почему? Потому что это данные высшего качества, а не грубые сельские блоки с диска.


  1. Kremleb0t
    26.04.2022 23:24
    +3

    Складывается впечатление, что автор статьи сам не знает как работает файловая система.

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

    Допустим есть file_folder_1 и file_folder_2. Надо перетащить файл file_folder_1/file.txt в папку-файл file_folder2/ - что делать в этом случае? Копировать содержимое file.txt из файла-папки file_folder_1 в файл-папку file_folder_2 ?

    Я ожидал в статье какие-то технические подробности, объяснение как это должно работать, примеры, аргументацию.


  1. MagisterLudi Автор
    26.04.2022 23:28
    -1

    Вот тут еще 100+ комментов на эту тему, не знаю как их сюда перетащить.


    1. nochkin
      26.04.2022 23:41
      +7

      Надо сделать так, что бы комменты и посты были одно и тоже, но только с разным типом.


  1. aamonster
    27.04.2022 00:19
    +1

    Интересно, что бы сказал автор, увидев бандлы в макоси. Устроили бы они его или всё ещё "слишком фолдеры"?

    А zipfolders для винды? (отличается от поддержки архивов в проводнике тем, что содержимое зипа доступно для любой программы... Когда-то было удобно, сейчас уже не очень надо).


  1. VBKesha
    27.04.2022 00:32
    +3

    Давайте сделаем сами:

    dd if=/dev/zero of="./New Folder.bin" bs=1G count=10
    mkfs.ext4 "./New Folder.bin" #да разгорится FS срач
    mkdir "./New Folder"
    sudo mount "./New Folder.bin" "./New Folder"