|
0 / 1 / 0
Регистрация: 24.06.2019
Сообщений: 23
|
|
PHP vs Python для WEB05.08.2019, 17:56. Показов 11211. Ответов 90
Метки нет (Все метки)
Здравствуйте.
В последнее время наиболее популярным становится дискуссия: PHP vs Python для WEB Python прост, удобен. При этом позволяет разработку приложений других направлений. Но и PHP не сдаёт позиции. По производительности PHP 7.3 опережает Django! Хочу спросить ваше мнение. Что на сегодняшний день перспективно изучать для WEB Backend? Какие преимущества и недостатки PHP и Python по вашему мнению? Если говорить обо мне, то мне ближе C-подобный синтаксис. Python прост на столько, что бывает сложным. Однако в Python привлекает возможность написания приложений с не объемным кодом. Естественно, как вы понимаете, желательны ответы от имеющих опыт и в PHP и в Python. Благодарю! P.S. В качестве фильтра-отсеивателя джунов, прошу кратко рассказать в ответе кто вы, чем занимаетесь в IT.
0
|
|
| 05.08.2019, 17:56 | |
|
Ответы с готовыми решениями:
90
PHP vs Python для карьеры PHP vs Python для работы PHP vs Python для Backend в 2019 |
|
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
|
|||||
| 06.09.2019, 08:13 | |||||
|
Во-первых, не один а два "это базовый минимум", потому что у Вас есть таблица виртуальных методов класса и она одна для всех его объектов. Вызов метода из неё - это первый уровень косвенности - он всегда "косвенный". Чтобы объект мог "иметь" свои методы класса, он ОБЯЗАН содержать внутри себя дополнительный указатель на эту таблицу класса. Разименование этого указателя от this - это ВТОРОЙ уровень косвенности. То есть имеем два обязательных уровня косвенности то есть ВТРОЕ МЕДЛЕННЕЙ, ибо 1+1+1(сам вызов) больше 1 ровно в ТРИ РАЗА. ![]() На самом деле, часто все ещё хуже потому что this внутри метода (а мы всегда внутри какого-то метода при ООП) указывает на текущий объект и .. практически перманентно занимает 1 регистр-указатель процессора. Часто такой регистр "вообще один" у ЦП. Все это приводит к доп. расходам: загрузить указатель объекта - как третий уровень косвенности и плюсом позже ещё и вернуть this взад. Вот и получаем "от трех до пяти раз". Все - просто. ![]() В общем, всё ясно, далее выпиливаюсь самостотельно. Вы придумали собственную концепцию и пытаетесь её синонимировать с парадигмой ООП. Удачи. ![]() Добавлено через 1 минуту Добавлено через 5 минут P.S. Замечание "от трех до 5 раз" не совсем верно для таблично-ориентированного вычислителя, но таковых в реальности я знал только 2шт..
0
|
|||||
|
14341 / 9434 / 1358
Регистрация: 21.01.2016
Сообщений: 35,560
|
|||||
| 06.09.2019, 08:14 | |||||
|
0
|
|||||
|
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
|
|||||
| 06.09.2019, 08:31 | |||||
|
Компиляция виртуальных, не перекрытых методов класса часто также возможна как компиляция обычного метода. AST дерево тут в помощь. Часто класс объекта известен заранее. Если нет, то в таблицу вашего класса будет ПОДСТАВЛЕН метод из класса-родителя и количество уровней косвенности не изменяется. ![]() ![]() Понятие "объект" и вся концепция ООП произросло не на пустом месте.
0
|
|||||
|
14341 / 9434 / 1358
Регистрация: 21.01.2016
Сообщений: 35,560
|
|||||
| 06.09.2019, 09:23 | |||||
|
Подведём итог: вы утверждаете, что объект не объект потому, что нет наследования. За пруфами к Алану Кею и его друзьям. Показываете "иллюстрацию", которая должна была показать добавление класса в Си, но не показала. И чтобы сместить акценты приписали мне чушегонство и теперь у вас болят скулы от смеха над приписанным мне свойством. Это так?)
0
|
|||||
|
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
|
|
| 06.09.2019, 09:54 | |
|
Usaga, Такое ощущение, что я пишу для слепого..
Нет. Ваш телефон НЕ ЯВЛЯЕТСЯ объектом в классическом понимании, сколько бы раз Вы не повторили обратное, он от этого "объектом" не становится. Даже если Вы ему и не умозрительно насуете методом (простых), то объектом он так и не станет .. ровно до тех пор, пока у Вас не появится НАСЛЕДОВАНИЕ и ВИРТУАЛЬНЫЕ (общие) методы. Ровно до тех пор, пока у вашей структуры "телефон" не появится .. указатель на таблицу виртуальных методов он ничем физически не будет отличаться от банальной структуры языка Си. Объект становится объектом только когда он начинает ОТЛИЧАТЬСЯ от структуры и ИМЕЕТ свои, лично его методы - виртуальные. Вопросы "инкапсуляции" решались успешно и без введения понятия "объект", что Вам тут уже показали разными способами. Вопрос полиморфизма есть следствие виртуализации (наследования). Вопросы абстрагирования также решались и решаются самыми разными методами в ЯВУ. Собственно ради этого и была построена в целом концепция ООП (Симула-67 вам в помощь, книжка Страуструпа туда же, там же есть и взаимосвязь промеж Симулой и С++ из которого вырос ваш C# .. работать с языком и не понимать его истоков .. нечто. Виртуализация необходима в языках моделирования(! Симула, Смалталк), поскольку модели могут отличаться незначительно друг от друга, а крайне желательна высокая переиспользуемость кода .. отсюда растут ноги наследования и виртуализации - косвенного вызова функций - ровно той, которая соответствует данному варианту объекта. Главная причина по которой не прижилась Симула-67, несмотря на всё её новаторство - крайне низкая эффективность (та самая двойная косвенность) - ибо "за все надо платить". Но .. некоторым "плевать на цену", тем более что все равно и int можно назвать "объектом" .. методы приватны, структура неизвестна (скрыта в архитектуре процессора) .. чем не "объект"-то?
0
|
|
|
14341 / 9434 / 1358
Регистрация: 21.01.2016
Сообщений: 35,560
|
|
| 06.09.2019, 09:55 | |
|
0
|
|
|
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
|
|||
| 06.09.2019, 09:56 | |||
![]() Добавлено через 58 секунд
0
|
|||
|
14341 / 9434 / 1358
Регистрация: 21.01.2016
Сообщений: 35,560
|
|||||||||||||
| 06.09.2019, 10:00 | |||||||||||||
|
Arhat109, давайте поиграем в ассоциации?
Си с классами:
Добавлено через 1 минуту Добавлено через 2 минуты В вашем понимании объект не концепция, а только техническая сторона реализации? Если вам не показать содержимое памяти, где находится инстанс класса, то вы не сможете отличить объект от си с классами?
0
|
|||||||||||||
|
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
|
||
| 06.09.2019, 10:08 | ||
|
Вам даже в википедии прямо сказано: "Концепция виртуальных методов, поддерживаемая этими и другими современными языками, появилась как средство обеспечить выполнение нужных методов при использовании полиморфных переменных, то есть, по сути, как попытка расширить возможности вызова методов для реализации части функциональности, обеспечиваемой механизмом обработки сообщений." Но, Вы уже не один раз продемонстрировали свое неумение читать, не верю что дойдет и на этот раз. Ваши классы с простыми методами - есть некий суррогат, который и назван Страуструпом как "Си с классами", что подчеркивает отсутствие ООП в таком подходе. Добавлено через 1 минуту Оригинальный ООП - это виртуализация методов и "пришивание" их комплекта к набору данных. Вот совместное явление и назвали "объектом", дабы отличать от "структура". ![]() Добавлено через 12 секунд Уж совсем "для маленьких"..
0
|
||
|
14341 / 9434 / 1358
Регистрация: 21.01.2016
Сообщений: 35,560
|
||||
| 06.09.2019, 10:15 | ||||
|
И ещё: если этот объект включить в состав (композиция) в другой, то он по вашей шкале объектоности резко станет нормальным объектом? Или композиция не про ООП? Добавлено через 2 минуты Не по теме: Ещё не хватает сюда приплести спор о бесполезности GC для полного кайфа))
1
|
||||
|
56 / 20 / 2
Регистрация: 18.06.2018
Сообщений: 199
|
||
| 06.09.2019, 10:30 | ||
![]() ![]() ![]() ![]() Добавлено через 8 минут Тем не менее, никто не запрещает использовать достижения предыдущих подходов (процедурных) в т.ч. и в языках с ООП. Но такое применения языков с ООП просто называется "Си с классами", для отличия от полноценного программирования ООП. Вы никак это не можете усвоить .. видимо Вам как-то обидно, что это просто так зовется и такой подход не обсуждается в темах про ООП по этой причине. Свое неумение читать, понимать прочитанное, незнание "цены вопроса", не знание истоков того чем Вы пользуетесь повседневно, как понимаю, показывает что Вы просто рядовой пользователь ПО, пусть и "специализированного", а не программист. К такому выводу также подводят ваши реплики по тексту про "юзабилити редакторов", как аргументация вопроса .. Вы просто не делаете разницы между обрамляющим ПО и языком - то есть "пользователь ПО". Честно говоря, мне уже надоело.. Добавлено через 3 минуты В целом, Вам это видимо и не надо .. сейчас это не модно "знать историю вопроса", "существо дела" и т.д. Главное уметь применить нужный паттерн (композиция) ![]() В общем, я зря потратил свое время, пытаясь объяснить Вам почему оно втрое медленеей. Примите просто как данность.
0
|
||
|
Модератор
|
|||||
| 06.09.2019, 10:41 | |||||
|
0
|
|||||
|
14341 / 9434 / 1358
Регистрация: 21.01.2016
Сообщений: 35,560
|
|||||||||
| 06.09.2019, 10:58 | |||||||||
|
Почему объект не может быть объектом сам по себе, если он уже концепцию реализует? Вы вообще слово такое знаете? Судя по тому, что вы структуру FILE, которая просто мешок атрибутов, не можете отличить от полноценного объекта, который моделирует сущность, то у меня складывается ощущение, что не можете. Примеров привести не можете, аргументировать не можете. Кто из нас тут пользователь?)) Добавлено через 7 минут ООП же про абстрактные концепции. И простой класс без наследования, но несущий в себе определённый смысл, такую концепцию выражает. А вот структура FILE нет, ибо введена больше для удобства передачи по указатели. Разновидность DTO, не более. Мимо эти вещи сравнивать.
0
|
|||||||||
|
Модератор
|
||
| 06.09.2019, 11:29 | ||
|
2
|
||
|
Модератор
|
|
| 06.09.2019, 11:50 | |
|
Джентльмены, в качестве тестового задания я вам опишу задачку и вы мне её порешайте. У кого код получится элегантнее и ближе всего к сути - тому плюшка.
Судить будете вы же сами. Итак, задача
В целях биллинга некоторой услуги требуется производить привязку номера телефона клиента и отсылать на него несколько разных текстов.
У %сервиса% имеется несколько собственных номеров - по одному для каждого опсоса. Для Мегафона 921-123-45-67 для МТС 911-234-56-78 для Теле2 951-345-67-89 для RosTelecom 991-456-78-90 Все вышеназванные номера принадлежат оператору %сервиса% Задача у оператора сервиса сводится к тому, чтобы, опираясь на номер клиента, определить с которого из своих номеров отправлять клиенту смски в рамках предоставления услуги. Итак: при вводе номера клиента ваша программа должна выдавать номер, с которого будет посылаться ответ клиенту. Номера клиентов складывать (при любом к данному номеру обращении) в один из файлов (типа база данных - переусложнять с запросами к реальной SQL мы тут не будем): Клиенты Мегафон Клиенты МТС Клиенты Теле2 Клиенты RTcom Если номер был зарегистрирован в "базе", то при обращении выводить ответ "клиент %номер% уже был зарегистрирован".
0
|
|
|
14341 / 9434 / 1358
Регистрация: 21.01.2016
Сообщений: 35,560
|
||
| 06.09.2019, 14:37 | ||
|
Современный ООП не только про механическую\техническую реализацию, но и про идею. Я очень сомневаюсь, что когда Алан придумывал ООП такое понятие как предметная область или объект-значение ещё не было придумано или было известно очень узкому кругу лиц. Все споры тут свелись к тому, что идея пятидесятилетней давности не учитывает современные реалии. И типа всё, что не укладывается в рамки древнючего понятия, есть фу и Си с классами.
0
|
||
|
Модератор
|
||||||||
| 06.09.2019, 14:45 | ||||||||
|
Суровый оффтоп
Правильная постановка задачи - 90% дела.
Нынче народ может переходить от одного оператора к другому, так что хранить привязку номера телефона к оператору не совсем верно. Правильнее, запрашивать каждый раз
По этому, в ТЗ бы надо включить на какую СУБД вы согласны. К тому же, вы не указали целевую ОС. А то вам сделают на HTA или PowerShell, а вам, как пингвиноману это не понравится. Так же, согласились бы вы скачивать исполняемый файл (даже при наличии прилагаемых исходников), или нет? Или программу в виде .jar, то есть на java/Kotlin/Scala ? Или вам только скрипт подавай? Опять же стали бы ради этого php/nodejs ставить? Всё это просто, но заказчика об этом заранее спрашивают. Я, уж, пардон, в ближайшие дни никак не могу. По хорошему мне сюда даже бы и появляться не стоило, такой аврал. ![]() Добавлено через 2 минуты
0
|
||||||||
|
Модератор
|
||||
| 06.09.2019, 14:52 | ||||
|
0
|
||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,781
|
||||||||||||||||||||||
| 06.09.2019, 22:45 | ||||||||||||||||||||||
|
Добавлено через 3 минуты И вообще задача сводится к простейшему cond / if-then-else-if-...-else-endВ общем задачка крайне примитивная. Добавлено через 1 минуту Добавлено через 1 минуту Добавлено через 16 минут javac, например, мешает программистам писать такие «классы»:
Добавлено через 1 минуту Добавлено через 6 минут В чём твой вопрос?
0
|
||||||||||||||||||||||
| 06.09.2019, 22:45 | |
|
Помогаю со студенческими работами здесь
80
В php из python, работу невозможно найти новичкам python. Может перейти? Есть безпроблемный хостинг для php? Форум >web-программистов > PHP > PHP для начинающих. Как такое сделать? Какие бесплатные ресурсы можете посоветовать для изучения Python в плане Web? Php, python или ruby для веб парсинга PHP vs Python+Django для разработки социальной сети Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча
Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове.
Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
|
[golang] Breadth-First Search
alhaos 19.05.2026
BFS (Breadth-First Search) — это базовый алгоритм обхода графа в ширину, который поуровнево исследует все связанные вершины. Он начинает с выбранной точки и проверяет всех соседей, прежде чем. . .
|
[golang] Алгоритм «Хак Госпера»
alhaos 17.05.2026
Алгоритм «Хак Госпера»
Хак Госпера (Gosper's Hack) — алгоритм нахождения следующего по величине числа с тем же количеством установленных бит.
Придуман Биллом Госпером в 1970-х, опубликован в. . .
|
Рисование бинарного древа до 6-го колена на js, svg.
russiannick 17.05.2026
<svg width="335" height="240" viewBox="0 0 335 240" fill="#e5e1bb">
<style>
<!]>
</ style>
<g id="bush">
</ g>
</ svg>
function fn(){
let rost;/ / высота древа
let xx=165,yy=210,w=256;
|
|
FSharp: interface of module
DevAlt 16.05.2026
Интерфейс модуля F# позволяет управлять доступностью членов,
содержащихся в реализации модуля. По-умолчанию все члены модуля доступны:
module Foo
let x = 10
let boo () = printfn "boo"
. . .
|
Хитросплетение родственных связей пантеона греческих богов.
russiannick 14.05.2026
Однооконник, позволяющий узреть и изучить отдельных героев древней Греции.
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible". . .
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|