Archive for the ‘Programming languages’ Category
Go was created in 2007 at Google as an experimental project. It was designed to be a fun language and at the same time it is productive, practical, expressive and powerful. Google Go can be considered the result of a rather conservative language evolution from languages such as C and C++.
Recently, there have been criticisms about the value of using Node.js in a high-performance, networked application environment, and some developers have moved to the Go language. Not only developers but also some well-known companies, such as Google, DropBox, Docker, DigitalOcean and more have picked up Go for some of their projects.
Certainly, Node.js is still used by a much wider audience, has more modules, is easier to use and isn’t going anywhere anytime soon. However, Go is gaining more and more popularity. In this article we will take a look at the differences between Node.js and Go to reveal the strengths and weaknesses of each environment.
Due to JS’s dynamically-typed nature Node cannot reach the raw performance of CPU or memory bound tasks that Go can achieve in many tests. Go is about 3 times faster and more lightweight than Node.js in a production environment. Not to say that Node.js is slow, it’s fast enough for most use cases, but when you do hit a limit, Go can still go a long way.
One of the language’s peculiarities is the presence of goroutines, functions that can be executed concurrently with one another.
These can be launched simply by using a keyword. Go runtime contains a scheduler that coordinates the execution of an arbitrary number of goroutines on an arbitrary number of system threads (the M:N model). In this way it is possible to carry out rapid context switches in order to take advantage of all CPU cores. So, in a hypothetical web application written in Go a single process will be able to continue serving requests even if one of these is trying to execute a blocked operation.
Ease of use
Node.js is a much simpler platform to use, especially if you are already a JS developer. For Go you will need to learn some new programming concepts, such as: coroutines, channels, strict typing (with compilation), interfaces, structs, pointers, and some other differences.
Both platforms have pretty active and growing ecosystems, but as Node.js has been around much longer and certainly it has a broader community of users and more tools that make certain software projects a lot easier and/or cheaper to implement.
Go is a younger language, however, it dynamically develops: the number of standard Go packages is growing steadily, currently at over 100, and the Go community packages can be searched easily.
In conclusion, I’d like to say that there is no ideal language/framework/tool that could be used by everyone otherwise there would be only one programming language and there wouldn’t be such debates as Go vs Node.js:) Every language is tailored to be used for specific use cases. But we need to admit that there are some things Go performs better in, at the same time it lacks some characteristics that Node.js provides.
And what advantages and disadvantages of using Node.js and Go have you come across?
Business Development Manager
Professional Software Development
We see this “Is Java out of business?” question pop up year after year. They say that Java is the least feature-rich language of the popular languages on the JVM and the slowest to move on new features in the last decade. There are also people who believe that because so many new JVM languages are being invented is proof that the Java language is lacking and that Java is no longer meeting the needs of many developers. And yet, by all external markers, Java is alive, well, and growing.
Here are several proofs for it:
1. TIOBE ranked Java as its top language of 2015 currently shows it enjoying 5% growth in use since 2014, more than any other programming language.
2. RedMonk has recently published the latest edition of its bi-annual list of the top programming languages. Compiled with the help of data obtained from GitHub and StackOverflow, this list tells us about the usage and discussion of a language on the web. Just like the previous years Java is among the top of the programming languages.
3. Further, the PYPL Index, which ranks languages based on how often language tutorials are searched on Google, shows Java clearly out in front with 23.9% of the total search volume.
Since Java first appeared it has gained enormous popularity. Its rapid ascension and wide acceptance can be traced to its design and programming features, particularly in its promise that you can write a program once, and run it anywhere. Java was chosen as the programming language for network computers (NC) and has been perceived as a universal front end for the enterprise database. As stated in Java language white paper by Sun Microsystems: “Java is a simple, object-oriented, distributed, interpreted, robust, secure, architecture neutral, portable, multithreaded, and dynamic.”
So here are the most common and significant advantages of Java that helped it to take its high position in a quite competitive environment of programming languages:
- Java is easy to learn.
Java was designed to be easy to use and is therefore easy to write, compile, debug, and learn than other programming languages.
- Java is platform-independent.
One of the most significant advantages of Java is its ability to move easily from one computer system to another. The ability to run the same program on many different systems is crucial to World Wide Web software, and Java succeeds at this by being platform-independent at both the source and binary levels.
- Java is secure.
Java considers security as part of its design. The Java language, compiler, interpreter, and runtime environment were each developed with security in mind.
- Java is robust.
Robust means reliability. Java puts a lot of emphasis on early checking for possible errors, as Java compilers are able to detect many problems that would first show up during execution time in other languages.
- Java is multithreaded.
Multithreaded is the capability for a program to perform several tasks simultaneously within a program. In Java, multithreaded programming has been smoothly integrated into it, while in other languages, operating system-specific procedures have to be called in order to enable multithreading.
Nonetheless things changed since the time when Java was created. In the recent years, many important languages have appeared and left an impact on the technology world. Due to their simplicity and user-friendliness, they have managed to surpass the more established languages. So we tried to make a list of reasons why Java is going to stay on the grind in the nearest future:
1. Java is time-proved.
You generally need a strong reason to switch from a language you’re currently using: it requires time to practice and learn new languages, and you have to be confident that the language you’re considering switching to will be supported in the long term. Nobody wants to build software in a language that will be obsolete in five years’ time.
2. JVM and the Java Ecosystem.
The Java Virtual Machine, or JVM. compiles programs into bytecode, which is then interpreted and run by the JVM. Because the JVM sits above your specific hardware and OS, it allows Java to be run on anything, a Windows machine, a Mac, or an obscure some flavor of Linux.
The big advantage granted by the JVM is in this increased compatibility and the stability it affords. Because your application runs in the VM instead of directly on your hardware, you can program said application once and trust that it is executable on every device with a Java VM implementation. This principle is the basis for Java’s core messaging: “Write once, run everywhere.” And it makes Java applications very resilient to underlying changes in the environment.
3. Java and the Internet of Things.
“I really think Java’s future is in IoT. I’d like to see Oracle and partners focused on a complete end-to-end storage solution for Java, from devices through gateways to enterprise back-ends. Building that story and making a success of it will help cement the next 20 years for Java. Not only is that a massive opportunity for the industry, but also one I think Java can do quite well,” said Mike Milinkovich, Executive Director of the Eclipse Foundation.
Oracle agrees. Per VP of Development Georges Saab, “Java is an excellent tech for IoT. Many of the challenges in IoT are many of the challenges of desktop and client Java helped address in the 1990s. You have many different hardware environments out there. You want to have your developers look at any part of the system, understand it and move on. Java is one of the few technologies out there that lets you do that.”
Thus, Java might have its detractors, and some of their arguments might even be reasonable. Nonetheless Java has evolved a lot since its inception, holds the lead in many areas of software development and has more prospects for the future. So, in our opinion, its survivability is not in doubt.
And what do you think? Is Java going to become one of the dead languages? Or it has all chances to survive? Feel free to share your thoughts in comments below!
Business Development Manager
Professional Software Development
Programming cells may soon become as easy as programming a computer. Just as computer software designers create programming for computers, scientists have created a programming language that allows them to design DNA-encoded circuits that can give new function to living cells.
Using this language, anyone can write a program for the function they want, such as detecting and responding to certain environmental conditions. They can then generate a DNA sequence that will achieve it.
“It is literally a programming language for bacteria,” says Christopher Voigt, an MIT professor of biological engineering. “You use a text-based language, just like you’re programming a computer. Then you take that text and you compile it and it turns it into a DNA sequence that you put into the cell, and the circuit runs inside the cell.”
In the new software — called Cello — a user first specifies the kind of cell they are using and what they want it to do: for example, sense metabolic conditions in the gut and produce a drug in response. They type in commands to explain how these inputs and outputs should be logically connected, using a computing language called Verilog that electrical engineers have long relied on to design silicon circuits. Finally, Cello translates this information to design a DNA sequence that, when put into a cell, will execute the demands.
The good thing about it is that it’s very simple, without many of the intricacies often encountered in programming.
“You could be completely naive as to how any of it works. That’s what’s really different about this,” Voigt says. “You could be a student in high school and go onto the Web-based server and type out the program you want, and it spits back the DNA sequence.”
For now, all these features have been customized for the E. coli bacteria, one of the most common in studies, but researchers are working on expanding the language to other strands of bacteria.
Using this language, they’ve already programmed 60 circuits with different functions, and 45 of them worked correctly the first time they were tested – which is a remarkable achievement. The circuits were also strikingly fast, and the whole process promises to revolutionize DNA engineering. Before, it could take months or years to design such a circuit. Now, it can be done in less than a day.
Dr. Voigt’s team plans to work on several different applications using this approach — bacteria that can be swallowed to aid in digestion of lactose; bacteria that can live on plant roots and produce insecticide if they sense the plant is under attack; and yeast that can be engineered to shut off when they are producing too many toxic byproducts in a fermentation reactor.
What do you think about this rapidly developing revolutionary computer industry? Can it replace drugs and medicine in future? Can it help to cure cancer and AIDS? Will it make a living cell immortal?
Please feel free to share with us your opinion and thoughts here below.
Business Development Manager
Professional Software Development
Java brings a lot of popular and user-friendly frameworks, content management systems and servers that help to simplify the application development process, website management process and much more irrespective of the size and complexity of the project. When it comes to CMS, Java possesses a host of CMSs that have been highly recognized in the market, but one CMS that has gained great popularity and attention from the developers and companies across the world is Magnolia.
Magnolia is an open source content management system which delivers exceptional simplicity on an enterprise level, combining user-friendly usage with a standards-based and flexible Java architecture. Companies such as Airbus Group, Al Arabiya, Avis and Virgin America use it as the central hub for their web, mobile and IoT initiatives. Founded in 1997, Magnolia is a privately-held company headquartered in Basel, Switzerland. The company has offices around the globe, and customers in over 100 countries.
Making a good CMS to cater the needs of the clients is never an easy task, and the developers Magnolia knows this thing better. Hence, Magnolia brings some of the much needed features and functionalities for the enterprises.
• Magnolia comes with a smart cache, a built-in clustering capabiliy and distributed deployment architecture that easily decouples authoring from publishing and the possibility to develop load-balanced public servers to bring more throughput and availability.
• It also offer code highlighting for the designers & developers, easy integration of 3rd party frameworks, extendable workflow, J2EE compliance, RSS generation & aggregation and more for the customization.
• When it comes to designing, it brings standard-based templating in JSP and servlets, unlimited page and component design, Freemarker as a template engine, custom tag library to speed up templating and pluggable templating engine for the designers.
• It brings Open APIs, advanced caching strategies, unlimited scalability, clustering & load balancing, transactional activation and tons of other performance related features & functionalities for the enterprises.
• From the security point of view, Magnolia brings flexible user permissions using role-based user management and distributed architecture, which is a need of today’s enterprises.
• It also enables team work through concurrent editing, deletion, address book, workgroup collaboration and some other features.
Apart from all these, Magnolia also enables search engine optimization, content tagging, configurable workflow, content versioning, social media integration, multilingual support, multi-site management, mobile publishing and tons of other enterprise-scale functionalities.
However, like any other technology or platform, Magnolia also has some advantages and disadvantages. Let’s take a look at each of them:
• It’s an open source.
• User friendly, easy to use for Administrators/Content Editors/Authors
• Good set of standard components in the standard templating kit (STK)
• Very flexible, almost anything can be customized
• Vast set of open modules for many additional features
• Leverage from page-based site or navigation.
• It utilizes installer, but the WAR files can be used to redeploy it to some other place.
• Steep learning curve
• Inconsistent or lack of documentation
• Configuration via JCR-Tree can be error-prone and not very transparent
• Versions -4.5, 4.5+ and 5 all have shifts in paradigms
• Versioning and collaboration
All in all, Magnolia is a very promising CMS that integrates well into an enterprise java stack. It is predominantly suited for medium to large businesses where processes need deep integration and customizations. With regards to small businesses, Magnolia might be somewhat of an overkill.
How about you? Did you have a chance to work with Magnolia CMS? What is your attitude to it?
Please feel free to share with us your thoughts and experience here below.
Business Development Manager
Professional Software Development
However, in spite of the capacity and multifunctionality of popular languages, no one’s syntax is perfectly universal at the moment. Moreover, the programming is constantly developing. The spread of multi-core processors, cloud software, mobility, and distributed architectures have created new challenges for developers that require new approaches and new tools to solve them. Adding support for the latest features, paradigms, and patterns to already existing languages, especially the most popular may be quite complicated and sometimes the best solution is to start from the scratch.
Below a few programming languages are represented, each of them can seriously affect the current programming: solve a certain problem or eliminate disadvantages of the most popular languages nowadays.
This program language is quite similar to Java, but is not its clear version of course. Gavin King denies the fact that the developed language in Red Hat will be a “Java Killer”. King is well-known for the creation of ORM framework, Hibernate for Java. He likes Java, still considers that there is a lot of staff to be improved.
Among those things that are dissatisfied by King in Java are detailed syntax of the language, the lack of top features and higher-order functions, as well as the lack of support of meta-programming. He is particularly aggrieved with the shortage of declarative syntax for structured data defining, which, according to King’s words, “equates Java to XML». Ceylon aims to solve all these problems.
There is no any Ceylon virtual machines, Ceylon-compiler will produce java-bytecode that can run on JVM. But the language will be more than just compiler. Instead of XML it uses similar to JSON the declarative syntax for data tree structure has a static typing and modules system and supports a number of structures lack in Java – sequence, intersection and union. The strategic goal of this project is to create a new set of developer for Ceylon, which will replace Java, which, according to King, is “swollen”, clumsy and still not thoroughly modernized.
Also it’s said that Ceylon and Scala overap in many features, however there are lots of very curious points that distinguish it. Ceylon strengths against Scala are in: providing modularity, union/intersection types, abstraction over function, runtime metaprogramming.
Functional programming has been popular for a long time, but purely functional languages as Lisp and Haskell are often considered unsuitable for the software development, due to the fact that the codes of functional type are difficult to combine with the codes and libraries that are written in imperative languages (C ++, or Java).
F# language has been developed by Microsoft to unite the functionality and practicality. Since F # is the language of first-class on .Net CLR, it maintains the same libraries and functions like other CLR languages (such as C # or Visual Basic).
F# code is similar to OCaml code, but has its own interesting syntax. For instance, to facilitate the scientific calculations numeric data types in F # can be units of measure. Also F# has constructions to facilitate asynchronous input/output, CPU parallelization and output processes on the graphics processor.
The downside of F# is that it is not designed for a developer to dig into the details of how things are done like he would in an imperative programming language like C#. Despite the main downside, the upside is that F# can result in software that is more reliable, secure, and runs at a higher speed. It is more streamlined, and can allow an able practitioner to accomplish more things in a shorter amount of time.
In the past five years, F# has continued to gain its popularity, and Microsoft has detailed how the language has helped to solve complicated programming problems in industries as diverse as banking, insurance and energy.
Today the functional language comes with Visual Studio 2010, that is even better, but it’s not typical for the Microsoft corporation as the F # compiler and core library are available under the open Apache license. It’s free, and you can even use it on Mac, and Linux (using Mono runtime).
Interpreters, virtual machines, and control codes are very popular today. The Google team of engineers leading by Robert Griesemer Ken Thompson and Rob Pike have developed Go – programming language for general purpose, which is suitable for everything: starting from application development up to programming systems. In this sense it is more like C or C ++, than Java or C #. Still as the latest languages, Go includes such advanced features as memory cleaning from unnecessary data, reflection of current processes etc.
Also it’s important that the language was created for easy programming. Its basic syntax is similar to C, but Go deletes unnecessary repetition during optimization programs such as objects definition. The aim of Go team was to create the language which it would be convenient to write codes on, as well as on a dynamic scripting language, still which at the same time would had the power of compiled languages.
As it has begun to grow in prominence, the platform has matured and new features have been added. For example, the creators announced at the end of last year that it would be possible to develop Android apps using Go code only, which could attract further interest and open new possibilities – particularly as most Android software has been written in Java so far.
After five years of evolution, Google’s Go language — with version 1.5, which came out August 2015 – has gone from being a curiosity to a promising source for fast-moving new projects.
Opa is free of charge for using and currently is available for 64-bit Linux and Mac OS X platforms, others ports have been developed yet.
If you want to make a Java or .Net application, Fantom is at your disposal. In the beginning Fantom was created for a cross-platform mobility, so while using Fantom you can make a choice, and afterwards even switch the platforms. It provides a concise syntax along with elegant, cross portable libraries. Moreover the project Fantom consists not only of a compiler, which can run bytecode for JVM or .Net CLI but also it produces code from the API set, which separates API Java and .Net and form an additional level of mobility. It’s considered to be the one of Fan’s primary benefits, because it gives a chance to develop a suite of system APIs that are elegant and easy to use compared to the Java and .NET counter parts.
However, mobility is not the whole Fantom point. Being similar to C by its nature, it should also improve languages, which inspired developers to create it. It strives to take an intermediate position in the most controversial issues of syntax such as strict or dynamic typing, or while choosing between interfaces and classes. It has a light additional syntax for declaring data structures and object serialization. Besides it supports embedded functional programming and overlapping.
Like many of the niche languages, Fantom suffers from limited support via external tools. Its only IDE support, for example, is a single plug-in to the NetBeans product. This is likely to change as the community for Fantom grows and its unique design and cross-platform characteristics become more widely known.
Fantom is distributed for free under the Academic Free License 3.0 and is available for Windows and Unix-like platform (including Mac OS X).
Portable code is no longer off the wall. For instance, C has many available compilers for diverse architectures and CPU, and Java-bytecode will work wherever there is a JVM. However haXe is more than just portable, this is a multiplatform language, which can be used for different architecture as well as with various operating environments, ranging from embedded binary systems to interpreters and virtual machines.
In addition to the wireframe language there is a standard haXe library, which runs alike with every object, and there are specialized libraries to perform the peculiar functions of each platform. This includes data structures, maths and date, serialization, reflection, bytes, crypto, file system, database access, etc. The Haxe standard library also includes platform-specific API that gives you access to important parts of the platform capabilities, and can be easily extended.
Despite the fact that haXe is still under development, it’s already being used commercially by its creator, the game studio Motion Twin. Haxe is also used by thousands of developers worldwide to build games, apps, tools, and frameworks. Several high profile companies are using Haxe, such asNickelodeon, TiVo, Zynga and Prezi. It’s available for Linux, Mac OS and Windows under a combination of free licenses.
The majority of programming languages borrow functions and syntax from earlier languages. Zimbu took some pieces from almost all of them. Zimbu does not enforce one specific style of programming. You can do it the way that works best for the task at hand. The brainchild of Bram Moolenaar, creator of the Vim text editor, Zimbu is going to become a fast, precise, portable and easy to read language, which can be used to design anything from GUI-applications to OS kernels.
With its hybrid character, Zimbu syntax is unique and specific, but at the same time is rich with features. It uses expressions and operators, similar to those used in C, but with its own keywords, data types and block structures. It supports memory management, threads and conveyors. To be short Zimbu is procedural, like C: define procedures and data structures separately. Object Oriented, like Java: define classes that hold both procedures and data, support inheritance and other mechanisms to encourage code re-use. Functional: support function references, closures and callbacks.
The only problem is portability. Although Zimbu is a compiled language, its compiler produces ANSI C code, and binary files can be created only on platforms with integrated C-compiler.
Unfortunately, Zimbu project is still under development. The compiler and a few sample programs can be built by themselves, but not all valid Zimbu-code will compile and run properly. Not all declared functions are implemented; moreover even some implemented are ill-adapted. The language specification also might be changed over time: keywords, types and syntax will be added as the need arises. Hence, documentation is patchy. Still if you want to give it a try, pilot tools are already available under the Apache license.
Chapel, the first programming language by Cray, was created with provision for supercomputing and clustering.
Chapel is part of Cray Cascade Program, a large-scale HPC development, partially funded by the US Defense Advanced Research Project Agency (DARPA). Among the goals of this project are the segregation parallel algorithms from the hardware, the performance improvement on architectures and rising the parallel program’s portability. The creators typically characterize the Chapel language as having features related to the base language, task parallelism, data parallelism, and locality.
Chapel’s syntax consists of several languages’ syntaxes. In addition to the most frequently used (C, C++, Java), it borrows the concepts from such scientific programming languages as Fortan and Matlab. ZPL, High-Performance Fortan and previous Cray projects influenced Chapel’s functions of parallel-processing. Chapel is an imperative block-structured language, designed to be easy to learn for users of C, C++, Fortran, Java, Python, Matlab, and the like.
In contrast to many previous higher-level parallel languages, Chapel is designed around a multiresolution philosophy, permitting users to initially write very abstract code and then incrementally add more detail until they are as close to the machine as their needs require.
As it currently stands, Chapel is a useful prototype, yet one that requires additional work in order to be valuable to real users. At the moment it can be run on Cray supercomputers and various high-performance clusters, and it can be ported to most Unix systems (including MacOS X and Windows with Cygwin). The source code is available under a BSD-type free license.
Once the parallel processing has been a specialized niche of software development, but due to the spread of multi-core processors and distributed computing, parallelism has gained popularity. Unfortunately, today’s programming languages don’t keep up with this trend. That is why IBM Research creates X10 – the language, which is developed specially for parallel architectures and aimed at accumulating developer productivity “ten times”. It is a class-based, strongly-typed, garbage-collected, object-oriented language.
X10 parallelism is possible thanks to PGAS programming model (a model of the divided global address space). Code and data are divided into blocks and distributed across different “spaces”, thus facilitating the program scaling from a single-threaded prototype (a single space) to a multi-threaded, running on one or more multicore processor (few spaces) in high-performance cluster.
It is well designed to get rid of some complexity related to distributed-computing programming. X10 code most coincides with Java code. In fact, the x10 runtime is available either as built-in executable files or as class files for the JMV. X10 compiler can output C++ or Java source code. In future it is planned to develop a direct compatibility with Java. It also strives to eliminate possibility of errors by design, and through static checking.
Meanwhile the language is establishing, though it is already quite developed. Implementations of X10 are available for a wide variety of hardware and software platforms ranging from laptops, to commodity clusters, to supercomputers.The compiler and runtime environment are available on different platforms, including Linux, Mac OS X and Windows. Additional utilities include: the interactive development environment(IDE), based on Eclipse, and a debugger. They are both distributed under the Eclipse Public License.
Unfortunately it’s represented not all new languages, still as for me main ones…
If you have tried to work with any of them, you are welcome to share your experience in comments. Would be interesting to read about your practices.
Thanks for your attention 😉