Форум Академгородка, Новосибирск > А что будет после PHP?
Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: А что будет после PHP?
Форум Академгородка, Новосибирск > Компьютеры и сети > Программирование > WEB-программирование
Страницы: 1, 2
crystal_vv
Когда-нибудь рано или поздно PHP отойдет в прошлое и уступит место ...(чему?). Кто что думает по этому поводу.
Jean
веб-программисты будут создавать страницы в своей голове, посредством телепатических устройств публиковать их в 10ти мерном интернете. наконец-то исчезнет проблема кросс-браузерности - специальный чип вживляемый в голову позволит пользователям интернета отображать сайты так как им хочется. А спустя еще 20 лет, все люди будут подключаться к MySQL напрямую минуя presentation layer...
MrB
питон
}MikE{
Я думаю, он не умрёт, тк очень мощный, удобный, БЕСПЛАТНЫЙ и популярность его только растёт, ибо это почти СИ )))
Бян
QUOTE (}MikE{ @ Nov 9 2007, 21:22)
Я думаю, он не умрёт, тк очень мощный, удобный, БЕСПЛАТНЫЙ и популярность его только растёт, ибо это почти СИ )))

в этом то и проблема...
gaus
Ruby On Rails
zO_om
QUOTE (gaus @ Nov 10 2007, 18:33)
Ruby On Rails

Очень-очень спорное утверждение, но спорить точно не буду, щас и без меня тут такое начнётся =)
gaus
QUOTE (zO_om @ Nov 11 2007, 16:36)
QUOTE (gaus @ Nov 10 2007, 18:33)
Ruby On Rails

Очень-очень спорное утверждение, но спорить точно не буду, щас и без меня тут такое начнётся =)

Да я именно с этой целью и написал. Что-то уже сутки жду, что начнется. Пока не началось ничего. sad.gif
Papa Noёl
а это, может заменит Сила Божья?
сокращенно СБ (GP)
melifaro
QUOTE (gaus @ Nov 11 2007, 18:39)
Да я именно с этой целью и написал. Что-то уже сутки жду, что начнется. Пока не началось ничего. sad.gif

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

Так вот, имхо smile.gif, при больших возможностях "рапид разработки" есть у руби одна очень неприятная особенность, как, впрочем, и у всех языков типа смалтолк - дебаг хелл smile.gif В смысле, система объектов и сообщений - великолепная вещь, но, опять же имхо, в момент когда ты не можешь точно описать, что точно у тебя происходит в каждый момент исполнения - дебаг становится невыносимым smile.gif Хотя, конечно же, может быть это я, балбес неспособный, чего-то не понял.

Если смотреть на конкурентов PHP сейчас - совершенно точно можно говорить о питоне. У него очень удобный синтаксис - реально экономящий время просто меньшим количеством нажатия на кнопки и меньшим же количеством выделений мышью при переколбашивании куска кода, у него приятное быстродействие и вообще.

Но сейчашние конкуренты малоинтересны, потому как у ПХП есть один огромный бонус, из-за которого он будет, я думаю, еще очень долго оставаться в качестве лидера области. Он очень дешев в освоении, разработке и поддержке. Говоря проще - ПхП - это язык для ламеров, он не стесняется им быть smile.gif
MrB
QUOTE

Говоря проще - ПхП - это язык для ламеров, он не стесняется им быть


Он позволяет ламерам себя использовать с приемлемой удобностью и скоростью разработки и достаточно терпим к их ошибкам.
Но не язык для ламеров.
Морж
вариантов не много - перл, питон, руби на рельсах
перл не все осилить могут, питон медленный и корявый, так что остается только руби smile.gif
Reality
php 4ever.

Да немала вероятность возникновения нового языка.
Морж
QUOTE (Reality @ Nov 11 2007, 23:56)
php 4ever.

Да немала вероятность возникновения нового языка.

php - лесом

новый язык - туда же. разве мало существующих? опять же jsp/aspnet никто не отменял
crystal_vv
Возник другой вопрос. Суть в следующем: я занимаюсь разработкой систем управления предприятиями малого и среднего бизнеса. Системы основаны на WEB интерфейсе (PHP + MSSQL(редко MySQL)). И вот в последнее время заметил, так сказать "насыщение", то есть остановился в своем движении вперед. Освоены и используются: PHP5, MSSQL, MySQL, JavaScript, AJAX+JSON, изредка и при необходимости использую ActiveX. Проблема в том, что чувствую, что чего то не хватает. Может подскажите, что еще можно освоить, чтобы сделать свои системы лучше. Буду благодарен за любые пожелания и высказвания.
melifaro
QUOTE
Он позволяет ламерам себя использовать с приемлемой удобностью и скоростью разработки и достаточно терпим к их ошибкам.


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

Так что скорее имеется в виду не скорость разработки (тут-то, имхо, руби всех съест и не подавится), а скорость освоения "с другого языка" и количество знаний о языке, которое нужно держать в голове, чтобы было можно работать - в шарпе пренавороченное ООП и собсна фреймворк (чтобы сделать нечто я должен юзать System.delat.nechto), в сях - голову греют работой с памятью, в луа-подобных языках - грешные таблицы, честному некогда-си-программеру съедающие поначалу весь мозг. А в пхп - минимум наворотов, даже ооп минимальная, и, дохренища функциональности либо в самом языке, либо в виде готовых либ - он движется к перлу в этом смысле.
ElaSTiC
QUOTE (zO_om @ Nov 11 2007, 16:36)
QUOTE (gaus @ Nov 10 2007, 18:33)
Ruby On Rails

Очень-очень спорное утверждение, но спорить точно не буду, щас и без меня тут такое начнётся =)

он не после пхп, он параллельно..
питон скорее восстанет
botskin
Сначала предумайте чио должно произойти чтоб пхп ушол в отстойник,и собсно выложите -почему он должен туда уйти.
Фразы аля "все больше и больше программистов отказываются от пхп " - це шлак,
таким макаром можно сказать что угодно.
Один коллега заявлял,что када системы будут настолько огромны и могучи что на пхп будет невозможно их писать, или " када придет время веб-пицот.ноль" -дык люди в 50-ых думали что мы уже м/у галактиками летать будем
MrB
вопрос же не о том что должно произойти чтобы пхп исчез? )

А вообще, пока язык развивается, делаются новые версии и т.д. он будет жить.
Тут, пожалуй, самым ярким будет пример перла. Я уже не верю в выход Perl6... А ведь такой классный язык. Можно сказать что был.

Вместо него сейчас уже использую питон...
MRV N1
ответ очевиден - аналогичная дрянь, только от майкрософт
ASP.NET?
Морж
QUOTE (MRV N1 @ Nov 12 2007, 22:52)
ответ очевиден - аналогичная дрянь, только от майкрософт
ASP.NET?

аспнет вполне неплохо себе развивается, причем достаточно давно - слово "будет" тут врятли уместо
опять же весь рынок он ввиду ориентированности на одну всем известную проприетарную систему захватит врятли
Jean
>Например, пхпшная и сишарповая коммюнити имеет одно глобальное отличие: я неоднократно натыкался на готдотнете на различные темы с нубскими вопросами, и там реакция была всегда одной и той же: "уз поиск, ртфм, идитинафигнубы" На пхпшных форумах на идиотские вопросы

Неправда ваша: зайдите на phpclub.ru/talk или какой-нибудь forums.webscript.ru - там вас съедят заживо. Но от пхп я уже отошел сейчас занимаюсь Java. на официальном форуме forum.java.sun.com никто никого никуда не посылает, все терпеливо по 100 раз отвечают на идиотские вопросы... так что с языком для ламеров у вас тут какой-то косяк вышел smile.gif

>ответ очевиден - аналогичная дрянь, только от майкрософт
ASP.NET?

Ага, PHP# или PHP.NET smile.gif
MRV N1
QUOTE (Морж @ Nov 13 2007, 00:40)
QUOTE (MRV N1 @ Nov 12 2007, 22:52)
ответ очевиден - аналогичная дрянь, только от майкрософт
ASP.NET?

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

оно сейчас есть не вместо пхп, а просто так есть. а развитие - вообще не причем.
опыт показывает, что всем известная проприетарная система захватит и серверный рынок, рано или поздно. так что большинство идиотских вебсайтов будут не на linux+apache+php+mysql а на windoze+iis+asp.net(?)+mssql
Морж
QUOTE (MRV N1 @ Nov 14 2007, 00:09)
QUOTE (Морж @ Nov 13 2007, 00:40)
QUOTE (MRV N1 @ Nov 12 2007, 22:52)
ответ очевиден - аналогичная дрянь, только от майкрософт
ASP.NET?

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

оно сейчас есть не вместо пхп, а просто так есть. а развитие - вообще не причем.
опыт показывает, что всем известная проприетарная система захватит и серверный рынок, рано или поздно. так что большинство идиотских вебсайтов будут не на linux+apache+php+mysql а на windoze+iis+asp.net(?)+mssql

LAMP пока настолько популярен, что всем остальным видам юниксового хостинга вместе взятым до него еще сосать и сосать, а всем известная проприетарная система так и вообще не конкурент на этом рынке. хотя возможно наши дети и увидят как она зохавает хотябы половину всех хостов smile.gif
borodul
Цитата(crystal_vv @ 12.11.2007, 10:29) *
Возник другой вопрос. Суть в следующем: я занимаюсь разработкой систем управления предприятиями малого и среднего бизнеса. Системы основаны на WEB интерфейсе (PHP + MSSQL(редко MySQL)). И вот в последнее время заметил, так сказать "насыщение", то есть остановился в своем движении вперед. Освоены и используются: PHP5, MSSQL, MySQL, JavaScript, AJAX+JSON, изредка и при необходимости использую ActiveX. Проблема в том, что чувствую, что чего то не хватает. Может подскажите, что еще можно освоить, чтобы сделать свои системы лучше. Буду благодарен за любые пожелания и высказвания.



Уважаемый, не парьтесь так. Скоро выйдет PHP6(релиз намечен на нынешний год), готовьтесь изучать PHP дальше. Ну если прямо так хочется что-то поизучать, то поизучайте ActionScript. А что? Чем не тренировка для мозга? Должно пойти легко, все-таки это "кузен" javascript, который Вы знаете. Я бы сам взялся тоже, но времени у меня сейчас нет. А кроме того, есть Zend Framework. На мой взгляд, вполне симпатичная штука.
Ну и наконец, а Java поизучать не пробовали?
Basilevs
Кстати о Java. Google сделал компилятор Java->Javascript. В сочетании с Java на серверной стороне и технологией Hibernate - жутко мощная вещь (может быть даже слишком blink.gif )
Tonal
То же самое делается сейчас для Python (Python -> JavaScript) под крылышком того же Googl-я.
Кроме того подобная технология есть с Haskell. ;-)
Ну и Erlang конечно не обойдён: http://erlang.dmitriid.com/news/item/165
Basilevs
Цитата(Tonal @ 15.01.2008, 11:12) *
То же самое делается сейчас для Python (Python -> JavaScript) под крылышком того же Googl-я.
Кроме того подобная технология есть с Haskell. ;-)
Ну и Erlang конечно не обойдён: http://erlang.dmitriid.com/news/item/165

Ну, Python так похож на Javascript, что я не вижу смысла в такой компиляции...
Tonal
Ты наверное их разглядывал с очень большого расстояния?
Хотя ты прав - все Тъюринг-полные языки похожи на машину Тъюринга. smile.gif

Ну а смысл очень даже есть - Javasctipt есть в любом современном браузере, а попробуй прикрути Python к той же Opera.
mik
Цитата(MRV N1 @ 14.11.2007, 1:11) *
Цитата(Морж @ Nov 13 2007, 00:40)
Цитата(MRV N1 @ Nov 12 2007, 22:52)
ответ очевиден - аналогичная дрянь, только от майкрософт
ASP.NET?
...

... так что большинство идиотских вебсайтов будут не на linux+apache+php+mysql а на windoze+iis+asp.net(?)+mssql


Аналогичная дрянь может возникнуть не только от мелкомягкого (из-за нормальной стандартизации основных составляющих .NET платформы в ISO). Поэтому будущее не идиотских сайтов вполне может эффективно(!) ехать на колесах Some OS + MONO + Some # language + Some DBMS
К заглавному вопросу темы: Some # language вполне может стать, как уже упоминалось, php#.
butjok
Хм, а кто это сказал, что Пайтон корявый? По-моему его синтаксис очень даже элегантный.
Лично мне кажется, что PHP более корявый чем Python.
Думаю, что либо Python (Django), либо Ruby (RoR) будут в будущем, да и вообще PHP ещё долго жить будет.
a123
Цитата(botskin @ 12.11.2007, 20:48) *
Сначала предумайте чио должно произойти чтоб пхп ушол в отстойник,и собсно выложите -почему он должен туда уйти.
Фразы аля "все больше и больше программистов отказываются от пхп " - це шлак,
таким макаром можно сказать что угодно.
Один коллега заявлял,что када системы будут настолько огромны и могучи что на пхп будет невозможно их писать, или " када придет время веб-пицот.ноль" -дык люди в 50-ых думали что мы уже м/у галактиками летать будем


ну элементарный пример
переписывали мы тут как-то систему на php поскольку авторы осознали что их система не способна держать требуемую нагрузку в принципе

переписывале на J2EE (JSP итд)
прирост производительности 50 раз
Zebooka
Да, пхп очень приятен (ИМХО конечно) и гибок по части кода, но для высоко производительных систем он не годится совсем. Тормоз еще тот.
MrB
Товарищи, скажите это википедии, вконтакту, фейсбуку и многим другим.

Пхп - сила, но в _прямых_ руках
Tonal
В идеально прямых руках любой всё - сила. smile.gif
Проблема в том, что чем больше/сложнее система тем меньшие допуски на кривизну при заданном инструменте.
Поэтому народ и ищет инструменты, допускающие большую корявость рук для больших систем. smile.gif

А если серьёзно про PHP, то ему, как минимум, не хватает обработки исключений, пространств имён, нормальной работы с unicode.
В конкурирующих языках эти моменты решены + ещё много вкусностей типа элементов мето и деклоративного прогрраммирования.
MrB
Цитата
А если серьёзно про PHP, то ему, как минимум, не хватает обработки исключений, пространств имён, нормальной работы с unicode.

Ну вообще-то исключения (exception) PHP умеет.
Насчёт юникода эм... Я не сталкивался с такой проблемой вообще ни разу - пишите в unicode и будет output в unicode. Iconv есть. Я просто проблемы не понимаю.
Пространства имён... Да, эта проблема есть. Но я бы её не стал относить к первостепенным
StillWaiting
// мимо проходил
в 5.3-м неймспейсы появились...
borodul
Цитата(StillWaiting @ 25.09.2008, 17:56) *
// мимо проходил
в 5.3-м неймспейсы появились...

Одна беда - 5.3 еще не появился в полную силу. Сообщение об альфа-релизе есть, а сам ПХП 5.3 еще недоступен. Только снапшоты.
Zebooka
А полная поддержка Уникода вроде в 6.0 будет. Ну а в пятом можно mbstring'ами пользоваться еще.
Daniel
Цитата(MrB @ 25.09.2008, 15:34) *
Цитата
А если серьёзно про PHP, то ему, как минимум, не хватает обработки исключений, пространств имён, нормальной работы с unicode.

Ну вообще-то исключения (exception) PHP умеет.

юзерские - да, а вот стандартное api - нет, не кидает их оно (ср. питон, java)

Цитата
Насчёт юникода эм... Я не сталкивался с такой проблемой вообще ни разу - пишите в unicode и будет output в unicode. Iconv есть. Я просто проблемы не понимаю.

а если постоянно iconv туда обратно не жирно? это все строковые функции затрагивает
хотя давайте лучше все перейдем на ascii! smile.gif

Цитата
Пространства имён... Да, эта проблема есть. Но я бы её не стал относить к первостепенным

а мне вот иногда нравится то, что их нет: в питоне практически на каждую функцию нужно свой импорт писать
MrB
Цитата
а если постоянно iconv туда обратно не жирно? это все строковые функции затрагивает
хотя давайте лучше все перейдем на ascii!

Если весь код в UTF, бд в UTF, вывод в UTF...
Зачем делать iconv?


Цитата
юзерские - да, а вот стандартное api - нет, не кидает их оно (ср. питон, java)


Оно обычно возвращает код ошибки
В результате появляются интересные конструкции вида
Код
while (($someVar = func($param1, $param2)) !== false)  {
//Some actions with $someVar
}

Но... Согласен, исключения стандартного API были бы удобнее...
Daniel
Цитата(MrB @ 19.10.2008, 20:08) *
Если весь код в UTF, бд в UTF, вывод в UTF...
Зачем делать iconv?

если ты их не обрабатываешь, а сразу выводишь - незачем

Цитата(MrB @ 19.10.2008, 20:08) *
Цитата
юзерские - да, а вот стандартное api - нет, не кидает их оно (ср. питон, java)

Оно обычно возвращает код ошибки

о том и речь
код ошибки - это не exception
и у вас в коде будет:
Код
$a = f1();
if (!$a) error();
$b = f2();
if (!$b) error(); // дублирование кода
$c = f3();
// забыл обработать
$d = f4();
...

вместо
Код
try:
  a = f1()
  b = f2()
  ...
except:
  error() // автоматически ничего не забыто и без дублирования
MrB
Цитата
если ты их не обрабатываешь, а сразу выводишь - незачем

Да даже если и обрабатываешь, насколько я помню.

Цитата
Код
$a = f1();
if (!$a) error();
$b = f2();
if (!$b) error(); // дублирование кода
$c = f3();
// забыл обработать
$d = f4();

Это подход глупый и неправильный в большинстве случаев.
Ошибки подобного плана можно проверять консолидированно и в одном месте.
Естественно, это влечёт за собой некоторую лишнюю нагрузку, потому консолидацию нужно применять с умом.
Что интересно: не припомню когда у меня последний раз возникал код подобного вида.
Tonal
Python бросает исключения в случае обломов системных функций.
Но и из кода подобного приведённому можно легко убрать дублирование:
Код
def error():
  raise Exception()
functs = f1, f2, f3, f4
a, b, c, d = map(lambda f: f() or error(), functs)

Daniel
Цитата(MrB)
Да даже если и обрабатываешь, насколько я помню.

Навскидку примеры:
Код
$a = ... - юникодная строка "Б"
if ($a == $a{0}) print("unicode works");
if (strlen($a) == 1) print("unicode works");

Подробнее тут - http://news.php.net/php.internals/17771

Tonal, я в точности это и сказал, что питон дескать кидает, а PHP - нет! А код у тебя красивый, да smile.gif

Цитата(MrB)
Ошибки подобного плана можно проверять консолидированно и в одном месте.

Приведи пример. Так непонятно. Речь идет о системных функциях, которые возвращают код ошибки в случае неудачи и 0 в случае успеха, и о последовательном вызове цепочек таких функций. Пример: WINAPI, POSIX, LIBC (PHP).

А точнее речь о том, что как правило без обработки ошибок алгоритм чист и понятен. Другими словами, хочется видеть, как пойдет дело чаще всего, а исключения описать отдельно и в виде исключений. И либо у тебя эта возможность дана в языке, либо ее нет и приходится извращаться, писать макросы, лямбды и прочее... TRY CATCH на асме...

Цитата(MrB)
Что интересно: не припомню когда у меня последний раз возникал код подобного вида.

Видимо ты используешь exception'ы, либо забиваешь на обработку ошибок smile.gif
Либо ты эти if'ы разделил и скрыл в свои функции, но это одно и то же, суть не меняется, if'ы остаются.
Zebooka
Цитата(Daniel @ 20.10.2008, 3:15) *
код ошибки - это не exception
и у вас в коде будет:
Код
$a = f1();
if (!$a) error();
$b = f2();
if (!$b) error(); // дублирование кода
$c = f3();
// забыл обработать
$d = f4();
...


(($a = f1()) && ($b = f2()) && ($c = f3()) && ($d = f4())) || error();
MrB
2Zeebooka - Да, как вариант.

Цитата
Код
$a = ... - юникодная строка "Б"
if ($a == $a{0}) print("unicode works");
if (strlen($a) == 1) print("unicode works");


За этим я вижу, к сожалению, глубокое непонимание принципов кодирования символов в юникоде и (или) незнание php sad.gif
Разберём по строкам:
Код
$a = "Б";  // без вопросов
if ($a == $a{0}) echo "Unicode test1\n"; // Сравниваем строку с первым БАЙТОМ этой строки (не символом!)
if (strlen($a) == 1) echo "Unicode test2\n"; // Так как кириллические символы кодируются двумя байтами в UTF, то получаем (2 != 1) - strlen выдаёт длину строки в БАЙТАХ (не в символах)

Если речь шла именно о такой поддержке юникода - то да, её нет.
Но случай кода, который умнее разработчика мне кажется ненормальным smile.gif


Цитата
Видимо ты используешь exception'ы, либо забиваешь на обработку ошибок
Либо ты эти if'ы разделил и скрыл в свои функции, но это одно и то же, суть не меняется, if'ы остаются.

Пальцем в небо не попал.
Исключения (как механизм) я не очень люблю - использую их в ядерных функциях (чаще всего такой стиль "навязан" фреймворком)
Ошибки вроде обрабатываю. Но кучи ифов у меня не возникает.

Есть некоторая "лестница обработки" - она подразумевает коррекцию ошибок на каждом возможной ступени самой программой (если это возможно).
Ну и часть обработки, конечно, делается самим фреймворком внутри функций "управления" и ловится на исключениях.

С одной стороны исключения - это более "лёгкий" механизм отлова и он позволяет работать (создавать программы) быстрее. Но с другой стороны, имхо позволяет скрыть больше возможных ошибок в коде.

В случае кастомных эксепшнов на каждую ошибку я сомневаюсь, что они дадут хоть какой-нибудь выигрыш. (А вот классов исключений породят значительно больше)
Daniel
Мой пример с if-ами - это некий шаблон, в чистом виде он не возникнет у вас. А вы сразу навыдумывали smile.gif
Во-первых, как правило, хочется вывести разные сообщения об ошибках, во-вторых, между if-ами возникают еще какие-то действия алгоритма, в-третьих, надо освободить созданные до момента ошибки ресурсы. Код, грубо говоря, такой:
Код
$a = f1();
if (!$a) error("asd");
.. какие-то действия 1 ..
$b = f2();
if (!$b) {
  free($a);
  error("qwe");
}
.. какие-то действия 2 ..
$c = f3();
if (!$c) {
  free($a);
  free($b);
  error("123");
}
.. какие-то действия 3 ..
free($a);
free($b);
free($c);

и такой код вы не уже не схлопните своими лямбдами или коньюнкцией так просто (хотя при желании можно, никто не спорит). Еще заметьте, что это тут все функции возвращают false в случае ошибки. На практике кто-то вернет null, кто-то false, кто-то -1 и др.

Все что я этим хотел сказать, и вы это сами знаете прекрасно: исключения позволяют централизованно и без всяких ухищрений отделить основную нить алгоритма от обработки ошибок, а finally позволяет однократно написать код освобождения ресурсов. Вот и все. На этом точка про этот пример и про исключения. 1) Никто не заставляет их использовать, можно и без них обойтись. 2) Хотите моделировать функциональность исключений другими методами - пожалуйста, извращайтесь.

Цитата(MrB)
Но случай кода, который умнее разработчика мне кажется ненормальным

ЯВУ для того и создан, чтобы помогать прогеру, а иначе пиши-ка ты на машинных кодах свои веб-приложения
код не получается умнее, все равно тебе надо знать, что там за кодировка и явно это указывать в том месте, где ты конструируешь объект-строку из массива байтов

кстати, попробуйте на php написать пример кода, аналогичный питоновскому:
Цитата
s = u'привет'

(небольшое условие: код должен работать при любой кодировке исходника)

2MrB а все что ты дальше написал про ошибки - прошу примеров кода
Tonal
Насчёт освобождения ресурсов: в С++ используется RAII (Получение ресурса есть инициализация), в более других языках (C#, Python), инструкция with:
Код
#python
with closing(file('config.ini')) as cfg:
  parse(cfg)

Здесь гарантируется, что при выходе из блока with файл закроется. Можно написать свои обработчики входа/выхода из этого блока.
Неудобство с finally в том, что получение ресурса и его освобождение разнесено в коде и отслеживается только программистом - соответственно можно просто забыть освободить, или спутать порядок освобождения - что иногда приводит к трудноотслеживаемым ошибкам.
RAII и wich этими болезнями не страдают.
Т.е. в этом разрезе, код будет выглядеть примерно так:
Код
#python
# какие-то действия 0 ..
with f1() as a:
  # какие-то действия 1 ..
  with f2() as b
    # какие-то действия 2 ..
    with f3() as c:
      # какие-то действия 3 ..

Оказалась нераскрыта тема разных сообщений, по той пречине, что она может иметь несколько решений:
1. Рунтайм предоставляет нам полный трейс, значит мы и так довольно хорошо видим место ошибки и что к ней привело. smile.gif
2. Каждое исключение содержит какое-то описание произошедшего, и нам его может оказаться вполне достаточно.
3. Я бы уже разбивал это на отдельные функции, например вынося туда "какие-то действия №Х .." и вложенный with. В python-е есть очень удобное средство - декораторы - на них бы сделал разные сообщения ошибок. smile.gif
Код
#python
@errlog('asd')
def part1():
  # какие-то действия 0 ..
  with f1() as a:
    part2(a)
@errlog('qwe')
def part2(a):
  # какие-то действия 1 ..
  with f2() as b
    part3(a, b)
...

И опять же, заметив, что все эти part№ вполне однотипны, можно их обобщить до:
Код
def do_part(before, acqure, after, *args):
  before(*arg)
  with acqure(*arg) as res:
    after(res, *arg)

Конечно конкретный код будет несколько другой, но идея думаю понятна. smile.gif

П.С. Вообще общая идея функциональной декомпозиции - каждая функция должна отвечать только за одно действие.
Тогда не будет каскада вложенных ифов и захватов/освобождений ресурсов, а сопровождать такие функции гораздо легче. smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2024 IPS, Inc.