воскресенье, 16 мая 2010 г.

Компиляторы, интерпретаторы ...

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

Компиляторов много, и их больше, чем 2 или 3 типа, как многие думают (если верить книжке trustworthy compilers):
есть классические компиляторы, которые берут текст программы (написанный на нормальном человеческом высокоуровневом языке программирования, например C, C++, Pascal) и переводят те команды в машинный код, которые понимаются непосредственно железякой. Это нативное компилирование, самое мне родное и понятное, я с таких языков и с таких компиляторов начинал программировать :)
На втором месте - интерпретаторы. Вместо трансляции высокоуровнего кода в бинарник, они берут исходный код и начинают выполнять его по инструкциям языка, в итоге бинарник не рождается, и чтобы что-то исполнить, всегда нужен исходник, написанный на высокоуровневом языке. (Вообще говоря странно, интерпретатор - это не разновидность компилятора, это вообще другая штука по своей природе. Меня учили, что компилятор - это такая штучка, которая один язык программирования переводит в другой, это типа транслятор такой. Интерпретатор же - ленивая хрень, она ничего никуда не транслирует, а просто выполняет)
Следующий вид - кросскомпиляторы. Они берут сурс код и генерят бинарник для других устройств, например для телефона. (телефоны они тупые, они не понимают бинарников компа, поэтому к ним нужен особый подход и вот такие компиляторы создают команды, которые понятны даже телефонам. На месте телефонов может быть любой другой девайс, не понимающий бинарники компа, например какой-нибудь странный микропроцессор).
JIT компиляторы (just in time) - хитрющие компиляторы, которые работают в процессе исполнения программы и компилируют методы при первом их вызове, и при этом компилируют их в бинарный код текущей платформы. Такие компиляторы являются врожденной частью Java и .NET.
AOT компиляторы (ну-ка догадайтесь, как расшифровывается?) - это прекомпиляторы, которые все делают "правильно" и заранее компилируют платформенно независимый код в бинарный код текущей платформы. Зачем они это делают? Для повышения скорости исполнения. Впринципе, походу, это те же самые классические компиляторы.. Но вот решили в отдельный класс отнести. Ну ладно, пусть будет. АОТ так же используются в Java и .NET.
Конверторы - компиляторы, как раз в моём классическом понимании - переводящие один язык программирования в другой. Собственно классический компилятор - это частный случай конвертора, если я не ошибаюсь... Зачем было выводить его в отдельный класс, не понимаю, конвертор и конвертор, но раз товарищи ученые хотят - пусть будет 2 разных класса компиляторов.
Бинарные компиляторы - они прикольные. Они переводят бинарный код одной платформы в бинарный код другой платформы, при этом не требуют исходников на высокоуровневом языке.
Есть Graph compilers - какие-то суперновые компиляторы, зачем нужны и че делают я не понял)
Еще есть incremental compilers (тоже не понял зачем они нужны. Написано, что были популярны в 70ые, видимо до моих лет они не дожили. Ну и слава богу:) не буду забивать себе голову).

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

Языки бывают с разной типизацией, я знаю 4 из них: языки со статической типизацией, с динамической, со строгой и со слабой. А еще есть типизируемые языки, нетипизируемые, сильнотипизируемые и слаботипизируемые. Это упасть и не встать))) И вот мы плавно подходим к тому, что меня бесит и что я не понимаю.. Языки программирования. Зачем их так много придумали? Почему они такие сильно разные? Кроме тех 8 типов, языки еще можно разделить на компилируемые, интерпретируемые и скриптовые. И еще плагины существуют, которые ясности точно не приносяти еще больше все запутывают.

Мне всегда было интересно, почему это Java не совсем скриптовый язык? (или совсем не скриптовый?)) ) А вот Python - настоящий скриптовый язык. Что вообще такое скрипт? Я всегда считал, что это макрос. Просто последовательность действий, самая обычная. И почему же это на Джаве нельзя написать последовательность действий и обозвать то, что получится - скриптом? А C++ это тоже не скриптовый язык? Что же в C++ и Java такого особенного, что они не могут написать макрос? В общем куча непонятностей) Обо всем об этом в следующий раз.

среда, 12 мая 2010 г.

Apple vs. Flash

