пятница, 1 февраля 2019 г.

[prog.thoughts] Rust дал compiler-driven development широким массам

Вчера, в результате обсуждения в Facebook-е двух вариантов одного и того же кода на Rust-е довелось таки воспользоваться Rust-овским playground-ом и набросать на Rust-е пару-тройку собственных вариантов.

С учетом того, что к Rust-у я не прикасался, наверное, с апреля прошлого года (когда мне пришлось проштудировать доку по Rust-у для участия в панельной дискуссии на C++ CoreHard-е), было, скажем так, любопытно.

Стало понятно, что имеют в виду растоманы, когда говорят, что компилятор им помогает писать код.

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

Поэтому не остается ничего другого, как делать то, что тебе говорит компилятор. А потом оно раз! И работает.

Ну понятно, почему у людей крышу-то сносит. Особенно у тех, кто на Rust с динамики, вроде JS, Python или Ruby приходит.

Имхо, здесь есть сильная аналогия с тем, какую серьезную роль в разработке софта в середине-конце 1990-х годов произвели IDE. Сперва Delphi, затем IDE для Java (при этом IDE для C++, имхо, в те времена, да и потом, сильно недотягивали до Java-аналогов, что обуславливалось особенностями языка). Можно сказать, что в 1990-х сформировался IDE-driven development, который пышным цветом расцвел в 2000-х. Да и сейчас, наверное, цветет и пахнет.

А вот Rust, похоже, делает доступным для широких масс такую штуку, как compiler-driven development.

Что, как мне кажется, неизбежно скажет свое веское слово в индустрии софтостроения.

Но знаете, что по-прежнему удивляет меня сильнее всего касательно Rust-а? Это то, что не смотря на всю крутотень Rust-а и толпы писающих кипятком фанатов для Rust-а еще не появилось ни одного сколько-нибудь заметного GUI-фреймворка. За 3.5 года после выхода стабильного Rust 1.0. За три с половиной, мать его за ногу, года.

Да в 1990-е на первых версиях C++ GUI-фреймворки в одно рыло клепались только в путь и росли как грибы после дождя. Первая версия Qt была сделана за четыре года. В 1990-е, на древнем C++. Маленькой командой. Без GitHub-а. Только вдумайтесь. Да и сейчас люди делают вещи вроде ImGui и Nana. Для C++, не для Rust-а. Загадка, однако.

11 комментариев:

NN​ комментирует...

Писал комментарий и в итоге он не сработал..
Я думаю, что в будущем может и выстрелит какая-нибудь наработка на базе Dafny.
Тогда компилятор не только за руками следить будет, а ещё и за логикой кода.

Раз подряд тему получи: https://rcoh.me/posts/rust-linked-list-basically-impossible/ :)

P.S.
Теперь я ещё и робот для Гугла. Капчами закидал по поводу и без.

goncharenko комментирует...

Думаю, что традиционные GUI фреймворке в массе уже не интересны. Будут прогрессировать web-framework-и типа rocket, iron и т.п.

eao197 комментирует...

@goncharenko
Думаю, что в массе и Rust не интересен. Безопасные языки с GC покрывают большинство потребностей прикладных программистов. Но вот нативный GUI -- это ниша, в которой C++, не смотря ни на что, хорошо себя чувствует. И если Rust-у нужно отъедать ниши у C++, то и в GUI-ях тоже.

jazzer комментирует...

Ну так и clang, и даже GCC такое умели довольно давно. У последнего даже ключик был, проверять код на соответствие рекомендациям Скотта Майерса, совсем древность :)

eao197 комментирует...

@jazzer
Ну вот что-то вроде такого: я вызываю некую функцию, которая как оказалось, возвращает не void, а Result. И компилятор мне говорит: в этом контексте я жду, что твой вызов должен вернуть, void, а у тебя тут Result, давай-ка ты вызовешь у этого Result-а unwrap() или задействуешь match.

В плюсах я такого не припомню.

jazzer комментирует...

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

eao197 комментирует...

@jazzer
Ну вот может в Haskell-е или каких-нибудь других эзотерических языках такое было и раньше. Но обычного программиста это счастье в полной мере обрушилось впервые. В свое время умный автокомплит для Java и C# вместе с автоматическими рефакторингами посадили кучу народу на полноценные IDE. Теперь к этому еще и компилятор-инструктор добавился.

NN​ комментирует...

http://areweguiyet.com/

Вон даже страничку завели . Можешь за прогрессом следить :)

eao197 комментирует...

@NN
Да Rust-сообщество как сектанты какие-то, не успеешь оглянутся, они уже повсюду со своими песнопениями :)

NN​ комментирует...

Держи ещё https://areweasyncyet.rs/ :)
Ну и вот переписывание Python https://github.com/RustPython/RustPython .
Ртутного тоже на ржавчину переписывать собрались , но боюсь умрёт это проект так и не родившись :D
https://www.mercurial-scm.org/wiki/OxidationPlan

eao197 комментирует...

@NN

Про переписывание Mercurial-а на Rust-е новость была еще в середине прошлого года, если не ошибаюсь.