LINUX.ORG.RU
ФорумTalks

Plan 9

 ,


1

7

Продолжаем:

Операционная система Plan9 опередила свое время на 20 лет. Задачи для решения которых она была проектрована еще не стояли перед коммерчским миром IT, во всю испольовался однозадачный DOS, и UNIX более чем хватало для решения проблем.

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

До появления ChatGPT казалось, что это отставание вечно, и Plan9 уже не возможно вернуть, так как под UNIX написанны «терра-тонны» кода, и как их портировать. Но LLM дает второй шанс. Так как на LLM можно сложить перевод драйверов и перевод системных библиотек для реализации новых сетевых протоколов таких как QUIС и HTTP/3. Приложения уже напишут разработчики на Go (который поддерживается в Plan9 нативно, команда Роба Пайка не забывает Plan9).

Plan9 действительно отличается от UNIX, так же как UNIX отличается от Windows. Потому, что предоставляет универсальный интерфейс для любых объектов системы. Программисту достаточно понять одну концепцию и он избавляется от необходимости постоянного изучения новых интерфейсов. Это как STDIN/STDOUT распределенные далеко за предлы CLI.

Вполне возможно, мы увидим возвращение Plan9 в продакшен, через работы LLM. Потому, что человеко-ориентированный код, это код который избавлен от большого количества абстракций. Высокоуровневый. А Plan9 как развыводит работу со всей информацией в системе на высокий уровень абстракции. Позволяя скрыть детали технической реализации внутри драйверов.

Plan9 is not a product

From: s...@ulysses.homer.nj.att.com (Steven Bellovin)
Newsgroups: comp.unix.wizards
Subject: Re: Plan 9? (+ others)
Date: 23 Aug 88 16:19:40 GMT

«Plan 9» — это не продукт и не задумывался как таковой. Это исследование — экспериментальное изучение иного подхода к вычислениям. Разработчики исходили из нескольких базовых предположений: что процессоры стали очень дешёвыми, но мы не умеем эффективно их объединять; что хорошие сетевые технологии крайне важны; что интеллектуальный пользовательский интерфейс (включая растровый дисплей и мышь) — это верное решение; что существующие системы с сетями, мышью и т.д. не являются правильным путём, и в частности, что современные рабочие станции — не тот ориентир, к которому стоит стремиться. (Нет, я не буду утруждать себя объяснением всех их доводов — это материал для отдельной длинной статьи.) В конечном счёте, система UNIX как таковая мертва в качестве инструмента для серьёзных исследований в области структуры операционных систем — она стала слишком громоздкой и слишком ограничена более чем 15-летней историей.


Подробнее:



Последнее исправление: lbvf50txt (всего исправлений: 3)
Ответ на: комментарий от hateyoufeel

Идиомы языкоспецифичные конструкции, паттерны нет.

Паттерны специфичны языкам. Например, в том же хачкеле нет синглтонов.

В гораздо меньшей степени. Если у тебя стратегия, то у тебя стратегия и в джаве и в плюсах и в го. Если у тебя адаптер, то у тебя адаптер и в джаве и в плюсах и в го.

Это просто цикл, чувак.

Это идиоматичный цикл, чувак. Если отойти от формальных определений, то понятие паттерна можно свести к фразе «здесь так носят», а понятие паттерна к «так везде носят».

skiminok1986 ★★★★★
()
Ответ на: комментарий от lbvf50txt

В вопросах Golang, а конкретно работы Боднера - идеоматичность подразумевается шире чем синтаксические конструкции. Скорее подразумевается как стиль письма который густо завязан на парадигме и выбираемой архитектуре (dependency injections).

Я в силу своей необразованности не смог более точно выразить мысль. Ваше сравнение со стилем письма мне понравился, возьму на вооружение.

Разбираясь дальше архитекура определяется парадигмой, а идиомы архитектурой.

