?

Log in

No account? Create an account
Обзор языков - 2018 - Дважды мудак — ЖЖ [entries|archive|friends|userinfo]
Декларативное рулит

Site Meter

[ website | Мой сайт ]
[ userinfo | livejournal userinfo ]
[ archive | journal archive ]

Обзор языков - 2018 [янв. 21, 2018|18:22 pm]
Andy Melnikov
[Tags|, , ]

Если писать не о чем - напишите обзор ЯП на основе какого-нибудь измерения пиписек в попугаях!

Берем Tiobe index и группируем "по семействам". Получаем:

- Нестыдные языки для промышленных зрелых практиков с кредитом и детьми. На собеседовании ничего объяснять не надо: Java/C++/С/C#/Python/Javascript/PHP/Ruby/SQL

- Нишевые языки, надо объяснять что это за язык и что за ниша и что это не такая и экзотика: R/ Swift/Objective-C/Matlab/Scratch/asm/Go
- Лигаси языки: VB.net, Perl, Delphi

Из нестыдных можно вычеркнуть языки, вместо которых можно учить аналогичные: C, C#, PHP, Ruby учить не нужно. Получается, что нужно: Java, C++, Python, Javascript, SQL. Причём имеет смысл учить комплектами:

- С++ самодостаточен
- Java+Javascript
- Python+Javascript

SQL это как бы не "язык", а "технология", наряду с noSQL и ORM и даже (с натяжкой) мессаджингом и прочим миддлваре. Аналогично HTML/CSS/DOM. Короче они в отдельном от языков списке изучения идут, примерно в том же, где и алгоритмы с проектированием.

В-общем, ничего нового, этот список (С++, Java, Python, Javascript, SQL) не менялся наверное последние лет 10. В 1998 был бы скорее С++, Perl, Scheme, SQL.

Кроме этого списка есть список 9 языков, на которых можно начинать новые проекты в 2018, который я составил, используя modulecounts.com:

Первый эшелон (либ больше чем в перле): Java, C#, Python, Ruby, NodeJS, PHP
Второй эшелон (либ меньше чем в перле): Clojure, Go, Rust
Эшелон упоротых (либ меньше чем в расте но хоть сколько-то): Haskell, R и Erlang.
Эшелон альтернативно упоротых (там совсем по-другому): С, C++

Причём Раст догнал и перегнал хаскель (идущий в ногу с R) за последний год. А в Эрланге в 3 раза меньше пекеджей чем в х-е ("по версии modulescount")

Ещё можно составить список "почётных провалов":
- idris, coq/ocaml, ats
- elm, purescript, typescript
- D, lua, scala, kotlin, julia

Если вычесть из списка топ-50 языков тиобе вышеперечисленные, то останутся:

Странные "проприетарные" языки: Apex, SAS, Codesys
Матерые старички: Lisp, Bash, Prolog, Tcl, VHDL, ActionScript, COBOL, ABAP, Logo, Ada, REXX, Fortran, LabVIEW
Всякие невыстрелившие: F#, Groovy, Hack, Dart, Alice

Призы зрительских симпатий уходят ноде, тайпскрипту, элму, расту, го, haxe, flow, codesys, перлу, vb.net и котлину!

Кстати, есть ещё языки, на которых (в определённых кругах) писать нельзя. Это:

- лиспы (скобочки!)
- перл, с++, javascript (большие неконсистентные языки)
- С, С++, D, Rust (нет gc или безопасности памяти)
- haskell (avoid success, ленивость, утечки, баги, борьба с тайпчекером, отсутствие инструментов)
- С, С++, С#, Java, Python, Delphi (низкоуровнево). Даже х-ь иногда (от любителей кдб, например)
- Python (кривые замыкания)
- все языки за пределами нестыдных (по причине стыдности)
- нода (т.к. евент дривен и жабоскрипт и либы написаны идиотами)
- руби, го (хипсторы и подвороты)
- похапе
- Rust (надо писать на Go)
- Go (gc же богомерзкий)
- Typescript (негодная система типов, надо писать на flow)
- Flow (он не развивается, надо писать на тайпскрипте)

