LINUX.ORG.RU
ФорумTalks

Nixtoo

 ,


0

1

Gentoo это возможность использовать самый модный язык программирования (Python). NixOS это особая установка программ (у каждой через configure переопределяется место установки с целью нарушения FHS).

Что если немного переделать Gentoo и устанавливать программы похожим образом (сохранив именование слотов как есть, но изменив схему установки файлов).

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

★★★★

Последнее исправление: Dimez (всего исправлений: 2)

Gentoo это возможность использовать самый модный язык прогарммирвоания (Python).

Как же без Gentoo.

Что если немного переделать Gentoo и устанавливать программы похожим образом (сохранив именование слотов как есть, но изменив схему установки файлов).

НедоNixOS.

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

Будет. Как токи пона. Останется понять, зачем это кому-то надо, когда есть нормальное.

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

Я понимаю если бы был украинский термин (это не нацпол, это действительно близкий нам язык по целому ряду причин), но каким боком польский? Эсперанто было бы логичней или Испанский хотя бы.

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

каким боком польский?

мне об этом сказал google translate, после того как меня спросил ты.

близкий нам язык по целому ряду причин

невесомость = без тяжести, потом буква «я» заменилась на «е»

тоже славянские корни

Хотя возможно, что он врёт, википедия говорит другое слово:
https://pl.wikipedia.org/wiki/Nieważkość

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

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

Коперник, да, спасибо! На этом, кажется, всё 😀

papin-aziat ★★★★★
()

Если немного переделать генту, или даже сильно переделать генту, не будет ничего.

thesis ★★★★★
()
Ответ на: комментарий от Shushundr
Наш отец ктор ес во небо,
Санктйу ес твои имен.
Твои краление придиб.
Твои хцение бу на земла такак на небо.
Дарий ми днес наш денйу хлеб.
И упростий ми наш грехис такак ми упростиме тамктор грехиту против ми.
И не вестий ми во покусение, но спасий ми от зло. 

Спасибо, но нет.

papin-aziat ★★★★★
()

не потребуется изучать лямбды, функциональное программирование

А всё равно придётся.

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

Когда я ставлю теги, на меня ругаются модераторы, я уже́ сообщал, и ты читал. В позиции того модератора (по известной мне информации) ничего не поменялось. Поэтому мне нужен хотя бы один тег для простановки. Ну буду ставить «Африка» (оу, его удалили, ну ничего, ещё найду). Хотя тег «бестежность» больше соответствует смыслу.

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

Но тема Tyrian 2 из gentoo. Я не шлангую, а ты не хочешь вникать и шлангуешь сам, возможно выгораживая как себя так и другого модератора.

Кто как не гентушники могли бы подтвердить мне как сделан сайт генту?

Работаю я в Gentoo и решение мне нужно под portage, а не для apt.

И сделать я хотел сервис для gentoo, слава тому модератору, уже перехотел.

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

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

Нет. Смысл NixOS как раз и есть в функциональном языке, в котором функция от одних и тех же аргументов дает один и тот же результат. Для императивного языка в общем случаи нельзя доказать отсутствие побочных эффектов и обеспечить полную воспроизводимость результата. А без этого затея теряет смысл.

dvetutnev
()

не потребуется изучать лямбды

В питоне тоже лямбды есть, так что придётся в любом случае

Tsukasa
()
Последнее исправление: Tsukasa (всего исправлений: 1)

ТС, в лямбдах тебя чего напугало? Лямбда это же просто функция, только анонимная и записанная в краткой форме.

dvetutnev
()

NixOS это особая установка программ (у каждой через configure переопределяется место установки с целью нарушения FHS).

Но зачем?

Kroz ★★★★★
()

самый модный язык

Вы ошиблись форумом. Вам на fashion. Тут больше про технику…

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

За исключением того, что в том топике не было ничего про генту.

shell-script ★★★★★
()

Ты хочешь, чтобы жаба с гадюкой дали потомство.

ControlUnit
()
Ответ на: комментарий от CrX

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

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

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

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

Я-то могу, а ТС нет. Я же даже специально цитату (из первого поста) в кавычки заключил, ну…

Впрочем, я ему даже немного помогу и скажу, чем это заявление можно парировать: «так я в программирование и не лезу, хочу дистрибутив не для программистов, а помесь ужа и ежа, точнее генты и никсоси».

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

Я смысла в изучении языка nix не вижу. Вот если бы это был haskell, но он - не он…

Ну не изучай. Страдай так.

Кстати, да 7 лет на генте ни разу питоном в ней не пришлось пользоваться.

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

Я смысла в изучении языка nix не вижу.

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

altwazar ★★★★
()
Ответ на: комментарий от papin-aziat

Они для нас где-то за бугром всегда были

Южная Польша — одно из красивейших мест России. Н.С. Гумилёв

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

Открою секрет - в nix если A и B зависят от одной и той же libfoo.so, то она будет только одна, прям как в других ваших линуксах 🙀

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

Нет. Смысл NixOS как раз и есть в функциональном языке

Но функциональный язык у них на редкость упоротый! И вот какой вопрос еще щекочет краешек мозга. Если в nix скрипте получить, скажем, текущую дату, и использовать её четность как кондишен ифа, а в бранчах ифа выбирать тот или иной, ну например, коммит гита для пакета, мы разве не получим сборку восроизводимую случайным образом?

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

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

Получим. Пополнив тем самым копилку способов отстрелить ногу. Таким образом из чистой (математически) функции без побочных эффектов получаем нечистую с побочными эффектами. Выглядит такая схема приблизительно как украсть ящик водки, продать, а вырученные деньги пропить.

dvetutnev
()
Ответ на: комментарий от FishHook

И вот какой вопрос еще щекочет краешек мозга. Если в nix скрипте получить, скажем, текущую дату, и использовать её четность как кондишен ифа, а в бранчах ифа выбирать тот или иной, ну например, коммит гита для пакета, мы разве не получим сборку восроизводимую случайным образом?

Есть воспроизводимость на уровне языка, а есть на уровне пакетного менеджера ОС.

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

Воспроизводимость на уровне пакетного менеджера/ос - отдельная от языка задача и методы её достижения от него не зависят. Добиться полной воспроизводимости невозможно, а способы её достижения не всегда оправданы на практике.

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

Сам язык в nix не создает проблем. Вся сложность в куче функций для работы с пакетами и, зачастую, отсутствует какая-то стандартная практика их применения или они не решают задачи пользователя в удобном для использования виде. Т.е., например, в генту хочешь наложить патч на какой-то пакет - закинул патч директорию с именем-версией пакета и пакетный менеджер его наложит. В nixos есть куча способов это сделать, а самый распространенный - передать через параметр список с функцией, которая принимает в качестве аргументов текущее состояние пакетной базы и после её применения, а отдает через параметры функции, которые возвращают пакеты, а для изменения пакета ты вызываешь функцию из оригинального пакета, которой ты передаешь существующие атрибуты и возвращает она измененные. И язык тут не причем, всё дело в выбранном подходе достижения воспроизводимости и отсутствии удобного инструмента для решения задачи со стороны пользователя.

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

Получим. Пополнив тем самым копилку способов отстрелить ногу. Таким образом из чистой (математически) функции без побочных эффектов получаем нечистую с побочными эффектами. Выглядит такая схема приблизительно как украсть ящик водки, продать, а вырученные деньги пропить.

Окей! То есть, берём питон, определяем интерфейс модуля пакета как-то так:

MakeDerivation = Callable[[ImmutableList[NixPackage]], Derivation]

где Derivation - иммутабельный объект, и получаем то же самое, только без велосипедостроения. Ну раз мы не можем гарантировать функциональной чистоты средствами языка и считаем ответственностью разработчика не отстреливать себе ногу, то единственное что нам дает nix это неизменяемость нелокальных переменных. И таким образом, функция питона, на вход которой подаем иммутабельный объект и иммутабельный объект же возвращаем, решает ту же задачу тем же образом, а все разговоры про «воспроизводимость сборки» ради которой они изобрели психоделический язык nix, это просто словоблудие

FishHook
()
with import <nixpkgs> {}; # bring all of Nixpkgs into scope
stdenv.mkDerivation rec {
  name = "hello-2.8";
  src = fetchurl {
    url = "mirror://gnu/hello/${name}.tar.gz";
    sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6";
  };
}
from nix import nixpkgs, stdenv, fetchurl, Derivation

def make_derivation() -> Derivation:
   return Derivation (
      name = "hello-2.8",
      src = fetchurl(
          url = "mirror://gnu/hello/${name}.tar.gz";
          sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"
))

тадам!

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

Только первое - это экспрешн, а второе модуль с функцией, которую ещё кто-то должен вызвать. Ну и нужно же учитывать, что nix - ленивый язык, а в nixpkgs есть огромный ленивый аттрсет. Если в питоне аналогично сделать огромный дикт, то ему понадобятся гигабайты оперативки уже просто чтобы все импорты прошли, что уж говорить про выполнение самого кода

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

nix это неизменяемость нелокальных переменных

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

dvetutnev
()
Ответ на: комментарий от Tsukasa

Только первое - это экспрешн, а второе модуль с функцией, которую ещё кто-то должен вызвать.

А интерпретатор языка nix чем-то принципиально отличается от интерпретатора python? А .nix файлы, в отличии от .py файлов чем то тоже отличаются таким волшебным? Из вашего сообщения я делаю странный вывод, что «экспрешн» вызывать не надо, он сам каким-то волшебством вызывается

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

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

Tsukasa
()
Ответ на: комментарий от FishHook

А интерпретатор языка nix чем-то принципиально отличается от интерпретатора python? А .nix файлы, в отличии от .py файлов чем то тоже отличаются таким волшебным?

Язык другой, очевидно же

Из вашего сообщения я делаю странный вывод, что «экспрешн» вызывать не надо, он сам каким-то волшебством вызывается

with import <nixpkgs> {}; # bring all of Nixpkgs into scope
stdenv.mkDerivation rec {
  name = "hello-2.8";
  src = fetchurl {
    url = "mirror://gnu/hello/${name}.tar.gz";
    sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6";
  };
}

Выполнение этого кода грубо говоря соберёт hello

from nix import nixpkgs, stdenv, fetchurl, Derivation

def make_derivation() -> Derivation:
   return Derivation (
      name = "hello-2.8",
      src = fetchurl(
          url = "mirror://gnu/hello/${name}.tar.gz";
          sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"
))

Выполнение этого кода не сделает ничего, тут объявляется функция которая нигде не вызывается

Разница между экспрешном и не экспрешном в том, что я могу сделать вот так

let
  hello = (with import <nixpkgs> {}; # bring all of Nixpkgs into scope
    stdenv.mkDerivation rec {
      name = "hello-2.8";
      src = fetchurl {
        url = "mirror://gnu/hello/${name}.tar.gz";
        sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6";
      };
    });
in
  "hello is stored here: ${hello}"

И не могу сделать вот так:

hello = (from nix import nixpkgs, stdenv, fetchurl, Derivation

def make_derivation() -> Derivation:
   return Derivation (
      name = "hello-2.8",
      src = fetchurl(
          url = "mirror://gnu/hello/${name}.tar.gz";
          sha256 = "0wqd8sjmxfskrflaxywc7gqw7sfawrfvdxd9skxawzfgyy0pzdz6"
)))

print("hello is stored here:", hello)
Tsukasa
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)