LINUX.ORG.RU

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

Потрогать палочкой функциональщину

Форум — Development

Привет всем. На фоне последних тем про всякие там лиспы и хаскелли возникло желание тоже стать «крутым» (ибо знание линукса уже крутостью не является) и поглядеть какой-нибудь из них.

А если серьезно, то хочется какой-нибудь функциональный язык, но не древний как экскременты мамонта и такой, чтобы хоть с вероятностью 0.0001 я мог бы применить в разработке. Что посоветуете? F#? Haskell? Scheme? Lisp?

 

GreenBag
()

Человеческое метапрограммирование

Форум — Development

Подскажите кто-нибудь ЯП с развитой метасистемой, только нормальный, а не лисп.

Ndulu
()

Накидайте годных тестовых заданий для Perl-программиста

Форум — Talks

Не спрашивайте зачем :)

 

Jills
()

сборка мусора - зацените идейку

Форум — Development

Доброго!

Как я понял, поколенческая сборка мусора требует некоторых дополнительных действий при каждом создании или изменении ссылки, чтобы отследить ссылки старого объекта на молодой. Почему бы тогда не обобщить понятие «поколения» на понятие «область хранения» и не позволить пользователю явно управлять областями? Например, ввести глобальную (поточную) переменную «текущая область хранения» и всё выделение по умолчанию вести в этой области. Или добавить параметр в конструктор (хотя это требует переделки языка). Области могут быть упорядочены в иерархию и тогда нужно будет отслеживать только ссылки «старших» на «младших» по иерархии. Или они могут составлять произвольный граф и тогда нужно отслеживать все ссылки. Причём, можно отслеживать ссылки как тонко (на уровне объектов), так и грубо (на уровне областей). Например, мы знаем, что область A ссылается на область B. Тогда, чтобы собрать мусор в области B, нам нужно искать корни также в области А. Самое главное, если на область B вообще никто не ссылается, то мы можем одним махом убить все объекты в области B.

Например, если у нас есть какое-то чисто функциональное вычисление, которое порождает много промежуточных объектов, а потом возвращает небольшую часть этих объектов в качестве результата, мы можем создать для этого вычисления временную область X и проводить вычисления в ней (на неё никто не ссылается). А когда результат будет получен, мы скопируем его в другую область Y и уничтожим всю область X.

den73
()

Контейнеры в C

Форум — Development

Будучи сиплюсплюсником, меня давно интересует как те же задачи выполняются в C. Знаю, на ЛОРе есть множество приверженцев C, надеюсь они ответят на пару простых вопросов.

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

Не будем зарываться в дебри boost'а, возьмём простую задачу - контейнеры.

Для примера я взял односвязные списки в GTK GSList и Qt QList. QList позволяет хранить как простые, так и сложные типы с конструкторами, деструкторами, типы с общими данными. При этом накладных расходов на выделение в куче не происходит, а при реаллокации выбирается нужный алгоритм в зависимости от QTypeInfo<T>, к примеру для int будет вызван memcpy(), а для QString оператор копирования. Кроме того блок данных заранее резервируется и для сложных типов вызывается placement constructor. Для удаления данных по указателям используется алгоритм qDeleteAll(from,to), который сам дёрнет нужные конструкторы. Беглый просмотр GSList показал, что в нём можно хранить только указатели, со всеми вытекающими накладными расходами на аллокацию/уничтожение памяти, ручное кастирование, слежение за утечками, фрагментацию памяти.

Аналогичная ситуация со связными списками GList и QLinkedList.

Это даже не затрагивая вопрос о типизации, в C++ компилятор сразу даст по рукам при попытке записать в контейнер неверный тип или с помощью неявного преобразования с explicit-конструктором.

Далее, счётчики ссылок и деструкторы.

К примеру, в C++ список строк будет выглядеть как QList<QString>, при этом можно забыть про внутреннюю структуру строки - конструктор, деструктор и операторы копирования сами занимаются подсчётом ссылок, разделением и уничтожением данных. Вернуть строку из функции проще простого:

QString foo()
{
    return listOfStrings.at( 5 );
}

Этот код абсолютно безопасен и оптимален с точки зрения использования памяти и процессора, поскольку время тратится только на увеличение счётчика и копирование указателя.

В GTK я сходу нашёл GString:

struct GString 
{
  gchar *str;
  gint len;
};

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

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

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

Dendy
()

Полезные библиотеки общего назначения для ANSI C

Форум — Development

Всем привет :)

Лирическое отступелние: давно я основательно не брался за C (лет 7 наверное), а тут что-то ностальгия пробила, решил вспомнить молодость :)

Вопрос: для «крестов» есть STL и Boost, а какие хорошие библиотеки с контейнерами, коллекциями и прочим блекждеком и графами есть для ANSI C? Не писать же каждый раз свой велосипед. И еще: у D есть Phobos (стандартная библиотека) и Tango (написанная сообществом, т.к. первая всем показалась убогой). Есть ли у сишечки какие-либо интересные альтернативные stdlib'у реализации с собственным интерфейсом?

Да-да, про Glib и libdict я знаю. А чем пользуется сам ЛОР?

 , ,

Boba_Fett
()

Космос/косманавты и не только/кино

Форум — Talks

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

amorpher
()

Помогите осилить Church encoding

Форум — Talks

сабж: http://en.wikipedia.org/wiki/Church_encoding

код на scheme (это вообще задача из сикп, но мне теория показалась занимательной):

(define zero (lambda (f) (lambda (x) x)))

(define (add-1 n)
   (lambda (f) (lambda (x) (f ((n f) x)))))

Непонятно, что есть zero, а также непонятно, как использовать обе процедуры. Ясно, что это какая-то композиция, но чувствую необходимость спросить помощи.

 church encoding, ,

cdshines
()

Дмитрий Завалишин рассказал о себе, своих взглядах на софт и, конечно, об ОС «Фантом»

Новости — Open Source
Группа Open Source

В Компьютерре-онлайн опубликовано интервью с Дмитрием Завалишиным - создателем ядра операционной системы «Фантом», в которой программы работают «вечно», программировать можно без учёта сохранения данных, а программы легко обмениваются сложными объектными структурами.

Из интересных подробностей:

  • Ядро «Фантома» уже практически готово, частично реализована графическая среда.
  • Под «Фантомом» будет запускаться код, написанный для Unix или Linux, но его придётся модифицировать (к примеру, из-за отсутствия XWindow).
  • Завалишин не любит GPL и считает, что «если уж отдавать, то не ставить условий».
  • Если всё пойдёт по плану, то в «Фантоме» можно будет реализовать интерфейс, где значок программы и её окно - это один и тот же объект, а окна можно будет чуть ли не отправлять по электронной почте.

Тех, кто осилит прочесть все 50 тысяч знаков ждут всякие бонусы в виде баек про времена ЕС ЭВМ и рассказа о том, как в DZ делают системы датчиков для «Мосводоканала».

>>> Интервью

 , ,

apismenny
()

Плагины для vim

Форум — Talks

Кто какие плагины использует? Недавно открыл для себя всю гибкость и мощь вима, посему и назрел такой вопрос. Насоветуйте.
PS: Использую vim для написания кода на c++ и обыкновенной правки текста, конфигов etc.

 

f1xmAn
()

Виртуальные машины

Форум — Development

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

Беглый просмотр гугла выдал русскую книжку Свердлова в которой есть глава с построением стековой VM, по стековым VM я ещё когда-то давно листал методичку Forth'а.

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

 ,

Norgat
()