Обновить
99
0.1
Роман Смирнов @Source

Head of Elixir at Ecom.tech

Отправить сообщение

Так, медианная з/п эйчаров в статье указана 100 т.р.

И причём тут все остальные, кого вы перечислили?

Спору нет, для вашего юзкейса и PHP и Perl отлично подходят.

А вот разработчики гораздо чаще работают с чужим кодом, чем со своим.

grapheme_str_split я так понимаю новинка из PHP 8.4? Неплохо, хоть и немного костыльно. А что с примером перевода baffle в верхний регистр?

Для особо ценных мыслей есть https://jekyllrb.com/ и куча его последователей, ведёте все посты прямо в Git, реплицируете сколько душе угодно.

Или вы наивно полагаете, что если платите хостеру 200 рублей в месяц, то он не снесёт ваш блог на Wordpress вместе с базой, если кто надо попросит?

Для большинства людей всё это, правда, неактуально. Никому до них дела нет.

Ну например, в методе "String.slice" что означает второй аргумент?

Диапазон означает. От нуля, если считать с начала строки, либо от -1, если надо с конца строки считать.

А если вернёт одно, то почему не другое, ведь оба поведения являются корректными?

Нет, когда я работаю со строкой, я ожидаю, что те символы, которые видны на экране - это и есть символы строки. Соответсвенно 👩‍❤️‍👨 - это один символ (хоть терминологически правильнее его называть графемой, но это уже как раз детали реализации). И, в целом, вы тут подловили в том плане, что составные графемы действительно рассыпаются на составляющие части, однако они всё ещё рассматриваются как единое целое и при выводе для пользователя всё получается правильно:

iex(1)> String.reverse("👩‍❤️‍👨42")
"24👩\u200D❤️\u200D👨"
iex(2)> IO.puts("24👩\u200D❤️\u200D👨")
24👩‍❤️‍👨
:ok
iex(3)> String.slice("👩‍❤️‍👨42", 0..0)
"👩\u200D❤️\u200D👨"
iex(4)> IO.puts("👩\u200D❤️\u200D👨")
👩‍❤️‍👨
:ok

При этом reverse работает, судя по всему некорректно, т.к. в моём понимании реверс строки -- это реверс чаров в строке

Так это у вас неверное понимание. Если хотите работать не со строкой, а со списком байтов или даже битов, то такая возможность тоже есть. Но это уже совсем другая тема.

А equivalent вернёт true или false при сравнении Floß, floss, floſs и floſʒ?

Может, я не понял вопрос. Но это же очевидно не эквиваленты, они при выводе для пользователя выглядят совершенно по-разному.

Вот со смайликом вашим, там эквиваленты, потому что для пользователя будет одно и то же отображение:

iex> String.equivalent?("👩\u200D❤️\u200D👨", "👩‍❤️‍👨")
true

Ну, эсцет `ß` допускает 2 варианта записи в верхнем регистре `ẞ` и `SS`. Если один из них срабатывает, то имхо норм. Хоть тут и возникает некоторая необратимость в преобразованиях регистра, но для немецкого это в норме вещей. Тем более, что эсцет выходил из широкого употребления ещё в начале нулевых.

iex(1)> String.downcase("ẞ")
"ß"
iex(2)> String.upcase("ß")
"SS"

Отчего же, например, в Elixir эти примеры спокойно работают, причём без воркэраундов, без перевода в массивы и т.п.

iex(1)> String.reverse("noël")
"lëon"
iex(2)> String.slice("noël", 0..2)
"noë"
iex(3)> String.length("noël")
4
iex(4)> String.length("😸😾")
2
iex(5)> String.slice("😸😾", 1..-1//1)
"😾"
iex(6)> String.reverse("😸😾")
"😾😸"
iex(7)> String.upcase("baffle")
"BAFFLE"
iex(8)> String.equivalent?("noël", "noël")
true

А функции на Си кто писал? Пушкин что-ли)

Если вы имели в виду, что это функции из С-stdlib, то нет. Там только такие: https://ru.wikipedia.org/wiki/String.h

А эти хоть и на Си, но написаны разработчиками PHP.

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

Как только появилась идея разделить строки на "строковые" и "бинарные", стало понятно, что это путь в никуда. 

Да, в целом, есть языки в которых есть bitstring и просто string. Если нормально всё реализовать, то это даже удобно)

Смотря что называть поддержкой.

Например, успешное прохождение всех проверок из этой статьи: https://mortoray.com/the-string-type-is-broken/

Но пост немного не об этом. 

А вот о чём, кстати, пост? По-моему он исключительно о том, почему Альберту Степанцеву нравится PHP. Причём с весьма слабыми доводами и натяжками.

На вопрос из заголовка ответа нет, нет даже доказательств, что PHP является "одним из самых востребованных". То, что в интернете есть куча home pages, которые когда-то были написаны на PHP, а так же миллионы развёрнутых CMS - это имхо не аргумент. Это только показывает, что когда-то он был востребованным.

