Re: Perl vs PHP

Moskay

Хотелось бы узнать мнение отцов по поводу различий и преимуществ.
Области применения насколько я понимаю очень схожи: веб приложения небольшого масштаба.

Maverick-I

Perl

веб приложения небольшого масштаба

насколько я понимаю

Не понимаешь.
Слишком узко.

sergei1969

уже обсуждалось, не надо разводить опять...
если тебя интересует что-то конкретное, уточняй.

VitMix

Преимущества Perl:
1. Расширяемость (и как следствие наличие большого количества расширений)
2. Лаконичность. Позволяет записывать сложные вещи в виде коротких и совершенно нечитабельных конструкций
3. Богатый синтаксис. Включает большое число конструкций, зачастую дублирующих друг друга, натасканных из разных языков, а также некоторое количество доморощенных конструкций
Преимущества PHP:
1. Простой синтаксис
2. Поддержка сложных структур данных
3. Интегрируемость в Apache
4. Типизация переменных (динамическая)
5. Поддержка объектно-ориентированного стиля программирования направленная на прикладного программиста
Отличия:
1. Perl больше ориентирован на обработку текстов, в то время как PHP в этом отношении нейтрален
2. Оба языка частично поддерживают объектно-ориентированный стиль программирования, но реализован он совершенно по-разному. При этом поддержка ООП в Perl в основном предназначена для разработчиков расширений, а не для прикладных программистов
3. Perl обладает сложным и богатым синтаксисом, в то время как у PHP синтаксис простой и бедный

shlyumper

Преимущества Perl:
1. Расширяемость (и как следствие наличие большого количества расширений)
Ой, блин, насмешил. PHP очень даже расширяемый. А еще почитай, что такое PEAR.
Преимущества PHP:
2. Поддержка сложных структур данных

Вообще говоря, перл поддерживает гораздо более сложные структуры данных, чем PHP.
3. Интегрируемость в Apache

Интегрируемость PHP в апач: mod_php
Интегрируемость Perl в апач: mod_perl
4. Типизация переменных (динамическая)
5. Поддержка объектно-ориентированного стиля программирования направленная на прикладного программиста

И этого всего в перле хватает сполна.
Отличия:
1. Perl больше ориентирован на обработку текстов, в то время как PHP в этом отношении нейтрален

PHP ориентирован больше на написание web-страничек, в то время, как Perl в этом отношении нейтрален. На нем можно писать что угодно.
2. Оба языка частично поддерживают объектно-ориентированный стиль программирования, но реализован он совершенно по-разному. При этом поддержка ООП в Perl в основном предназначена для разработчиков расширений, а не для прикладных программистов

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

Если не использовать вот это преимущество перла, то его синтаксис от PHP кардинально не отличается:
2. Лаконичность. Позволяет записывать сложные вещи в виде коротких и совершенно нечитабельных конструкций

sergey_m

Я именно так бы ответил на этот пост, если бы гуру Лев не сделал это раньше меня.

chamanaev

согласен

VitMix

Нда, я попытался написать кратко и объективно и последствия оказались печальны... Попробуем иначе...
Преимущества Perl:
1. Расширяемость (и как следствие наличие большого количества расширений)
Ой, блин, насмешил. PHP очень даже расширяемый. А еще почитай, что такое PEAR.
PHP позволяет писать модули расширений на C (про модули, написанные на PHP я не говорю, так как они в принципе не могут расширить возможности языка) и подгружать их с помощью функции dl. В документации по PHP (к последней версии) читаем:
To sum up, external modules are great for third-party products, small additions to PHP that are rarely used, or just for testing purposes. To develop additional functionality quickly, external modules provide the best results. For frequent usage, larger implementations, and complex code, the disadvantages outweigh the advantages.
Иными словами сами авторы признают, что расширяемость PHP в целом игрушечная и серьёзно рассматривать её не стоит. Разумеется PHP можно расширить, дореализовав нужную функциональность в исходниках интерпретатора и перекомпилировав его, но это вряд ли можно назвать настоящей расширяемостью... Про PEAR прочитал. Похоже, что это что-то типа package managerа для PHP. Расширяемость PHP он никак не улучшает, а просто облегчает установку расширений, которые и без него можно использовать.
Вообще говоря, перл поддерживает гораздо более сложные структуры данных, чем PHP.
А мне показалось, что в Perl есть только скаляры, списки и хэши, причём элементами списков, ключами и значениями хэшов могут быть только скаляры... Или я отстал от жизни? Соответственно все более сложные структуры данных приходится реализовывать самому (хорошо хоть ссылки есть, а то бы вообще труба).
Интегрируемость PHP в апач: mod_php
Интегрируемость Perl в апач: mod_perl
Если не ошибаюсь mod_perl --- это не Perl, интегрированный в Apache, а гораздо более мощная вещь. Фактически он позволяет писать модули к Apache на Perl.
4. Типизация переменных (динамическая)
5. Поддержка объектно-ориентированного стиля программирования направленная на прикладного программиста
И этого всего в перле хватает сполна.
Ну нет в Perl типизации переменных. Ни статической, ни динамической...


$a = 0;
$b = "0";


После такого присваивания переменные получат одно и тоже значение --- строку "0". Про ориентированность на прикладного програмиста поддержки ОО стиля программирования спорить не буду, так как это вопрос субъективный.
PHP ориентирован больше на написание web-страничек, в то время, как Perl в этом отношении нейтрален. На нем можно писать что угодно.
Да, об этом отличии я совсем забыл написать.
2. Оба языка частично поддерживают объектно-ориентированный стиль программирования, но реализован он совершенно по-разному. При этом поддержка ООП в Perl в основном предназначена для разработчиков расширений, а не для прикладных программистов
Очень серьезное заблуждение. Ты, наверное, мало использовал и Perl и PHP
Если ты про "частичную поддержку", то они действительно поддерживают ОО стиль программирования лишь частично, так ни в том ни в другим языке нет полноценной реализации полиморфизма. Если ты про ориентированность, то это вопрос субъективный.
Если не использовать вот это преимущество перла, то его синтаксис от PHP кардинально не отличается
Синтаксис Perl значительно богаче. В PHP всего 9 управляющих конструкций: if/else/elseif, while, do/while, for, foreach, break, continue, switch/case, return. В Perl помимо них есть ещё модификаторы if, while, unless, foreach, конструкция last, unless и т.п. В Perl больше операций, есть возможность вместо кавычек использовать практически любые символы и т.п. Короче синтаксис Perl определённо богаче.
P.S. PHP MUST DIE!
P.P.S. Perl also must die, but some time later

ppplva

А мне показалось, что в Perl есть только скаляры, списки и хэши, причём элементами списков, ключами и значениями хэшов могут быть только скаляры... Или я отстал от жизни?

Еще бывают ссылки, их тоже можно использовать как элементы массивов.

eduard615

напишу про перл, пхп не знаю
А мне показалось, что в Perl есть только скаляры, списки и хэши, причём элементами списков, ключами и значениями хэшов могут быть только скаляры... Или я отстал от жизни? Соответственно все более сложные структуры данных приходится реализовывать самому (хорошо хоть ссылки есть, а то бы вообще труба).

SCALAR ARRAY HASH CODE REF GLOB LVALUE
есть данные, где этого не хватает ?
Если не ошибаюсь mod_perl --- это не Perl, интегрированный в Apache, а гораздо более мощная вещь. Фактически он позволяет писать модули к Apache на Perl.

читать perl.apache.org раздел whatis
Ну нет в Perl типизации переменных. Ни статической, ни динамической...

тоже вопрос спорный, на спане валается реализация (но поверх существуюших скаляров, естно)
так ни в том ни в другим языке нет полноценной реализации полиморфизма

не правда ваша

VitMix

Еще бывают ссылки, их тоже можно использовать как элементы массивов
Да, ссылки есть (о чём я кстати написал). Именно с помощью них удаётся строить более сложные структуры (например многомерные массивы).

VitMix

SCALAR ARRAY HASH CODE REF GLOB LVALUE
есть данные, где этого не хватает ?
Ну многомерных массивов нет, приходится их представлять как массив из ссылок на массивы (или каким-то другим способом). А в PHP многомерные массивы есть. Это не единственный пример, подтверждающий, что PHP имеет больше средств для работы со сложными структурами данных. Хотя и средств, предоставляемых Perl, хватает для всех возможных случаев, в чём, я надеюсь, никто не сомневается.
читать perl.apache.org раздел whatis
Ну я всё не читал, но вот это я нашёл.
Sometimes it Works, Sometimes it Doesn't
When you start running your scripts under mod_perl, you might find yourself in a situation where a script seems to work, but sometimes it screws up. And the more it runs without a restart, the more it screws up. Often the problem is easily detectable and solvable. You have to test your script under a server running in single process mode (httpd -X).
Generally the problem is the result of using global variables. Because global variables don't change from one script invocation to another unless you change them, you can find your scripts do strange things.

Лично я понял это так, что mod_perl не является perl заинтегрированным в Apache, а является чем-то другим. При этом по счастливой случайности есть возможность использовать "well coded" перловые программы в mod_perl.
Ну нет в Perl типизации переменных. Ни статической, ни динамической...
тоже вопрос спорный, на спане валается реализация (но поверх существуюших скаляров, естно)
На мой взгляд если что-то реализовано в виде расширения, то скорее всего это что-то не реализовано в самом языке

Maverick-I

Ну многомерных массивов нет, приходится их представлять как массив из ссылок на массивы (или каким-то другим способом). А в PHP многомерные массивы есть.

Ну в Перле это можно записать так:

$array[0][2][1] = 'элемент многомерного массива';


Что плохого в том, что это реализовано ссылкой?

sergey_m

Ну многомерных массивов нет, приходится их представлять как массив из ссылок на массивы (или каким-то другим способом). А в PHP многомерные массивы есть. Это не единственный пример, подтверждающий, что PHP имеет больше средств для работы со сложными структурами данных.
И вот ты сам себе ответил: "Хотя и средств, предоставляемых Perl, хватает для всех возможных случаев, в чём, я надеюсь, никто не сомневается."
Я видел программы, где на perl были реализованы очень сложные взаимосвязанные структуры.
Sometimes it Works, Sometimes it Doesn't
When you start running your scripts under mod_perl, you might find yourself in a situation where a script seems to work, but sometimes it screws up. And the more it runs without a restart, the more it screws up. Often the problem is easily detectable and solvable. You have to test your script under a server running in single process mode (httpd -X).
Generally the problem is the result of using global variables. Because global variables don't change from one script invocation to another unless you change them, you can find your scripts do strange things.
Лично я понял это так, что mod_perl не является perl заинтегрированным в Apache, а является чем-то другим. При этом по счастливой случайности есть возможность использовать "well coded" перловые программы в mod_perl.
mod_perl не является чем-то другим.
Если понимать как работает mod_perl, то ты легко будешь писать работающие под mod_perl приложения. Как он работает написано даже в книжках, не говоря уже о документации. P.S. А аккуратный программист всегда инициализирует переменные.

sergey_m

AFAIK, это в большинстве языков реализовано ссылкой.

Maverick-I

От ПХП можно ждать чего угодно...

Ivan8209

Только в си-подобных.
---
...Я работаю антинаучным аферистом...

VitMix

Вот как раз в C многомерные массивы реализованы честно, то есть все элементы лежат в памяти подряд.

Ivan8209

Только на архитектурах с командой умножения.
Или если разработчиками было принято решение всё-таки использовать
подпрограмму умножения.
---
...Я работаю антинаучным аферистом...

sergey_m

Уверен, что не гонишь? Слишком уж много кода в разном софте и в учебниках полагаются на то, что a[i+1] эквивалентно *(&a[1] + sizeof(*a.

Ivan8209

Уверен.
Не знаю, как было в изначальном компиляторе, но на Z80 было именно так:
массив указателей на массивы.
a[n] всегда был *(a+n*sizeof(*a. Это нисколько не мешает.
(Причём, кстати, можно писать как "a[n]", так и "n[a]". Например, "C - 4[ever]".)
---
...Я работаю антинаучным аферистом...

sergey_m

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

shlyumper

PHP позволяет писать модули расширений на C (про модули, написанные на PHP я не говорю, так как они в принципе не могут расширить возможности языка) и подгружать их с помощью функции dl. В документации по PHP (к последней версии) читаем:
To sum up, external modules are great for third-party products, small additions to PHP that are rarely used, or just for testing purposes. To develop additional functionality quickly, external modules provide the best results. For frequent usage, larger implementations, and complex code, the disadvantages outweigh the advantages.
Иными словами сами авторы признают, что расширяемость PHP в целом игрушечная и серьёзно рассматривать её не стоит. Разумеется PHP можно расширить, дореализовав нужную функциональность в исходниках интерпретатора и перекомпилировав его, но это вряд ли можно назвать настоящей расширяемостью...
Неправда ваша. Нужно внимательнее читать документацию, и лучше не кусочками, а целиком. Возможности по расширению внешними модулями и в PHP и в Perl сильно не отличаются (говорю как человек, писавший модули на C и под одно, и под другое). Другое дело, что в PHP до сих пор не стандартизирован окончательно API для модулей, и он периодически меняется. А вот в Perl эту "стандартизацию" провели через внешний XS парсер. Вот и все. Вообще в целом PHP это гораздо более текучий и развивающийся код, чем perl (развитие, правда, происходит в основном из-за борьбы с недостатками, а не из-за добавления достоинств ).
Еще, кстати, модули совсем не обязательно подгужать через dl их можно глобально включить через общую конфигурацию, или даже через htaccess, было бы желание (и права на это).
Про PEAR прочитал. Похоже, что это что-то типа package managerа для PHP. Расширяемость PHP он никак не улучшает, а просто облегчает установку расширений, которые и без него можно использовать.

PEAR - это что-то вроде аналога CPAN для PHP. Куча перловых модулей была бы совершенно бесполезна, если бы не было CPAN. Разработчики PHP немного с запозданием спохватились и сделали.
А мне показалось, что в Perl есть только скаляры, списки и хэши, причём элементами списков, ключами и значениями хэшов могут быть только скаляры... Или я отстал от жизни?

Почитай руководство к игре "конструктор": perldoc perldsc (Perl Data Structures Cookbook).
The single feature most sorely lacking in the Perl programming language prior to its 5.0 release was complex data structures.
...
The 5.0 release of Perl let us have complex data structures.

Про mod_perl тебе вроде уже хорошо рассказали и без меня
P.S. PHP must die.
P.P.S. Perl6 will live forever.

Moskay

да, ясно только что ниче неясно.
PHP насоколько я знаю тоже может как скрипт с командной строки работать.
Насчет объектов - PHP5 вышло вчера, там вроде с этим получше (говорят).
Вот может кто-нибудь привести пример, когда у нас есть задачка, и один язык явно подходит лучше чем другой? И наоборот?
И почему ув.тов. Глебиус считает что PHP=перманентли хреновое программирование (это не в этом треде, это в поиске я нашел а Perl - нет?

sergey_m

И почему ув.тов. Глебиус считает что PHP=перманентли хреновое программирование (это не в этом треде, это в поиске я нашел а Perl - нет?
Потому что имею право на своё мнение.
На самом деле доводилось администрировать хостинги с php, и зачастую приходилось заглядывать в код, который творят кодеры.

Moskay

Вопрос о праве любого человека иметь свое мнение мы рассмотрим в другом треде
Насколько я наслышан перл в гораздо большей степени пугает "случайно заглянувших" неродных программистов, а в пхп вот товарищи пишут "простой синтаксис" ...
Вообщем конечно понятно что это все дело привычки с одной стороны, но может существует некая концепция "правильного программирования", и на пхп ее вот никак не получается реализовать?

sergey_m

концепция "правильного программирования", и на пхп ее вот никак не получается реализовать?
Вряд ли именно так. Возможно так: в пхп легко программировать не правильно.

Ivan8209

А в "Перле?"
---
...Я работаю антинаучным аферистом...

sergey_m

По сравнению с твоими любимыми ФЯ, безусловно.

sergei1969

>На самом деле доводилось администрировать хостинги с php, и зачастую приходилось заглядывать в код, который творят кодеры.
и это основной довод?
LOL
Оставить комментарий
Имя или ник:
Комментарий: