URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 121127
[ Назад ]

Исходное сообщение
"Выпуск Psalm 3.12, статистического анализитора для языка PHP. Альфа выпуск PHP 8.0"

Отправлено opennews , 02-Июл-20 12:13 
Компания Vimeo опубликовала новый выпуск статистического анализатора Psalm 3.12, позволяющего выявлять как очевидные, так и трудноуловимые ошибки в коде на языке PHP, а также автоматически исправлять некоторые виды ошибок. Система подходит для выявления проблем как в устаревшем коде, так и в коде, использующем современные возможности, появившиеся в новых ветках PHP. Код проекта написан на языке PHP и распространяется под лицензией MIT...

Подробнее: https://www.opennet.me/opennews/art.shtml?num=53257


Содержание

Сообщения в этом обсуждении
"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Повидло19 , 02-Июл-20 12:13 
> В качестве выходных ворот, требующих отслеживания экранирования, проверяются операции, приводящие к выводу в формате HTML, добавлению HTTP-заголовков или формированию SQL-запросов.

Чо?


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено a.n.o.n.i.m , 03-Июл-20 08:40 
Псалмы распевать - не мешки ворочать.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено BlackRot , 02-Июл-20 12:17 
Исправлены ошибки
Повышена производительность

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено jfdbngh , 02-Июл-20 13:49 
Исправлены ошибки (и добавлены новые)
Повышена производительности (при условии использования более производительного железа)

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 02-Июл-20 19:17 
> Исправлены ошибки (и добавлены новые)
> Повышена производительности (при условии использования более производительного железа)

А у кого не так?


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 03-Июл-20 13:48 
У минусаторов не так, вестимо.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено MPEG LA , 02-Июл-20 12:17 
>if ($a && !$a) {}

жесть. зачем вообще $ в имени переменной?


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено cancelled , 02-Июл-20 12:21 
Когда разрабатывали язык - забыли учесть твое мнение, исправят в php 9.0, за одно сломают нафиг всю обратную совместимость.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено тоже Аноним , 02-Июл-20 13:29 
Обратную совместимость, превращающую variable в 'variable', стоит сломать вместе с руками тех, кто на нее полагается.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 03-Июл-20 00:04 
Именно это и собираются сделать:

$ php -r '$a = a;'
PHP Warning:  Use of undefined constant a - assumed 'a' (this will throw an Error in a future version of PHP) in Command line code on line 1


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено тоже Аноним , 03-Июл-20 00:16 
> PHP Warning:  Use of undefined constant a - assumed 'a' (this will throw an Error in a future version of PHP) in Command line code on line 1

/opt/php5.3/bin/php -r 'error_reporting(E_ALL); $a = a;'
PHP Notice:  Use of undefined constant a - assumed 'a' in Command line code on line 1

Собственно, в 7.2 добавили только предупреждение о будущей ошибке. За столько-то лет и версий.


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 03-Июл-20 02:10 
Те, кто пишет нормальный код, заворачивают все ошибки (да, даже Notice) в исключения, а Notice там был даже в 5.0.

А тонны древнего кода времен php3 до сих пор работают, и чтобы там все переписать, нужно время. Повторять историю  python3, на который не могли перейти годами (да и сейчас еще не все перешли), желания у них нет, и это совершенно понятно.


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Работа за еду на PHP , 02-Июл-20 12:23 
Ради денег на еду

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Dragomeat , 02-Июл-20 12:28 
Так а что не так то? Это часть дизайна языка, как и "::" для доступа к статическим методам и константам класса, "->" для доступа к обычным методам и полям, "." для конкатенации и т.д

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Ilya Indigo , 02-Июл-20 12:39 
А Вас не смутило наличие lint в динамическом языке, написанной на нём же?

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено funny.falcon , 02-Июл-20 18:43 
А какая разница, на чём lint писать? Лишь бы автору удобно было.
Семейство ML языков (SML, Ocaml, Haskel) является потомком ML, первая реализация которого была написана на LISP. LISP, как известно, динамически типизируемый язык.
Вопрос же не в языке (если не считать экзотику), а в опыте и криворукости того, кто на нём пишет.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Ilya Indigo , 02-Июл-20 19:14 
> А какая разница, на чём lint писать? Лишь бы автору удобно было.

1 Динамическому скриптовому языку заточенному под WEB-приложения lint нужен как козе баян!
2 Писать на PHP что-то кроме WEB-приложений - глупость и невежество!


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 02-Июл-20 12:52 
Sigil (в данном случае $) очень полезен тем, что даёт возможность отличать переменные от остальных слов, создаёт им отдельное пространство имён. Не приходисят извращаться с именами переменных, которые, внезапно, по смыслу совпадают с какими-либо keywords.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Вы забыли заполнить поле Name , 02-Июл-20 23:19 
> которые, внезапно, по смыслу совпадают с какими-либо keywords

Не выдумывайте. Как часто это происходит? Не надо вводить много ключевых слов в язык. На вскидку приходит какой-нибудь class и function и как часто они нужны в прикладном коде? Ну коль так уж нужны добавьте _ в конец или начало.


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 02-Июл-20 13:09 
Страшное наследие из Perl, который разрабатывали напрочь упоротые лингвисты.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Anonim , 02-Июл-20 14:43 
Там jQuery в ядре.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Ilya Indigo , 02-Июл-20 19:09 
>>if ($a && !$a) {}
> жесть. зачем вообще $ в имени переменной?

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


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 02-Июл-20 23:52 
Его не получится убрать.
Сейчас можно одновременно иметь класс или функцию foo и переменную foo.
Как отличать, если убрать доллар?

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Ilya Indigo , 03-Июл-20 01:30 
> Его не получится убрать.
> Сейчас можно одновременно иметь класс или функцию foo и переменную foo.
> Как отличать, если убрать доллар?

А ещё можно одновременно иметь константу foo.
Как сабж отличает константу foo от ф-ии или класса?


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 03-Июл-20 02:15 
Никак не отличает, будет конфликт имен. Но так было с самого начала, потому проблемы и нет.

С константами и классами на самом деле проблема не то чтобы и проблема - классы называют CamelCase-ом, константы UPPER_CASE-ом, а переменные обычно начинаются с lowercase. Тут конфликты вылезут только у тех, кто игнорирует PSR.

А вот с функциями (и языковыми конструкциями, выглядящими как функции) конфликты вылезут моментально: достаточно одной count, переменная $count найдется в примерно каждой сколь-либо объемной программе.


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 03-Июл-20 15:35 
Там хитрость ещё в том, что в php вполне возможны такие конструкции как $variable($args), вызов функции/метода по колбеку в $variable. Язык слабо типизирован, и функциональный вид переменной заранее не объявляется. Поэтому если $ убрать, различия между функциями и переменными сотрутся, и будет вообще бардак.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 07-Июл-20 21:56 
В том же JS это никому не мешает. Если в переменной лежит не функция, будет ошибка вызова. Тем более, в PHP есть неймспейсы.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Ilya Indigo , 03-Июл-20 16:32 
<?php
const foo = 'Константа';
function foo()
{
    return 'Функция';
}
abstract class foo
{
    public const bar = 'Свойство';
    public static function bar()
    {
        return 'Метод';
    }
}
        ?><p><?=foo?></p>
        <p><?=foo()?></p>
        <p><?=foo::bar?></p>
        <p><?=foo::bar()?></p>

Константа

Функция

Свойство

Метод

Никаких ошибок и предупреждений!
PHP прекрасно отличает константу от ф-ии и класса не путая их.
Точно также он смог бы от них отличать переменные без $.

> А вот с функциями (и языковыми конструкциями, выглядящими как функции) конфликты вылезут моментально:

Зарезервированные слова не доступные для переменных никто не отменял.
В с++ я переменную int long или string тоже назвать не могу... но там есть типы...
$ как я понимаю, играет ещё роль ключевого слова, аля var или let.


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 08-Июл-20 12:43 
Конечно. Это потому что нельзя сделать

const foo = 'strlen';
$s = 'foo';
echo foo($s);

или

const foo = '\stdClass';
$o = new foo();
var_dump($o);

А с переменными так можно:

$foo = 'strlen';
$s = 'foo';
echo foo($s);

или

const foo = '\stdClass';
$o = new $foo();
var_dump($o);


Если убрать $, то вся эта динамика (из которой примерно целиком состоит тот же вордпресс, например), поломается.


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 08-Июл-20 12:44 
в последнем должно быть $foo = '\stdClass' конечно

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено SubGun , 04-Июл-20 08:32 
Чтобы не превращать язык в помойку, вроде питона.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Murz , 05-Июл-20 18:23 
Да, действительно что за дискриминация? Наверно пендостан проплатил, срочно заменить на ₽!

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 08-Июл-20 10:51 
потому что PHP изначально создавался как шаблонизатор и переменные можно было выводить внутри строк.
почувствуйте, что называется, разницу.

print "hello $some_var";

и

print "hello some_var";

но все уже забыли это и пишут шаблонизаторы на шаблонизаторе, чтобы использовать шаблонизаторы пока работает шаблонизатор.


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено A.Stahl , 02-Июл-20 12:32 
Psalm 3.12 от Шталя:

Да изыдет пусть непотребство неявно типизированное
Ибо явным должно быть то, что важно
И кто делает иначе, тот не прав и осуждаем должен быть
Also sprach Stahl


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Ilya Indigo , 02-Июл-20 12:37 
> Включение JIT-компилятора, применение которого позволит повысить производительность...

... абсолютно не типичных задач для web-программирования, например рендеринг видео.
Производительность типичных задач будет неизменна, и потребление оперативы, как при всяком JIT возрастёт.

P.S. Короче теперь неосиляторы С++ смогут писать скр... программы не только на питоне и руби, но и на пыхе...

Хотя если честно, в таких проектах, как youtube-dl где все простои возникают при ожидании сети и загрузки, а сама задача сводится к вызову сторонних утилит, скачиванию и парсингу, bash/perl/python/ruby/php более лучшее решение чем C/C++.


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 02-Июл-20 12:41 
вы́растет

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Ilya Indigo , 02-Июл-20 12:47 
> вы́растет

У фф плохой спелчекер :-(


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 02-Июл-20 12:56 
А что, скорость только для рендеренга видео нужна? Вообще, высокая скорость работы никогда не мешает, а в качестве примера могу привести комбинаторные алгоритмы, которые порой требуются в бизнесс-логике. На моих тестах, производительность между интерпретатором и тем же алгоритмом, сделанным на Си -- в 200 раз.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 02-Июл-20 23:53 
Нет. С современным кодом, использующим strict_types=1, прирост производительности заметен невооруженным глазом.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 03-Июл-20 15:36 
Проснитесь, PHP уже давно вышел за рамки Web.

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 02-Июл-20 13:24 
какие версии PHP он хоть понимает?

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Gemorroj , 02-Июл-20 13:40 
https://github.com/vimeo/psalm/blob/master/docs/running_psal...

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 02-Июл-20 14:08 
Я дико извиняюсь, но не могли бы вы ткнуть пальцем где на этой ссылке написан ответ на МОЙ вопрос?

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Gemorroj , 02-Июл-20 14:29 
2 строчка "Psalm Requires PHP >= 7.1". На русский переводить, надеюсь, не нужно?

"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 02-Июл-20 14:48 
Это я так понимаю версия PHP необходимая для запуска этого анализатора. Но я спрашивал не об этом.
Я спрашивал не о том на какой версии php работает этот анализатор, а какие версии php он понимает... какие версии он умеет анализировать...

Вы же понимаете что "Requires PHP" это совмем не тоже самое что "understands PHP" если вам на английском проще...


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 03-Июл-20 00:01 
Оно работает на nikic/PHP-Parser [1].

Соответствено, поддерживает те версии, которые поддерживает этот парсер:

> This is a PHP 5.2 to PHP 7.4 parser written in PHP. Its purpose is to simplify static code analysis and manipulation.

[1] https://github.com/nikic/php-parser


"Выпуск Psalm 3.12, статистического анализитора для языка PHP..."
Отправлено Аноним , 02-Июл-20 13:44 
Статический анализатор и статистический анализатор -- это не одно и тоже.
В теле статьи описан статический анализатор, есличо

"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено онанимуз , 02-Июл-20 22:38 
> Включение JIT-компилятора, применение которого позволит повысить производительность.

и тогда пых станет быстрее педона не только в синтетических тестах, но и в реальных задачах. нужно, годно, ждём!


"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Вы забыли заполнить поле Name , 02-Июл-20 23:21 
Что только не делают, лишь бы не писать на нормальном языке.

"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Аноним , 02-Июл-20 23:57 
Надо заметить, что оно уже стало похоже на нормальный язык. Все оставшиеся кривости обусловлены обратной совместимостью.

Другое дело, что никто в здравом уме сейчас не будет выбирать PHP для нового проекта - разве что есть наработки с похожего проекта, которые доработать напильником на порядок быстрее, чем писать что-то новое


"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Аноним , 03-Июл-20 00:58 
PHP 7 не умеет юникод в строки

"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Аноним , 03-Июл-20 02:19 
Смотря что такое "не умеет".
mb_ функции есть, модификатор /u у регулярок есть.
Пхпшная строка - это, по сути, byte[]. Нативный тип было бы иметь неплохо, но на практике никаких особенных неудобств нет. Можно написать класс UnicodeString и обернуть все в него, но так никто не делает, потому что привыкли уже.

"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено с , 03-Июл-20 07:24 
Напиши нормальный

"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Вы забыли заполнить поле Name , 03-Июл-20 15:13 
> Напиши нормальный

Научись воспринимать критику или возвращайся в дедсад


"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено с , 06-Июл-20 02:22 
> Научись воспринимать критику или возвращайся в дедсад

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


"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Вы забыли заполнить поле Name , 06-Июл-20 10:15 
>> Научись воспринимать критику или возвращайся в дедсад
> да с удовольствием бы вернулся, но походу место уже занято тобой, впрочем
> уровень критики соответсвует скорее спецпансионату для альтернативно одаренных

Cтрелки не переводи. Вместо кукареканья а-ля добейся, учись предлагать.


"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено с , 07-Июл-20 13:43 
> Научись воспринимать критику или возвращайся в дедсад
> Cтрелки не переводи. Вместо кукареканья а-ля добейся, учись предлагать.

Сам сказал, сам ответил. Чудный скунс, почти как человек


"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Вы забыли заполнить поле Name , 30-Июл-20 12:41 
>> Научись воспринимать критику или возвращайся в дедсад
>> Cтрелки не переводи. Вместо кукареканья а-ля добейся, учись предлагать.
> Сам сказал, сам ответил. Чудный скунс, почти как человек

По себе не судят.


"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Me , 03-Июл-20 08:43 
Внезапно, для нормальных языков тоже есть статические анализаторы. И они действительно помогают.

"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Ноним , 03-Июл-20 01:38 
PHP все еще жив? Разве нода не убила его?

"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено с , 03-Июл-20 07:22 
Кто?.. А, эта та жирнота, а она еще не сдохла?

"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Аноним , 03-Июл-20 09:58 
Её похоронили рядом с руби.

"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Аноним , 03-Июл-20 15:38 
И засыпали обломками от хруста.

"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Вы забыли заполнить поле Name , 03-Июл-20 15:14 
> PHP все еще жив? Разве нода не убила его?

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


"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено SubGun , 04-Июл-20 08:37 
Пытается, но нода - та еще помойка. Она сдохнет быстрее, чем php. Появятся правда аналоги, уж больно всем js нравится.

"Выпуск Psalm 3.12, статического анализатора для языка PHP. А..."
Отправлено Аноним , 03-Июл-20 10:09 
Ненужон