LINUX.ORG.RU

Избранные сообщения SAA

собираю xcp (Centos 6) по инструкции, ошибка в стадии линк

Форум — Linux-install

Привет! Есть инструкция: http://wiki.xen.org/wiki/XCP_Building_Instructions собираю по ней, прорвался уже до стадии линк ... в проекте xen-api но вот в этой комманде:

ocamlfind ocamlopt -package oclock,xml-light2,cdrom,pciutil,sexpr,log,stunnel,http-svr,xen-utils,netdev,tapctl,rpclib,nbd.unix,xenstore-compat,xenctrl,uuid,gzip,libvhd,sha1,xenctrl,xenctrlext,xenstore-compat,cpuid -g -dtypes -thread -warn-error +a-4-6-9-27-28-29 -ccopt -fPIC -I ../idl -I ../idl/ocaml_backend -I ../autogen -I ../database/ -I ../xenops -I ../xva -I ../util -I ../auth -I ../license -I ../client_records -I ../rfb -I ../gpg -I ../network -I ../rrdd/interface -I .. -o sparse_dd.opt ../fhs.cmxa ../util/version.cmxa ../util/vm_memory_constraints.cmxa ../util/sanitycheck.cmxa ../util/stats.cmxa ../idl/ocaml_backend/common.cmxa ../idl/ocaml_backend/client.cmxa ../idl/ocaml_backend/server.cmxa ../util/ocamltest.cmxa ../xenops/xenops_client.cmxa /root/.opam/4.00.1/lib/libvhd/libvhd.cmxa ../auth/pam.cmxa sparse_encoding.cmx ../util/stats.cmx sparse_dd.cmx -cclib -L/usr/lib64 -linkpkg
Возникает такая ошибка
/root/.opam/4.00.1/lib/libvhd/liblibvhd_stubs.a(vhd_stubs.o): In function `stub_vhd_open':
vhd_stubs.c:(.text+0x161): undefined reference to `vhd_open'
И такие ошибки по всему функционалу из blktap http://wiki.xen.org/wiki/Blktap который был как-то реализован в виде пакетов opam с библиотеками для OCaml-а, один из которых libvhd используется при линковке. Как это победить, как понять, почему библиотеки libvhd собираются и устанавливаются в указанный путь (!без ошибок!), но проект с ними не линкуется.

 , , xen-api

vugluscr1991
()

vps benchmark - проверь свой vps

Форум — Talks

Взял недавно эккаунт digitalocean на 1GB ram.
А когда начал настраивать систему, показалось, что уж очень долго софт ставится.

В общем, запускал несколько тестов для CPU/IO/RAM. Результаты ниже.

# dd bs=1M count=512 if=/dev/zero of=test conv=fdatasync
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 12.8017 s, 41.9 MB/s

#  sysbench --test=cpu --cpu-max-prime=20000 run
sysbench 0.4.12:  multi-threaded system evaluation benchmark
Test execution summary:
    total time:                          95.6198s

# sysbench --test=memory --memory-total-size=1G run
sysbench 0.4.12:  multi-threaded system evaluation benchmark
Test execution summary:
    total time:                          6.2309s

# ioping . -c 10
10 requests completed in 9057.0 ms, 639 iops, 2.5 mb/s
min/avg/max/mdev = 1.2/1.6/2.4/0.3 ms

# ioping -RD .
2237 requests completed in 3000.5 ms, 1302 iops, 5.1 mb/s
min/avg/max/mdev = 0.3/0.8/2.8/0.2 ms

# ioping -RL .
872 requests completed in 3001.7 ms, 443 iops, 110.9 mb/s
min/avg/max/mdev = 1.1/2.3/4.0/0.6 ms

# ioping -RC .
4979 requests completed in 2999.9 ms, 17653 iops, 69.0 mb/s
min/avg/max/mdev = 0.0/0.1/0.4/0.0 ms