Тут, видмио, даже большие доки от программирования не пришли к единому мнению. Возможно, моё сознание покалечено книгами с ламой и альпакой, где идиомы сведены к более простым сущностям, и ближе к идиомам в естественных языках (видимо, Ларри Уолл довлеет над всем, что связано с перлом). Мне интуитивно хочется подвязать идиомы в программировании с идиомами в лингвистике. Вплоть до местечковых идиом на уровне команды или проекта.

skiminok1986 ★★★★★
()
Ответ на: комментарий от hateyoufeel

Это ты lbvf50txt объясняй, он сейчас расскажет про Великую Оптимизацию, которой гошники занимаются.

Писать тяжёлый, медленный и текущий код можно на любом языке программирования. Всегда есть ситуации, когда закидывание железом уже не помогает.

skiminok1986 ★★★★★
()
Ответ на: комментарий от lbvf50txt

Сейчас набегут «сайтописцы» и будут доказывать, что они без алгоритмов уже 20 лет работают, и имеют уважние. И им алгоритмы не нужны.

Для формошлёпства действительно не обязательны.

skiminok1986 ★★★★★
()
Ответ на: комментарий от spbzip

Попробуй написать на Go сканер портов хотя бы, совершенство ты мое архитектурное.

О! Здравствуйте. Как-то мимо меня прошел этот комментарий.

В Golang написать сканер портов на сокетах не сложно. Для этого для заданного адреса запускается цикл по диапазону адресов, и на каждой итерации цикла вызывается DialTimeout. Можно параллелить, разложив диапазон на фрагменты и запустив каждый в горутине.

https://pkg.go.dev/net#DialTimeout

Вызываем метод DailTimeout, отслеживаем error, если nil == error - то помечаем данный порт как открытый.

lbvf50txt
() автор топика
Ответ на: комментарий от skiminok1986

Паттерны специфичны языкам. Например, в том же хачкеле нет синглтонов.

В гораздо меньшей степени. Если у тебя стратегия, то у тебя стратегия и в джаве и в плюсах и в го. Если у тебя адаптер, то у тебя адаптер и в джаве и в плюсах и в го.

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

Это просто цикл, чувак.

Это идиоматичный цикл, чувак.

Что такое идиоматичный код? Это код с идиомами. Что такое идиома? Часть идиоматичного кода. Сепульки! Является ли идиомой следующий код на Си?

for(int i = 0; i < N; i++) {
...
}

Или это просто обычный цикл?

Если отойти от формальных определений, то понятие паттерна можно свести к фразе «здесь так носят», а понятие паттерна к «так везде носят».

Но мы и не подходили к формальным определениям ещё. Как мы можем от них отойти?

Это ты lbvf50txt объясняй, он сейчас расскажет про Великую Оптимизацию, которой гошники занимаются.

Писать тяжёлый, медленный и текущий код можно на любом языке программирования. Всегда есть ситуации, когда закидывание железом уже не помогает.

Можно, конечно. Я к тому веду, что подавляющее большинство голангеров так и делают и никакой особой оптимизации не проводят, пока петух в жопу не трахнет, что несколько противоречит словам ТС.

Впрочем, это справедливо не только для голангеров. Сейчас вообще оптимизацией заниматься не слишком модно.

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 2)
Ответ на: комментарий от sanyo1234

В начале XX века в военных лабораториях Первого Рейхсмахта разработали суперсекретный танк, обладавший боевой мощью и сверхоружием, намного опередившим свое время. Для того, чтобы испытать танк и при этом раньше времени не разрушить Европу, он был заброшен в Центральную Африку для порабощения непокорных зусулов. Через некоторое время в целях безопасности все, кто знал о существовании этого проекта, были уничтожены, и о танке забыли.

ptah_alexs ★★★★★
()
Ответ на: комментарий от hateyoufeel

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

Паттерны применимы внутри одной парадигмы. В другой парадигме будут другие паттерны.

