Today there is a profusion of computer languages targeted at different activities. It's important to choose the right one. A lot of programmers love Python because it's so fast to implement stuff, but it can be a pain to use to create a simple website. PHP is the most popular choice for implementing active content in a website. And it's rather obvious once you dig into it. As you create your web page in HTML, PHP code is very easy to stick into the HTML, such that when the page is rendered, the code is run.
When I first took this job of leading our scripting languages area, the Reality Moment struck when I had my first real look at the challenges of dynamic languages. For example, if you compare two strings in a program, we have some new instructions in the processor which can make these go very fast. But unfortunately, if you compare two strings in PHP, you first need to determine if the strings could be interpreted as numbers. If so, you need to treat them as numbers.
My current job is to lead our company's work on dynamic server languages, such as performance optimization and feature enabling. Besides PHP and HHVM, we want to improve Python. There is a huge amount of Python code in use out there, for example running OpenStack, Swift, DropBox and many others. What I didn't realize when I took the job was that much of this use is in a "dead" language.
In interpreted languages, it just takes longer to get stuff done - I earlier gave the example where the Python source code a = b + c would result in a BINARY_ADD byte code which takes 78 machine instructions to do the add, but it's a single native ADD instruction if run in compiled language like C or C++. How can we speed this up? Or as the performance expert would say, how do I decrease pathlength while keeping CPI in check? There is one common short cut around this traffic jam of interpreted languages. If you were going to run this line of code repeatedly, say in a loop, why not translate it into the super-efficient machine code version?
A traditional compiler translates a high-level computer program into machine code for the CPU you want to run it on. An interpreted language translates a high-level language into the machine code for some imaginary CPU. For historical reasons, this imaginary CPU is called a "virtual machine" and its instructions are called "byte code." One advantage of this approach is development speed: creating this byte code for an imaginary CPU is usually much faster than creating machine code for a real CPU. It's also more portable: that byte code can in theory run on a wide variety of machines. So a developer can write high-level code and debug it rapidly, rather than waiting for a long recompile.
The core components of the Internet get updated constantly. Every time the source changes, the health and performance can change. A single source code change can fail to build, can break compatibility with existing code and can change the performance anywhere from a fraction of a percent up to 10% or more on major customer workloads. We're trying to read the pulse of our core components (Python, PHP, HHVM) every day. We call this our "0-day Lab". Here's how it works:
Intel® for its part invests countless hours and billions of transistors to add features in our silicon products which will speed up people's lives. If only they knew how to take advantage of it! Part of our job in dynamic languages is what I call "putting the cookies on the bottom shelf". Make this advanced technology easily consumable, and show you the value of it so you can be sure to use it.
The server world has really embraced Python in a big way. For example, the OpenStack project is a very popular Infrastructure as a Service offering, and most of it is written in Python. This makes Python a leader for Software Defined Infrastructure (SDI), Software Defined Storage (SDS) and Software Defined Networking (SDN).