The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Выпуск Psalm 3.12, статистического анализитора для языка PHP. Альфа выпуск PHP 8.0"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Изначальное сообщение [ Отслеживать ]

"Выпуск Psalm 3.12, статистического анализитора для языка PHP. Альфа выпуск PHP 8.0"  +1 +/
Сообщение от opennews (?), 02-Июл-20, 12:13 
Компания Vimeo опубликовала новый выпуск статистического анализатора Psalm 3.12, позволяющего выявлять как очевидные, так и трудноуловимые ошибки в коде на языке PHP, а также автоматически исправлять некоторые виды ошибок. Система подходит для выявления проблем как в устаревшем коде, так и в коде, использующем современные возможности, появившиеся в новых ветках PHP. Код проекта написан на языке PHP и распространяется под лицензией MIT...

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

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения [Сортировка по ответам | RSS]

1. Сообщение от Повидло19 (?), 02-Июл-20, 12:13   –2 +/
> В качестве выходных ворот, требующих отслеживания экранирования, проверяются операции, приводящие к выводу в формате HTML, добавлению HTTP-заголовков или формированию SQL-запросов.

Чо?

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #48

2. Сообщение от BlackRot (ok), 02-Июл-20, 12:17   +9 +/
Исправлены ошибки
Повышена производительность
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #19

3. Сообщение от MPEG LA (ok), 02-Июл-20, 12:17   –12 +/
>if ($a && !$a) {}

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #4, #5, #6, #9, #12, #14, #23, #27, #59, #61, #66

4. Сообщение от cancelled (?), 02-Июл-20, 12:21   +5 +/
Когда разрабатывали язык - забыли учесть твое мнение, исправят в php 9.0, за одно сломают нафиг всю обратную совместимость.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #16

5. Сообщение от Работа за еду на PHP (?), 02-Июл-20, 12:23   +2 +/
Ради денег на еду
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

6. Сообщение от Dragomeatemail (?), 02-Июл-20, 12:28   +3 +/
Так а что не так то? Это часть дизайна языка, как и "::" для доступа к статическим методам и константам класса, "->" для доступа к обычным методам и полям, "." для конкатенации и т.д
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

7. Сообщение от A.Stahl (ok), 02-Июл-20, 12:32   +/
Psalm 3.12 от Шталя:

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

Ответить | Правка | Наверх | Cообщить модератору

8. Сообщение от Ilya Indigo (ok), 02-Июл-20, 12:37   –4 +/
> Включение JIT-компилятора, применение которого позволит повысить производительность...

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

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

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

Ответить | Правка | Наверх | Cообщить модератору
Ответы: #10, #13, #34, #56

9. Сообщение от Ilya Indigo (ok), 02-Июл-20, 12:39   –1 +/
А Вас не смутило наличие lint в динамическом языке, написанной на нём же?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #26

10. Сообщение от Аноним (10), 02-Июл-20, 12:41   +/
вы́растет
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8 Ответы: #11

11. Сообщение от Ilya Indigo (ok), 02-Июл-20, 12:47   –2 +/
> вы́растет

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #10

12. Сообщение от Аноним (12), 02-Июл-20, 12:52   +5 +/
Sigil (в данном случае $) очень полезен тем, что даёт возможность отличать переменные от остальных слов, создаёт им отдельное пространство имён. Не приходисят извращаться с именами переменных, которые, внезапно, по смыслу совпадают с какими-либо keywords.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #31

13. Сообщение от Аноним (12), 02-Июл-20, 12:56   –2 +/
А что, скорость только для рендеренга видео нужна? Вообще, высокая скорость работы никогда не мешает, а в качестве примера могу привести комбинаторные алгоритмы, которые порой требуются в бизнесс-логике. На моих тестах, производительность между интерпретатором и тем же алгоритмом, сделанным на Си -- в 200 раз.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8

14. Сообщение от Аноним (14), 02-Июл-20, 13:09   –2 +/
Страшное наследие из Perl, который разрабатывали напрочь упоротые лингвисты.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

15. Сообщение от Аноним (15), 02-Июл-20, 13:24   +/
какие версии PHP он хоть понимает?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #17, #36

16. Сообщение от тоже Анонимemail (ok), 02-Июл-20, 13:29   +1 +/
Обратную совместимость, превращающую variable в 'variable', стоит сломать вместе с руками тех, кто на нее полагается.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #4 Ответы: #37

17. Сообщение от Gemorroj (ok), 02-Июл-20, 13:40   –3 +/
https://github.com/vimeo/psalm/blob/master/docs/running_psal...
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15 Ответы: #21

18. Сообщение от Аноним (18), 02-Июл-20, 13:44   +/
Статический анализатор и статистический анализатор -- это не одно и тоже.
В теле статьи описан статический анализатор, есличо
Ответить | Правка | Наверх | Cообщить модератору

19. Сообщение от jfdbngh (?), 02-Июл-20, 13:49   –4 +/
Исправлены ошибки (и добавлены новые)
Повышена производительности (при условии использования более производительного железа)
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #2 Ответы: #29

21. Сообщение от Аноним (15), 02-Июл-20, 14:08   +/
Я дико извиняюсь, но не могли бы вы ткнуть пальцем где на этой ссылке написан ответ на МОЙ вопрос?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #17 Ответы: #22

22. Сообщение от Gemorroj (ok), 02-Июл-20, 14:29   –6 +/
2 строчка "Psalm Requires PHP >= 7.1". На русский переводить, надеюсь, не нужно?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #21 Ответы: #24

23. Сообщение от Anonim (??), 02-Июл-20, 14:43   +2 +/
Там jQuery в ядре.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

24. Сообщение от Аноним (15), 02-Июл-20, 14:48   +3 +/
Это я так понимаю версия PHP необходимая для запуска этого анализатора. Но я спрашивал не об этом.
Я спрашивал не о том на какой версии php работает этот анализатор, а какие версии php он понимает... какие версии он умеет анализировать...

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #22

26. Сообщение от funny.falcon (?), 02-Июл-20, 18:43   +1 +/
А какая разница, на чём lint писать? Лишь бы автору удобно было.
Семейство ML языков (SML, Ocaml, Haskel) является потомком ML, первая реализация которого была написана на LISP. LISP, как известно, динамически типизируемый язык.
Вопрос же не в языке (если не считать экзотику), а в опыте и криворукости того, кто на нём пишет.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #9 Ответы: #28

27. Сообщение от Ilya Indigo (ok), 02-Июл-20, 19:09   –1 +/
>>if ($a && !$a) {}
> жесть. зачем вообще $ в имени переменной?

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3 Ответы: #33

28. Сообщение от Ilya Indigo (ok), 02-Июл-20, 19:14   –9 +/
> А какая разница, на чём lint писать? Лишь бы автору удобно было.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #26

29. Сообщение от Аноним (29), 02-Июл-20, 19:17   +1 +/
> Исправлены ошибки (и добавлены новые)
> Повышена производительности (при условии использования более производительного железа)

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #19 Ответы: #52

30. Сообщение от онанимуз (?), 02-Июл-20, 22:38   +1 +/
> Включение JIT-компилятора, применение которого позволит повысить производительность.

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

Ответить | Правка | Наверх | Cообщить модератору

31. Сообщение от Вы забыли заполнить поле Name (?), 02-Июл-20, 23:19   –2 +/
> которые, внезапно, по смыслу совпадают с какими-либо keywords

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #12

32. Сообщение от Вы забыли заполнить поле Name (?), 02-Июл-20, 23:21   –1 +/
Что только не делают, лишь бы не писать на нормальном языке.
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #35, #47, #49

33. Сообщение от Аноним (37), 02-Июл-20, 23:52   +/
Его не получится убрать.
Сейчас можно одновременно иметь класс или функцию foo и переменную foo.
Как отличать, если убрать доллар?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #27 Ответы: #40

34. Сообщение от Аноним (37), 02-Июл-20, 23:53   +/
Нет. С современным кодом, использующим strict_types=1, прирост производительности заметен невооруженным глазом.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8

35. Сообщение от Аноним (37), 02-Июл-20, 23:57   –2 +/
Надо заметить, что оно уже стало похоже на нормальный язык. Все оставшиеся кривости обусловлены обратной совместимостью.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32 Ответы: #39

36. Сообщение от Аноним (37), 03-Июл-20, 00:01   –1 +/
Оно работает на 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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #15

37. Сообщение от Аноним (37), 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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #16 Ответы: #38

38. Сообщение от тоже Аноним (ok), 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 добавили только предупреждение о будущей ошибке. За столько-то лет и версий.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #37 Ответы: #42

39. Сообщение от Аноним (39), 03-Июл-20, 00:58   –1 +/
PHP 7 не умеет юникод в строки
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #35 Ответы: #44

40. Сообщение от Ilya Indigo (ok), 03-Июл-20, 01:30   –1 +/
> Его не получится убрать.
> Сейчас можно одновременно иметь класс или функцию foo и переменную foo.
> Как отличать, если убрать доллар?

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #33 Ответы: #43

41. Сообщение от Ноним (?), 03-Июл-20, 01:38   –2 +/
PHP все еще жив? Разве нода не убила его?
Ответить | Правка | Наверх | Cообщить модератору
Ответы: #46, #50, #54, #60

42. Сообщение от Аноним (42), 03-Июл-20, 02:10   +2 +/
Те, кто пишет нормальный код, заворачивают все ошибки (да, даже Notice) в исключения, а Notice там был даже в 5.0.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #38

43. Сообщение от Аноним (42), 03-Июл-20, 02:15   –1 +/
Никак не отличает, будет конфликт имен. Но так было с самого начала, потому проблемы и нет.

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

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #40 Ответы: #55, #58

44. Сообщение от Аноним (42), 03-Июл-20, 02:19   –2 +/
Смотря что такое "не умеет".
mb_ функции есть, модификатор /u у регулярок есть.
Пхпшная строка - это, по сути, byte[]. Нативный тип было бы иметь неплохо, но на практике никаких особенных неудобств нет. Можно написать класс UnicodeString и обернуть все в него, но так никто не делает, потому что привыкли уже.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #39

46. Сообщение от с (?), 03-Июл-20, 07:22   –1 +/
Кто?.. А, эта та жирнота, а она еще не сдохла?
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41

47. Сообщение от с (?), 03-Июл-20, 07:24   +/
Напиши нормальный
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32 Ответы: #53

48. Сообщение от a.n.o.n.i.m (?), 03-Июл-20, 08:40   +/
Псалмы распевать - не мешки ворочать.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #1

49. Сообщение от Me (??), 03-Июл-20, 08:43   +/
Внезапно, для нормальных языков тоже есть статические анализаторы. И они действительно помогают.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #32

50. Сообщение от Аноним (50), 03-Июл-20, 09:58   +1 +/
Её похоронили рядом с руби.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41 Ответы: #57

51. Сообщение от Аноним (51), 03-Июл-20, 10:09   –1 +/
Ненужон
Ответить | Правка | Наверх | Cообщить модератору

52. Сообщение от Аноним (52), 03-Июл-20, 13:48   –1 +/
У минусаторов не так, вестимо.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #29

53. Сообщение от Вы забыли заполнить поле Name (?), 03-Июл-20, 15:13   –1 +/
> Напиши нормальный

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #47 Ответы: #62

54. Сообщение от Вы забыли заполнить поле Name (?), 03-Июл-20, 15:14   –2 +/
> PHP все еще жив? Разве нода не убила его?

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41

55. Сообщение от Аноним (55), 03-Июл-20, 15:35   –1 +/
Там хитрость ещё в том, что в php вполне возможны такие конструкции как $variable($args), вызов функции/метода по колбеку в $variable. Язык слабо типизирован, и функциональный вид переменной заранее не объявляется. Поэтому если $ убрать, различия между функциями и переменными сотрутся, и будет вообще бардак.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43 Ответы: #65

56. Сообщение от Аноним (55), 03-Июл-20, 15:36   +/
Проснитесь, PHP уже давно вышел за рамки Web.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #8

57. Сообщение от Аноним (55), 03-Июл-20, 15:38   +/
И засыпали обломками от хруста.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #50

58. Сообщение от Ilya Indigo (ok), 03-Июл-20, 16:32   –1 +/
<?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.

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #43 Ответы: #67

59. Сообщение от SubGun (??), 04-Июл-20, 08:32   +1 +/
Чтобы не превращать язык в помойку, вроде питона.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

60. Сообщение от SubGun (??), 04-Июл-20, 08:37   +/
Пытается, но нода - та еще помойка. Она сдохнет быстрее, чем php. Появятся правда аналоги, уж больно всем js нравится.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #41

61. Сообщение от Murz (ok), 05-Июл-20, 18:23   –1 +/
Да, действительно что за дискриминация? Наверно пендостан проплатил, срочно заменить на ₽!
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

62. Сообщение от с (?), 06-Июл-20, 02:22   –1 +/
> Научись воспринимать критику или возвращайся в дедсад

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #53 Ответы: #63

63. Сообщение от Вы забыли заполнить поле Name (?), 06-Июл-20, 10:15   +/
>> Научись воспринимать критику или возвращайся в дедсад
> да с удовольствием бы вернулся, но походу место уже занято тобой, впрочем
> уровень критики соответсвует скорее спецпансионату для альтернативно одаренных

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #62 Ответы: #64

64. Сообщение от с (?), 07-Июл-20, 13:43   +/
> Научись воспринимать критику или возвращайся в дедсад
> Cтрелки не переводи. Вместо кукареканья а-ля добейся, учись предлагать.

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #63 Ответы: #69

65. Сообщение от Аноним (65), 07-Июл-20, 21:56   +/
В том же JS это никому не мешает. Если в переменной лежит не функция, будет ошибка вызова. Тем более, в PHP есть неймспейсы.
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #55

66. Сообщение от Аноним (66), 08-Июл-20, 10:51   +/
потому что PHP изначально создавался как шаблонизатор и переменные можно было выводить внутри строк.
почувствуйте, что называется, разницу.

print "hello $some_var";

и

print "hello some_var";

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #3

67. Сообщение от Аноним (37), 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);


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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #58 Ответы: #68

68. Сообщение от Аноним (37), 08-Июл-20, 12:44   +/
в последнем должно быть $foo = '\stdClass' конечно
Ответить | Правка | Наверх | Cообщить модератору
Родитель: #67

69. Сообщение от Вы забыли заполнить поле Name (?), 30-Июл-20, 12:41   +/
>> Научись воспринимать критику или возвращайся в дедсад
>> Cтрелки не переводи. Вместо кукареканья а-ля добейся, учись предлагать.
> Сам сказал, сам ответил. Чудный скунс, почти как человек

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

Ответить | Правка | Наверх | Cообщить модератору
Родитель: #64


Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру