LINUX.ORG.RU

Сообщения monk

 

LLVM. Зачем он вообще нужен?

Я понимаю, зачем его используют: чтобы не писать 100500 раз в каждом компиляторе одни и те же алгоритмы оптимизации.

Я не понимаю, почему не использовать просто компиляцию через Си или Си++. Оптимизации сделает компилятор Си. Семантика у LLVM всё равно совпадает с Си, по объёму кода компилятора тоже выигрыша практически нет. Зато если использовать Си, можно использовать любой из компиляторов Си и компилировать для платформ, для которых нет реализации LLVM.

 ,

monk
()

Есть ли дистрибутив полноценно реализующий свободы GPL?

GPL предоставляет получателям компьютерных программ следующие права, или «свободы»:

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

Есть ли хоть один дистрибутив Linux (или другой ОС) в котором все эти свободы действительно бы были, а не только декларировались?

Первая и третья, понятно, есть везде. А вот с остальными двумя всё сложнее.

Предположим, я внезапно захотел изучить, как работает firefox и сделать, чтобы сайты с сертификатом Letsencrypt отмечались как потенциально опасные (подобно нешифрованным сайтам).

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

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

То есть свобода как бы есть, но её реализация напоминает право быть избранным.

Действительную реализацию этих свобод я видел в Emacs (код на Emacs lisp доступен сразу, изменения часто можно сделать просто отдельным файлом, который перекроет нужную функцию), в программах, являющимися локальными сайтами (типа webmin) и в 1С (все типовые программы поставляются в исходниках в предположении, что конечный пользователь будет их допиливать под себя).

Есть ли какой-нибудь дистрибутив, в котором пакеты были бы представлены текущими исходниками + исходниками от поставщика. И при обновлении исходников от поставщика автоматически обновлялись бы текущие исходники как это сделано в git или kdiff3 (а при невозможности автоматического объединения, запускался бы тот самый kdiff3) и автоматически собиралась новая версия бинарника?

В Debian даже файлы в /etc при обновлении не объединяются:

