5 интересных фактов об IT. А Вы знали ?
CAFEBABE в JAVA, магическая математика в JS и другие особенности IT мира
1. Магическое слово в JAVA: CAFEBABE
Компилятор превращает исходный код Java в байт-код и сохраняет его в файле .class, который затем исполняется JVM, а знали ли Вы, что все классы Java начинаются со слова CAFEBABE? Давайте разберемся, что же это за магическое слово и почему именно оно используется в качестве первых 4-ох байт любого Java класса.
Если Вы мне не верите, проверьте это сами. В любом редакторе, который Вам нравится, напишите простой класс, например:
public class HelloWorld{
public static void main(String[] args){
System.out.println("Hello, world!");
}
}
После компиляции посмотрите на HelloWorld.class в hex:
$ javac HelloWorld.java
$ xxd HelloWorld.class
0000: cafe babe 0000 002e 001a 0a00 0600 0c09 ................
0010: 000d 000e 0800 0f0a 0010 0011 0700 1207 ................
0020: 0013 0100 063c 696e 6974 3e01 0003 2829 ........()
0030: 5601 0004 436f 6465 0100 046d 6169 6e01 V...Code...main.
0040: 0016 285b 4c6a 6176 612f 6c61 6e67 2f53 ..([Ljava/lang/S
0050: 7472 696e 673b 2956 0c00 0700 0807 0014 tring;)V........
0060: 0c00 1500 1601 000d 4865 6c6c 6f2c 2057 ........Hello, W
0070: 6f72 6c64 2107 0017 0c00 1800 1901 0005 orld!...........
0080: 4865 6c6c 6f01 0010 6a61 7661 2f6c 616e Hello...java/lan
0090: 672f 4f62 6a65 6374 0100 106a 6176 612f g/Object...java/
00a0: 6c61 6e67 2f53 7973 7465 6d01 0003 6f75 lang/System...ou
Вы заметили часть CAFE BABE? Если вы откроете любой файл Java .class с помощью шестнадцатеричного редактора — найдете это волшебное слово в начале.
На самом деле это и не слово вовсе, а шестнадцатеричное число, которое составляет 3405691582 в десятичном виде.
(CAFEBABE)16 = (3405691582)10
А как собственно это число появилось в каждом классе, нам сможет рассказать Джеймс Гослинг, автор объектно-ориентированного и кросс-платформенного языка программирования Java:
«Мы обычно ходили на обед в место под названием Михайловская аллея. Согласно местной легенде, в далеком прошлом там выступали Grateful Dead до того как стали знаменитыми. Когда вокалист группы Джерри Гарсия умер, они установили маленький буддийский храм. В то время мы стали называть кафе «Кафе Мертвым» (Cafe Dead), а со временем обратили внимание, что «Cafe Dead» по совместительству еще и HEX номер. Мне понравилось это магическое число, таким образом, пересматривая некоторый код формата файла, я решил использовать CAFEDEAD для формата постоянного объектного файла. После мне нужно было еще одно такое слово для классов, я опять же решил использовать «CAFE» (это казалось хорошей темой), и после некоторых поисков я нашел «BABE», подходившее мне в качестве числа. Таким образом, CAFEBABE стал форматом файла класса, а CAFEDEAD был форматом файла постоянного объекта. Со временем файл постоянных объектов исчез, а вместе с ним и ушло использование CAFEDEAD — его в конечном итоге заменили RMI.»
2. Магия чисел в JAVASCRIPT: 0.1 + 0.2 !== 0.3
0.1 + 0.2 !== 0.3 —
Эта странность встречается не только в JavaScript, а является широко распространенной проблемой всей компьютерной науки. Вывод будет такой — 0.30000000000000004.
Эта особенность называется компьютерной неточностью. При работе с числами, они переводятся в их двоичный эквивалент и именно здесь кроется начало проблемы, так как — 0.1 не 0.1 в двоичном эквиваленте, а близкое к нему значение.
По той же самой причине происходят и увеличения чисел:
console.log(999999999999999) // -> 999999999999999
console.log(9999999999999999) // -> 10000000000000000
console.log(10000000000000000) // -> 10000000000000000
console.log(10000000000000000 + 1) // -> 10000000000000000
console.log(10000000000000000 + 1.1) // -> 10000000000000002
3. Plankalkül — первый язык программирования высокого уровня.
Plankalkül — первый высокоуровневый язык программирования создан немецким инженером Конрадом Цузе в в 1943—1945 г.г., а опубликован только в 1948 году. В переводе на русский его название означает «планирующее исчисление». Во время Второй Мировой Войны Цузе работал в отрыве от учёных других стран, совершенно самостоятельно и за это время он создал не только язык программирования, но и написал на нём 49 страниц программ для оценки шахматных позиций.
На сегодняшний день в мире около 690 языков программирования.
4. Запрет на создание папки CON
Вы можете назвать папку или файл в Windows почти как угодно. Почему «почти», спросите ВЫ? Попробуйте назвать папку «con».
Суть дела кроется в далеком детстве Билл Гейтса, когда он учился в младших классах маленькому Биллу тяжело было найти общий язык с одноклассниками. Усложняло его пребывание еще и то, что одаренный мальчик хорошо учился. По этим причинам его часто дразнили и придумывали разные клички, одной из которых была «con», что означало — «ботаник». Впоследствии Билл возненавидел эту кличку и при проектировании OS Windows решил добавить это слово в исключение. Но правда это или выдумка до сих пор остается загадкой.
При проектировании MS-DOS Биллом были заложены названия папок, которые можно было создавать только один раз и использовались они для нужд системы. Таким образом помимо папки CON нельзя создавать еще ряд папок с названиями: PRN, NUL, AUX, LPT0, LPT1, COM1, COM2.
5. Магические сложения в JAVASCRIPT
Как вы думаете, что получится если попробовать сложить такие значения:
'b' + 'a' + + 'a' + 'a'
// "baNaNa"
А знаете почему?
Выражение преобразуется в
'b' + 'a' + (+ 'a') + 'a'
где + 'a'
вернет NaN
.
А как вы думаете, что получится в результате:
(![]+[])[+[]]+(![]+[])[+!+[]]+([![]]+[][[]])[+!+[]+[+[]]]+(![]+[])[!+[]+!+[]]
Вы быть может не поверите, но в результате получится fail
.
И так перейдем к объяснениям: повторяющаяся часть (![]+[])
вернет строку 'false'
, так как ![] = false
, а [+[]]
— это ни что иное как [0]
, так как +[]
— преобразуется в число, таким образом мы берем первый элемент строки ('false'[0]
). Мы разобрались, что +[] = 0
, тогда !+[] = true
, +!+[] = 1
, а все (![]+[])[+!+[]]
это 'false'[1]
. Результатом ([![]]+[][[]])
является строка "falseundefined"
([![]] = [false]
, [][[]] = undefined)
, a [+!+[]+[+[]]] = 10
, тогда "falseundefined"[10] = "i"
. Последняя буква (![]+[])[!+[]+!+[]]
— это "false"[2]
.
5. От скрипта для сбора статистики просмотров до языка программирования PHP
История, на сей день широко используемого языка программирования PHP, начинается в далеком 1994 году, когда Расмус Лердорф хотел выяснить кто и как часто читает его резюме. Он рассылал его в виде ссылки на html-страницу, в код которой был помещен небольшой скрипт на Perl, собиравший статистику о посещениях. Расмус назвал этот скрипт «Personal Home Page Tools» так как код подключался именно на Home page, что сокращенно звучало как «PHP Tools». Другие разработчики заинтересовались его изобретением и через некоторое время Расмус выложил свой код для всеобщего использования и усовершенствования.
Во время работы в университете Расмус переписал PHP на C и усовершенствовал. Теперь он имел возможности работать с формами на сайте, получать из них данные, обрабатывать и отправлять другим системам. В конце 1996 года PHP уже использовался не менее чем на 15 000 web-сайтов во всем мире, а в середине 1997 года это число превысило 50 000.
Источники: Progopedia, Habr, Fulltienich, php.net, dzone