Для начала бы определиться со скоупом. Востребованный для чего?

Чтобы вести свой блог? Когда-то да, Wordpress в 2 клика в админке хостера и погнали. Сейчас очевидно нет. Соцсети давно уже заняли эту нишу, и поднимать свой личный блог в 2025 году на Wordpress - это шиза.

Чтобы сделать сайт-визитку для компании? Когда-то да, заказали в веб-студии за 20 т.р., они подняли CMS, скин натянули и погнали наполнять. Сейчас очевидно нет. Для компании важнее хорошо оформить карточки в 2Gis и Яндексе, и вести профиль в соц.сетях.

Чтобы сделать свой интернет-магазин? Спорно, конкурентов у PHP тут хватало и 15 лет назад, но допустим. Заказали у веб-студии за 100-150 т.р. разработку и ok. Сейчас очевидно нет. Маркетплейсы полностью вытеснили мелкие интернет-магазины.

Вообще формат CMS потерял популярность, уступив место SaaS решениям. И считать, что 100 тыс доменов привязанных к Tilda == 100 тыс проектов на PHP - это тупо. Это 1 проект, сколько бы там доменов ни было.

А приводить в пример ВКонтакте, который выбрал PHP 20 лет назад и чтобы не загнуться от последствий такого выбора, был вынужден написать свой компилятор - такое себе. Имхо, выглядит как аргумент, почему выбрать PHP было для них ошибкой.

Это всё конечно хорошо. Но для практического применения лучше изучить Elixir, во всяком случае если вас backend-разработка интересует.

https://www.erlang-solutions.com/blog/why-elixir-is-the-programming-language-you-should-learn-in-2024/

Переход от PHP 4 к PHP 5 принес полноценное ООП, сделав язык удобным для коллективной работы. Версия 5.4 подарила неймспейсы и пакетный менеджер — PHP стал платформой для больших команд. PHP 7 произвел революцию в производительности благодаря работе Дмитрия Стогова из Core team.

Тут для полноты картины не хватает рассказа о достижениях PHP 6, который собственно и породил разговоры о том, что PHP своё отыграл, т.к. они так и не осилили поддержку Unicode добавить.

Ну и неизбывная особенность PHP - это процедурная стандартная библиотека с несогласованными функциями. Напр. str_split, но strpos (почему не str_pos?), зато у обеих строка идёт первым аргументом. Вроде логично, смотрим str_replace и внезапно основная строка - третий аргумент. О том, чтобы сделать это всё методами объекта String и речи не идёт. Так что никаким полноценным ООП в PHP не пахнет до сих пор.

А так, конечно, PHP не убиваем, столько сайтов на Wordpress, Joomla и Drupal, что если только их сложить уже больше 80% всех сайтов в мире получится.

P.S. Лично я перестал писать на PHP в 2009-м и ни разу не пожалел, в мире есть гораздо более приятные ЯП (и да, тут речь уж точно не про Go), так что не стоит зашориваться на чём-то одном.

Соглашусь. Все эти ассистенты больше похожи на интерфейс к поиску, который и запрос поймёт получше гугла и результаты сразу агрегирует в читаемый вид. Попробуйте PHind. На мой вкус, он для этих юзкейсов даже получше ChatGPT.

Так они ещё и язык специальный придумали, где можно побольше избыточного бойлерплейта генерировать, Golang называется xD

Теперь понятно зачем он такой невыразительный. Чтоб красивые проценты по достижениям нейросетей рисовать.

Надо было вопрос точнее формулировать: Почему её не можно трогать? xD

Вы тут используете риторический приём "ложная дихотомия"

У вас просто нет фокуса на новую деятельность. Поэтому вы вместо продуктивных действий праздно жалуетесь на жизнь в комментариях.

Юзкейсы Симулинка понятны. Но мне показалось, что в случае Neva речь о том, чтобы всё в таком стиле писать.

Ну да, имхо, новость должна быть либо про что-то широко известное, либо новость и должна презентовать что-то новое. А тут минорная версия какого-то нового языка и получилось непонятно, чем именно 0.30.2 стала такой примечательной, что удостоилась новости.

не является pure dataflow, это все control-flow с элементами dataflow

Погодите. Я правильно понимаю ситуацию? Вот я говорю, что есть Elixir c GenStage и Flow, которые позволяют реализовывать любую dataflow задачу стабильно, со всеми нужными примочками, обвязками и интроспекцией.

А вы говорите, что этого недостаточно, только потому что он не принуждает вас насильно писать в dataflow-подходе абсолютно всё, включая расчёт чисел Фибоначчи и вывод в консоль? Мне кажется, тут идея идёт уже в ущерб практичности и универсальности.

Информация

В рейтинге
4 125-й
Откуда
Россия
Зарегистрирован
Активность