Что такое идиоматичный код? Это код с идиомами. Что такое идиома? Часть идиоматичного кода. Сепульки! Является ли идиомой следующий код на Си?

Единственный вариант написания не является идиомой.

Или это просто обычный цикл?

Он.

Я к тому веду, что подавляющее большинство голангеров так и делают и никакой особой оптимизации не проводят, пока петух в жопу не трахнет

s/голангеров/программистов/

Так правильнее будет. Но те, кто на хайлоаде сидят, те заморачиваются. Да и в целом бывает. У нас почти везде можно не думать, но есть пара сервисов, которые надо очень аккуратно и оптимизированно по скорости писать.

skiminok1986 ★★★★★
()
Ответ на: комментарий от hateyoufeel

Что такое идиоматичный код? Это код с идиомами. Что такое идиома? Часть идиоматичного кода. Сепульки! Является ли идиомой следующий код на Си?

Вот хороший пример идиомы в С. И в С такого поооолно при работе со строками/массивами. На других языках так и близко не пишут.

while (*dst++ = *src++);

urxvt ★★★★★
()
Ответ на: комментарий от spbzip

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

Давайте внесем ясность. Библиотека языка Golang работает с услугами предоставляемыми «транспортным уровнем» модели OSI. Это то что оформлено в объект UNIX - сокеты: вы из под пользовательского процесса пишете и читаете в сокет, а уже релизация TCP стека в Kernel пакует пакеты.

То о чем вы говорите: «перехватить пакет», это работа с услугами предоставляемыми «сетевым уровнем» модели OSI, или даже «канальным». Такая работа производится внутри Kernel, и является прерогативой драйверов. Ни какой проблемы сформировать последовательность байты пакета в Golang нет. Проблема в том, что OS не позволяет это делать пользовательским процессам, данная задача возложена на «защищенный режим» ядра.

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

UPD:

Есть системный вызов raw для пользовательского пространства.
https://man7.org/linux/man-pages/man7/raw.7.html

UPD2:

https://pkg.go.dev/golang.org/x/net/ipv4

В Golang прямо в стандартной библиотеке есть возможность писать заголовки IP пакетов прямо в Userspace.

UPD3:

https://ebpf.io/what-is-ebpf/

overview.png - при помощи eBPF можно запускать программы в привилегированном режиме. И решать те вопросы с пакетами о которых вы говорили.

lbvf50txt
() автор топика
Последнее исправление: lbvf50txt (всего исправлений: 4)
Ответ на: комментарий от urxvt

Вот хороший пример идиомы в С. И в С такого поооолно при работе со строками/массивами.

while (*dst++ = *src++);

О.. я люблю такое сишное говно. Из-за такого сишного говна в gcc больше миллиона строк кода, просто чтобы это говно детектить и выкидывать, заменяя нормальным кодом.

На других языках так и близко не пишут.

Это и к лучшему, если честно. Чтобы писать вон то говно выше вместо вызова strcpy(dst, src), нужно быть полным утырком.

hateyoufeel ★★★★★
()
Ответ на: комментарий от spbzip

Этот ваш комментарий подтолкнул меня к размышлениям и я понял зачем в NetBSD добавлена возможность запускать Lua скрипты в Kernel. Нашел практическое применение этому решению, а не туманные объяснения «лабораторного» характера.

До этого мне казалось странным, зачем тянуть Lua в Ядро? Но отвечая на ваш вопрос, я проговорил, что Ядро обрабатывает соединения на L2/L3 уровне OSI. И Lua скрипты нужны как раз для низкоуровневой обработки пакетов. Того чем занимается eBPF в Linux.

lbvf50txt
() автор топика
Последнее исправление: lbvf50txt (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Является ли идиомой следующий код на Си? … Или это просто обычный цикл?

Вы когда писали

for(int i = 0; i < N; i++) {
...
}

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

В хаскелле вы бы точно так же решили задачу с помощью последовательности применений map/filter/fold. Потому что там это идиоматично. Можно ли в хаскелле сделать цикл со счётчиком, а в с — map/reduce? Конечно можно, но это как кота против шерсти гладить, и трудно, и неприятно, и тапки потом будут стоять обоссанные. Неидиоматично.

P.S. И чтоб два раза не вставать. Паттерн — это идея, не реализуемая в рамках семантики языка. Тот же цикл со счётчиком является обычной конструкций в С и паттерном на ассемблере. Потому как в последнем его нет, но команда ответственных разработчиков может договориться о правилах, как им используя определённые инструкции, метки и регистры выразить эту идею в коде. Ассемблер им не будет в этом помогать, но с помощью дисциплины, внимательности и ответственного исполнения можно справиться и без него.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Можно ли в хаскелле сделать цикл со счётчиком,

Ага. for [0..n] $ \i -> .... Такого кода много.

И чтоб два раза не вставать. Паттерн — это идея, не реализуемая в рамках семантики языка.

Да-да, я тоже читал Пола Грэма.

This practice is not only common, but institutionalized. For example, in the OO world you hear a good deal about «patterns». I wonder if these patterns are not sometimes evidence of case (c), the human compiler, at work. When I see patterns in my programs, I consider it a sign of trouble. The shape of a program should reflect only the problem it needs to solve. Any other regularity in the code is a sign, to me at least, that I’m using abstractions that aren’t powerful enough– often that I’m generating by hand the expansions of some macro that I need to write.

https://www.paulgraham.com/icad.html

О чём я тут и пишу. ТС там выше буквально пишет про свои собственные паттерны, которые голангеры изобретают, потому что голанг слишком убог и невыразителен, чтобы эти паттерны можно было красиво обернуть в библиотеку и переиспользовать.

P.S. я тут уже пару недель вынашиваю вброс в Development про проклятие лиспа. Но лисперов тут мало осталось, поэтому может не взлететь :(

hateyoufeel ★★★★★
()
Последнее исправление: hateyoufeel (всего исправлений: 1)
Ответ на: комментарий от hateyoufeel

Поскольку вряд ли количество лисперов значимо увеличится в будущем, то нет смысла откладывать вброс. А уж взлетит или нет — это непредсказуемо.

Насчёт идиоматичного кода можно привести ещё и такое соображение: он как правило выражает единственный и очевидный способ решить задачу. Если заглянуть на stack overflow, то там несколько вопросов «как в хаскеле организовать цикл со счётчиком» и в каждом множество разных способов как бы такой трюк изобразить. В С ты просто пишешь for( int i = 0 ..., не приходя в сознание.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

Поскольку вряд ли количество лисперов значимо увеличится в будущем, то нет смысла откладывать вброс. А уж взлетит или нет — это непредсказуемо.

Думаешь, Лавсан не осилит детей сделать?

Насчёт идиоматичного кода можно привести ещё и такое соображение: он как правило выражает единственный и очевидный способ решить задачу.

Это работает только для очень урезанных языков. Как только язык становится более-менее сложным и позволяет выражать многое различными способами, то ясен хрен будет много вариантов сделать одно и то же.

Если заглянуть на stack overflow, то там несколько вопросов «как в хаскеле организовать цикл со счётчиком» и в каждом множество разных способов как бы такой трюк изобразить.

В том же Perl это вообще сделали девизом языка: TIMTOWTDI.

hateyoufeel ★★★★★
()
Ответ на: комментарий от hateyoufeel

Для внесения ясности лучше заменить «неидеоматичный» на «антиидеоматичный» код. Тогда если язык даёт явную и недвусмысленную подсказку каким образом устроить вещь — это идеоматичный код, когда упирается и препятствует сделать вот это вот так — антиидеоматичный код, а ежели существуют множество способов сделать нечто, каждый со своими особенностями, но в целом бери любой, нормально будет — обычный, ни идеома, ни антиидома-тичный код.

ugoday ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)