OpenDevCast
468 members
15 links
Коллективный канал разработчиков. Есть что сказать сообществу? хочешь побыть блоггером? Ты по адресу.

+ Чат: @opendevcastchat
+ Админы: @olegkovalov @orsinium
+ Как сделать пост: https://github.com/opendevcast/opendevcast
+ Лицензия: CC BY-SA 4.0
Download Telegram
to view and join the conversation
Channel created
updated group photo
OpenDevCast — коллективный блог разработчиков. Цель — дать каждому простую возможность опубликовать свои блогпосты про IT, рассказать о своих проектах и поделиться опытом.

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

+ Канал: @opendevcast
+ Чат: @opendevcastchat
+ Гайд как сделать пост: https://github.com/opendevcast/opendevcast

#intro
@olegkovalov (@oleg_log)
@orsinium (@itgram_channel)
updated group photo
Привет. Я Грам, и в ближайшие 4-6 дней я буду автором на OpenDevCast. Посты будут про разные экзотические языки программирования, интересные концепции в них, достоинства и недостатки. Всё это субъективно, я не специалист по языкам программирования и даже не могу похвастаться знанием топ 10 ЯП. Так даже интереснее.

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

+ Скорость (Assembler, C, C++, Rust)
+ Простое написание кода (Python, PHP, Perl, Ruby)
+ Простое чтение кода (Python, Go)
+ Низкий порог входа и минимальное количество концепций (Go)
+ Безопасность и надёжность кода (Haskell, OCaml, Rust)

По этим параметрам и попытаемся языки в нашем треде охарактеризовать.

#intro #language #hardskills
@orsinium
# Crystal

Сегодня у нас язык программирования Crystal

Плюсы: скорость, простое написание, надёжность.
Минусы: сложно читать, высокий порог вхождения.

Особенности:
+ Синтаксис как у Ruby
+ Статическая типизация с дженериками
+ Выведение типов
+ Быстрый и компилируемый
+ Простые и быстрые C-биндинги
+ Ассемблерные вставки (если вдруг хотите написать драйвер)
+ Тонны синтаксического сахара и концепций
+ Сборщик мусора
+ Макросы

Язык перегружен концепциями и синтаксическим сахаром, которые можно просто выкинуть. Нет, серьёзно, это самый перегруженный язык. Сами смотрите: 6 способов написать if-else, 6 способов создать один и тот же список и тонны литералов (я даже не могу сосчитать). А ещё отдельные типы данных для строковых констант, range, регулярных выражений, shell команд, анонимных функций, enums. Большая часть этого для того, чтобы было проще писать код. Например, вместо ["one", "two", "three"] можно написать %w(one two three). Удобно, но это увеличивает порог входа (я без понятия, как это всё вообще запомнить) и жутко усложняет чтение кода.

Несмотря на то, что Crystal зарелизили в 2014 году, у него уже есть неплохое комьюнити и экосистема. Например:

+ ameba — линтер
+ kemal — web фреймворк (на самом деле, далеко не единственный)
+ crecto — ORM
+ crystal-pg — драйвер для PostgreSQL
+ crystal-redis — драйвер для Redis

А вообще, C-биндинги в Crystal довольно простые, поэтому если какой-то библиотеки не хватает, можно подтянуть из C.

Ссылки по теме:
+ Официальная документация
+ Репозиторий
+ My favorite things in Crystal Lang

#crystal #language #coding
@orsinium
# V for Vlang

V — язык, наполненный обещаниями. Зарелизили его этим летом, он местами по факту сыроват и забагован, но зато в документацию и обещания влюбляешься.

Плюсы: скорость, простое написание, простое чтение, низкий порог вхождения.
Минусы: возможны тонны багов (язык ещё сыроват), многое на стадии обещаний.

Особенности:
+ Очень простой синтаксис, полностью основанный на Go. Соответственно, и типы там почти все из Go. Знаешь Go — уже почти знаешь V.
+ Чистые функции (нужно явно указать, что функция может изменять)
+ Опциональные типы, чтобы сделать обработку ошибок проще.
+ Дженееерики
+ Встроенная ORM (чтобы было)
+ Трансляция в C, засчёт чего быстрые C биндинги без оверхэда.

Обещания:
+ Транслятор из С в V
+ Менеджер пакетов
+ Автоформаттер

Язык очень сырой, экосистемы нет, ошибки часто непонятные (потому что приходится использовать С-библиотеки), поддержка подсветки синтаксиса в IDE сырая и на кривых регулярках. А ещё с исходниками довольно мутная история: они написаны на V, но я не могу их с помощью V скомпилировать. Для компиляции компилятора используется транслированная в Си версия (vc), и она почему-то работает. Как странслировать самостоятельно свой код в С исходники, я не нашёл, хотя искал очень внимательно (по умолчанию транслирует в объектный файл). Ну и в целом, мутных историй вокруг языка много: делается он ради пиара и доната, у автора за плечами довольно слабый бэкграунд, за языком не стоит серьезного мат. аппарата, исходники грязные. Продолжаем следить за развитием событий.

