LINUX.ORG.RU

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

Interim OS 2015 - минималистичная ОС для небольших компьютеров

Форум — Talks

Interim OS — новейшая ОС предназначенная для небольших компьютеров, вдохновленная идеями из лисп-машин (вся ОС, включая ядро доступны через REPL) и Plan9 (все есть файл). После загрузки ОС, пользователю предоставляется интерфейс в виде лиспового REPL (используется JIT компиляция), где пользователь может управлять ресурсами ОС через файловую систему (как в Plan9).

В данный момент Interim OS запускается на следующих конфигурациях:

  • Raspberry Pi 2 (Broadcom VideoCore4/ARMv7, Bare Metal)
  • Olimex Olinuxino (Freescale IMX233/ARMv5, Bare Metal)
  • ARM5+ Linux (Hosted)
  • Intel/AMD x64 Linux (Hosted)

Основные идеи ОС:

  • оболочка — это редактор — это REPL — это язык (лисп) — это компилятор
  • namespace'ы используются для песочниц и сетевой прозрачности
  • только одна и основная кодировка для всех — UTF-8
  • все управляется с клавиатуры

Страница проекта:

http://interim.mntmn.com

Исходные коды проекта:

https://github.com/mntmn/interim

 , ,

Oxdeadbeef
()

The Advanced Rust Programming Language (книга)

Форум — Development

Выложили черновик книги «The Advanced Rust Programming Language».

https://doc.rust-lang.org/nightly/adv-book

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

 

ozkriff
()

Второй выпуск «Вестника I2P»

Новости — Безопасность
Группа Безопасность

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

В этом номере:

( читать дальше... )

Первый выпуск можно найти тут

>>> Загрузить PDF

 

vurdalak
()

Emacs вполне себе IDE для Rust (Хауту по настройке)

Форум — Development

Тут некоторые жалуются, что для Rust совершенно никакой ide нет, мол писать в блокнотах тяжко. Поэтому решил расписать step-by-step настройку Emacs под Rust - автодополнение, подсветка там всякая, все как положено, может кому пригодиться: http://reangdblog.blogspot.com/2015/04/emacs-ide-rust.html

Перемещено JB из general

 , ,

ReanGD
()

Изучайте Си и одновременно реализуйте свой язык программирования Лисп всего в 1000 строк

Форум — Development

Если вы хотите изучить Си, или вам стало интересно как реализовать свой язык программирования, пройдите по ссылке!

Подробнее: http://www.buildyourownlisp.com

Прочитать онлайн: http://www.buildyourownlisp.com/contents

 , ,

Oxdeadbeef
()

Сравнение Rust и C++ на примере трассировщика путей

Форум — Development

Тут как-то была тема про то, что хочется нормальное сравнение C++ и Rust. Вот эта серия статей, как мне кажется, вполне себе кандидат:

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

Разработка трассироващика путей на Rust`е, часть 7: Заключение

Чтобы изучить Rust, я портировал свой спекртальный трассировщик путей Luculentus на язык Rust. Результат я выложил на Github. В процессе я также немного обновил Luculentus, переведя его на более современный C++. Детали вы можете прочитать в прошлых постах. В этом же посте я хочу подвести итоги и сравнить результаты.

Картинка

Для начала, пример вывода трассировщика путей! Захардкоженная сцена выглядит вот так:

http://ruudvanasseldonk.com/images/robigo-luculenta.png

Если вам интересно что-то в ней изменить, то смотрите set_up_scene в app.rs.

Начало работы с Rust

В настоящий момент, вы можете установить компилятор Rust`а и Cargo за пару минут, даже в Windows. Да и заставить их работать было намного проще, чем, например, Scala и sbt.

Сообщество Rust`а показалось мне очень дружелюбным. Когда я не знал что делать, мне очень помогали IRC канал и /r/rust. Члены основной команды разработки языка есть и там и там, так что часто советы были весьма профессиональными.

На сегодняшний день Rust все еще быстро меняется. Во время процесса портирования порядочное количество функций были объявлены устаревшими или переименованы и даже синтаксис немного изменился. Некоторые люди описывают сегодняшний Rust как совершенно другой язык, сильно отличающийся от того, что было год назад, но я не использовал язык настолько долго, что бы почувствовать это. Все изменения в языке делают его лучше и более последовательным и я уверен, что Rust 1.0 будет отличным языком.

Владение

Если бы мне надо было описать Rust одним словом, это было бы «владение». Для меня, это то, что отличает Rust от остальных языков. В большинстве языков владение неявно и это приводит к нескольким типам ошибок. Когда в Си функция возвращает указатель, кто ответственен за освобождение памяти? Вы можете ответить на этот вопрос без подглядывания в документацию? И даже если вы знаете ответ, то все равно легко забыть освободить память или освободить ее дважды.

Проблема относится не только к указателям, она касается все ресурсов. Может показаться, что сборка мусора это отличное решение, но она работает только для памяти. Тогда вам нужен другой способ для освобождения ресурсов (вроде файловых дескрипторов) и все проблемы возвращаются. Например, сборщик мусора в C# спасает от ошибок «использования после освобождения» (use after free), но ничего не спасает вас от ошибок «использования после удаления» (use after dispose). Разве ObjectDisposedException намного лучше сегфолта? Из-за явного времени жизни и системы владения в Rust нет этих типов ошибок.

прим. ozkriff: поскольку я с C# знаком мало, то пришлось загуглить про этот ObjectDisposedException. Вот пример кода:

using System;
using System.IO;

public class ObjectDisposedExceptionTest 
{
   public static void Main()
   {     
      MemoryStream ms = new MemoryStream(16);
      ms.Close();
      try 
      {
         ms.ReadByte();
      }
      catch (ObjectDisposedException e) 
      {
         Console.WriteLine("Caught: {0}", e.Message);
      }
   }
}

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

Обновление Luculentus

Сами по себе достоинства явного владения не уникальны для Rust`а. Такой же код можно написать на современном C++, который очень сильно отличается от С++ до-2011. Когда я писал Luculentus, C++11 поддерживался только частично. Я использовал много простых указателей, которые сегодня уже не нужны. Я заменил большинство простых указателей в Luculentus на shared_ptr или unique_ptr, а массивы на векторы. Как следствие, все ручные деструкторы пропали. (Раньше их было шесть). Раньше было 11 операторов удаления, теперь их нет. Все управление памятью стало автоматическим. Это сделало код не только короче, но и снизило вероятность появления ошибок.

Портирование трассировщика путей на Rust улучшило его дизайн. Если ваше управление ресурсами некорректно, то код не скомпилируется. В C++ вы можете, например, взять адрес элемента вектора и, когда вектор уничтожится, указатель на элемент станет некорректным. Но код скомпилируется. Rust не позволяет таких «срезов» и это открыло мне глаза на то, о чем я не думал до этого. Теперь, даже работая с другими языками, я думаю, что если эта конструкция не скомпилировалась бы в Rust`е, то надо поискать путь получше.

Но все же, обновление демонстрирует, что возможно писать относительно безопасный код и на С++. Вы получаете безопасность и автоматическое управление памятью практически без накладных расходов. Единственной проблемой является то, что вы должны очень настойчиво стремиться к этому. Вы можете использовать unique_ptr, но так же можете и простой указатель. Все опасные инструменты «старого» С++ все еще доступны и вы можете смешивать их с новым С++. Конечно, есть определенная ценность в возможности собирать старый код (Бьерн называет это достоинством), но я бы предпочел не смешивать неявно эти две парадигмы и не поддерживать старые ошибочные решения. Требуется некоторое время, что бы разучиться использовать new и delete, но даже тогда старые API останутся с нами на очень долгое время.

Новое начало

Хорошим моментом в Rust является то, что он может начать все практически с чистого листа и учиться на ошибках старых языков. C++11 немного лучше своего предшественника, но он только добавляет новое и обязан поддерживать обратную совместимость. Одна из вещей, на которой это хорошо видно - синтаксис. В Rust, типы идут после имени и возвращаемый функцией тип идет после списка аргументов, что очень разумно. Синтаксис анонимных функций в Rust короток и в нем меньше повторения. Но я так и не могу привыкнуть к египетским скобкам, они до сих пор выглядят как-то не так.

Другим моментов, в котором Rust сделал правильный выбор, является мутабельность. В Rust`е все по-умолчанию неизменяемо, когда как в C++ наоборот. В коде Luculentus 535 раз появляется «const» (на момент написания). В Robigo Luculenta всего 97 «mut». Конечно, в C++ больше дублирования, но это все равно показывает, что неизменяемость по-умолчанию - лучше. Так же, компилятор Rust выдает предупреждение о переменных, которым не нужно быть изменяемыми, это тоже хорошо.

Несмотря на то, что синтаксис является делом вкуса, есть и измеряемые величины. Если я сравню количество непробельных символов в коде, то у С++ будет примерно 109 тысяч символов (не считая файлы, которые я не портировал на Rust), а у Rust - 74 тысячи. Почти на треть меньше.

C++ славится своими информативными и понятными сообщениями об ошибках, когда что-то идет не так в шаблонном коде. Ошибки в Rust`е, в основном, намного более понятны, но некоторые тоже могут напугать:

error: binary operation `/` cannot be applied to type `core::iter::Map<'_,f32,f32,core::iter::Map<'_,&[f32],f32,core::slice::Chunks<'_,f32>>>`

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

Я добавил базовые счетчики производительности в Luculentus и Robigo Luculenta. Они считают количество завершившихся задач трассировки (trace tasks) в секунду. Вот результаты:

Компилятор              платформа           производительность

GCC 4.9.1*              Arch Linux x64      0.35 ± 0.04
GCC 4.9.1               Arch Linux x64      0.33 ± 0.06
rustc 0.12 2014-09-25   Arch Linux x64      0.32 ± 0.01
Clang 3.5.0             Arch Linux x64      0.30 ± 0.05
msvc 110                Windows 7 x64       0.23 ± 0.03
msvc 110*               Windows 7 x64       0.23 ± 0.02
rustc 0.12 2014-09-23   Windows 7 x64       0.23 ± 0.01

Везде выставлены самые высокие уровни оптимизации. Компиляторы со звездочкой использовали PGO (Profile-guided optimization - оптимизация, управляемая профилированием https://ru.wikipedia.org/wiki/Profile-guided_optimization). Единственный вывод, который я могу сделать из этого, что вам, наверное, не стоит использовать Windows для сильно нагружающих процессор приложений.

Во второй статье из этой серии я отметил, что код на Rust`е собирается очень быстро, но тогда было не много кода. Сейчас время сборки вот такое (в секундах):

Компилятор             Время

rustc 0.12 2014-09-26  7.31 ± 0.05
Clang 3.5.0            13.39 ± 0.03
GCC 4.9.1              17.3 ± 0.5
msvc 110               20.4 ± 0.3

Сборка теперь не так быстра, но все равно быстрее С++.

Заключение

Изучать Rust было интересно. Мне понравился язык и портирование привело к нескольким озарениям, которые могут улучшить и оригинальный код. Владение часто неявно в других языках, что увеличивает чувствительность кода к человеческим ошибкам. Rust делает владение явным, убирая возможность допущения подобных ошибок. Все безопасно по умолчанию. Все это сдвигает Rust намного ближе к краю «стабильность» на спектре, чем к краю «быстрая разработка». Я не написал на Rust`е достаточно кода, что бы быть на 100% уверенным, но пока что достоинства Rust`а перевешивали его недостатки. Если бы я выбирал между C++ и Rust`ом для своего следующего проекта, то выбрал бы Rust.

Ну как, это тянет на «нормальное» сравнение? По-моему, в любом случае интересно почитать.

 ,

ozkriff
()

Как организовать себя?

Форум — Talks

Сабж, Если я ленивый бастард который плывет по течению в *примерном* направлении, постоянно не имеет времени но при этом ничем серьёзным не занимается, и, пост фактум обнаруживает 60 часов проведенных в Стиме за последнии 2 недели(Симптом, не причина).

shuck
()

Как реагировать в джунглях города

Форум — Talks

Сегодня вот шел по улице, прошел мимо девушек.
А одна из них говорит, другой:

Смотри, какой парень красивый!

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

 ,

anonymous_sama
()

посоветуйте аниме

Форум — Talks

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

 

kinik
()

Обучение игре на гитаре

Форум — Talks

Есть необходимость и желание научиться играть на гитаре. Поскольку тут много гитаристов, хочу спросить про это дело. Из некоторого опыта игры на пианино знаю, что если никто не покажет как правильно, то дальше будет тяжело как технически, так и в плане дальнейшего развития, поэтому полное самообучение отпадает. Упираться в бренчание парой аккордов не хочется. В то же время я даже не собираюсь пытаться приблизиться к уровню, например, Юэна Добсона, да и времени вечно мало.
Собственно вопрос, существуют ли какие-нибудь курсы (если, может, кто знает — в Москве), где научат основам (a la «взлёт-посадка»), которые позволят потом идти дальше самостоятельно? По теме не знаю ничего, поэтому и спрашиваю.

 , , , ,

valentin_v13
()

Виктор Катющик. Технологии НЛО.

Форум — Talks

Фееричный срыв покровов. По ссылке флеш и с этим ничего не поделать.

ЖЖ непризнанного гения: http://viictor.livejournal.com

Ознакомиться с формулами можно здесь

Alsvartr
()

Насоветуйте великого классического музла, типа 2-го концерта Рахманинова для ф-но или winter из времён года Вивальди.

Форум — Talks

Сабж.

kiverattes
()

бодрый джаз и ко

Форум — Talks

покидайтесь ссылками на джаз+*, только что-нибудь бодрое.
например:
Iiro Rantala New Trio
→Pia-no-jaC←
Acoustic Ladyland
только не такой жести как The Thing
про общую тему сходу забыли - там помойка

 ,

megabaks
()

Darkmail тащит!

Форум — Talks

Проект основателя Lavabit Ладара Левисона собрал на Kickstarter $212 тыс.

Основатель Lavabit Ладар Левисон (Ladar Levison), недавно закрывший сервис электронной почты, который работал почти десять лет, неоднократно заявлял о создании нового, защищенного от слежки спецслужб сервиса. Эксперт не ограничился только обещаниями и опубликовал проект Dark Mail на сайте Kickstarter.

Проект вызвал большой ажиотаж у пользователей – его поддержало около трех тысяч человек. Средний размер пожертвования составил $70. Всего на реализацию проекта было собрано более $212 тыс., что на $16 тыс. превышает изначально запланированную сумму. Благодаря активной поддержке пользователей, Dark Mail будет запущен уже во втором квартале следующего года.

Полностью сохраняя функциональность сервиса, разработчики реализуют в нем поддержку нового протокола Dark Mail, разработанного для шифрования сообщения как в момент отправки и получения, так и во время его пути. Поскольку шифрование интегрировано в сам протокол, оно не будет видимым для пользователей. Они получат безопасность PGP без когнитивной нагрузки.

Для нового сервиса электронной почты разработан первый специальный клиент Dark Mail - F/OSS. По словам разработчиков, сервис будет доступен для пользователей ОС Windows, Mac и Linux, а также мобильных платформ iOS и Android.

Источник: http://www.securitylab.ru/news/448208.php

stevejobs
()

Галерея ЛОРа

Форум — Talks
mplayer tv:// -vf mirror < /dev/null & scrot -cd 10

даже если вы прямо сейчас в одних труханах, не стесняемся.

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

и я начну: http://ivan.gayevskiy.ru/2013-12-25-091513_1024x768_scrot.png

 camwhore,

Spoofing
()

Металлисты: Найти видео, ссылка была на лоре

Форум — Talks

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

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

Нигде не могу найти. Знатоки, помогите.

Xintrea
()

справочник по «функциональным» алгоритмам

Форум — Development

Есть ли какой-нибудь всеобъемлющий справочник/кукбук, содержащий функциональные версии базовых алгоритмов? Какой-нибудь функциональный аналог «алгоритмов на c++» Седжвика.

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

Важно

1) Иметь разбор влияния на производительность. Как с точки зрения самого алгоритма, так и нижележащей реализации «машинок» стандартной библиотеки.

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

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

2) Интересны варианты при отсутствии в движке (копиляторе, vm, итп) встроенной оптимизации хвостовой рекурсии, и долгой рекурсии как таковой (глубина вложенности, время исполнения).

3) Язык предпочтительно - лисп с минимумом извращенных ридеров. Ну или что-нибудь другое адекватное, легко переносимое на другие синтаксисы.

Хорошо если автор этого гипотетического справочника болел бы JVM (clojure, scala, groovy, java8) и приводил бы детали реализации на чем-то из этого, и мог бы сказать что-то по поводу нижележащей реализации на JVM.

На самый край подойдут извращения в виде Java8 или Java7+FunctionalJava, или PHP с замыканиями.

stevejobs
()

Вышла бумажная книга «CPDT»

Форум — Development

Сабж.

Анонс в coq-club:

In case anyone is in the mood to take a break from worrying about the inconsistency of HoTT Coq, here's a quick announcement.

For a few years now, I've been working on a book introducing Coq with an unusual slant, focusing on what I think are the most important techniques to implement and maintain large developments: http://adam.chlipala.net/cpdt/

The book has been available freely online from the start, and I'm pleased to announce that a print version from MIT Press is now available. You can find online ordering links on the page I've referenced.

I'm grateful to MIT Press for agreeing to this experiment where I may continue distributing free versions of the book online.

 ,

ymn
()

[ФП] Примеры работы с БОЛЬШИМИ файлами

Форум — Development

Всем привет, хочу продолжить тему работы с файлами в ФП. Тут недавно были примеры, но очень тривиальные, прочитать-записать. Вопрос такой, как в ФП-языке считать в память огромный файл как двумерный массив, и чтобы он а) занимал в памяти столько же места сколько на диске б) доступ к элементам был быстрый (О(1))?

Предистория такова, мы обрабатываем изображения с телескопов, там счёт идёт на сотни мегапикселей, и глубина пикселя 32 бита. Так что типичное изображение ~ два с половиной гигабайта, для этих целей специально собраны счётные узлы с 4 Гб RAM. Это чтобы изображение поместилось целиком в память, и оставалось на промежуточные буферы для накопления результатов. Естественно, все рассчёты написаны на Си и С++, работает быстро, памети хватает. Но код некрасивый, много повторяющихся конструкций и т.п. Народ в основном закостенелый из старшего поколения, ничего кроме Си и фортрана не знают, а я хочу попробывать более современные языки.

Так что буду благодарен за примеры чтения массивов для Haskell и особенно Scheme. И чтобы можно было посмотреть, сколько памяти реально израсходовано. Спасибо!

Ignatik
()

Опубликован перевод книги «Lisp in Small Pieces»

Новости — Документация
Группа Документация

Это достаточно известная книга Кристиана Кеннека, рассматривающая семантику Лиспа и основы его реализации на примере диалекта Scheme. В процессе повествования разбирается множество аспектов семантики языка, начиная разнообразными вариантами окружений, проходя через продолжения и исключения, заканчивая рефлексией, сутью макросов, компилятором в Си и объектной системой.

Книга содержит 11 интерпретаторов, 2 компилятора, стопку упражнений в каждой главе, уйму интересного материала об истории Лиспа и причинах принятия тех или иных решений в дизайне языка, некоторое количество аллюзий на современные языки программирования, а также небольшой вагончик литературы впридачу.

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

( Исходники и прочие детали )

>>> Скачать PDF

 , , , ,

ilammy
()