All streams
Search
Write a publication
Pull to refresh
4
0
Андрей Кутейко @andy128k

User

Send message

Ну можно впасть в крайность и разметить весь код как unsafe. И даже в этом случае получится язык более безопасный чем C/C++.


Процитирую мануал. В unsafe коде можно дополнительно делать:


  • разыменовывать указатель
  • вызывать другой unsafe код
  • обращаться к глобальным переменным
  • реализовывать unsafe traits
  • использовать union-ы

Всё! Все остальные инварианты и проверки сохраняются, в том числе и пресловутый borrow checker.

https://www.areweguiyet.com/ — вот тут собирают информацию о состоянии GUI в Rust.


Из личных наблюдений — есть очень приличный gtk-rs (привязка к gtk3), куча обвязок вокруг WebView, и написанные с нуля библиотеки со скупыми наборами виджетов.

Так в том и дело, что весь код проверять и не надо. Только unsafe блоки. В них обычно пишут больше всевозможных проверок и покрывают их тестами.


Я уже года 4 пишу на расте и за всё время мне unsafe понадобился всего пару раз. Это были переписывания с C/C++ на раст и такой код был временным клеем. Как только последняя функция была переписана на расте — он удалялся. И в чистом коде на расте никакого unsafe уже не было.


Ну и важно понимать, что даже unsafe раст намного безопаснее C/C++. У компилятора есть проверки которые он выполняет всегда (safe и unsafe) и проверки которые доступны только в safe. Это всего лишь означает, что компилятор не может сделать это сам и требуется помощь человека (обычно это означает, что нужны тесты для этого куска кода).

Если язык согласован

Вот это точно не про Common Lisp. Язык, который появился в результате слияния разных диалектов от разных вендоров. При этом каждый вендор тащил туда свою специфику.

Перенимать всё же стоит полезные и уместные фичи.


  • REPL Driven Development выбивается из современной практики ведения истории кода в VCS. Дампы состояния интерпретатора (ну или лисп-машины) на роль версий не подходят никак. А уж про коллективную разработку и речи нет.
  • Хотрелоад есть много где. Erlang, JRebel для Java, Spring gem в Ruby on Rails, Webpack dev server для JS-а.
  • Компиляция в бинарник с рантаймом? Это скорее похоже на выдачу единственного что лиспы умеют за преимущество. А вот нормального tree shaking не завезли. Но если уж так хочется всё запаковать, то тот же докер-контейнер с любым интерпретатором вполне на эту роль подойдёт.
  • Про макросы я уже написал выше, там где они нужны, они есть (Rust, Scala), а в динамических языках и без них обходятся. Даже в Clojure макросы хоть и есть, их используют крайне редко.
  • Разные парадигмы в одном языке. Разве этим хоть кого-то можно удивить? Все более-менее популярные языки такие. Если же взять избитый лисперами пример про Prolog внутри лиспа, то вот пожалуйста — http://minikanren.org/ реализации на любой вкус.
  • Про рестарты тоже уже написал выше. Они необычные, но вот полезные ли? То что они делают достигается простой передачей замыкания.

Из перечисленного только макросы интересны и они (или другие инструменты кодогенерации) появились в других языках (макросы в Rust, Sweet.js/Babel в JS, и, простите, Lombok в Java).


Рестарты это сомнительная вещь сама по себе. Она запутывает поток выполнения и не известно как будет работать и будет ли вообще в многопоточных приложениях.


MOP переоценён. В любом динамическом языке (Python, Ruby, JS) это вообще не проблема. А в статических обходятся рефлексией и кодогенерацией, если нужно.


Можно ещё было бы вспомнить экзотику вроде комбинаторов методов. Но не будем :)

С Лиспом всё так. Вот только ему нечего предложить в современном мире по сравнению с другими языками. Он уже давно не "элегантное супероружие джедая". Многие языки впитали из него достаточное количество свойств. А те что остались, либо не сильно нужны, либо и вовсе вредны. А та же гомоиконность оказалась переоценённой.

Статья ссылается на Debian Woody, который вышел в 2002-ом и был актуален до 2006-го.

Пока ! не стабилизирован, но его можно либо определить самостоятельно (как пустой enum) либо воспользоваться крейтом never.

Для начала нужно установить зависимости. В моём случае (Debian) это делается так


sudo apt install build-essential cmake ninja-build libglfw3-dev libglm-dev

Потом нужно создать каталог для сборки (внутри скачанного каталога проекта), перейти в него, сконфигурировать и собрать проект.


mkdir builddir
cd builddir
cmake ..
ninja

В результате появится ожидаемый исполнимый файл.

Завязано не сильно. Изменений нужно не так уж и много. (Если что, я на C++ не писал лет 10, так что сильно не бейте за код).
К сожалению примера, с которым столкнулся на практике, нет под рукой, но вот здесь есть похожий.
У Скалы и до этого были проблемы с синтаксисом (неоднозначная трактовка в зависимости от пробелов и пустых строк), а теперь ещё и спорный синтаксис с отступами будет.

Поддержка Скалы в IDE и редакторах и так отстаёт от других языков из-за сложняков вроде имплицитов, так теперь ещё и авто-форматирование кода пропадает.

«Опциональность» тут вообще выглядит как издевательство. Забыл открывающую фигурную скобку и всё, твой код уже интерпретируется иначе.

Что же касается популярности языка, то синтаксис тут вторичен. Ставка на то чтобы быть better Java сыграла злую шутку. Скала и её сообщество дали миру много замечательных вещей таких как Spark или Kafka. Но потом Скалу отбросили до вторичной роли «языка реализации» и Java опять вышла на передний план.
Обрезаем строки

Какие ещё строки?! Strings это нитки у марионеток (они же puppets).
от персонального спутника только блок питания остался (the power)
Что с мальчиком и Смехотроном? Не понятно.
Вопросов больше чем ответов. Под какой лицензией открыть? Что если под той же самой что и монга? Скрипты открыты, но использовать их для создания такого же сервиса нельзя, пока не откроешь что-нибудь ещё?

Это всё выглядит очень дурно. Я бы ожидал форка и развития независимой версии.
Платность/бесплатность этих услуг не оговаривается. Что будет с предлагающими «купить хостинг с предустановленным PHP и MongoDB»?
Больше похоже на ON ERROR GOSUB.

Information

Rating
Does not participate
Location
Донецк, Донецкая обл., Украина
Date of birth
Registered
Activity