Ссылки по теме:
+ Документация
+ Репозиторий

#vlang #language #coding
@orsinium
# Clojure

Clojure — диалект LISP'а с многопоточностью и идеей "код как данные" в центре философии. Весь код здесь строиться вокруг работы с данными (по сути, с JSON) с помощью вызова функций и оборачивания всего подряд в скобочки.

А ещё есть ClojureScript — чуть модифицированный Clojure, транслируемый в JavaScript. То есть, зная Clojure, можно быстро подучить ClojureScript и пилить fullstack.

Плюсы: простое написание, низкий порог вхождения.
Минусы: медленно (ФП), ненадёжно (динамическая типизация и прочее), сложно читать (скобочки).

Особенности:
+ Макросы
+ Динамическая типизация
+ Нет классов. Есть только простые структуры данных, переменные и функции.
+ Нет даже символа присваивания, вместо этого функция (def x 1)
+ Низкий порог вхождения за счёт минимализма синтаксиса и концепций. Даже если нет опыта в программировании.
+ (Не (очень (удобно (читать, (потому (что) (скобочки))))))
+ Из-за небольшого количества концепций код у библиотек выходит совсем коротким: не приходится заморачиваться с созданием типов, датаклассов и прочего.
+ Полиморфные функции: разная логика для разных входных типов.
+ Хорошая экосистема с библиотеками для генерации из данных (условно JSON) SQL-запросов, CSS, HTML, React.

Меня всё-таки сильно беспокоят тонны скобочек. Всё-таки языки программирования для людей, а не для машин. К тому же, код гораздо чаще читается, чем пишется. К тому же, критичный код на Clojure писать лучше не надо, потому что типизация, как в Python, проверяется только в рантайме и прощает довольно многое, да м в целом проверка структуры данных тут часто опциональная. Но, в целом, философия языка подкупает: в центре всего находятся идеи простого для изучения синтаксиса и работы с данными.

Ссылки по теме:
+ Learn Clojure
+ Почему стоит изучить Clojure?
+ Гомоиконичность (код как данные)

#clojure #language #coding
@orsinium
# ponyc attack

Pony — быстрый компилируемый ООП язык, построенный вокруг модели акторов и максимально безопасной типизации.

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

Особенности:
+ Акторы. Это классы, которые можно вызывать конкурентно. Конкурентность в языке играет центральную роль.
+ Типизация с type inference и дженериками, алгебраическими типами, алиасами.
+ Концепция capabilities: маркер доступа, являющийся частью типа. Объекты, которые могут быть одновременно изменены из разных акторов, нельзя шарить между акторами. Это как раз та основная штука, которая делает язык "data race free" и "deadlock free".
+ Отсутствие исключений и null.
+ Pattern matching (switch здорового человека)
+ Сборщик мусора.
+ Наследования нет, используйте композицию. Кажется, все новые языки к этому приходят.

Концепций выходит довольно много:
+ Вместо привычных с питона классов здесь классы, примитивы, акторы, интерфейсы, traits (как интерфейсы, но наследоваться в pony можно только от traits), structs.
+ Атрибуты приватные и публичные, изменяемые и не изменяемые (это снова про capabilities), а ещё embedded (хранятся в одном экземпляре для всех инстансов).
+ Вместо методов здесь конструкторы, функции (с неявным доступом ко всем переменным внутри класса без self или this, что несколько усложняет понимание, какие переменные откуда), finalizers, и всё это снова с разными capabilities.

Ко всеобщему разнообразию добавляются разные значки, которые никак не загуглить и о значении которых не догадаться. Только полностью читать туториал. Из-за этого всего порог вхождения выходит высокий, но, в отличие от Crystal, тут это всё преследует довольно понятную цель: сделать код максимально безопасным, оставаясь при это в чудесном простом мире ООП.

Ссылки по теме:
+ Туториал
+ Русскоязычное знакомство с языком
+ Репозиторий
+ Top 10 Pony lang talks for the curious

#pony #language #coding
@orsinium
# nim

Nim -- транслируемая в С (ну и в JS, потому что все хотят фулстэк) статически типизированная смесь Python и... Pascal. Для тех, кто хочет вернуть 2007ой.

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

Тут понял, что эти "плюсы" и "минусы" -- не очень хорошая идея. После питона всё кажется быстрым, а после pony -- ненадёжным. Так что давайте нырять в детали.

