Как правильно по-русски?
Если речь идёт о женщине, как правильно:
Молодой красивый инженер устанавливает линукс на компьютер.
или
Молодая красивая инженер устанавливает линукс на компьютер.
?
Если речь идёт о женщине, как правильно:
Молодой красивый инженер устанавливает линукс на компьютер.
или
Молодая красивая инженер устанавливает линукс на компьютер.
?
Есть Debian GNU/Linux 11. На нём есть apache2 2.4.54-1~deb11u1
Не отдаёт некоторые файлы. Причём только браузеру. Через GET в командной строке отдаёт.
И отдаёт или нет зависит от содержимого файла. Копирую файл (html), который не отдаёт, копию тоже не отдаёт. В копии удаляю хвост файла начинает отдавать. Дописываю в конец «aaa», перестаёт отдавать. Удаляю последнюю «a», отдаёт. Меняю в конце «aa» на «ab», перестаёт отдавать.
У кого-то есть идеи?
Когда Дейкстра написал своё письмо «Оператор GOTO считается вредным», в качестве шутки придумали ещё более вредный оператор COMEFROM (и ассемблерную инструкцию CMFRM). Он позволял указать метку и выполнять дополнительный код всегда, когда выполнение проходило через эту метку.
Но вот смотрю я на нынешние методологии программирования и вижу огромный пласт COMEFROM в SQL в виде CREATE TRIGGER, подписку на события в других языках (паттерн Наблюдатель). Многомерный COMEFROM в HTML через CSS.
Неужели это считается удобным для понимания и отладки?
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 на фактически два разных языка?
Микрозамер скорости сервера эха: 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 (ссылка) использует горутины.
Всюду рекомендуют делать для тестирования отдельные классы в отдельных файлах, а то и в отдельных проектах.
В результате при изменении задачи работаешь в двух файлах почти одновременно. Не проще воткнуть методы тестирования рядом с кодом?
Пытаюсь понять тенденции в современных статических языках. Обычного Haskell явно не хватает. Что ожидать на замену?
«1С:Библиотека стандартных подсистем» (БСП) предоставляет набор универсальных функциональных подсистем, готовые разделы для пользовательской документации и технологию для разработки прикладных решений на платформе «1С:Предприятие». С применением БСП становится возможной быстрая разработка новых конфигураций с уже готовой базовой функциональностью, а также включение готовых функциональных блоков в существующие конфигурации.
Входящие в БСП подсистемы охватывают такие области, как:
Всего в БСП входит более 60 подсистем.
Исходный код библиотеки распространяется по лицензии Attribution 4.0 International (CC BY 4.0). Текст лицензии доступен по ссылке: https://creativecommons.org/licenses/by/4.0/legalcode Эта лицензия позволяет вам использовать, распространять, перерабатывать, исправлять и развивать библиотеку в любых, в том числе, в коммерческих целях, при обязательном условии указания авторства библиотеки в вашем программном продукте.
Перемещено Shaman007 из opensource
Вот весь код программы:
#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
Вижу, что со строками какой-то ужас, но не могу понять, что я сделал не так.
Синтаксис от Хаскеля, семантика от Ракета.
факториал(сч) =
если (сч == 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
Хотел сделать что-то вроде библиотечки по работе со списками, аналогичной лисповым для c++, и обнаружил, что в std::forward_list есть front(), но нет функции для получения хвоста списка, аналогичной лисповому cdr.
Его можно как-то туда добавить или только делать свою реализацию списка с нуля?
Есть папка с текущими бэкапами. Её надо синхронизировать на удалённый сервер. Объём папки около 8ТБ, между серверами 1Гб/с.
Бэкапы — копии виртуальных жёстких дисков, поэтому между синхронизациями должны изменяться несильно.
Пытаюсь по rsync. Очень долго тупит вначале. Потом медленно-медленно копирует. С диска читает со скоростью 20-30МБ/с, в результате время копирования чуть ли не больше, чем копировать целиком. В процессах показывает, что загружает одной ядро ЦП (из 24) и, похоже, из-за этого тормозит.
Есть что-то более адекватное? А в идеале, чтобы можно было посчитанные контрольные суммы на удалённом сервере держать в файле рядом, а не заново пересчитывать все 8 терабайт.
Как правильно его использовать?
В 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!, а остальное игнорировать? Или делать макрос со сторонним эффектом времени компиляции?
Появляется горизонтальная прокрутка в теме black при просмотре комментариев. Например, по адресу Верните формат даты взад.
Проверил на Linux (Firefox 65.0.1), Windows (Firefox, Chrome).
Прокрутка пропадает при уменьшении ширины окна примерно до 670 пикселей. Зато появляется прокрутка в этом окне (где я сейчас пишу). Здесь точно вижу, что за границы выходят поля Заглавие и Метки.
Параметры монитора
screen #0:
dimensions: 3840x2160 pixels (610x343 millimeters)
resolution: 160x160 dots per inch
Простейший пример
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?
Хочу написать программу. Идеологически хочу её сделать как пачку микросервисов, но не хочу привязываться к конкретному языку программирования.
Поэтому нужен протокол для общения между микросервисами. Нашёл https://github.com/hprose : высокая скорость, много поддерживаемых языков. Но хочу уточнить, может есть уже что-то более популярное.
Как определяется, в какую сторону должно быть обобщение?
То есть, при решении конкретной задачи как определить, что должно быть параметром, а что — неизменяемой частью.
Например, есть задача «получить сумму от 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();
Как для произвольного алгоритма определяется, что является параметром, а что неизменяемой частью?
Внимательное прочтение GPL оставило впечатление, что некоторые случаи добросовестного использования на самом деле нарушают GPL.
Согласно GPL, продавец телефона должен передать покупателю исходные коды программ под GPL, входящих в версию Android на телефоне.
Если я неправ, можете указать где?
Если в обычном языке есть выражение типа f1() + f2() + f3(), то в Хаскелле, если эти функции имеют побочные эффекты, приходится писать
do
tmp1 <- f1
tmp2 <- f2
tmp3 <- f3
return tmp1+tmp2+tmp3
Можно ли как-нибудь написать то же самое без промежуточных переменных?
следующие → |