Начинаю новый блог, полностью посвещенный ИТ. Зачем? Не хочу перемешивать ИТ-ишные разговоры с обычными разговорами о бытовухе ) Этот блог скорее всего буду писать так же для себя в надежде на то, что это будет меня пинать под зад как можно чаще:) Типа.. "Damn dude, u r not advanced in this. Take that fucking book и учи матчасть!" Буду тут делиться впечатлениями по поводу чтения различных книжек, блогов, подкастов, новостей и т.д. Еще планирую рассуждать по поводу различных багов, кусков кода. Разбираться с чем-то новым, иногда будут посты уровня "bubble sort" или "select * from costumers where ..." )) в общем nothing special at all, посмотрю, что из этого выйдет. Комментарии приветствуются, с удовольствием обсужу любую тему, о которой я упомяну)

Let's rock:) Недавно Apple на официальном сайте опубликовал новость thoughts on flash , в которой объяснила, почему flash нет в iPhone и ему подобных продуктах. Я прочитал, даже проникся и даже поверил, что flash - жрет батарейку, не стабилен и не безопасен. Ну конееечно Стив Джобс не хочет, чтобы кто-то обходил App Store стороной (если флэш разрешить, то фактически я могу написать на нем приложение и продавать, не заливая его в app store. Как это? Я сам хз, как я понял, написав прогу на flash, можно сказать IDE "нука скомпилируй это для айфона", и, по аналогии как появляются бинарные файлы при знакомом мне компилировании, на выходе получится .ipa файл, который понимается айоном).

Так вот, несколькими днями позже(или даже в тот же день) глава Adobe тоже высказал свои мысли в адрес Apple (на сайте the Wall street journal видео есть. Прикольно газеты теперь в интернете сущесвтуют, по крайней мере буржуйские). "Ну началоось", - подумал я))

Флэш повсюду, куда ни зайди -- он везде. Вырубите флэш у себя в браузере, и многие сайты перестанут быть такими, какими вы привыкли их видеть. Поэтому мне было не совсем понятно, как эппл скажет "Мы не хотим флэш!". Очень смелое и наглое утверждение) Это как Google Chrome в своё время сказал "Так. Забудьте все, что было до Java 6. Мы не будем работать с этим старьем, мы поддерживаем только Java 6 Update 12 или выше". Ну прикиньте да?)) Дерзко и четко))
Но я уважаю то, что сделал гугл. До джавы 6 рантайм весил 16 метров, в джаве 6 появился java kernel, весящая 4 метра, и вместо 16 метров в память будет грузиться только 4 (если особо умный applet потребует специфические функции, kernel их подгрузит в процессе). Все работает быстрее там и легче) Может что-то еще, я не копал глубоко) В общем хром - это дополнительный пинок под жопу пользователям поставить последнюю джаву. Если будет много пользователей с последней джавой, будет больше апликейшинов, требующих последнюю джаву, и тем больше будет пользователей с последней джавой и т.д. Кароч Sun должна проставиться гуглу ))
Стив Джобс делает типа вроде как тоже шаг настречу HTML5, оставляя позади флэш. Но сейчас, вслед за Джобсом, любовь к HTML5 проявляют microsoft (прочитал на ixbt), и CBS переводит стрим видео из флэш в H.264 (да, я сам узнал об этом сайте сегодня))) посмотрел на нем интервью Evangeline Lilly (Кейт из Lost'а), занес сайт в bookmarks, буду смотреть на досуге=) ). Интересно, что будет дальше с Flash)

На самом деле у меня 2 различных мнения по поводу поддержки flash: с одной стороны, я сейчас ничего не знаю ни об objective c, ни про flash, поэтому: если бы flash был на айфоне, я бы непременно начал изучать его и пофиг вообще на все остальное: флэш популярен и работы флэш девелоперам хватает, а вместе с тем еще можно и эппликейшены клепать под айфон - вообще супер)) С другой стороны .. а что с другой стороны? С другой стороны objective c, с которым найти работу в Новосибирске сложно (её практически нет, если верить ngs.ru. Если кто знает более грамотный сайт для поиска работы тут - поделитесь:) ) .. В общем только сейчас понял, что на самом деле мне не выгодно, что iPhone и flash не дружат. Хотя еще часа 2 назад был уверен, что это cool, типа нафиг этот флэш вообще, не stable и не security enough он.. )

Вот пожалуй и все, о чем мне захотелось сегодня написать )