LINUX.ORG.RU

Сообщения nonimous

 

Герб Саттер предлагает добавить в С++ метаклассы

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0707r0.pdf

В свежем пропосале Саттер предлагает добавить в С++ механизм для добавления пользовательских мета-типов. Автор отталкивается от наблюдения, что struct это просто class с public:, а enum class это просто class с константами, и предлагает обобщить этот подход и сделать его доступным разработчику. Вот пример реализации аналога interface из Java :

$class interface
{
    ~interface() noexcept {}
    constexpr {
        compiler.require($interface.variables().empty(),
                         "interfaces may not contain data");
        for (auto f : $interface.functions()) {
            compiler.require(!f.is_copy() && !f.is_move(),
                             "interfaces may not copy or move; consider a"
                             " virtual clone() instead");
            if (!f.has_access ()) f.make_public();
            compiler.require(f.is_public(),
                 "interface functions must be public");
            f.make_pure_virtual();
        }
    }
};
// User code (proposed C++)
interface IShape {
    int area() const ;
    void scale_by(double factor);
};
Лично я не верю, что комитет это пропустит, но сам Саттер не последний человек в комитете и понимает, что предлагает.

 , ,

nonimous
()

Опубликованы C++ Core Guidelines

Бьерн Страуструп и Герб Саттер опубликовали в открытом доступе объемный документ, содержащий основные принципы разработки на современном С++. Авторы надеются, что следование данным принципам позволит разработчикам эффективно использовать язык и писать безопасный и поддерживаемый код.

C++ Core Guidelines: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md/

 ,

nonimous
()

Опубликованы видео выступлений с RustCamp 2015

Первого августа в Беркли прошла конференция, посвященная ЯП Rust, сегодня стали доступны видео выступлений: https://www.youtube.com/playlist?list=PLE7tQUdRKcybdIw61JpCoo89i4pWU5f_t . Слайды можно полистать отдельно: http://rustcamp.com/schedule.html .

 ,

nonimous
()

Go 1.5 Release Notes

Стали доступны release notes Go 1.5 : https://tip.golang.org/doc/go1.5 . Для новости рано - релиз будет в августе, пока же можно оценить степень ненужности.

Из интересного:

  • The compiler and runtime are now written entirely in Go (with a little assembler). C is no longer involved in the implementation [..].

    Казалось бы, хорошее дело, ребята наконец-то осилили bootstrapping, но читаем дальше:

    Builds in Go 1.5 will be slower by a factor of about two. The automatic translation of the compiler and linker from C to Go resulted in unidiomatic Go code that performs poorly compared to well-written Go.

    Оказывается осилили они только костыль, перегнавший им С-код в Go-код, и теперь у них в кодовой базе тонны неподдерживаемого С-кода зачем-то написанного на Go.
  • Independent of but encouraged by the move to Go, the names of the tools have changed. The old names 6g, 8g and so on are gone; instead there is just one binary, accessible as go tool compile, that compiles Go source into binaries suitable for the architecture and operating system specified by $GOARCH and $GOOS

    К 2015 году ребята таки решили закопать начавшее пахнуть наследие Plan9.

    Similarly, there is now one linker (go tool link) and one assembler (go tool asm).

    Но закопать свои нескучные ассемблер и линкер так и не собрались.
  • The garbage collector is now concurrent and provides dramatically lower pause times by running, when possible, in parallel with other goroutines.

    Хорошее дело.

    The «stop the world» phase of the collector will almost always be under 10 milliseconds and usually much less.

    Выглядит неплохо, для большинства use cases Go должно хватить.
  • By default, Go programs run with GOMAXPROCS set to the number of cores available; in prior releases it defaulted to 1.

    Логично, раз GC теперь позволяет нормально масштабироваться.

В целом позитивный релиз, ЯП ориентированный на конкурентность наконец-то получил конкурентный GC и может эффективно использовать многоядерность. Печально, что вместо того, чтобы встраиваться в существующие toolchain-ы, они продолжают тащить свои ассебмлер и линкер. Решение автоматом перегнать С-код в Go-код имхо ошибка, и приведет к сложностям в поддержке. Опять же, одна из рекламируемых фишек Go - быстрая компиляция - теперь не такая уже и быстрая.

 , ,

nonimous
()

Линус высказался о systemd

Линус тут ответил на вопросы пользователей слешдота, среди них был неумелый вброс про systemd: http://linux.slashdot.org/story/15/06/30/0058243/interviews-linus-torvalds-an...

Вот ответ полностью:

You can say the word «systemd», It's not a four-letter word. Seven letters. Count them.

I have to say, I don't really get the hatred of systemd. I think it improves a lot on the state of init, and no, I don't see myself getting into that whole area.

Yeah, it may have a few odd corners here and there, and I'm sure you'll find things to despise. That happens in every project. I'm not a huge fan of the binary logging, for example. But that's just an example. I much prefer systemd's infrastructure for starting services over traditional init, and I think that's a much bigger design decision.

Yeah, I've had some personality issues with some of the maintainers, but that's about how you handle bug reports and accept blame (or not) for when things go wrong. If people thought that meant that I dislike systemd, I will have to disappoint you guys.

Как и ожидалось, Линус оказался адекватом, а не ограниченной истеричкой veteran unix admin-ом. Возможно, его пример подтолкнет кого-то открыть документацию, выучить три команды, и перестать искать проблемы там, где их нет.

 , ,

nonimous
()

Джон Кармак предлагает использовать Scheme в качестве скриптового языка Gear VR/Oculus Rift

Собственно, сабж: https://groups.google.com/forum/#!msg/racket-users/RFlh0o6l3Ls/8InN7uz-Mv4J .

Немножко интересных цитат от гуру геймдева:

Doing VR GUI development in the native apps is unpleasant – you can gut it out in C++ with our current interfaces, but the iteration times and code structure don’t make it a lot of fun.

This will be controversial, and I will have a longer discussion about it, but I chose Scheme (a Lisp) for the scripting language. If this all works out, we can eventually make C# and Javascript versions, but I have a bunch of reasons for going this way first. I am using Racket http://racket-lang.org/ for the PC development environment, and Chibi Scheme for the embedded interpreter on Android.

I am favoring ease of development over performance, and it definitely won’t be suitable for a lot of tasks, but everything we have done with first party apps so far should be at least a candidate for development in this style once it is mature.

I am a big believer in functional programming (and static types) for large projects, but there is an undeniable bit of awkwardness compared to just imperatively poking things for small projects. That is one of the wins for Scheme — I can make it super-easy to get easy things working, but it isn't just a «scripting language» unsuitable for large scale development. I am going to have to sort out my Racket / Chibi module strategy sometime soon, though.

The bottom line is that I have been enjoying myself working with Racket / Scheme this year, and I have evidence that it has been objectively productive for me, so I'm going out on a bit of a limb and placing a bet on it.

Вообще его понять можно, среди скриптовых языков схема наиболее приятна, но лично мне не верится, что затея взлетит - даже в списке рассылки Racket Users первые ответы были про JavaScript/JSON как более подходящие варианты. Да и сам Джон сознается, что многие «might be a little hostile to working in a Lisp».

С другой стороны, возможно мы наблюдаем начало лиспоренесанса, ВР станет рельсами для схемы, а местные борщехлебы завоюют геймдев?

 , , ,

nonimous
()

WebAssembly, A New Binary Format For The Web

http://techcrunch.com/2015/06/17/google-microsoft-mozilla-and-others-team-up-...

Google, Microsoft, Mozilla And Others Team Up To Launch WebAssembly, A New Binary Format For The Web

The new format is meant to allow programmers to compile their code for the browser (currently the focus is on C/C++, with other languages to follow), where it is then executed inside the JavaScript engine.

Over time then, the teams will build more tools (compilers, debuggers, etc.) and add support for more languages (Rust, Go and C#, for example).

https://github.com/WebAssembly/design

JS все, посаны, теперь официально.

 , , ,

nonimous
()

Приоритеты развития Rust после 1.0

Опубликован план развития ЯП Rust после выхода версии 1.0, назначенной на май 2015 года, фанбоям и хейтерам будет одинакового интересно ознакомиться.

Задачи с высшим приоритетом:

  • Расширение стандартной библиотеки, в частности Filesystem APIs и Memory allocation APIs.
  • Улучшение поддержки ARM и Windows.
  • Ускорение компиляции, в частности добавление параллельной компиляции.
  • Упрощение распространения написанных на Rust приложений и библиотек, в частности реализация cargo install.
  • Расширение поддержки инструментария, в частности отладчиков и профайлеров, по возможности используя применяемые в С инструменты.
  • Реализация динамических деструкторов(?), что позволит избежать расходов на обнуление памяти при освобождении объектов.
  • Улучшенная поддержка аллокаторов.
  • Специализация трейтов, по типу специализации шаблонов в С++.
  • Виртуальные структуры - вариант реализации наследования.

Задачи с высоким приоритетом:

  • Улучшения в borrow checker'e.
  • Улучшения в макросах, в частности лучшая интеграция с модульной системой.

Некоторые долгосрочные задачи:

  • Передача типов с динамическим размером по значению.
  • Параметризация дженериков целочисленными значениями.
  • async/await/yield .
  • Типы высшего порядка.

 , ,

nonimous
()

Практическая польза зависимых типов

Прочитал я тут, что Haskell и теория категорий уже не в моде среди диванных академиков, что будущее за Idris и зависимыми типами. С одной стороны, формальная верификация и доказательство корректности кода - это очень интересно. С другой, непонятно как использовать этот верифицированный код в реальном мире. Вот типичный пример из вики:

data Vect : Nat -> Type -> Type where
  Nil  : Vect 0 a
  (::) : (x : a) -> (xs : Vect n a) -> Vect (n + 1) a

total
pairAdd : Num a => Vect n a -> Vect n a -> Vect n a
pairAdd Nil       Nil       = Nil
pairAdd (x :: xs) (y :: ys) = x + y :: pairAdd xs ys
Утверждается, что благодаря зависимым типам, pairAdd может гарантировать на этапе компиляции, что оба списка будут одной длинны, и это преподносится как большое достижение. Но это значит, что в pairAdd можно передавать только списки, составленные на этапе компиляции, т.к. из произвольного пользовательского ввода никогда не получить значения типа Vect. Получается, что корректность гарантируется только для кода, не принимающего никакой информации извне, а значит не имеющего никакой практической ценности, кроме доказательства собственной корректности.

Правильно ли я понимаю, что зависимые типы нужны только математикам для использования в доказателях теорем, и формально верифицированное ядро ОС или гарантированно корректный веб-сервер на Idris не написать?

P.S. В С++ есть функционально близкая фича в виде параметризированных значениями шаблонов, за 25 лет ей нашлось применение только в std::array, да еще для расчета факториалов при компиляции.

 ,

nonimous
()

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