Задача, естественно, может решаться различными способами. И если препод сопутствует этому развитию, то это хорошо (так, к пример, я сдавал многие лабы на JS вместо C++ — при условии, что мы сдаем не сам С++, а решаем отстраненные задачи).
> Но хорош ли код?
А что Вы конкретно под этим понимаете? Соответствие каким-то известным алгоритмам? В данном решении, во-первых, используется фреймворк Django (т.е. это решение даже не на Питоне, а с использованием библиотеке для Питона). Во-вторых, человек, вполне неплохо знает сам Питон (код построен согласно рекомендациям) и в частности Джанго (используется вынос своих полей форм, своих виджетов и т.д.). Поэтому, человек достиг поставленной цели и решил задачу (и достаточно хорошо, пусть и при помощи тяжелого фреймворка) => зачет в любом случае.
> да я то спокоен, это вы все над своей кармой трясетесь
:D да Вы не уйметесь? =) Я правильно понимаю, что Вы продолжаете считать, что Вы правы, а я не прав? (черт с ней с кармой — она здесь не причем, тут принципиальный вопрос)
Есть желание подискутировать, насколько Вы профи (например, в Perl) и продемонстрировать глубину Ваших знаний (например, в JS или Python)? При этом, если Вы начнете что-то спрашивать, я позволю себе пафосно-саркастически, играя Вас, заявить: «приехали… профи спрашивает...».
> знание языков программирования, вообще, не столь существенно, главное уметь найти суть к решению проблемы
Ну вот это уже другой разговор, вот здесь могу руку пожать.
Только прошу, не выискивайте в моем посте агрессию — ни в коем случае; меня просто возмутил подход к передаче знаний и несправедливое его упрекание. То, что человек спрашивает, ищет знаний, это, действительно, намного лучше, чем, если бы он запретил использовать альтернативные подходы в виду своего незнания и нежелания знать.
Да и вообще, говоря, «решить на листке бумаге», я имел в виду непривязку к синтаксису. А какой подход используется при этом — функциональный или императивный — уже не столь важно (оба можно рассказывать человеческим языком, не привязываясь к конкретным синтаксисам). Просто Вас сбило с толку слово «алгоритмический», что подразумевает императивность на высоком уровне.
Я знаю. А вообще, декларативная (функциональная) сущность — тоже понятие абстрагирование, — на самом низком уровне она сводится все равно к императивной последовательности действий. Это если спуститься вниз до выполнения команд. А вообще, да — если Вы оцениваете функциональные синтаксисы и подходы, то здесь нужны более детальные объяснения и листка бумаги может быть мало (а может быть и нет).
> для того, чтобы разобрать несложный код программы (тем более если знать, что она делает) не обязательно знать сам язык
ну вот с этого и надо был начинать, а не «приехали… преподаватели просят оценить работу студентов». Вообще, супер-абстрактно, есть только один язык — алгоритмически, эту задачу можно было бы решить на листке бумаги, и, если ход мысли верный, поставить 5.
> в-третьх, питон — это не перл или лисп, на нем исходный код довольно просто читается
Опять скатились. При чем здесь Ваше личное не понимание Лиспа или Перла?
Т.е. вы просто выпендриваетесь и считаете, что пишите что-то адекватное? (я говорю прямо — одним из минусов, который заслужил этот коммент, бы мой).
Процесс передачи знаний — это благородный процесс, при этом можно рассуждать вообще только в теории (не привязываясь ни к PHP, ни к Python'у (а в данном случае — к Django, а не к Python'у)).
> без возможности разобрать пару строк на питоне из собственно-заданной лабы
Перечислите, пожалуйста, какие языки вы знаете профессионально. (я замечу еще раз — в лабе используется тяжелый фреймворк, а не Python)
> А та же самая фигня что и в спекулятивном исполнении
Ага, при этом эта «работа над ошибками» (если предсказание было неверным) займет много больше времени. А какой большой алгоритм за этим стоит? При спекулятивном исполнении команд, команды загрузки данных выполняются первыми (далее, в местах, где эти данные используются — сначала идет проверка, что данные не повредились (может, какая-то инструкция записала данные поверх) — это тоже время, и если данные повредились, производится «работа над ошибками» по восстановлению данных). А здесь что?
> Делает.… В зависимости от результатов профайлера.
А реальные примеры есть с тестами и замерами? Просто реально интересно. Теоретически-то оно хорошо, и для интерпретируемых языков, само-собой, несет увеличение производительности (пусть памяти больше жрет, пусть тратит время каждый раз на компиляцию кусков байт-кода и отсеиванию ненужных). Хочется, действительно, посмотреть, что интерпретируемый язык с JIT'ом может обгонять скомпилированный код.
> Когда несколько раз вызывается одна и та же функция из одного места в программе JIT может решить что она и дальше так будет вызываться
что значит «может решить»? А если функция 99 раз вызвалась так, а вот на сотый — по-другому? Не правильно. JIT, анализирует какой-то главный условный блок, а потом может удалить все остальные блоки кода, завязанные на это условие (я так понимаю). Т.е. однозначное детерминированы участки. А решения «авось будет, авось нет» — такого JIT не делает.
> Тут важно выдержать баланс между подстройкой под внешнюю среду (ускоряющей программу) и затратами времени на эту подстройку (замедляющими программу).
я забыл написать самое важное действие — дальше джойстик подключается во время работы программы (с уже выкинутыми кусками кода для работы с джойстиком) и — Дальше нажимается кнопка
А, да, это — да. А на каком этапе (какой большой ИИ заложен в различные версии JIT?) определяется, что модуль с джойстиком можно выбросить из кода? Для подобных статичных условий есть известные препроцессорные директивы, aka
#ifdef CONFIG_TEST
int a = 10;
#endif
При этом в код никогда не попадет «a», если CONFIG_TEST не задан.
А в случае с джойстиком? Допустим, есть кнопка, по нажатию на которую, осуществляется то или иное действие (в зависимости от присутствия джойстика). Джойстик не подключен, компилируется программа, из нее выбрасывается часть кода с if'ом для джойстика. Дальше нажимается кнопка — что должно произойти? Выдаться сообщение — «JIT выкинул эту часть кода»? Или начнется тотальная перекомпиляция?
Я понимаю, зачем нужен JIT и что он делает; мне интересно, на каком моменте определяется — когда выбрасывать (по сути — сделать статичными if'ы как в случае с #ifdef) тот или иной кусок, а когда — восстанавливать.
class second_form VS. (правильно, согласно style guide'у Python'a) class SecondForm
но это все мелочи; так — к слову.
Задача, естественно, может решаться различными способами. И если препод сопутствует этому развитию, то это хорошо (так, к пример, я сдавал многие лабы на JS вместо C++ — при условии, что мы сдаем не сам С++, а решаем отстраненные задачи).
> Но хорош ли код?
А что Вы конкретно под этим понимаете? Соответствие каким-то известным алгоритмам? В данном решении, во-первых, используется фреймворк Django (т.е. это решение даже не на Питоне, а с использованием библиотеке для Питона). Во-вторых, человек, вполне неплохо знает сам Питон (код построен согласно рекомендациям) и в частности Джанго (используется вынос своих полей форм, своих виджетов и т.д.). Поэтому, человек достиг поставленной цели и решил задачу (и достаточно хорошо, пусть и при помощи тяжелого фреймворка) => зачет в любом случае.
:D да Вы не уйметесь? =) Я правильно понимаю, что Вы продолжаете считать, что Вы правы, а я не прав? (черт с ней с кармой — она здесь не причем, тут принципиальный вопрос)
Опять? Ответ здесь.
> ну php, js, python, c++, perl
Есть желание подискутировать, насколько Вы профи (например, в Perl) и продемонстрировать глубину Ваших знаний (например, в JS или Python)? При этом, если Вы начнете что-то спрашивать, я позволю себе пафосно-саркастически, играя Вас, заявить: «приехали… профи спрашивает...».
> знание языков программирования, вообще, не столь существенно, главное уметь найти суть к решению проблемы
Ну вот это уже другой разговор, вот здесь могу руку пожать.
Вы беретесь судить. Но соответствуете ли Вы сами тому уровню, с высоты которого заявляете «приехали… преподаватели просят оценить работу студентов»?
.ps: и то, что Вы мне минусанули карму — подтверждение того, что Вы не правы.
ну вот с этого и надо был начинать, а не «приехали… преподаватели просят оценить работу студентов». Вообще, супер-абстрактно, есть только один язык — алгоритмически, эту задачу можно было бы решить на листке бумаги, и, если ход мысли верный, поставить 5.
> в-третьх, питон — это не перл или лисп, на нем исходный код довольно просто читается
Опять скатились. При чем здесь Ваше личное не понимание Лиспа или Перла?
Процесс передачи знаний — это благородный процесс, при этом можно рассуждать вообще только в теории (не привязываясь ни к PHP, ни к Python'у (а в данном случае — к Django, а не к Python'у)).
> без возможности разобрать пару строк на питоне из собственно-заданной лабы
Перечислите, пожалуйста, какие языки вы знаете профессионально. (я замечу еще раз — в лабе используется тяжелый фреймворк, а не Python)
Да, сам JIT должен быть при этом очень грамотно спроектирован (с отличным предсказанием), тогда, возможно, будет чаще.
> но таква вот объективная истина на сегодня… посмотрим как оно дальше будет…
Посмотрим; anyway, спасибо за инфу ;)
Ага, при этом эта «работа над ошибками» (если предсказание было неверным) займет много больше времени. А какой большой алгоритм за этим стоит? При спекулятивном исполнении команд, команды загрузки данных выполняются первыми (далее, в местах, где эти данные используются — сначала идет проверка, что данные не повредились (может, какая-то инструкция записала данные поверх) — это тоже время, и если данные повредились, производится «работа над ошибками» по восстановлению данных). А здесь что?
> Делает.… В зависимости от результатов профайлера.
Т.е. JIT опирается только на профайлер?
что значит «может решить»? А если функция 99 раз вызвалась так, а вот на сотый — по-другому? Не правильно. JIT, анализирует какой-то главный условный блок, а потом может удалить все остальные блоки кода, завязанные на это условие (я так понимаю). Т.е. однозначное детерминированы участки. А решения «авось будет, авось нет» — такого JIT не делает.
> Тут важно выдержать баланс между подстройкой под внешнюю среду (ускоряющей программу) и затратами времени на эту подстройку (замедляющими программу).
Ну вот это точно.
При этом в код никогда не попадет «a», если CONFIG_TEST не задан.
А в случае с джойстиком? Допустим, есть кнопка, по нажатию на которую, осуществляется то или иное действие (в зависимости от присутствия джойстика). Джойстик не подключен, компилируется программа, из нее выбрасывается часть кода с if'ом для джойстика. Дальше нажимается кнопка — что должно произойти? Выдаться сообщение — «JIT выкинул эту часть кода»? Или начнется тотальная перекомпиляция?
Я понимаю, зачем нужен JIT и что он делает; мне интересно, на каком моменте определяется — когда выбрасывать (по сути — сделать статичными if'ы как в случае с #ifdef) тот или иной кусок, а когда — восстанавливать.