00:00:16.550
Thank you for coming to this session.
00:00:19.770
This talk starts to explore a topic under the dome.
00:00:24.859
Before we begin, we would like to make some announcements. This presentation will be a little technical and includes some specific details.
00:00:31.890
We will explain the implementation of a movie, and for that, we must use specific terminology during this presentation.
00:00:36.630
You do not need prior knowledge about movies to understand it.
00:00:38.579
Let me introduce ourselves. I'm Yurie Yamane. Along with Masayoshi Takahashi, we are a team involved in developing a movie and applications surrounding it. I am particularly interested in microcomputers and real-time operating systems. I'm also a member of the TAPAS project, which aims to create tools for real-time operating systems. Additionally, I have demonstrated and presented at many exhibitions.
00:01:00.210
We will be hosting RubyKaigi 2019 in Fukuoka next April, and we hope you can come join us.
00:01:06.630
Okay, let's get into the main topics.
00:01:07.160
The topic of this talk is about movies. We will briefly explain what a movie is. A movie is an implementation that closely resembles Ruby, targeting small embedded systems.
00:01:18.460
The primary goal of a movie is to provide a small implementation compared to standard Ruby implementations like CRuby and JRuby.
00:01:22.190
It is compiled with the OpenGL library and targets embedded systems and applications such as robotics and games.
00:01:27.310
We have conducted experiments on various microcontroller boards.
00:01:29.130
In this talk, we will showcase two devices. One is the Nucleo-F401RE, which features an ARM Cortex-M4 microcontroller.
00:01:36.619
The other device is the M5Stack, a well-known board in China and Japan featuring the ESP32 microcontroller.
00:01:56.030
This is a demonstration of the Nucleo board. The LCD screen has a joystick, allowing you to control a cursor.
00:03:52.960
For additional use cases, the M5Stack comes with speakers and buttons to enhance interactivity.
00:05:09.770
Let's explain some basics about microcontrollers.
00:05:12.980
Microcontrollers can be thought of as small computers on a single chip.
00:05:15.290
They contain a processor and various peripherals and are commonly used in smartphones, home appliances, and automobiles.
00:05:25.670
Now, let's get back to the topic of movies.
00:05:27.110
What is the difference between a movie and other implementations? The main difference lies in how a movie manages its resources. It is separated from other environments, allowing you to execute movie programs without the need for compilation.
00:05:48.260
In this situation, you can use ML files that contain bytecode for a movie. For high performance, you can also use bytecode generated by M Ruby, but it is not explicit—it is utilized internally.
00:06:05.260
The content of movies is based on the Ruby 2.0 specification and is expected to be released soon, potentially within the next month.
00:06:28.850
This update is considered a significant advancement for a movie, as it includes integer compatibility while also introducing some incompatibilities.
00:06:45.530
The architecture of the bytecode is entirely different, indicating that you cannot use bytecode generated by version 2.0 in previous versions.
00:07:00.370
This necessitates converting your programs to the newer format.
00:07:16.540
Let's now discuss ROM, which stands for Read-Only Memory. This type of memory is also non-volatile, meaning it retains its contents even when the power is off.
00:07:46.360
The different types of ROMs include EEPROM and Flash memory, primarily used for data storage.
00:08:07.670
EEPROM allows for data to be programmed and erased electrically, while Flash memory permits larger blocks of data to be written.
00:08:25.520
The current trend is to use Flash memory due to its larger capacity and cost-effectiveness.
00:08:54.700
The relationship between EEPROM and Flash memory can be simplified into a part-to-whole analogy.
00:09:03.290
The main reason we focus on ROM is that embedded systems often prioritize limited resources; therefore, efficient memory management is crucial.
00:09:16.580
Also, ROM storage allows data to remain intact even when powered down, which is necessary for various applications.
00:09:30.900
With limited RAM available in many microcontroller systems, we need to explore ways of using ROM to our advantage.
00:09:57.550
A significant challenge in using dynamic languages like Ruby in embedded systems is managing the inherent resource consumption.
00:10:09.300
Since Ruby is a dynamic language, it can be complex to ensure that programs run efficiently on microcontrollers without significant overhead.
00:10:38.100
Dynamic languages require substantial runtime resources, becoming a barrier in constrained environments.
00:10:50.180
In the case of microcontrollers, we need to initialize memory and deal with garbage collection to handle memory management properly.
00:11:03.030
As classes are used in Ruby, you need to prepare all classes before running any script, which can lead to memory constraints.
00:11:29.080
In contrast, more traditional approaches in languages such as C++ or Python may seem more efficient as they do not need to allocate as much memory at runtime.
00:11:49.700
This is particularly noticeable when considering class and object definitions.
00:11:54.050
Since Ruby allows for the addition and deletion of methods and classes dynamically, it requires significant resources.
00:12:11.700
We must find a balance between the highly dynamic capabilities of Ruby and the constraints of embedded systems. We should aim to resolve this contradiction.
00:12:32.870
Now, let’s discuss the structure of the movie project. The memory manager used to implement various data structures in C.
00:12:43.870
For example, the internal layout of Emily uses structures defined in C.
00:12:55.070
Specifying structures allows managing the Ruby object model effectively. Each Ruby class can hold a pointer to its method table and retain instances.
00:13:16.370
We designed a clear and efficient runtime environment for objects.
00:13:27.690
Now, it is important to consider how to manage both Ruby and the movie effectively.
00:13:36.450
A movie must maintain its integrity while providing a user-friendly interface for Ruby developers.
00:13:52.370
This involves ensuring the collections, classes, and data types function efficiently with the core principles of Ruby.
00:14:14.690
As we wrap up, we would like to emphasize the importance of this project. It is constantly evolving, with opportunities for contributions from developers around the world.
00:14:38.590
We appreciate all the feedback and collaboration we have received.
00:14:44.010
Thank you again for being here with us today; without your participation, this journey into the final frontier of mruby would not be possible.
00:15:05.490
Let's embrace the potential of mruby together.