# wget cachefly.cachefly.net/100mb.test
100%[======================================>] 104,857,600 13.5M/s   in 7.0s    

Попробуйте потестить свой vps хостинг, было бы интересно сравнить производительность.

C
()

Требуется системный администратор Linux, удаленно

Форум — Job

В небольшую зарубежную IT-компанию для нового e-commerce проекта требуется системный администратор Linux, удаленно. Нужно будет настраивать и поддерживать bind, nginx, postgresql, heartbeat, exim, proftpd, nfs, iptables, network tunnels, proxy, apt repository, network monitoring system на серверах с Ubuntu 10.04 и 12.04.

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

Требования

  • Хорошее знание Ubuntu
  • Опыт использования и настройки вышеуказанного ПО
  • Опыт администрирования масштабируемых вычислительных систем для высоконагруженных веб-приложений
  • Умение создавать .deb пакеты из исходников с нужными опциями
  • Умение автоматизировать задачи на perl, python, bash или др.
  • Умение документировать конфигурации и настройки серверов
  • Технический английский на уровне свободного чтения документации

Условия

  • Работа удаленная
  • Оплата почасовая - $25/час, при желании можно договориться о фиксированной сумме в месяц
  • Потребуется отработки около 20 часов в месяц
  • Доступность 8 часов в течении рабочего дня

Контакт

getjob@ro.ru

jack9
()

systemd таки не торт

Форум — Talks

UP: оно в dmesg написало о проблемах в конфиге, как мило

Похоже, отсутствует вообще какая-либо валидация конфигов: ограничить размеры journal (комментарий)

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

1) клиент поправил config.php и вставил в начале пустую строку. Обычно результат Headers already sent, но в его случае была пустая страница и ошибка соединения с базой (c). После этого пых я возненавидел навсегда. Вообще, про пых я могу долго рассказывать.

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

3) Некоторые софтины могут собираться с разными модулями которые настраиваются в общем конфиге. И если софт молча игнорирует нераспознанные директивы то это тоже приводит к проблемам.

В общем, не думал что валидация конфигов в 2013 году это проблема.

 

true_admin
()

HTTPS и SSH на одном порту - можно ли?

Форум — General

По некоторым причинам на работе заблочены исходящие соединения на все порты кроме 80 и 443 (хотя я на 100% не уверен и если подскажете, как точно узнать, буду благодарен). На своем домашнем сервачке настроил ssh на 443 порт, все хорошо работает, но потерял https. Что можно тут придумать? И ssh нужен и https терять не хочется (и http, естественно).

Можно веб-консоль какую-нибудь воткнуть, но оно так убого по-моему... И как сокс-прокси не будет работать, иногда надо.

Legioner
()

не спрашивать пароль рута с локальной консоли

Форум — Admin

Сабж. Как?

Нужно для работы с виртуалками. Про заход по ssh с ключом я в курсе.

UP: считайте это задачкой на понимание PAM. Я играюсь с системой, мне не надо советовать sudo итп.

 ,

true_admin
()

Архитектура приложения

Форум — Development

Я пишу на Python и C небольшие утилиты и скрипты, но хочется чего-то более серьезного и изящного. Какую литературу можно почитать по построению хорошей архитектуры приложений?

 ,

foreigner_web
()

Маргинальщина во все поля

Галерея — Скриншоты

Сменив работу, решил немного подправить свой боевой emacs и вот что из этого вышло:

  • в стабильный Debian был воткнут emacs-snapshot;
  • прикручена тема zenburn, убран меню-бар и всякая лишняя обвеска;
  • в качестве ШГ уже достаточно давно использую terminus;
  • кроме того, прикрутил подсветку текущей строки и выпирающих концов длинных строк, которые выделяются красным цветом.

Теперь по скриншоту. Слева видны полируемые исходники модуля для ejabberd. Для работы с Erlang использую EDTS, который может почти всё и не тормозит как erlang-mode.

Для ускорения эрланга в узких местах иcпользую ocaml. Когда возможностей окамла не хватает или нужно доказывать некоторые утверждения о коде, использую coq.

Работу с окамлом обеспечивает tuareg-mode, а исходниками на coq заведует ProofGeneral.

Ругайте.

>>> Просмотр (1920x1080, 77 Kb)

 , , ,

ymn
()

13.04

Галерея — Скриншоты

Я был абсолютно апатичен к выходу 12.10, поскольку 12.04 доставляла некоторые расстройства в плане стабильности некоторого софта, коим пользуюсь, ну и сами системные вещи эпизодически сбоят. И это LTS релиз, посему к 12.10 я отнесся как к глубокой альфе.

Последний месяц на WebUpd8 запестрили новости про новшества предстоящего релиза и я соблазнился на установку beta2. Буду краток - по моим субъективным ощущениям она стабильней 12.04 и 12.10 вместе взятые.

Позитивно отразилось появление в рядах Каноникал дизайнера Matthieu James, автора Faenza иконок, которые побили все рекорды по установкам в замен дефолтных.

Юнити шлифанули весьма знатно. Существенно быстрее стала.

Дефолтная тема убунты не изменилась, посему ее место на моем ноуте заняла Numix, которая, кмк, более эстетичней.

В остальном как обычно - шрифты Cuprum с PragmataPro и нескучные обои, гармонирующие с цветовой схемой numix и весенним настроением (http://www.deviantart.com/art/June-first-render-82900078)

PS: качество png ухудшилось после пребывания в гуглоплюсе (оригинала под рукой не оказалось). В таком виде G+ отдает файл при попытке «скачать оригинал», хотя есть посмотреть напрямую (http://goo.gl/Z4kf3), то все ок.

UPD: по многочисленным просьбам :) выложил еще несколько скриншотов. Смотреть здесь: https://plus.google.com/101098868696290882303/posts/7BkhmARtYJR

>>> Просмотр (1280x800, 249 Kb)

 

Deleted
()

Выбор банка и способа накопления средств

Форум — Talks

Добрый день! Передо мной стала сложная зада, требующая правильного решения в самом начале - нужно выбрать способ хранения денег. Сейчас зарплата приходит на visa classic от Газпромбанка.
Планирую перечислять сумму n каждый месяц на какой либо счет/карту. Желательно без прямого контакта с банкоматом. просто взял и перечислил. Поэтому думается, что должна быть так же visa. У бывалых - в каком банке лучше сделать, где самое классное обслуживание и удобный интернетбанк, какую именно visa выбрать? Возможно посоветуете альтернативные способы, буду только рад!

matroskin
()

Реквестирую возможность доступа к linux.org.ru по IPv6

Форум — Linux-org-ru

SUBJ. cast maxcom

 

Chaser_Andrey
()

Как заставить Emacs игнорировать раскладку.

Форум — Desktop

Помимо программирования, я набираю в emacsе документы (ТеХ), на русском. Как заставить емакс игнорировать раскладку, чтобы не нужно было переключаться на английскую?

 

aptyp
()

За что не любят Common Lisp?

Форум — Talks

Следуя трaдициям, например SUBJ.

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

Дизайн:

  • большая стандартная библиотека (раздутый стандарт)
  • много повторяющихся функции деляющих почти одно и то же
  • не совсем вменяемые имена функций
  • не совсем доделанная пакетная система
  • MOP не успел попасть в стандарт

B остальном все устараивает, а с выше перечисленным можно жить)

Прошлое:

  • медленные реализации (медленное железо)
  • дорогие лисп-машины
  • дорогой лисп-софт
  • AI Winter
  • профуканы все полимеры еффективными манеджерами Symbolics

Настоящее:

  • не достаточно библиотек на все случаи, приходится пилить свои
  • не совсем качественные библиотеки, приходится снова брать напильник

В остальном все прекрасно и ситуация с библиотеками постепенно исправляется.

 , ,

gensym
()

Что круче: Лисп или Хаскелль?

Форум — Development

А так же почему гуглевый тренд показывает стабильный рост интереса к Хаскеллю и, как минимум, стабильное отсутствие роста интереса к лиспам.

mv
()

[scheme][haskell][oop][fp] Мысли вслух

Форум — Development

Была на ЛОРе такая тема — [Haskell] простой вопрос. Хотелось бы немножко её развить и высказаться на тему предпочтения того или иного языка при изучении ФП (графомания mode on :)).

У Scheme есть довольно давняя история использования в качестве подопытного языка в курсах изучения ФП. Я не знаю чем это вызвано, но факт остаётся фактом — есть известный курс у MIT (или был?) и разные полезные книжки — SICP, HTDP, PLAI, OOPLAI, которые обычно и советуют читать если нужно ознакомиться с ФП.

Касательно SICP — одним из сторонников использования ML для целей изучения ФП была написана статья (http://www.cs.kent.ac.uk/people/staff/dat/miranda/wadler87.pdf) в которой достаточно хорошо освещены некоторые недостатки Scheme. Если говорить про Haskell, то тут всё так же. Далее, по пунктам (опуская кое-что из того что уже было в той статье).

Более явный синтаксис

Вместо

(define (foo x y z)
  (if (> (+ x (* y z) 1) 7) (print (+ x y)) (print (- x y))))

будет

foo x y z = if x + y * z + 1 > 7 then print $ x + y else print $ x - y

при этом по-прежнему можно написать выражение в префиксной форме:

(if' ((>) ((+) x ((*) y z) 1) 7) (print ((+) x y)) (print ((-) x y)))

почти как в Scheme. То есть, кроме префикса также есть (расширяемый пользователем) инфикс (в том числе функции вроде ($) и (.) позволяющие в некоторых случаях опускать лишние аргументы у функций и некоторые скобки в выражениях) и разные специальные формы (вроде if, let, лямбды и т.п.). Во всём что не касается макросов это более удобно. S-выражения обретают свой особый смысл только когда доходит до их цитирования:

'(if (> (+ x (* y z) 1) 7) (print (+ x y)) (print (- x y)))

и разбора с целью написания макросов. Тем не менее, для изучения именно ФП эта возможность незначительна (ФП не про макросы, в SICP и HTDP не ни слова про макросы, в PLAI есть только немного, в OOPLAI — побольше). Про то как правильно (ну, _правильно_, то есть без использования s-выражений) организовывать символьные вычисления (вроде дифференцирования из SICP) также расказывается в упомянутой статье.

Каррированные функции

Такое определение, например:

(define add
  (lambda (n)
    (lambda (m)
      (+ m n))))

заменяется простым

add = (+)

так как все функции уже каррированные (позволяют частичное применение). Фактически, в хаскеле функция с n аргументами сразу задаёт n разных функций (выбор конкретной функции осуществляется во время компиляции и не имеет эффекта во время выполнения). Некаррированные функции это функции от кортежей (те и другие переводятся друг в друга с помощью ФВП carry/uncarry).

Частичное применение, секции, pointfree запись

add2 = (+ 2)

add2 5
7

вместо

(define add2 (add 2))

(add2 5)
7

Мутабельные замыкания

Это единственная вещь которая есть в Scheme и которую можно не увидеть сразу в хаскеле (и про неё нет в той статье). Тот тред был как раз про них. Чтобы прояснить этот момент, ниже приводятся некоторые примеры из OOPLAI и их аналоги на хаскеле.

Простейший вариант:

(define counter
  (let ((count 0))
    (lambda ()
      (begin
        (set! count (add1 count))
        count))))

(counter)
1
(counter)
2

аналог:

counter = (=~ (+ 1)) <$> new 0

тут (=~ (+ 1)) играет роль мутирующего «метода», а (new 0) — мутируемого «объекта», (<$>) — применение «диспетчера» (тут — просто единичный анонимный «метод»). Вся конструкция функториальная (не монадическая). Использование:

ctr <- counter      -- Инстанцирование класса counter объектом ctr.
ctr                 -- Применение единственного метода ((=~ (+ 1)) который).
1                   -- Результат.
ctr                 -- Снова.
2                   -- Другой результат.

Чуть более сложный пример:

(define counter-
  (let ((count 0))
    (lambda (cmd)
      (case cmd
        ((dec) (begin
                 (set! count (sub1 count))
                 count))
        ((inc) (begin
                 (set! count (add1 count))
                 count))))))

(counter- 'inc)
1
(counter- 'dec)
0

Для начала определим имена методов dec и inc:

data CounterMethod = Dec | Inc

это не символы и не строки (так что код не будет ill-typed как в примере на Scheme, иначе говоря, применение несуществующего метода не пройдёт компиляции). И теперь функцию:

counter' = dispatch <$> new 0
  where dispatch obj Dec = obj =~ flip (-) 1
        dispatch obj Inc = obj =~ (+ 1)

тут dispatch играет роль диспетчеризирующей функции которая получает объект (obj) и имя метода, а затем изменяет объект (как того требует метод). (new 0) — начальный объект.

Пример:

ctr <- counter'     -- Инстанцирование класса counter' объектом ctr.
ctr Inc             -- Применение метода Inc на объекте ctr.
1
ctr Inc
2
ctr Inc
3
ctr Dec             -- Тут уже метод Dec.
2
ctr Dec
1
ctr Dec
0

Тут применение (ctr Inc) весьма похоже на каноничное, через точку, obj.method и является, по сути, посылкой сообщения объекту.

Третий пример:

(define stack
  (let ((vals '()))
    (define (pop)
      (if (empty? vals)
          (error "cannot pop from an empty stack")
        (let ((val (car vals)))
          (set! vals (cdr vals))
          val)))
    (define (push val)
      (set! vals (cons val vals)))
    (define (peek)
      (if (empty? vals)
          (error "cannot peek from an empty stack")
        (car vals)))
    (lambda (cmd . args)
       (case cmd
         ((pop) (pop))
         ((push) (push (car args)))
         ((peek) (peek))
         (else (error "invalid command")))))) 

(stack 'push 1)
(stack 'push 2)
(stack 'pop)
2
(stack 'peek)
1
(stack 'pop)
1
(stack 'pop)
; cannot pop from an empty stack

аналогично:

data StackMethod = Pop | Push | Peek

stack = dispatch <$> new []
  where
    dispatch x Pop _  = get x >>= (x =~ tail >>) . return . head
    dispatch x Push y = x =~ (y :) >> return y
    dispatch x Peek _ = head <$> get x

и пример:

stk <- stack :: IO (StackMethod -> Int -> IO Int)
                    -- stack это параметрически-полиморфный класс, в данном
                    -- случае берётся его спецификация когда элементы стека
                    -- имеют тип Int (можно взять что-то более общее).
                    -- Этот специфичный класс инстанцируется объектом stk.
mapM_ (stk Push) [1, 2, 3]
                    -- (stk Push) это применение метода Push на объекте stk,
                    -- с помощью ФВП mapM_ оно производится для всех элементов
                    -- списка.
repeat 4 $ stk Pop __ >>= print
                    -- 4 раза вызывается метод Pop, элементы печатаются.
                    -- Последний раз вызывается исключение (так как стек пуст).
3
2
1
*** Exception: Prelude.head: empty list

тут точно так же — в StackMethod перечислены нужные методы для стека, функция stack определяет класс, то есть объединение данных и функций с нужным поведением, она имеет тип IO (StackMethod -> a -> IO a), то есть принимает метод, элемент стека и возвращает элемент стека (в IO, мутабельно), сама функция в IO (вся структура данных ведёт себя мутабельно).

Дальше в OOPLAI начинают использовать макросы для придания более удобоваримого вида этим конструкциям. В настоящем (ну, _настоящем_ :)) ФП этого не нужно — примитивные ООП конструкции объединяющие данные и функции выглядят естественно и так, и являются частным случаем использования ФВП, IO и ADT с паттерн-матчингом (последние два — для удобства). Использование макро-системы может иметь смысл разве что если действительно нужно реализовать сложную ООП систему (например, со множественным наследованием и изменяемой иерархией классов, впрочем, обойтись одними функциями тут тоже можно, просто придётся делать больше механических действий).

Ещё пример:

-- | Данные — конструктор и аккессоры.
data Point = Point
  { x :: Double
  , y :: Double
  } deriving ( Show, Eq ) -- ad-hoc перегруженные функции.

-- | Методы привязываемые к данным (это уже _не_ ad-hoc перегруженные функции).
data PointMethod = Pos | Mov

-- | Класс (= функция), объединяющий данные и методы.
pointClass :: Double -> Double -> IO (PointMethod -> Double -> Double -> IO Point)
pointClass initX initY = dispatch <$> new (Point initX initY)
  where
    -- | (Динамический) диспетчер по методам. Он принимает объект (Var Point),
    -- имя метода (PointMethod, т.е. статическое, в данном случае, сообщение)
    -- и два опционных аргумента для методов (Double -> Double). Эту функцию
    -- можно помещать непосредственно в Point.
    dispatch :: Var Point -> PointMethod -> Double -> Double -> IO Point
    dispatch obj Pos _ _ = get obj
    dispatch obj Mov x y = obj =: Point x y
pnt <- pointClass 2 4         -- Инстанцирование класса pointClass объектом pnt
                              -- с начальными значениями полей 2 и 4.
:t pnt
pnt :: PointMethod -> Double -> Double -> IO Point
pnt Pos __ __                 -- Вызов метода Pos на объекте pnt.
Point {x = 2.0, y = 4.0}
pnt Mov 3 5                   -- Вызов метода Mov.
Point {x = 3.0, y = 5.0}
pnt Pos __ __                 -- Положение изменилось:
{x = 3.0, y = 5.0}

Нужно заметить, что это всё довольно примитивные конструкции (простые функции и IO). В случае использования ADT для имён методов получится динамическая диспетчеризация с фиксированным набором методов (well-typed), если же переписать функцию dispatch с завязкой на хэш-табличку (которая должна быть переменной в данных класса), то будет динамическая диспетчеризация с пополняемым набором методов и перегруженными методами (одни и те же сообщения можно посылать разным инстанцированным объектам, их dispatch будет их искать в хэш-таблице и обрабатывать, это уже ill-typed, то есть с исключениями вида «нет такого метода»). Разные прочие вещи вроде наследования и self точно также можно изобразить (аггрегация данных, представление иерархии классов в данных (в переменной или нет, в зависимости от возможности менять иерархию) и более сложная функция dispatch), но как-то не интересно.

P.S.

Код на хаскеле использует такие упрощения:

import Prelude hiding ( repeat )
import Data.IORef
import Control.Applicative
import Control.Monad

type Var a = IORef a

new :: a -> IO (IORef a)
new = newIORef

get :: IORef a -> IO a
get = readIORef

(=~) :: IORef a -> (a -> a) -> IO a
x =~ f = modifyIORef x f >> get x

(=:) :: IORef a -> a -> IO a
x =: x' = x =~ const x'

repeat :: Monad m => Int -> m a -> m ()
repeat = replicateM_

__ :: a
__ = undefined

P.P.S.

OOP / ООП в контексте данного поста — объектно-ориентированное программирование в духе объединения данных и процедур, то есть в духе C++, Java, Python и т.п. _Не_ ООП в духе классы = структуры, методы = перегруженные функции, наследование = схемы агрегаций и распространения методов (как это в CLOS и классах типов Haskell).

 , ,

quasimoto
()

Html-кнопка на выполнение bash-скрипта.

Форум — Development

Доброго времени суток) Хочу жать в браузере на кнопочку и чтобы запускалась программа, например C++ исполняемый файл. Можно ли это сделать, если да, то как? Если есть какое-то элегантное решение - буду благодарен за совет.

p.s. я новичок в общении с Линуксом и с Bash'ем в частности. Возможно не понимаю каких-то простых вещей. Все крутится на сервере boa, который не хочет работать с php. Если есть альтернатива bash, это тоже вариант.

 , boa,

Nikopol9
()

Python c чего начать?

Форум — Development

Aloha amigos

С какой версии бы начать изучать python, так как если я правильно понял между версиями 2.х - 3.х есть различия.

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

С программированием знаком. В данный момент всякие тривиальные скрипты пишу на python,

 , ,

crimson
()

\[C#, F#, Haskell\]Метапрограммирование в статических ЯП

Форум — Development

Есть вполне конкретная задача. Нужно типизировать достаточно большой объем данных. Есть описания типов и правила, по которым из этих описаний можно построить типы. Пример описания: (A nil nil (m :type Object :arg «m» :get t :set t)), это просто из головы, что значит - тип A, не имеет базового типа, не реализует интерфейсов, имеет слот m, который при создании типа должен быть взят из входных данных(имеющих заранее известный тип) по ключу «m» и для которого есть стандартные методы get и set.

Дело в том, что объект типа A создается по xml и является его типизированным описанием. К примеру, для инициализации типа A подойдет следующий xml:

<item> <m> I'mm </m> </item>

не очень важно но мало ли - есть описания обобщенных типов, и способ решения коллизий, если по одним входным типам можно построить несколько типов, к примеру если есть тип B =eq= A

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

К примеру, решение такой задачи на том же Common Lisp, выглядит вполне простым, это ничто иное как:

  • iDSL для описания типов
  • макрос, содержащий логику вывода/создания типа из iDSL

    Интересует, в первую очередь, подход для C# или F#, но интересно посмотреть на любой строго типизированный ЯП

 , ,

pseudo-cat
()

О хвостовой рекурсии

Форум — Development

Или с чем ее едят и как ее готовят? Набрел на статью в Википедии, ознакомился, сделал сравнительный замер времени выполнения для приведенного там примера. Результаты впечатлили, особенно если учесть, что тестировал я это для Scala с включенной оптимизацией.пиляторы

Собственно вопросов два.

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

2. Какие еще популярные ЯП и компиляторы поддерживают оптимизацию данного вида рекурсии?

Всем спасибо.

 

LongLiveUbuntu
()

Oracle наносит ответный удар

Форум — Talks

Компания Oracle открыла публичный Git-репозиторий для отслеживания изменений ядра RHEL

Как известно, начиная с ветки RHEL 6, компания Red Hat прекратила формирование детализированного набора патчей для используемого в дистрибутиве варианта ядра Linux, перейдя к практике выпуска одного большого смешанного патча. Несмотря на формальную открытость кода сводного патча под лицензией GPL, из него очень трудно выделить суть вносимых изменений. Компания Oracle решила упростить жизнь разработчикам ядра и создателям дистрибутивов, запустив проект RedPatch.

В рамках проекта RedPatch создан публичный Git-репозиторий, в котором публикуются результаты анализа изменений ядра Linux, поставляемого в составе дистрибутива RHEL 6. Репозиторий примечателен тем, что все патчи в нём разделены и структурированы, что позволяет рассмотреть каждое исправление по отдельности, ясно оценить, что делает каждый патч и при необходимости использовать их в своих нуждах. По возможности, для патчей выявляются и указываются связанные с ними коммиты в основную ветку ядра Linux. Работа по анализу патчей в ядре RHEL ведётся сотрудниками Oracle, вовлечёнными в разработку Ksplice-обновлений, с целью более ясного понимания сути вносимых компанией Red Hat исправлений проблем безопасности.

Взято с OpenNet

 ,

kernelpanic
()