Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Я привел не частный случай, а наиболее общий.
In computing, UTF-16 is a variable-length character encoding for Unicode
тот же Си компилируется через несколько виртуальных машин
Интерпретаторы — эти языки представляют собой высшую ступень эволюции…
я бы хотел отметить 3 темы, которые… могут дать существенный прирост производительности
Эта заметка рассчитана на молодых программистов, которые уже какое-то время используют или только начинают использовать в работе интерпретируемые языки программирования, но пока еще не изучали принцип работы самого языка.
Поэтому очевидно, что слухи о Java, которая работает быстрее C++, заметно преувеличены.
Javascript, PHP, Perl, Python, Java, C#, Basic,… (как видно все они одного семейства — интерпретаторы).
Требовался программист на язык “X”, купили книгу “X за 2 недели” и через 3 недели – мы уже пишем какой-то проект на “X”. А спустя несколько тысяч строк кода или после того, как база данных обросла реальными данными, проект начинает нещадно тормозить.
Для начала давайте разберемся в классах языков программирования. Я бы их разбил на 3 группы
Если вы умеете программировать на ассемблере, значит, вы знаете все нюансы работы железа
Интерпретаторы — эти языки представляют собой высшую ступень эволюции: Javascript, PHP, Perl, Python, Java, C#, Basic…
Если под Linux есть функция “Z”, а под Windows ее нет, то вам придётся либо обойтись без нее, либо ваша программа будет работать только под Linux (например, функции работы с файловой системой).
Поэтому очевидно, что слухи о Java, которая работает быстрее C++, заметно преувеличены. И это останется так, пока процессоры не научатся понимать байт-код Java.
А вот в интерпретаторах слепое погружение в сторонние абстрактные функции пагубно.
В интерпретируемых языках работа со строками стала настолько прозрачной, что тот факт, что это одни из самых ресурсо-затратных операций, абсолютно не очевиден.
Java, C#, Visual Basic (.NET-версии) — не интерпретируемые. Для Javascript существуют JIT-компиляторы. Бред.
Незнание среды тут, как правило, не при чем. Люди, читавшие только «Ххх за N дней для профи», обычно натыкаются на проблему «у меня везде быдлокод и быдлоархитектура, я не знаю как мне добавить еще функционала, не сломав что-нибудь». До того, чтобы упереться в проблеммы производительности из-за интерпретации, у них дело не доходит.
Из знания ассемблера не вытекает знание тонкостей работы процессора. Для этого нужно знать, как работает кэш, конвейер, что такое суперскалярность, в чем разница между скалярной и векторной обработкой, что такое аппаратная многопоточность… Список, разумеется, далеко не полный.
Интересно, как же люди пишут кроссплатформенные приложения (например, игры) под разные системы?
Такие процессоры, вообще-то, существуют.
Предлагаете не использовать сторонние библиотеки, а все писать самостоятельно? Удачи.
Про работу со строками были комментарии выше. Отмечу лишь, что из известных мне языков ни один не использует UTF-8 в качестве внутреннего представления строк.
Узкие места интерпретаторов