ibash.org.ru - Новый цитатник Рунета

Форум: О PHP 1 2 3 > [RSS]

Форум: Вход Регистрация Участники Поиск RSS

Eldor
25.10.2009 - 23:52

Везде, млин, где тема про PHP, то обязательно обкоментируют "быдлокодеры поналетели", "О, freshmeat для быдлокодеров" и так далее.
Давным-давно на канале #unix меня опустили когда я задал вопрос о настройке одного параметра в квартете FreBSD Apache MySQL PHP, причем отмазывались гентушники говоря "не туда пришел". Когда я намекнул, что, мол, моя ось немного более к месту чем ихняя, то они отмазались генеральным "еще один...". На следующий вопрос "что же использовать" мне сказали Дебиан, PostgreSQL, руби и еще какой-то сервер. Подумать головой что хостинг с этим делом найти очень проблематично и о том, что возможностей MySQL для создания не слишком проблематичных сайтов, вполне хватает, они не подумали.

Это прелюдия, теперь вопрос: Считается ли быдлокодером любой кодер на ПХП? (учитывая что этот кодер умеет работать с 3я самыми популярными фреймворками, имеет свой под GPL, знает как правельно использовать MVC при продумывании архитектуры сайта, знает как правильно использовать в ООП другие шаблоны проектирования (singleton, prototype), понимает как работает сервер, и так далее. Все перечеслять не буду ибо это бесполезно. Но самое главное он _не_хочет_ терять время на изучение других языков в этой же области т.к. он потеряет время(=деньги), которое мог бы потратить на самосовершенствования себя в пхп и компании(css, javascript и тд)).

Shock
#101 - 08.12.2009 - 18:44

> 2. Насколько я понял, индексы будут начинаться от 0. У меня - от 1. Просто сделай так же

$a1 = array(1 => 'a', 'b', 'c', 'd', 'e');
$a2 = array(1 => 'q', 'w', 'e', 'r', 't');

foreach ($a1 as $k => $v) {
if (!isset($a2[$k])) break;
if ($k) echo ';';
echo '$k: $v, $a2[$k]';
}

> [17:26:37] <naryl> лишние элементы более длинного списка
* игнорируются
так и происходит

naryl
#102 - 08.12.2009 - 18:44

>.<
s/.*segfault.*//

Aelita
#103 - 08.12.2009 - 18:45

ну ты делал, старался, для неизвестного тебе человека. Я редко кого-то прошу мне помочь... Просто я еще тебя вопросами замучаю от "почему не работает" и вплоть до того "как запускается"...
Надо уважать труд людей =)
Потом сообщишь мне свой адрес и я тебе шоколадку пришлю О:-)

naryl
#104 - 08.12.2009 - 18:47

Кто-то что-то путает:
$ php -a
Interactive shell

php > $a1 = array(1 => 'a', 'b', 'c', 'd', 'e');
php > $a2 = array(1 => 'q', 'w', 'e', 'r', 't');
php >
php > foreach ($a1 as $k => $v) {
php { if (!isset($a2[$k])) break;
php { if ($k) echo ';';
php { echo '$k: $v, $a2[$k]';
php { }
;$k: $v, $a2[$k];$k: $v, $a2[$k];$k: $v, $a2[$k];$k: $v, $a2[$k];$k: $v, $a2[$k]

Вывод, мягко говоря, не совсем ожидаемый.

Shock
#105 - 08.12.2009 - 18:48

В предыдущем посте я допустил ошибку. тут исправил: http://pastebin.ru/308909

Shock
#106 - 08.12.2009 - 18:50

Aelita, я шоколад не ем, но с благодарностями разберемся =) пиши, без проблем. всегда рад помочь =)

Shock
#107 - 08.12.2009 - 18:51

как видишь, сегфолт не случается.

> При первом взгляде не видна связь a2 с этим циклом. В foreach (...) его нет, потом он *внезапно* появляется где-то в теле цикла.
"при первом взгляде синтаксис ПХП *внезапно* не похож на синтаксис Лиспа, это меня смущает".

unikoid
#108 - 08.12.2009 - 18:51

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

Кто-то
#109 - 08.12.2009 - 18:54

#108, скорее уж столкновение фанатиков в чистом поле

Aelita
#110 - 08.12.2009 - 18:54

Шок, вопрос - ты в контакте есть?)
Понимаю, что блондинистый вопрос, но все-таки) И кинь ссыль если есть... Женское любопытство...

Shock
#111 - 08.12.2009 - 18:54

задачу давать не хочу. глупости это. но если очень желаешь — напиши консольный форум на Лиспе(хотя бы как первую версию), если сможешь конечно))). если хочешь — могу скинуть исходники ДжаваСкрипта. посмотрим, какой ты мен, а насколько LISP(TCL) силён в боевой ситуации.

учти, что я её на пхп написал за одну ночь.

а у кого изящнее цикл выглядит — это глупости.

тем не менее, пых отлично выдержал "испытание"

Shock
#112 - 08.12.2009 - 18:55

Aelita, есть и я достаточно активно им пользуюсь =) напиши мне в Джаббер, там скажу всё =)

naryl
#113 - 08.12.2009 - 18:59

> "при первом взгляде синтаксис ПХП *внезапно* не похож на синтаксис Лиспа, это меня смущает".
Синтаксис - лишнее. Забудь про синтаксис. Синтаксис меня никогда не смущал. В цикле на CL все переменные, использующиеся в цикле упоминаются в вызове. В PHP - нет. a2 берётся хз откуда. Скорее всего здесь меня смущает математическая "грязность" PHP.

Shock
#114 - 08.12.2009 - 19:00

unikoid, про "потому что у каждого..." и дальше — согласен.
на счёт специальной олимпиады — не согласен. было вполне приятное и интересное обсуждение. я размял мозг. если бы мне было неинтересно решать эти задачи — я бы не решал =)

naryl
#115 - 08.12.2009 - 19:04

Не вовремя. Будет лишняя ночь - сообщу о начале написания :)
Один вопрос. Не будешь против, если вместо команд консоли будут использоваться формы Лиспа, как в Лисп-машине вроде emacs? В реализации разницы почти никакой.

И второе - не вопрос, а предложение того, что я считаю фичёй. Работать будет не по html, а по telnet. ;)

Shock
#116 - 08.12.2009 - 19:05

naryl, он не семантически грязен. просто он рассчитан на совершенно иные задачи.

> #108, скорее уж столкновение фанатиков в чистом поле
я не фанатик. но всеобщие глупые стереотипы на счёт пхп меня просто убивают. люди судят про этот язык, не зная матчасти.

naryl
#117 - 08.12.2009 - 19:06

Не силён в JS. Не представляю, как сделать такой интерфейс сайта. Поэтому telnet.

naryl
#118 - 08.12.2009 - 19:07

"семантически грязен"? Что бы это могло значить? :D

Shock
#119 - 08.12.2009 - 19:08

naryl, твои условия я выполнил на 100% точно. ты даже к единице вместо нуля придрался =) я же тебе предлагаю сделать похожее, а ты говоришь, что сделаешь что-то совершенно другое =)

naryl
#120 - 08.12.2009 - 19:23

Ок. freecr на CL. Только договоримся, что я всё-таки баги не буду эмулировать :D

Shock
#121 - 08.12.2009 - 19:39

<naryl> кстати, loop реализован на лиспе
<Shock> кто?
<naryl> foreach - встроенная структура
<naryl> в PHP
<naryl> Но это дело вкуса
<naryl> Мне в tcl паре раз помог тот факт, что все команды, включая proc и set, - такие же команды, как и определённые пользователем.
<Shock> я писал в объектной обёртке свой форич:
$a->each(function ($key, $value) {
});
<naryl> ы!
<naryl> только твой each зовётся map :D
<Shock> почему? О.о
<naryl> список b = map(список a)
<Shock> почему это?
<naryl> список b = map(список a, функция)
<naryl> а
<naryl> так принято в ФП
<naryl> each выполняет операцию над списком (или массивом), но результат ты можешь разве что показать пользователю
<naryl> потому что в ФП ты не можешь из функции просто присвоить другое значении какой-то девой переменной.
<Shock>
o('a', 'b', 'c')->each(function ($key, $value) {
echo "$key.$value; ";
});

=>

0.a; 1.b; 2.c;
<Shock> в пыхе можно так:
<naryl> вывод пользователю! :)
<Shock> $var = 0
o(1, 2, 3)->each(function ($key, $value) use ($var) {
$var += $value;
});
echo $var; // 6
<Shock> там был и альтернативный синтаксис
<Shock> while ($a->each($key, $value)) {
//
}
<Shock> и кстати
<Shock> через
foreach ($a as $key => $value)
я там тоже реализовал
<Shock> и тоже отдельно написал
<naryl> use ($var) - захватывает переменную из контекста?
<Shock> наверное
<Shock> позволяет юзать её
<naryl> нельзя в ФП. и вообще присваивать нельзя.
<Shock> и что?
<Shock> тут есть такая дополнительная функциональность
<naryl> зато есть reduce для таких случаев
<naryl> reduce([1, 2, 3], (+));
<naryl> псевдокод
<naryl> вот это я и имел в виду под *математической* "грязностью". Присваивание и обращение к переменным из другого контекста.
<naryl> Некоторые языки считают отсутствие такой функциональности своей фичёй :D
<Shock> это недоработка других языков, что они не позволяют это делать
<Shock> аха
<naryl> И это на самом деле фича
<naryl> Лисп, кстати, позволяет
<Shock> это недоработка
<naryl> Но делать это очень сильно не рекомендуется
<naryl> Это фича
<Shock> а лиспе нормальная реализация
<Shock> ладно
<Shock> $var = 0
o(1, -2, 3)->each(function ($key, $value) use ($var) {
$var += abs($value); // $value по модулю
});
echo $var; // 6
<Shock> reduce([1, 2, 3], (+)); так не справишься уже
<naryl> Если в языке Haskell "реализовать функциональность" или, как ты говоришь "устранить недоработку" присваивать значения переменным из других контекстов, то всё на*** сломается.
<naryl> reduce(map([1, 2, 3], abs)m (+));
<naryl> reduce(map([1, 2, 3], abs), (+));
<naryl> print(reduce(map([1, 2, 3], abs), (+)));
<naryl> :)
<naryl> ВОт тебе пара идей для библиотеки =)
<Shock> $var = 0;
$log = array();
o(1, -2, 3)->each(function ($key, $value) use ($var, $log) {
$var += abs($value); // $value по модулю
$log[] = "$key — done";
});
echo $var; // 6
<Shock> > то всё на*** сломается.
почему сламается?
<Shock> если оно задается и настраивается программистом в каждом отдельном случае
<naryl> print(reduce(map([1, 2, 3], (int i) { log.info("{} - done", i); return abs(i); }), &add)); - это уже вполне честный D.
<naryl> http://en.wikipedia.org/wiki/Referential_transparency_(computer_science)
<naryl> математика параллельна.
<Shock> а откуда взялся log в локальной видимости функции?
<naryl> отустствие этой "функциональности" позволяет компилятору автоматически распараллеливать и кэшировать код.
<naryl> Из контекста.
<naryl> Это делегат. Он выполняется в контексте декларации
<Shock> если это массив-переменная, в которую в конец добавляют информцию
<Shock> а я думал, что нельзя брать из контекста
<naryl> Это D. D - не функциональный :)
<Shock> о.
<Shock> ты уже третий язык подключил
<Shock> TCL и CL не справляются, да?
<naryl> Да, я такой :o)
<Shock> я скину обсуждение на форум, ок?
<naryl> хотел использовать более понятный тебе синтаксис
<Shock> начиная с "кстати, loop реализован на лиспе"
<naryl> а tcl - совсем не функциональный и не имеет отношения к данной теме
<naryl> не думаю, что это кто-то будет читать :D
<naryl> но давай
<Shock> просто я вот не прибегаю к возможностям , скажем, языка JavaScript
<Shock> а только пхп
<naryl> с вырезанием скучных моментов не в тему
<Shock> а ты тут намешал и TCL и Lisp и D
<naryl> ок
<naryl> сейчас покажу ФП на CL

Eldor
#122 - 08.12.2009 - 19:40

#61
Поясни, если не затруднит, что твои интернеты имеют против Эльдора?

#73
О, вменяемый пост... Мне лишь интересно было узнать, откуда у пхп такое клеймо. Оказалось от популярности.
А что думаешь насчет питона в вебе?

Shock
#123 - 08.12.2009 - 19:42

ньюанс в чем. код приведенный в #87 можно на пхп было написать так:
echo join(array('a', 'b', 'c', 'd', 'e'), ',');

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

naryl
#124 - 08.12.2009 - 19:46

Ну вообще-то да. Суть была в цикле.
(print (join-string-list '("a" "b" "c" "d" "e") ", "))

Shock
#125 - 08.12.2009 - 19:49

я же про это и говорю. если суть в цикле, то надо его повторить. аналогично и в заданиях выше

naryl
#126 - 08.12.2009 - 19:53

http://paste.lisp.org/display/91774

-> "1 - done"
-> "2 - done"
-> "3 - done"
-> 6

Так можно и на PHP, если он позволяет передавать функции по имени/указателю/символу/...

Shock
#127 - 08.12.2009 - 19:57

ты написал совершенно другое, хотя и выполняющее такой же результат.
оно отличается настолько же, как и echo join(array('a', 'b', 'c', 'd', 'e'), ',');

и фраза "Так можно и на PHP" доказывает это, то есть то, что пример на ПХП был не такой и ты его повторить не смог.

naryl
#128 - 08.12.2009 - 19:59

Речь была про ФП. Я показал ФП на Лиспе, чтобы не привлекать другой язык.
Но так и быть, сейчас повторю.

Shock
#129 - 08.12.2009 - 20:05

я на пхп повторил лисп. а вот сможет ли лисп повторить пхп?

naryl
#130 - 08.12.2009 - 20:10

Давай кусок кода, использующий только стандартную библиотеку php, а то боюсь там куча твоего кода скрыта за o() и each() =)

Shock
#131 - 08.12.2009 - 20:17

код — под LGPL, http://code.google.com/p/obj-php/source/checkout
в #80 ты тоже код расширял, так что протест не засчитан.

naryl
#132 - 08.12.2009 - 20:23

http://paste.lisp.org/display/91774#2

Но это как раз и есть попытка императивного программирования в языке, больше подходящем для функционального. :)
Примерно как писать (reduce #'+ (map 'list #'abs '(1 -2 3))) на PHP :)

naryl
#133 - 08.12.2009 - 20:25

> в #80 ты тоже код расширял, так что протест не засчитан.

С учётом этого:
> http://code.google.com/p/obj-php/source/checkout
не засчитан :)

Shock
#134 - 08.12.2009 - 20:28

ok, засчитано. поверим, что работает. смысла сравнивать дальше этих два разных языка не вижу =) надеюсь, теперь не будет глупых заявлений в сторону пхп по крайней мере от умных и читавших эту тему людей

naryl
#135 - 08.12.2009 - 20:47

Вот более читаемый вариант: http://paste.lisp.org/+1YTA/4

> надеюсь, теперь не будет глупых заявлений в сторону пхп по крайней мере от умных и читавших эту тему людей
И, надеюсь, не будет глупых заявлений в сторону CL от читавших эту тему людей. =)

naryl
#136 - 08.12.2009 - 20:49

Но считаю своим долгом напомнить, что Лисп, который успешно смог повторить PHP, в 3 с лишним раза его старше. =)

Shock
#137 - 08.12.2009 - 21:06

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

naryl
#138 - 08.12.2009 - 21:10

Просто PHP популярнее => чаще появляется в обсуждениях. А шанс того, что упомянувшего PHP/Lisp казнят примерно одинаков.
К списку вопросовСтраницы: 1 2 3 >

Быстрый ответ
Имя:      Пароль:    
Текст сообщения:

«ibash.org.ru — Новый цитатник Рунета» Почта вебмастера: imail@ibash.org.ru