Как жить с синтаксическим сахаром like Ruby

Ноябрь

Новичок
отвечу на вопрос. я понимаю, что php ты не осилил в своё время. в php есть наследование и возможность переопределять методы, причём это делается очень прозрачно, а контролировать можно интерфейсом и через type hinting. Те же миксины можно реализовать через магический __call , но это считается плохой практикой - говнокодом, потому что потом такой заопарк невозможно поддерживать.
Да я-то знаю, что в php есть наследование и переопределение, вот и мне непонятно, что за паника. Интересно что означает фраза "очень прозрачно".
 

Ноябрь

Новичок
korchasaСамое страшное, что в руби идут всё больше не с высоким уровнем, а те, кто не осилил php. тех, кто может писать на руби практически нет, все на рельсах, а вот у питона нет такого гопницкого фреймворка и там народ посильнее будет (пока).
Все это мастурбация ни о чем. Фактически в вебе нет ничего особо сложного.
 

AmdY

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

флоппик

promotor fidei
Команда форума
Партнер клуба
Вот приведенная мной статья, которую так обхаяли за «субъективность» на самом говорит очевидную вещь — предпочтения языка тоже субъективны! Технически языки — равны. Теоретически, ничего не мешает писать веб-страницы на брейнфаке, и отдавать их вебсервером тоже написанном на брейнфаке.
Получается, вопрос нужно ставить не о языке программирования, как таковом, а о инструментах, облегчающих работу с ним: отладку, быстроту написания.
И тут кстати получается интересная вещь — я почти не знаю вещей, написанных на руби. На ROR — есть. А на чистом руби? Даже приведенный в пример Redmine написан на ROR.
Где — успешные проекты на руби?
У меня на самом деле, получилась в свое время похожая неприятная история с питоном: Мне он всегда нравился, особенно соблазняя тем, что работает и для десктопа, и кроссплатформенный... как язык программирования питон был прекрасен: чистый синтаксис, утиная типизация, стандарты кодирования, от которых невозможно отойти, потому что это часть языка... просто мечта, в общем. И нужно мне было написать демона, собирающего кой-какую информацию с датчиков, и кладущего его в базу.
Спешить было некуда, и я решил заодно попрактиковать питон.
Тут то и началось самое интересное: Питон, как конечный продукт, оказался полным говном. Демон должен был работать под винду, и я начал искать, как же работать с базой данных из питона. Я наивно предположил, что такие модули должны быть стандартными. Увы, нет — версий библиотечек для работы с мускулом я нашел пять, из них каждая различной степени работоспособности. Попутно выяснилось, что какого либо полноценного централизованного реестра расширений для питона тоже нет, как нет и стандартных методов установки: есть distutils, есть setuptools, есть просто компиляция ручками с запихиванием куда надо, есть install. Следующим неприятным сюрпризом оказалось то, что расширения кроме поставляемых в виде исходников для компиляции, очень капризны к версии питона. Поскольку компиляция расширений под винду для меня дело малознакомое, и соотвествующих инструментов у меня нет, я начал искать скомпилированные варианты под винду. Нашел один подходящий пакет, запустил, и уже почти возрадовался, что пора писать программу... как тут оказалось, что импорт этой библиотеки начал приводить к сегфолту. Немного порыв гугл, я увидел, что для решения этой проблемы надо поправить исходники, и перекомпилировать библиотеку.
На этот момент прошло уже 6 часов, и мое терпение кончилось.
Я удалил все связанное с питоном, и со спокойной совестью забыл о нем, как о продукте.
А демон прекрасно работает написанный на PHP с привкусом libevent.

Как-то так.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Вопрос роста утечек памяти решился очень просто: их нет.
 

Ноябрь

Новичок
прозрачно, значит понятно, где и какой метод переопределён
Вопрос: как это достигается?
Немного порыв гугл, я увидел, что для решения этой проблемы надо поправить исходники, и перекомпилировать библиотеку.
Ну и какие проблемы пропатчить либу. Не факт что вы выбрали наилучший вариант. Кстати почему вы не используете linux?
 

AmdY

Пью пиво
Команда форума
Вопрос: как это достигается?
Ну и какие проблемы пропатчить либу. Не факт что вы выбрали наилучший вариант. Кстати почему вы не используете linux?
достигается благодаря соблюдения одного из важнейшего механизма ООП - http://ru.wikipedia.org/wiki/Инкапсуляция_(программирование)
 

AmdY

Пью пиво
Команда форума
Ноябрь
согласен, есть инкопсуляция. но monkey pathing убивает её

pilot911
странная проблема, у меня сейчас с курлом проблем нет, вроде пофиксили утечки
 

Ноябрь

Новичок
AmdY
Во-первых ты путаешь монкей патчи и метапрограммирование. Монкей патчи возможно вообще не стоит делать (это переписывание кода с некоторым своим изменением). Метапрограммирование используют для, изменения/дополнения существующего функционала. В этом случае обычно инклудят миксин в определенный класс. Нет никаких причин в проекте переопределять методы в классах проекта, это же просто абсурд, я просто не представляю для чего это нужно.
Вот пример https://github.com/fragility/spatial_adapter/blob/master/lib/spatial_adapter/postgresql.rb
Здесь в расширяется класс ActiveRecord::ConnectionAdapters::postgreSQLAdapter
вот использование метапрограммирования, разве это уродливо, помоему это красиво и наглядно.
 

AmdY

Пью пиво
Команда форума
Ноябрь
вообще смешно.
чем по твоему отличается "переписывание кода с некоторым своим изменением" от "изменения существующего функционала".

ты действительно не знаешь что такое метапрограммирование?
 

Ноябрь

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

fixxxer

К.О.
Партнер клуба
1. Наследование
2. Делегирование

Метапрограммирование в данном его проявлении (хотя мне кажется, это не совсем корректное употребление термина - я под ним понимаю скорее шаблоны в C++ и дженерики в Java) в некоторых случаях действительно помошает красиво решить проблемы, но чаще является workaround-ом для неудачных архитектурных решений.
 

AmdY

Пью пиво
Команда форума
Ноябрь
в php тоже есть инструменты позволяющие заниматься метопрограммированием, тот же eval и __call, но это плохой стиль.
касательно твоего вопроса
http://www.doctrine-project.org/projects/orm/1.2/docs/manual/behaviors/en#core-behaviors:geographical , если не ошибаюсь, там phpdoc дополнительно генерится, чтобы можно было работать и знать о полях и методах на этапе разработки. а не только в режиме run time

не надо переходить на сравнения, похоже я php знаю лучше, чем ты ruby, просто я хочу разобраться в ruby и как его есть. а не доказать его ущербность.
 

fixxxer

К.О.
Партнер клуба
В рамках оффтопа - я тут посмотрел на вторую доктрину в рамках ознакомления с symfony 2. Возник вопрос, какие вещества были употреблены при проектировании. (Впрочем, второй symfony это тоже местами касается.)
 
Сверху