Configuration file `/etc/bash.bashrc'
 ==> Modified (by you or by a script) since installation.
 ==> Package distributor has shipped an updated version.
   What would you like to do about it ?  Your options are:
    Y or I  : install the package maintainer's version
    N or O  : keep your currently-installed version
      D     : show the differences between the versions
      Z     : start a shell to examine the situation
 The default action is to keep your current version.
*** bash.bashrc (Y/I/N/O/D/Z) [default=N] ? 

 , ,

monk
()

Как правильно по-русски?

Если речь идёт о женщине, как правильно:

Молодой красивый инженер устанавливает линукс на компьютер.

или

Молодая красивая инженер устанавливает линукс на компьютер.

?

 

monk
()

Apache отдаёт не все файлы

Есть Debian GNU/Linux 11. На нём есть apache2 2.4.54-1~deb11u1

Не отдаёт некоторые файлы. Причём только браузеру. Через GET в командной строке отдаёт.

И отдаёт или нет зависит от содержимого файла. Копирую файл (html), который не отдаёт, копию тоже не отдаёт. В копии удаляю хвост файла начинает отдавать. Дописываю в конец «aaa», перестаёт отдавать. Удаляю последнюю «a», отдаёт. Меняю в конце «aa» на «ab», перестаёт отдавать.

У кого-то есть идеи?

 ,

monk
()

COMEFROM считается вредным?

Когда Дейкстра написал своё письмо «Оператор GOTO считается вредным», в качестве шутки придумали ещё более вредный оператор COMEFROM (и ассемблерную инструкцию CMFRM). Он позволял указать метку и выполнять дополнительный код всегда, когда выполнение проходило через эту метку.

Но вот смотрю я на нынешние методологии программирования и вижу огромный пласт COMEFROM в SQL в виде CREATE TRIGGER, подписку на события в других языках (паттерн Наблюдатель). Многомерный COMEFROM в HTML через CSS.

Неужели это считается удобным для понимания и отладки?

 

monk
()

Зачем в Haskell IO?

Haskell язык ленивый. Для интерактивных программ достаточно вообще обычных строк:

main = interact realMain

realMain :: String -> String
realMain = unlines . f . lines
  where
    f x = "Введите своё имя: ":g x
    g (имя:числа) = ["Привет, " ++ имя, "Вводите числа, q для выхода"] ++ корни числа
    корни ("q":_) = []
    корни (x:xs) = (show . sqrt) (read x :: Double):корни xs

Вот программа, которая запрашивает имя пользователя, затем выводит корни введённых чисел пока не получит q. Никакого IO внутри realMain не требуется.

Если брать произвольное взаимодействие с окружающим миром, то достаточно main :: [inEvent] -> [outEvent].

Зачем нужен «магический» тип IO, делящий Haskell на фактически два разных языка?

 ,

monk
()

Racket быстрее для многопоточной работы, чем Go

Микрозамер скорости сервера эха: https://racket.discourse.group/t/racket-matching-or-exceeding-golang-for-echo-server-performance/660

Результаты:

Racket: ~114,584 сообщений/сек
Go (default): ~85,650 сообщений/сек
Go (GOMAXPROCS=1): ~108,495 сообщений/сек

Код для Racket (ссылка) использует потоки Racket (thread), код для Go (ссылка) использует горутины.

 , ,

monk
()

Почему тесты не пишут вместе с кодом?

Всюду рекомендуют делать для тестирования отдельные классы в отдельных файлах, а то и в отдельных проектах.

В результате при изменении задачи работаешь в двух файлах почти одновременно. Не проще воткнуть методы тестирования рядом с кодом?

 ,

monk
()

Зависимые типы, жидкие типы. Что лучше?

Пытаюсь понять тенденции в современных статических языках. Обычного Haskell явно не хватает. Что ожидать на замену?

 , liquid haskell,

monk
()

1С: Библиотека стандартных подсистем, редакция 3.1

«1С:Библиотека стандартных подсистем» (БСП) предоставляет набор универсальных функциональных подсистем, готовые разделы для пользовательской документации и технологию для разработки прикладных решений на платформе «1С:Предприятие». С применением БСП становится возможной быстрая разработка новых конфигураций с уже готовой базовой функциональностью, а также включение готовых функциональных блоков в существующие конфигурации.

Входящие в БСП подсистемы охватывают такие области, как:

  • Администрирование пользователей и прав доступа;
  • Средства администрирования и обслуживания (установка обновлений, резервное копирование, дополнительные отчеты и обработки, оценка производительности и др.);
  • Сервисные подсистемы (история изменений объектов, заметки и напоминания, печать, полнотекстовый поиск, присоединенные файлы, электронная подпись и др.);
  • Технологические механизмы и программные интерфейсы (процедуры и функции общего назначения, обновление версии ИБ, работа в модели сервиса и др.);
  • Нормативно-справочная информация и классификаторы (адресный классификатор, банки, валюты и др.);
  • Интеграция с другими программами и системами (обмен данными, работа с почтовыми сообщениями, отправка SMS, рассылка отчетов и др.);
  • Прикладные подсистемы и рабочие места пользователей (анкетирование, бизнес-процессы и задачи, взаимодействия, варианты отчетов и др.).

Всего в БСП входит более 60 подсистем.

Исходный код библиотеки распространяется по лицензии Attribution 4.0 International (CC BY 4.0). Текст лицензии доступен по ссылке: https://creativecommons.org/licenses/by/4.0/legalcode  Эта лицензия позволяет вам использовать, распространять, перерабатывать, исправлять и развивать библиотеку в любых, в том числе, в коммерческих целях, при обязательном условии указания авторства библиотеки в вашем программном продукте.

Подробности

Перемещено Shaman007 из opensource

 

monk
()

С++ неожиданный результат выдаёт.

Вот весь код программы:

#include <iostream>
#include <fstream>
#include <string>

bool exists(std::string path)
{
        std::ifstream f(path);
        std::cout << path << ": " << f.good() << std::endl;
        return f.good();
}

int main()
{
        std::ifstream f("settings.txt");
        std::string name, path;
        std::getline(f, name);
        std::getline(f, path);
        std::cout << "path = " << path << std::endl;
        std::cout << "path/run = " << (path + "run") << std::endl;
        std::string pathrun = path + "run";
        std::cout << "prun = " << pathrun << std::endl;
        exists(pathrun);
        return 0;
}

А вот её вывод:

path = /mnt/
runh/run = /mnt/
runn = /mnt/
run: 0

Вижу, что со строками какой-то ужас, но не могу понять, что я сделал не так.

 

monk
()

Новый язык программирования для русскоговорящих

Синтаксис от Хаскеля, семантика от Ракета.

факториал(сч) =
  если (сч == 1)
    1
    сч * факториал (сч - 1)

фибоначчи(сч) =
  если (сч < 3)
       1
       пусть рекурсия (н-1 1; н 2; тек-сч 3)
         если (сч == тек-сч) н $ рекурсия н (н + н-1) $ тек-сч + 1

Будет ещё конструкция надо-быстро с семантикой от Си (и использованием gcc).

Исходники: https://github.com/Kalimehtar/russian-lang

Пакет для Ракета: https://pkgd.racket-lang.org/pkgn/package/russian-lang

Документация: https://docs.racket-lang.org/russian-lang/index.html

 , , ,

monk
()

Как сделать cdr в std::forward_list?

Хотел сделать что-то вроде библиотечки по работе со списками, аналогичной лисповым для c++, и обнаружил, что в std::forward_list есть front(), но нет функции для получения хвоста списка, аналогичной лисповому cdr.

Его можно как-то туда добавить или только делать свою реализацию списка с нуля?

 ,

monk
()

Как узнать, можно ли использовать код?

Предположим, дописываю я что-то в код под GPL. И нужен мне какой-нибудь алгоритм. Нахожу на github.

Как узнать, можно ли его использовать, или будут проблемы? Вот, например, Есть репо под лицензией MIT.

Какие риски использования кода из такого источника в opensource проекте?

 ,

monk
()

Есть что-то лучше, чем rsync?

Есть папка с текущими бэкапами. Её надо синхронизировать на удалённый сервер. Объём папки около 8ТБ, между серверами 1Гб/с.

Бэкапы — копии виртуальных жёстких дисков, поэтому между синхронизациями должны изменяться несильно.

Пытаюсь по rsync. Очень долго тупит вначале. Потом медленно-медленно копирует. С диска читает со скоростью 20-30МБ/с, в результате время копирования чуть ли не больше, чем копировать целиком. В процессах показывает, что загружает одной ядро ЦП (из 24) и, похоже, из-за этого тормозит.

Есть что-то более адекватное? А в идеале, чтобы можно было посчитанные контрольные суммы на удалённом сервере держать в файле рядом, а не заново пересчитывать все 8 терабайт.

 ,

monk
()

Scheme SRFI-29

Как правильно его использовать?

В SRFI приведён пример:

(if (not (load-bundle! bundle-name))
                    (begin
                     (declare-bundle! bundle-name (cdr translation))
                     (store-bundle! bundle-name)))) 

Но ведь в этом случае, если translation будет изменён после первого запуска, то при запуске будет использоваться старая версия: (load-bundle! bundle-name) загрузит старую сохранённую версию и вернёт #t.

Просто писать declare-bundle!, а остальное игнорировать? Или делать макрос со сторонним эффектом времени компиляции?

 ,

monk
()

Ошибка в CSS

Появляется горизонтальная прокрутка в теме black при просмотре комментариев. Например, по адресу Верните формат даты взад.

Проверил на Linux (Firefox 65.0.1), Windows (Firefox, Chrome).

Прокрутка пропадает при уменьшении ширины окна примерно до 670 пикселей. Зато появляется прокрутка в этом окне (где я сейчас пишу). Здесь точно вижу, что за границы выходят поля Заглавие и Метки.

Параметры монитора

screen #0:
  dimensions:    3840x2160 pixels (610x343 millimeters)
  resolution:    160x160 dots per inch

 

monk
()

Как в Haskell получить значение из предыдущего цикла?

Простейший пример

main = do
  refval = newIORef 0
  forever $ do
    line <- getLine
    let newval = read line :: Int
    val <- readIORef refval
    writeIORef refval newval
    putStrLn $ show $ newval-val

Как-то можно обойтись без IORef?

 

monk
()

Современный быстрый RPC

Хочу написать программу. Идеологически хочу её сделать как пачку микросервисов, но не хочу привязываться к конкретному языку программирования.

Поэтому нужен протокол для общения между микросервисами. Нашёл https://github.com/hprose : высокая скорость, много поддерживаемых языков. Но хочу уточнить, может есть уже что-то более популярное.

 , независимость от языка,

monk
()

Повторное использование кода

Как определяется, в какую сторону должно быть обобщение?

То есть, при решении конкретной задачи как определить, что должно быть параметром, а что — неизменяемой частью.

Например, есть задача «получить сумму от 1 до 100».

Самым быстрым решением будет

class Sum1_100
{
  int run() { return 5050; }
}

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

class Sum1_100
{
  int run() 
  { 
    int res = 0; 
    for(int i=1; i<=100; i++) res+=i; 
    return res; 
  }
}

Но получив такую задачу, почти всегда решение выглядит примерно так:

class Sum1_n
{
  int n;
  Sum1_n(int _n = 100) { n = _n; };
  int run() 
  { 
    int res = 0; 
    for(int i=1; i<=n; i++) res+=i; 
    return res; 
  }
}

на случай, если потребуется не до 100, а до какого-то другого числа.

И вот здесь у меня вопрос: почему в «получить сумму от 1 до 100» большинство параметризуют именно 100? Посему не «сумму» (тогда параметром будет операция от 100 элементов) или не «от 1 до 100» (тогда параметром будет некая последовательность). Или вообще не всё сразу? С вызовом типа

  auto_ptr<Op> op = new GenOp(operator+, 100);
  auto_ptr<Seq> seq = new Seq(1, 100);
  auto_ptr<Apply> = new GenApply(op, seq);
  result = Main->run();

Как для произвольного алгоритма определяется, что является параметром, а что неизменяемой частью?

 , ,

monk
()

RSS подписка на новые темы