В-общем, в зависимости от того, кого вы спрашиваете, нельзя писать вообще ни на чём!

Upd: тут подбросили ссылку на DOU: https://dou.ua/lenta/articles/language-rating-jan-2018/

Ну и там неприятные новости для упоротых:

- оставьте С для эмбеддеда, низкоуровневых либ и иных спецприменений: только С++, только хардкор!
- Python и PHP живее всех живых
- С#, притом это вовсе не емакс и моно, - 15% всей работы и 3-е место после жабы и жс
- в топе святая шестерка - Java/C#, Javascript/Python/PHP, C++ (и там же SQL на самом деле™)
- хотите промышленной зрелой экзотики - добро пожаловать в Typescript, Go, Ruby, Scala
- мобло - это Swift и внезапно Kotlin, причем если про котлин не совсем понятно - то Swift опередил Objective-C
- Delphi и 1C ещё встречаются
- в "совсем уж экзотике" в Украине значатся Closure и R
- из лигасёвого лигаси только перл

Upd2: Scala, Typescript и Kotlin - внезапно не провалы
СсылкаОтветить

Comments:
[User Picture]From: metaclass
2018-01-22 04:26 am
(Ответить) (Thread)
[User Picture]From: swizard
2018-01-22 10:05 am
Я бы не воспринимал всерьёз подобного рода обзоры.

В них есть одна центральная общая для всех проблема: "Посмотрите — вот я, такой матёрый разработчик, прямо зубр, да я сетевые сервисы с конечными автоматами пишу прямо во сне, да мне сервер для ирки накидать задача на сорок минут, и я вот такой весь из себя красивый взял Rust и ебался с ним четыре дня, и нихуя не вышло!!!".

Ну разумеется, у него ничего с мороза не получилось, как не получилось бы и на хаскеле, на каком-нибудь pony lang или ATS, или даже эрланге.

Потому что сначала необходимо сесть и аккуратно разобраться с тем, как именно работает инструмент, и на каких идеях он изначально построен. Когда такое понимание приходит, программирование становится довольно тривиальным процессом, но без такого понимания это именно что "бесконечная ебля с борров-чекером", "бесконечная ебля с монадами" и так далее. Для языков, которые построены на одинаковых принципах (условно, питон и руби) кривая обучения будет минимальна (из серии, запомнить другой синтаксис), а для тех, которые на разных — будет максимальна.

Но вот такие "матёрые разработчики", зачастую, просто не допускают мысли, что они могут чего-то не понимать (потому что груз опыта адски давит) — следовательно, это язык спроектирован хуёво, ну или, там, Путин снова виноват.

Я практически уверен, что напишу сервер для irc на расте за полчаса, но я так же вполне допускаю, что чтобы сделать то же самое на условном Идрисе, мне понадобятся те же четыре дня (или даже больше), чтобы во всём детально разобраться. Это нормально, так жизнь устроена — я не буду потом писать разгромные сравнительные статьи на тему почему Идрис говно.
(Ответить) (Parent) (Thread)
[User Picture]From: metaclass
2018-01-23 10:48 am
А вот как в rust сделать веб-сервис с graceful shutdown?
Т.е. типичная задача: веб-сервис внутри виндовского сервиса, у которого есть две операции "запуск" и "остановка". Ну или тот же сервис, но запущенный в отладочном режиме, как приложение - запускаем listen в соседнем потоке, в основном ждем, пока не скажут выйти, затем останавливаем открытый сервер.
В hyper с tokio я ни апи, ни примера на эту тему найти не смог.
(Ответить) (Parent) (Thread)
[User Picture]From: swizard
2018-01-23 12:02 pm
Про hyper я не в курсе, но, вообще, в tokio это делается довольно тривиально:

1) Спавним два физических потока (управляющий и собственно сервер), в каждом запускаем свой реактор.
2) Соединяем их future-каналом (oneshot или mpsc, как будет удобней).
3) В управляющем потоке, когда "скажут выйти", командуем в канал серверу закругляться.
4) В потоке с сервером имеем две футуры: в одной про сеть и сервер, в другой канал, соединяющий с управляющим потоком. Склеиваем эти футуры через select или join в одну и отдаём реактору.
5) При получении команды закругляться просто возвращаем из футуры что-то вроде Error::BreakChanCancelled и реактор остановится. В управляющем потоке ещё потом можно аккуратно приджойнить физический поток.
(Ответить) (Parent) (Thread)
[User Picture]From: swizard
2018-01-23 12:05 pm
> через select или join

Только через select, конечно, join здесь не подойдёт.

В принципе, если вопрос у тебя не праздный, а про какую-то реальную задачу, я тебе могу накидать сниппет с примером.
(Ответить) (Parent) (Thread)
[User Picture]From: jakobz
2018-01-22 06:21 pm
Так вроде гошка - хипсторская альтернатива для питонистов, пишущих сайтики и микросервисы, которые почему-то не захотели в джаву. А rust - замена сишке, чтобы всякие операционки и браузеры писать.

Ну типа странно писать ядро ОС на языке с GC, и также странно писать веб-сайт на языке без GC.

Короче, зачем их сравнивать-то?
(Ответить) (Parent) (Thread)
[User Picture]From: nponeccop
2018-01-23 05:41 am
> странно писать ядро ОС на языке с GC

MS с Singularity смогли proof of concept

> зачем их сравнивать-то?

Вот! Сегодня они сравнивают раст с гошечкой, а завтра - обколются своей марихуаной и будут ебать друг друга в жопы!
(Ответить) (Parent) (Thread)
[User Picture]From: metaclass
2018-01-23 10:49 am
Почему бы не написать REST-бекенд на rust?
(Ответить) (Parent) (Thread)
From: Valentin Budaev
2018-01-25 06:45 am
> Ну типа странно писать ядро ОС на языке с GC

На уровне ОС gc как раз наиболее выгоден.
(Ответить) (Parent) (Thread)
[User Picture]From: binf
2018-02-28 07:52 pm
Почему сразу хипстерская? Вот щас впишусь за гошечку тут)) Вполне себе инженерно обоснованная альтернатива.
На питоне ничего серьёзного писать нельзя, тут всё понятно же.
В джаве ОЧЕНЬ много уг, от которого гошников избавили. Оттого джава горферам не усралась.
Туллинг в Го в 18-м году - агонь, инфа 100%

Ну и говносайтики - это всё же для питона и нодежс, на Го серьёзный софт лупят - докер, кубернетиз, dl.google.com, бэк для youtube, дропбокса и т.п Хотя говносайтики тоже можно конечно
(Ответить) (Parent) (Thread)
[User Picture]From: nponeccop
2018-02-28 08:30 pm
> на Го серьёзный софт лупят - докер, кубернетиз,
> dl.google.com, бэк для youtube, дропбокса и т.п

По-моему Вы только что описали "хипстерство":
- убеждённость что веб-линукс это вершина вселенной,
- веб-линукс проекты и тулинг к ним (скажем heroku и openshift тоже щитаются)

В целом я считаю что хипсторство (в применении к программированию) - это движение, выросшее из дотком-бума, веб20 и веб-клаудов с серверами за лоад-балансером.

Собственно 12-factor manifesto https://12factor.net/ - это манифест хипсторства.

Достаточно специфические распределённые системы, которые:

- рассчитаны на потребление народными массами
- с OLTP-нагрузкой
- некритические
- лигаси-фри
- нетребовательны к железу: есть мантра "железа всегда заведомо хватает, в крайнем случае докупим больше серверов или утолщим имеющиеся за полдоллара"

Большинство из них также достаточно маленькие (имхо), до 100 клок.

Постепенно хипсторство проникает и в другие области: см. усилия редхета, которое через опеншифт и покупку кореос пытается довести хипсторские технологии до ума и пропихнуть в энтерпрайз.
(Ответить) (Parent) (Thread)