Pull to refresh
-24
Maxim Penzin@maxp

Пользователь

13
Subscribers
Send message
При чём здесь время компиляции?
Ну это уже чисто личные пристрастия.

Вот мне чуждо разрабатывать что-либо на PHP, однако я стараюсь не делать из своих предпочтений далеко идущих глобальных выводов :)
Какая-то сквозит безграничная уверенность в просто заоблачных скоростях магического Си :)

Может погоняемся?
У меня вот есть задачка простенькая, минут на 10-20 делов — посчитать частоты слов в текстовом файле (утф-8) и вывести 100 самых частых слов.

Я пишу на Питоне и Java, а вы на Си. Погладим на сколько ваша феррари будет быстрее, если поедет конечно :)
Python значительно более выразительный и логически выдержанный язык нежели PHP.
И в нём постарались избежать явно выраженных проблем с производительностью.
К примеру в Питоне различаются по внутреннему устройству, например,
tuple: (1,2,3,4,) и list: [1,2,3,4,] — первый immutable и поэтому иногда более эффективен.

В Питоне более эффективней, чем в ПХП реализован hash. Так как в ПХП хочешь не хочешь поддерживается последовательность ключей, а в Питоне есть варианты.

Еще одна интересная особенность — это генераторы, советую почитать про них, если действительно интересно могу найти ссылку на pdf. Только читать надо не поверхностно, а разбирать примеры. Иначе не понятно в чём прикол.

Простые примерчики:

[ (a,a*a) for a in (1,2,3,4) if a != 2 ]
результат [(1, 1), (3, 9), (4, 16)]
смысл в том, что конструктор списка выполняется в Си коде, в отличие от
общепринятого интерпретируемого for a in (1,2,3,4) {… }

а вот еще интересный момент (генератор)

i = ( (a,a*a) for a in (1,2,3,4) if a != 2 )

>>> i.next()
(1, 1)
>>> i.next()
(3, 9)
>>> i.next()
(4, 16)
>>>

Это тоже, что выше. НО! Генератор i хранит в себе стейт и начинает выполняться _только_ при первом next().
такого рода вещи позволяют записывать алгоритмы очень компактно и эффективно.
Зачем тогда приводить такие сравнения? Просто для красного словца?

С реалиями они никак не соотносятся.
Сами библиотеки и есть на Си, в том-то и прикол.
Очень удобно бывает использовать гибкость Питона совместно с числодробилками.
Вы когда-нибудь работали с библиотеками для численных методов?
Рекомендую ознакомиться с насколько серьезно и эффективно подходят люди к решению численных задач с помощью Python'а

numpy.scipy.org/
numpy.scipy.org/numpydoc/numdoc.htm
www.scipy.org/

возможно тогда байндинги на NVIDIA не покажутся такими забавными.
Каким опытом обучения, кроме личного, подкреплена «постоянная фраза» насчет обучения на Си?

По моему опыту как раз начавших с Си очень сложно потом сдвинуть с битов и указателей на что-либо более концептуальное. Тут был упомянут Си++, расскажите а на каком уровне Вы владете STL? А как Вы относитесь к таким вещам у обучении, как блоксхемы?
Если рассматривать идеальную ситуацию с идеальными дизайнерами и верстальшиками готовыми всё заново переделать «чтоб было кошерно», то это всё хорошо и правильно.

Но в реалиях всё далеко не всегда так здорово. В случае с бордером «сделайте мне вот эту табличку повиднее» говорит вовсе не дизайнер, а заказчик. Дизайнер в это время может вообще уже заниматься другими делами. Еще тот же заказчик может попросить дополнительно покрасить определенные ячейки разных таблиц в разные цвета.
И здесь получается выбор — либо звать дизайнера, чтобы он переписал все классы этих таблиц и везде добавил по три варианта цветов, а потом программеры воткнули бы эти новые классы в логику.
Либо просто сделать monkey patch и добавить в логике доп.классы bgclr1,bgclr2,bgclr3
к нужным div/td/… длолго не парясь.
Про прототипирование, когда вообще дизайнер может привлекаться по минимуму я и не говорю.

Всё началось с чего? С того что я написал вопрос — «кому должен?».
Это повод задуматься о том, что абстрактная чистота кода сама по себе мало кому интересна в реальной жизни. Но интересен результат, желательно быстрый и недорогой.
Я реально понимаю, что таким способом очень во многих случаях можно получать быстрый и пригодный результат. Еще я понимаю, что композиция классов действительно отличается от прямого перечисления атрибутов. А Вы?

Пример, кстати, может быть не такой тривиальный и вовсе не с прямым соответствием параметров.

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

В том сообщении, на которое я отвечал написано:
«Вот обьясните чем лучше это class=«clear-both» чем style=«clear:both».»

Я пояснил, чем лучше.
Другими словами тем, что в классах можно как раз семантически отобразить и сгруппировать некоторые стилевые особенности, как указано выше.
Алгоритм реализован в каждом браузере, Гугль так же поступает с большим количеством картинок.

В нужном месте задаётся блок заданного размера, потом в него подставляется бэкграунд со смещением. Смещение в данном случае вычисляется за две арифметических операции.
Сравним
table class=«amar w80 brd1»
с
table style=«margin-left: auto; margin-right: auto; width: 80%; border: 1px solid #ccc;»
Кому они должны?
Я вполне нормально вписываю два-три вспомогательных класса и всё.

Какие-то доли процента производительности здесь погоды не делают.
Очень похожая ситуация.
Gentoo на настоящий момент один из лучших и наиболее обновляемых дистрибутов.
Не то чтобы очень знатная, но просто в один прекрасный момент уже не хочется разбираться «как там нынче делается этот initrd...». Прелесть Gentoo как раз и заключается в том, что можно с одной стороны не вдаваться во все тонкости сборки различных пакетов с кучей параметров configure, но с другой стороны всегда иметь возможность прописать нужные USE.
Стоит заметить, что Gentoo это не Слакварь, и ядро пересобирать лучше при помощи genkernel.

Я сам долгое время по старинке пользовал make menuconfig и всё прочее,
но не то initrd не то еще какая причина в своё время побудила меня почитать man genkernel и less /etc/genkernel.conf
Тут вопрос даже не в идеальности сисадмина.
Но если вдруг в процессе эксплуатации возникают вопросы насчёт макропрограммирования клавиатуры, то это явно повод задуматься насчёт организации процесса в целом.

И копать надо вовсе не в сторону офигенно мощной переключалки монитор/клава/мышь :)
Познавать окружающий мир надо последовательно :)

Рассмотрим бездисковую загрузку без наворотов:

В какой-то момент после включения питания загружающийся комп запускает PXE,
дальше оно ломится по сети опрашивая dhcp серверы и выбирает наиболее понравившийся.
dhcp сервер в этот момент уже знает MAC адрес машины и еще некоторую информацию про неё, которую сообщает PXE.

На этом этапе dhcp уже может выбрать нужный вариант загрузочного имиджа и указать на него.
Потом PXE грузит указанный имидж и передаёт ему управление.

Если мы имеем дело с линуксовым имиджем, то на нём уже присутствует некий стартовый скрипт, который может, например, почекать диск, опросить кого-надо на предмет чего делать дальше, запустить fdisk,mkfs,cpio или просто выставить какой-нибудь рутовый пароль и запустить sshd.

Каждый из описанных этапов может сильно различаться, но в целом описанное очень похоже на правду. Тем более, что примерно такая схема у меня вполне нормально работала.

Information

Rating
Does not participate
Location
Иркутск, Иркутская обл., Россия
Date of birth
Registered
Activity

Specialization

Бэкенд разработчик, Фулстек разработчик
Ведущий
Python
PostgreSQL
Linux
Java
MongoDB
Redis