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

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

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

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

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

Метапрограммирование в данном его проявлении (хотя мне кажется, это не совсем корректное употребление термина - я под ним понимаю скорее шаблоны в C++ и дженерики в Java) в некоторых случаях действительно помошает красиво решить проблемы, но чаще является workaround-ом для неудачных архитектурных решений.
 
Ноябрь
в php тоже есть инструменты позволяющие заниматься метопрограммированием, тот же eval и __call, но это плохой стиль.
касательно твоего вопроса
http://www.doctrine-project.org/pro...nual/behaviors/en#core-behaviors:geographical , если не ошибаюсь, там phpdoc дополнительно генерится, чтобы можно было работать и знать о полях и методах на этапе разработки. а не только в режиме run time

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