Forwarded from Находки в опенсорсе
Livebook is a web application for writing interactive and collaborative code notebooks for #elixir, built with Phoenix LiveView. Inspired by Jupyter and Deepnote.
It features:
- Code notebooks with Markdown support and Elixir cells where code is evaluated on demand.
- Shareable: notebooks are stored in the .livemd format, which is a subset of Markdown with annotations and KaTex for mathematical formulas. This means your notebooks can be saved, easily shared, and play well with version control.
- Interactive widgets via Kino: manipulate Vega-Lite charts, tables, and more.
- Rich code editor through Monaco: with support for autocompletion, inline documentation, code formatting, etc.
- Reproducible: Livebook ensures your code runs in a predictable order, all the way down to package management. It also tracks your notebook state, annotating which parts are stale.
- Custom runtimes: when executing Elixir code, you can either start a fresh Elixir instance, connect to an existing node, or run it inside an existing Elixir project, with access to all of its modules and dependencies. This means Livebook can be a great tool to provide live documentation for existing projects.
- Persistence: persist your notebooks to disk or any S3-compatible cloud storage.
- Collaboration: multiple users can work on the same notebook at once. It works out-of-the-box either in single-node or multi-node deployments - without a need for additional tooling.
https://github.com/livebook-dev/livebook
It features:
- Code notebooks with Markdown support and Elixir cells where code is evaluated on demand.
- Shareable: notebooks are stored in the .livemd format, which is a subset of Markdown with annotations and KaTex for mathematical formulas. This means your notebooks can be saved, easily shared, and play well with version control.
- Interactive widgets via Kino: manipulate Vega-Lite charts, tables, and more.
- Rich code editor through Monaco: with support for autocompletion, inline documentation, code formatting, etc.
- Reproducible: Livebook ensures your code runs in a predictable order, all the way down to package management. It also tracks your notebook state, annotating which parts are stale.
- Custom runtimes: when executing Elixir code, you can either start a fresh Elixir instance, connect to an existing node, or run it inside an existing Elixir project, with access to all of its modules and dependencies. This means Livebook can be a great tool to provide live documentation for existing projects.
- Persistence: persist your notebooks to disk or any S3-compatible cloud storage.
- Collaboration: multiple users can work on the same notebook at once. It works out-of-the-box either in single-node or multi-node deployments - without a need for additional tooling.
https://github.com/livebook-dev/livebook
Forwarded from Блог*
#amazingopensource #menacingopensource
Что такое fortraith? Нет, это не опечатка в слове Fortran или, упаси боже, Fortnite. Это — библиотека, реализующая компилятор времени компиляции, который переводит что-то, похожее на Forth, в вычисления на уровне типов Rust. Что? Да.
Что такое fortraith? Нет, это не опечатка в слове Fortran или, упаси боже, Fortnite. Это — библиотека, реализующая компилятор времени компиляции, который переводит что-то, похожее на Forth, в вычисления на уровне типов Rust. Что? Да.
GitHub
GitHub - Ashymad/fortraith: Forth for Rust's trait system
Forth for Rust's trait system. Contribute to Ashymad/fortraith development by creating an account on GitHub.
#prog #dotnet
SourceGear Bridge preview: Swift with .NET in Xcode
https://ericsink.com/entries/sourcegear_bridge.html
SourceGear Bridge preview: Swift with .NET in Xcode
https://ericsink.com/entries/sourcegear_bridge.html
Forwarded from Блог*
#prog #article
Системы типов #java и #scala являются unsound. Подробности в статье.
TL;DR:
Программа определяет тип
И эта ошибка оставалась незамеченной 12 лет. А кто-то ещё говорит, что null — хорошая идея.
Системы типов #java и #scala являются unsound. Подробности в статье.
TL;DR:
Программа определяет тип
class Constrain<A, B extends A> {} и метод upcast:static class Bind<A> {
<B extends A>
A upcast(Constrain<A,B> constrain, B b) {
return b;
}
}
Этот метод просто апкастит значение типа B в значение типа A, используя значение типа Constrain<A, B> как материальное свидетельство того, что B действительно является подтипом A. К сожалению, ничто не мешает в качестве значения этого типа использовать null, что ломает логику системы типов, которая полагается на этот факт, а использования wildcard capture позволяет при помощи Constrain установить отношение субтипизации между двумя произвольным типами. Результат? Комбинация null-гого Constrain и upcast позволяет перевести значение любого типа в значение любого типа. Фактически — аналог std::mem::transmute, но без каких либо небезопасных фич и с корректно типизированным кодом.И эта ошибка оставалась незамеченной 12 лет. А кто-то ещё говорит, что null — хорошая идея.
#meme
Спасибо @neftedollar за наводку)
Оригинал: https://twitter.com/a_kapustin/status/1440984303182258177?s=21
Спасибо @neftedollar за наводку)
Оригинал: https://twitter.com/a_kapustin/status/1440984303182258177?s=21