The Mac series with the Apple Silicon M1 chip has been released. Weren’t you surprised by the amazing performance of it? I was also. I hoped we can use the wonderful power and Apple’s ecosystem for Elixir programming, so I tried to write Elixir code to call Swift code. This article shows how to call Swift code from Elixir via NIF.
Here is the repository of such a sample code:
Nov 24, 2020: I updated "Makefile" in the repository in order to be able to build it in case of initialized Mac, so the bellow figures includes some wrong points…
This story shows important history of software engineering between 1990s and 2000s, which includes the background of the birth of Agile software development, Software product line engineering (SPLE) and eXtreme derivative development process (XDDP).
Most of the actual cost of software development is personnel expenses because it is a human-intensive work. They are roughly proportional to the product of the numbers of the people and months spent on development. A unit called man-month is derived from an assumption of this proportional relationships. Usually, a software developer charges its customer development costs based on estimated or actual man-months. It is an…
Software testing is an activity as part of verification and validation or software verification and validation.
In other words, verification is to check whether or not software or system meets to its requirements, while validation is to check whether or not requirements of software or system meets to its purposes of users and/or customers.
On the other hand, read the definition of software verification and validation from the article "Software verification and validation" of Wikipedia.
Boehm defines:
Verification: Are we building the product right? …
If a program has no structure and is chaotic as the below figure shows, the following quality characteristics will be getting worse:
This is called commonly, “a status like spaghetti”.
Such a program can be replaced into a nested program (the below figure shows), according to Structured program theorem.
I’ll give typical examples for each type of construction languages, which is explained at Chapter 3 of SWEBOK Evolution:
Configuration languages
One of typical examples of configuration languages is setting files of Windows and Unix operating systems.
For example, /etc/X11/xorg.conf is a setting file for X server, which provides graphic functions using graphic boards. A sample code fragment is here:
Section “ServerLayout”
Identifier “Default Layout”
Screen 0 “Screen0” 0 0
InputDevice “Mouse0” “CorePointer”
InputDevice “Keyboard0” “CoreKeyboard”
EndSection
ToolKit Languages
One of typical examples of toolkit languages is Template Toolkit of Perl. It is used by a web server written in…
You may feel software engineering is difficult and confuses you. If so, it is due to differences between it and other sciences.
Reason 1: Software is an artifact, that is, an object made by persons. It may be often so large that the creators of it can't understand the whole of it any longer. Thus, only one technology can't solve all problems of software engineering, that is, No Silver Bullet. Though some one may say, "this technology will solve all problems of software engineering", software engineers will know that fact that it is false in almost all case. …
Traditional and typical kinds of a human resource are a generalist and a specialist. A generalist has literacy, knowledge and skills for all fields. On the other hands, a specialist has a specified knowledge and skills to one field, which also is called I-typed human resource (I型人材) in Japan.
In Japan, a person that is well versed in all fields is called a T-, π- and H-typed human resource (in Japanese, T型人材,π型人材 and H型人材, respectively). A T-typed human resource is a person who has literacy for all fields and specified knowledge and skills to one field. A π-typed human resource…
I've just released Pelemay 0.0.6:
A new feature of this release is to support String.replace.
defmodule M do
require Pelemay
import Pelemay
defpelemay do
def string_replace(subject) do
String.replace(&1, "Fizz", "Buzz")
end
def enum_map_string_replace(list) do
list
|> Enum.map(& String.replace(&1, "Fizz", "Buzz"))
end
end
end
This code is 4x faster than original Elixir code.
## StringReplaceBench
benchmark name iterations average time
Pelemay String.replace 1000000 1.20 µs/op
Enum String.replace 500000 3.92 µs/op
Flow String.replace 5000 678.27 µs/op
The reason that Flow is much slower is that Flow in Benchfella requires Enum.sort.
I implemented it with #pragma to generate SIMD instructions:
int string_replace_binary(ErlNifBinary…
Thank ElixirConf for giving me another chance to make a presentation at ElixirConf US 2019:
This presentation will be conducted by me and Mr. Hisae, who is a graduate student in my laboratory and a co-author of Hastega. He's a great meta-programmer because he wrote a new feature of Hastega only one night! Look forward to an announcement on it at ElixirConf US 2019!
BTW, development of Hastega has been smooth but a little late. …
Do you want to learn and use machine learning in Elixir / Phoenix / Nerves apps? Of course, you can, but the machine learning is written in Python and invoked from Elixir via ErlPort... Of course, you can implement some machine learning algorithms in Elixir. However, they have no computational power enough to execute real applications. We wish Elixir could have more computational power!
This may change by Hastega! Hastega will make a series of code fragments of pipelined Enum.map to be transformed into optimized native code using GPUs and/or CPUs with SIMD instructions.
GPUs are main components of graphic…
Call me ZACKY. I'm a researcher of Elixir. My works are including Pelemay https://github.com/zeam-vm/pelemay/, (its old name is Hastega) .