Особенности:
+ Статическая типизация с дженериками (только в Go их не завезли, видимо). Выведения типов нет, аннотировать придётся всё.
+ Зная Python, знаешь уже почти весь синтаксис. Тут есть yield, async, try-except, from-import, with (ну, типа того), range (хотя синтаксис как в Ruby), такие же комментарии, литералы. Хотя в деталях отличий много, конечно.
+ Нет понятия методов и атрибутов, зато есть синтаксический сахар для них. То есть, a.len, a.len() и len(a) -- одно и то же.
+ Штука выше достигается с помощью multiple dispatch -- возможностью иметь разные функции с одним именем для разных типов параметров.
+ Функции называются proc (procedure), чтобы запутать и вернуть флешбеки из Pascal.
+ Магических методов нет. Property выражаются с помощью описанного выше сахара, операторы перегружаются с помощью написания функции с этим оператором вместо имени (как в Ruby или Haskell).
+ Исключения. Зато есть директива, чтобы явно указывать, какие исключения функция может поднять, и компилятор это статически проверит.
+ Макросы. Потому что метаклассов нет. Ну или потому что хочется делать DSL.
+ Наследование (но не множественное).

В общем, основная мотивация -- сделать такой же простой в написании и чтении язык, как Python, но с компиляцией и статической типизацией. Множество простых концепций, синтаксический сахар и всё такое. Язык довольно простой, он не пытается заманить очередным подходом к конкурентности, особому подходу к типизации, ориентированностью на определенные задачи. Обьычный компилируемый язык, на котором просто писать и приятно читать. Хотя последнее, как и в Python, по факту не всегда так, потому что довольно легко наворотить что-то страшное.

Ссылки по теме:
+ Туториал
+ Репозиторий
+ Nim Package Directory
+ Что такого особенного в Nim?
+ Getting Started Nim Lang
+ Ask HN: Does anyone use Nim language in production?

#nim #language #coding
@orsinium
# Elixir

Elixir — функциональный язык с динамической типизацией поверх виртуальной машины Erlang. Полностью совместим с экосистемой Erlang, вдохновлён Ruby.

Плюсы: скорость (легко параллелить), безопасность.
Минусы: порог вхождения.

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

Никто не расскажет про Elixir лучше, чем Никита Соболев, организатор elixir-lang moscow:

----

Супер простой язык на супер стабильной платформе. Основная идея (как и Erlang) — сделать масштабирование до смешного простым. Сделать деплой — одна команда. Создать кластер — ещё две команды.

Ещё одна фундаментальная идея, что в языке и платформе есть всё. Несколько баз данных: ETS и Mnesia, свой мониторинг из коробки: observer, и тд.

Шутка в том, что его применимость — очень узкая. Люди не будут учиться сложным, более совершенным моделям асинхронности. Ведь их преимущества оценимы только при определенной нагрузке и требованиях. Все просто будут писать на Go и думать, что каналы скейлятся.

Elixir — feature complete. Это значит, что в языке уже есть все, и новых больших фич в языке не будет. Будет развиваться платформа (OTP, общая с Erlang), инфраструктура вокруг языка и комьюнити.

Учишься готовить ООП: оно ведь не про уродские классы из джавы, а про изолированный стейт и отправку сообщений. На модель акторов — ложится идеально.

Что я не люблю:
- неявные импорты
- когда переизбыток макросов
- порог входа, он очень высок — нужно полностью переучиваться

Что я люблю:
- все остальное

----

+ Официальный гайд
+ Репозиторий
+ How Learning Elixir Made Me a Better Programmer
+ Elixir School на русском
+ Elixir for Rubyists

#elixir #language #coding
@sobolevn
@orsinium
Новая неделя, новая рубрика. С этого дня с вами в эфире ХАКЕРМЭН, апельсин и таблетка от всех болезней в одном лице. Встречайте, @aspirin_pp! Он расскажет про то, как реверсить JS, найти dev сервера конкурентов, запентестить nginx и всё такое. Расчехляйте nmap'ы, будет весело.

#intro #security
@aspirin_pp
Аспирин пока готовит мегастатью про хакинг дев-серверов, а сегодня у нас КОНТЕЕЕЙНЕРЫ, прям как мы любим. А точнее, про то, как их собирать без Dockerfile. Пост запилил @vrutkovs, коллекционер уточек из Red Hat. Кстати, это первый пост в его новом блоге, и специально для нас. Разве это не мило?

Традиционная статья на teletype, чтобы удобно читать:
https://teletype.in/@vrutkovs/HysWqaPLH

Статья в блоге, чтобы ссылочка была красивая:
https://vrutkovs.eu/posts/source2image/

#docker #devops
@vrutkovs
Скучали? А у нас тут ещё один пост от @vrutkovs, на этот раз про то, как у себя дома развернуть кластер kubernetes, потому что А КТО ВООБЩЕ МЕНЯ ОСТАНОВИТ?

Instant view версия: https://teletype.in/@opendevcast/rJJLWwXYB
То же самое в бложике: https://vrutkovs.eu/posts/home-cluster/

Приятного чтения :)

#docker #k8s #devops
@vrutkovs