There’s JVM, and that’s it, right? Well, not exactly. Even within JVM, there’s an increasing support for running all kinds of non-Java languages: we have invokedynamic, but it’s being improved, and new layers of functionality are emerging on top of it, making JVM a better home for all kinds of programming languages. There’s life outside of JVM too. JavaScript seems to be a new assembler-lever compilation target even for C programs (I’ll show some amusing examples of what exactly you can run these days in a browser) , and there are some independent efforts at managed runtimes in various stages of completion that seem promising – PyPy, Topaz, Rubinius, Parrot VM (it’s alive again!). This talk is admittedly a language-runtime-enthusiast’s walk-through the things he finds interesting happening this year. Recorded at GeekOut 2013.
Real-world polyglot programming on the JVM - Ben Summers (ONEIS)jaxLondonConference
Presented at JAX London 2013
Java is not the only language! The JVM is a wonderful common runtime for a wide variety of languages. By using the right language for each task, you can deliver higher quality applications in less time.
Real-world polyglot programming on the JVM - Ben Summers (ONEIS)jaxLondonConference
Presented at JAX London 2013
Java is not the only language! The JVM is a wonderful common runtime for a wide variety of languages. By using the right language for each task, you can deliver higher quality applications in less time.
You spend your precious time building the perfect application. You do everything right. You carefully craft every piece of code and rigorously follow the best practices and design patterns, you apply the most successful methodologies software engineering has to offer with discipline, and you pay attention to the most minuscule of details to produce the best user experience possible. It all pays off eventually, and you end up with a beautiful code base that is not only reliable but also performs well. You proudly watch your baby grow, as new users come in bringing more traffic your way and craving new features. You keep them happy and they keep coming back. One morning, you wake up to servers crashing under load, and data stores failing to keep up with all the demand. You panic. You throw in more hardware and try optimize, but the hungry crowd that was once your happy user base catches up to you. Your success is slipping through your fingers. You find yourself stuck between having to rewrite the whole application and a hard place. It's frustrating, dreadful, and painful to say the least. Don't be that guy! Save your soul before it's too late, and come to learn how to build, deploy, and maintain enterprise-grade Java applications that scale from day one. Topics covered include: parallelism, load distribution, state management, caching, big data, asynchronous processing, and static content delivery. Leveraging cloud computing, scaling teams and DevOps will also be discuss. P.S. This session is more technical than you might think.
http://jaxconf.com/sessions/economies-scaling-software
A story of how we went about packaging perl and all of the dependencies that our project has.
Where we were before, the chosen path, and the end result.
The pitfalls and a view on the pros and cons of the previous state of affairs versus the pros/cons of the end result.
Finally Java SE 7 is GA and you can start using it. This talk will cover the most important new features of the language and the virtual machine. It will also cover some features that did not make it in to the SE 7 release. Finally we will discuss current state of Java as an ecosystem and my analysis and hopes for the future.
A deep dive into the inner workings of ClojureScript's analysis,
88 compilation, and runtime phases. The talk focused specifically on
89 the way that traditional JavaScript abstractions thwart code-size
90 and efficiency and how ClojureScript avoids such pitfalls. Finally,
91 I told a couple "war stories" about some of the specific challenges
92 met by the Clojure/core team during the development of the compiler
93 and runtime.
Fast as C: How to Write Really Terrible JavaCharles Nutter
For years we’ve been told that the JVM’s amazing optimizers can take your running code and make it “fast” or “as fast as C++” or “as fast as C”…or sometimes “faster than C”. And yet we don’t often see this happen in practice, due in large part to (good and bad) development patterns that have taken hold in the Java world.
In this talk, we’ll explore the main reasons why Java code rarely runs as fast as C or C++ and how you can write really bad Java code that the JVM will do a better job of optimizing. We’ll take some popular microbenchmarks and burn them to the ground, monitoring JIT logs and assembly dumps along the way.
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018Mike Harris
I never wrote it; everybody else did! How many times have you waded through an ageing, decaying, tangled forrest of code and wished it would just die? How many times have you heard someone say that what really needs to happen is a complete rewrite? I have heard this many times, and, have uttered that fatal sentence myself. But shouldn’t we love our legacy code? Doesn’t it represent our investment and the hard work of ourselves and our predecessors? Throwing it away is dangerous, because, before we do, we’ll need to work out exactly what it does, and we’ll need to tweeze out that critical business logic nestled in a deeply entangled knot of IF statements. It could take us years to do, and we’ll have to maintain two systems whilst we do it, inevitably adding new features to them both. Yes we get to reimplement using the latest, coolest programming language, instead of an old behemoth, but how long will our new cool language be around, and who will maintain that code, when it itself inevitably turns to legacy? We can throw our arms in the air, complaining and grumbling about how we didn’t write the code, how we would never have written it the way it is, how those that wrote it were lesser programmers, possibly lesser humans themselves, but the code still remains, staring us in the face and hanging around for longer that we could possibly imagine. We can sort it out, we can improve it, we can make it testable, and we can learn to love our legacy code.
https://www.youtube.com/watch?v=qRP45l5UugE
Refactoring to Scala DSLs and LiftOff 2009 RecapDave Orme
An introductory presentation given to the Chicago Area Scala Enthusiasts (a) beginning with a recap of the Scala LiftOff unconference in Reston, VA, 2009, and (b) describing how to gradually migrate Scala code translated directly from Java into a DSL that facilitates readability and maintainability of client code. We then observe that this technique makes it possible to use Scala DSLs as a way to introduce Scala in a Java shop.
Vidapremium, Revista digital con información de Coches, Motos, Relojes, Náutica, Complementos, Juegos, Electrónica, Tecnología, Tiempo Libre y Zona VIP donde encontraras los mejores productos Premium y Edición Limitada.
http://www.vidapremium.com/
Este mes con información sobre: Omega Speedmaster 57 Co-Axial, Tissot Pendant 1878, Girard-Perregaux Tourbillon Tres Puentes Oro, Zenith El Primero Light Weight, Breitling Navitimer Patrulla Águila, Breguet Classique Cronometrie 7727, Porsche Panamera, Audi A8,Chevrolet Camaro Cabrio, Skoda Spaceback, Nissan Note, Mitsubishi ASX DI-D 220 Auto, Honda CR-V 1.6 i-DTEC, Volkswagen Polo R WRC, Ducati 1199 Panigale S Senna, Sony Bravia W85, Hasselblad Stellar, Woxter Zielo, Philips StyleXpert 9000, Minorchino 54, Memmo Alfama, Valderrama Ahumado con haya y roble
You spend your precious time building the perfect application. You do everything right. You carefully craft every piece of code and rigorously follow the best practices and design patterns, you apply the most successful methodologies software engineering has to offer with discipline, and you pay attention to the most minuscule of details to produce the best user experience possible. It all pays off eventually, and you end up with a beautiful code base that is not only reliable but also performs well. You proudly watch your baby grow, as new users come in bringing more traffic your way and craving new features. You keep them happy and they keep coming back. One morning, you wake up to servers crashing under load, and data stores failing to keep up with all the demand. You panic. You throw in more hardware and try optimize, but the hungry crowd that was once your happy user base catches up to you. Your success is slipping through your fingers. You find yourself stuck between having to rewrite the whole application and a hard place. It's frustrating, dreadful, and painful to say the least. Don't be that guy! Save your soul before it's too late, and come to learn how to build, deploy, and maintain enterprise-grade Java applications that scale from day one. Topics covered include: parallelism, load distribution, state management, caching, big data, asynchronous processing, and static content delivery. Leveraging cloud computing, scaling teams and DevOps will also be discuss. P.S. This session is more technical than you might think.
http://jaxconf.com/sessions/economies-scaling-software
A story of how we went about packaging perl and all of the dependencies that our project has.
Where we were before, the chosen path, and the end result.
The pitfalls and a view on the pros and cons of the previous state of affairs versus the pros/cons of the end result.
Finally Java SE 7 is GA and you can start using it. This talk will cover the most important new features of the language and the virtual machine. It will also cover some features that did not make it in to the SE 7 release. Finally we will discuss current state of Java as an ecosystem and my analysis and hopes for the future.
A deep dive into the inner workings of ClojureScript's analysis,
88 compilation, and runtime phases. The talk focused specifically on
89 the way that traditional JavaScript abstractions thwart code-size
90 and efficiency and how ClojureScript avoids such pitfalls. Finally,
91 I told a couple "war stories" about some of the specific challenges
92 met by the Clojure/core team during the development of the compiler
93 and runtime.
Fast as C: How to Write Really Terrible JavaCharles Nutter
For years we’ve been told that the JVM’s amazing optimizers can take your running code and make it “fast” or “as fast as C++” or “as fast as C”…or sometimes “faster than C”. And yet we don’t often see this happen in practice, due in large part to (good and bad) development patterns that have taken hold in the Java world.
In this talk, we’ll explore the main reasons why Java code rarely runs as fast as C or C++ and how you can write really bad Java code that the JVM will do a better job of optimizing. We’ll take some popular microbenchmarks and burn them to the ground, monitoring JIT logs and assembly dumps along the way.
How I Learned to Stop Worrying and Love Legacy Code - Ox:Agile 2018Mike Harris
I never wrote it; everybody else did! How many times have you waded through an ageing, decaying, tangled forrest of code and wished it would just die? How many times have you heard someone say that what really needs to happen is a complete rewrite? I have heard this many times, and, have uttered that fatal sentence myself. But shouldn’t we love our legacy code? Doesn’t it represent our investment and the hard work of ourselves and our predecessors? Throwing it away is dangerous, because, before we do, we’ll need to work out exactly what it does, and we’ll need to tweeze out that critical business logic nestled in a deeply entangled knot of IF statements. It could take us years to do, and we’ll have to maintain two systems whilst we do it, inevitably adding new features to them both. Yes we get to reimplement using the latest, coolest programming language, instead of an old behemoth, but how long will our new cool language be around, and who will maintain that code, when it itself inevitably turns to legacy? We can throw our arms in the air, complaining and grumbling about how we didn’t write the code, how we would never have written it the way it is, how those that wrote it were lesser programmers, possibly lesser humans themselves, but the code still remains, staring us in the face and hanging around for longer that we could possibly imagine. We can sort it out, we can improve it, we can make it testable, and we can learn to love our legacy code.
https://www.youtube.com/watch?v=qRP45l5UugE
Refactoring to Scala DSLs and LiftOff 2009 RecapDave Orme
An introductory presentation given to the Chicago Area Scala Enthusiasts (a) beginning with a recap of the Scala LiftOff unconference in Reston, VA, 2009, and (b) describing how to gradually migrate Scala code translated directly from Java into a DSL that facilitates readability and maintainability of client code. We then observe that this technique makes it possible to use Scala DSLs as a way to introduce Scala in a Java shop.
Vidapremium, Revista digital con información de Coches, Motos, Relojes, Náutica, Complementos, Juegos, Electrónica, Tecnología, Tiempo Libre y Zona VIP donde encontraras los mejores productos Premium y Edición Limitada.
http://www.vidapremium.com/
Este mes con información sobre: Omega Speedmaster 57 Co-Axial, Tissot Pendant 1878, Girard-Perregaux Tourbillon Tres Puentes Oro, Zenith El Primero Light Weight, Breitling Navitimer Patrulla Águila, Breguet Classique Cronometrie 7727, Porsche Panamera, Audi A8,Chevrolet Camaro Cabrio, Skoda Spaceback, Nissan Note, Mitsubishi ASX DI-D 220 Auto, Honda CR-V 1.6 i-DTEC, Volkswagen Polo R WRC, Ducati 1199 Panigale S Senna, Sony Bravia W85, Hasselblad Stellar, Woxter Zielo, Philips StyleXpert 9000, Minorchino 54, Memmo Alfama, Valderrama Ahumado con haya y roble
Live Webinar: Mastering Content Marketing on LinkedInLinkedIn
2015 is the year where social media and content marketing become a vital part of any successfully integrated marketing approach.
This presentation will explain how to create a successful content marketing strategy for your clients on LinkedIn. We'll cover real examples of brands that are doing it right, how to select content that resonates, how to create a compelling editorial calendar and how to measure success.
Case Study about Philips on LinkedIn: Establishing industry renowned healthcare and lighting communities
Visit marketing.linkedin.com for more success stories.
Description of the Java platform (languages, runtime libraries, execution environments) and how to write cross platform portable Java code (mobile, desktop, server, iot, ...).
How to implement a simple dalvik virtual machineChun-Yu Wang
This slide is an introduction to Android Dalvik Virtual Machine on a short course.
We use two hand-made JVM and DVM which called Simple JVM and Simple DVM respectively, to tell student how they work. A Foo Class was provided as a target for verifying the execution results of those VM. We hope it will help student to understand JVM and DVM quickly.
this slide contains about basic introduction of java.it will be helpful for a java beginner. it also useful for java lecture course in your versity.programming with java is very essential for every student.this silde may help you to progress your skill & lernt abc about java.
this slide is about java introductory.it will be helpful for you to know abc of jaba.it also be helpful for u in your versity java course.programming with java is very important for every student.java freshers can grabbed it easily
Similar to The State of Managed Runtimes 2013, by Attila Szegedi (20)
XRebel is a development-flow-friendly performance tool that enables developers to make performance optimizations during initial development. Find slow methods and HTTP calls, excessive queries, and hidden exceptions within your web application.
Top Reasons Why Java Rocks (report preview) - http:0t.ee/java-rocksZeroTurnaround
In this report we take a look at the top 10 reasons Java is the choice for so many development teams, all around the world, and why you should consider it for your next project. One of the main qualities Java possesses since the early design days is its simplicity. In that spirit we laid out in plain simple terms why Java outperforms other languages when it comes to popularity, performance, its amazing ecosystem and community.
For the less technical, this report explains the value Java brings to your projects. For fellow developers, we included some other projects in the Java ecosystem that you might want to look at. Check them out, have a play with them. It will make you a better developer.
Continue to the full report on RebelLabs: http:0t.ee/java-rocks
Java Tools and Technologies Landscape for 2014 (image gallery)ZeroTurnaround
**See the full version here: http://zeroturnaround.com/rebellabs/java-tools-and-technologies-landscape-for-2014/
--
In a recent survey, RebelLabs asked 2164 Java professionals about their technology usage in 14 tool categories, and found some interesting trends…
Getting Started with IntelliJ IDEA as an Eclipse UserZeroTurnaround
**Note: This is a sneak preview of the full report, which you can get on RebelLabs: http://zeroturnaround.com/rebellabs/getting-started-with-intellij-idea-as-an-eclipse-user/
---
My name is Anton, and I’m an IntelliJ IDEA addict. Whew, it feels good to say it out loud. The choice of IDE for developers is one of the most contentious debates in the software game. But why? After all, aren’t all IDEs more or less the same?
Perhaps you are Eclipse users who are interested in trying out IntelliJ IDEA, or perhaps considering the migration. Moving from Eclipse to IDEA can be quite overwhelming. My main purpose in writing this report is to show Eclipse users, specifically, how to get started using IDEA faster and with less headaches.
For the full report, check it out on RebelLabs:
http://zeroturnaround.com/rebellabs/getting-started-with-intellij-idea-as-an-eclipse-user/
[Image Results] Java Build Tools: Part 2 - A Decision Maker's Guide Compariso...ZeroTurnaround
For you lazy coders out there, we offer the visual aids for the first 3 chapters of "Java Build Tools: Part 2 - A Decision Maker's Comparison of Maven, Gradle and Ant + Ivy". Here you can find the raw scores given to each tool based on 6 feature categories. **Download the full report to see Chapter 4, mapping the features against different user profiles**
DevOps vs Traditional IT Ops (DevOps Days ignite talk by Oliver White)ZeroTurnaround
This is a 5-min version of RebelLabs IT Ops / DevOps Productivity Report" (http://zeroturnaround.com/rebellabs/rebel-labs-release-it-ops-devops-productivity-report-2013/) presented at DevOps Days in Paris, Austin, Berlin and Silicon Valley by Oliver White (@TheOTown).
Lazy Coder's Visual Guide to RebelLabs' Developer Productivity Report 2013ZeroTurnaround
For a long time, developers have known that the tools we use and the methodologies we practice have an effect on the quality of our software and our ability to delivery releases predictably. However, this is often a gut feeling based on anecdotal evidence with no numbers to support this theory. Wouldn't be cool to see actual numbers on how doing Code Quality analysis, Pairing Up and using tools for VCS and Continuous Integration significantly improve our ability to delivery quality software? Then look no further. RebelLabs' Developer Productivity Report 2013 is here: http://zeroturnaround.com/rebellabs/developer-productivity-report-2013-how-engineering-tools-practices-impact-software-quality-delivery/
UiPath Test Automation using UiPath Test Suite series, part 4DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 4. In this session, we will cover Test Manager overview along with SAP heatmap.
The UiPath Test Manager overview with SAP heatmap webinar offers a concise yet comprehensive exploration of the role of a Test Manager within SAP environments, coupled with the utilization of heatmaps for effective testing strategies.
Participants will gain insights into the responsibilities, challenges, and best practices associated with test management in SAP projects. Additionally, the webinar delves into the significance of heatmaps as a visual aid for identifying testing priorities, areas of risk, and resource allocation within SAP landscapes. Through this session, attendees can expect to enhance their understanding of test management principles while learning practical approaches to optimize testing processes in SAP environments using heatmap visualization techniques
What will you get from this session?
1. Insights into SAP testing best practices
2. Heatmap utilization for testing
3. Optimization of testing processes
4. Demo
Topics covered:
Execution from the test manager
Orchestrator execution result
Defect reporting
SAP heatmap example with demo
Speaker:
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Neuro-symbolic is not enough, we need neuro-*semantic*Frank van Harmelen
Neuro-symbolic (NeSy) AI is on the rise. However, simply machine learning on just any symbolic structure is not sufficient to really harvest the gains of NeSy. These will only be gained when the symbolic structures have an actual semantics. I give an operational definition of semantics as “predictable inference”.
All of this illustrated with link prediction over knowledge graphs, but the argument is general.
Encryption in Microsoft 365 - ExpertsLive Netherlands 2024Albert Hoitingh
In this session I delve into the encryption technology used in Microsoft 365 and Microsoft Purview. Including the concepts of Customer Key and Double Key Encryption.
UiPath Test Automation using UiPath Test Suite series, part 3DianaGray10
Welcome to UiPath Test Automation using UiPath Test Suite series part 3. In this session, we will cover desktop automation along with UI automation.
Topics covered:
UI automation Introduction,
UI automation Sample
Desktop automation flow
Pradeep Chinnala, Senior Consultant Automation Developer @WonderBotz and UiPath MVP
Deepak Rai, Automation Practice Lead, Boundaryless Group and UiPath MVP
Elevating Tactical DDD Patterns Through Object CalisthenicsDorra BARTAGUIZ
After immersing yourself in the blue book and its red counterpart, attending DDD-focused conferences, and applying tactical patterns, you're left with a crucial question: How do I ensure my design is effective? Tactical patterns within Domain-Driven Design (DDD) serve as guiding principles for creating clear and manageable domain models. However, achieving success with these patterns requires additional guidance. Interestingly, we've observed that a set of constraints initially designed for training purposes remarkably aligns with effective pattern implementation, offering a more ‘mechanical’ approach. Let's explore together how Object Calisthenics can elevate the design of your tactical DDD patterns, offering concrete help for those venturing into DDD for the first time!
Accelerate your Kubernetes clusters with Varnish CachingThijs Feryn
A presentation about the usage and availability of Varnish on Kubernetes. This talk explores the capabilities of Varnish caching and shows how to use the Varnish Helm chart to deploy it to Kubernetes.
This presentation was delivered at K8SUG Singapore. See https://feryn.eu/presentations/accelerate-your-kubernetes-clusters-with-varnish-caching-k8sug-singapore-28-2024 for more details.
Builder.ai Founder Sachin Dev Duggal's Strategic Approach to Create an Innova...Ramesh Iyer
In today's fast-changing business world, Companies that adapt and embrace new ideas often need help to keep up with the competition. However, fostering a culture of innovation takes much work. It takes vision, leadership and willingness to take risks in the right proportion. Sachin Dev Duggal, co-founder of Builder.ai, has perfected the art of this balance, creating a company culture where creativity and growth are nurtured at each stage.
JMeter webinar - integration with InfluxDB and GrafanaRTTS
Watch this recorded webinar about real-time monitoring of application performance. See how to integrate Apache JMeter, the open-source leader in performance testing, with InfluxDB, the open-source time-series database, and Grafana, the open-source analytics and visualization application.
In this webinar, we will review the benefits of leveraging InfluxDB and Grafana when executing load tests and demonstrate how these tools are used to visualize performance metrics.
Length: 30 minutes
Session Overview
-------------------------------------------
During this webinar, we will cover the following topics while demonstrating the integrations of JMeter, InfluxDB and Grafana:
- What out-of-the-box solutions are available for real-time monitoring JMeter tests?
- What are the benefits of integrating InfluxDB and Grafana into the load testing stack?
- Which features are provided by Grafana?
- Demonstration of InfluxDB and Grafana using a practice web application
To view the webinar recording, go to:
https://www.rttsweb.com/jmeter-integration-webinar
Smart TV Buyer Insights Survey 2024 by 91mobiles.pdf91mobiles
91mobiles recently conducted a Smart TV Buyer Insights Survey in which we asked over 3,000 respondents about the TV they own, aspects they look at on a new TV, and their TV buying preferences.
Epistemic Interaction - tuning interfaces to provide information for AI supportAlan Dix
Paper presented at SYNERGY workshop at AVI 2024, Genoa, Italy. 3rd June 2024
https://alandix.com/academic/papers/synergy2024-epistemic/
As machine learning integrates deeper into human-computer interactions, the concept of epistemic interaction emerges, aiming to refine these interactions to enhance system adaptability. This approach encourages minor, intentional adjustments in user behaviour to enrich the data available for system learning. This paper introduces epistemic interaction within the context of human-system communication, illustrating how deliberate interaction design can improve system understanding and adaptation. Through concrete examples, we demonstrate the potential of epistemic interaction to significantly advance human-computer interaction by leveraging intuitive human communication strategies to inform system design and functionality, offering a novel pathway for enriching user-system engagements.
Essentials of Automations: Optimizing FME Workflows with ParametersSafe Software
Are you looking to streamline your workflows and boost your projects’ efficiency? Do you find yourself searching for ways to add flexibility and control over your FME workflows? If so, you’re in the right place.
Join us for an insightful dive into the world of FME parameters, a critical element in optimizing workflow efficiency. This webinar marks the beginning of our three-part “Essentials of Automation” series. This first webinar is designed to equip you with the knowledge and skills to utilize parameters effectively: enhancing the flexibility, maintainability, and user control of your FME projects.
Here’s what you’ll gain:
- Essentials of FME Parameters: Understand the pivotal role of parameters, including Reader/Writer, Transformer, User, and FME Flow categories. Discover how they are the key to unlocking automation and optimization within your workflows.
- Practical Applications in FME Form: Delve into key user parameter types including choice, connections, and file URLs. Allow users to control how a workflow runs, making your workflows more reusable. Learn to import values and deliver the best user experience for your workflows while enhancing accuracy.
- Optimization Strategies in FME Flow: Explore the creation and strategic deployment of parameters in FME Flow, including the use of deployment and geometry parameters, to maximize workflow efficiency.
- Pro Tips for Success: Gain insights on parameterizing connections and leveraging new features like Conditional Visibility for clarity and simplicity.
We’ll wrap up with a glimpse into future webinars, followed by a Q&A session to address your specific questions surrounding this topic.
Don’t miss this opportunity to elevate your FME expertise and drive your projects to new heights of efficiency.
Transcript: Selling digital books in 2024: Insights from industry leaders - T...BookNet Canada
The publishing industry has been selling digital audiobooks and ebooks for over a decade and has found its groove. What’s changed? What has stayed the same? Where do we go from here? Join a group of leading sales peers from across the industry for a conversation about the lessons learned since the popularization of digital books, best practices, digital book supply chain management, and more.
Link to video recording: https://bnctechforum.ca/sessions/selling-digital-books-in-2024-insights-from-industry-leaders/
Presented by BookNet Canada on May 28, 2024, with support from the Department of Canadian Heritage.
2. THE FOLLOWING IS INTENDED TO OUTLINE
OUR GENERAL PRODUCT DIRECTION. FOR
INFORMATION PURPOSES ONLY,AND MAY NOT
BE INCORPORATED INTO ANY CONTRACT. IT
IS NOT A COMMITMENT TO DELIVER ANY
MATERIAL, CODE, OR FUNCTIONALITY,AND
SHOULD NOT BE RELIED UPON IN MAKING
PURCHASING DECISION.THE DEVELOPMENT,
RELEASE,AND TIMING OF ANY FEATURES OR
FUNCTIONALITY DESCRIBED FOR ORACLE'S
PRODUCTS REMAINS AT THE SOLE DISCRETION
OF ORACLE.
4. A virtual machine is…
• a software… (not hardware)
• …designed as runtime environment for other
programs… (open ended)
• …that conform to a particular machine
specification…
• …either existing hardware specification…
• …or entirely synthetic specification.
6. This is a virtual machine
• a software…
• …designed as runtime environment for other
programs… (operating systems, mostly)
• …that conform to a particular machine
specification…
• …in this case, a particular combination of x86
CPU and other goodies (graphics, audio, IO).
7. This is a virtual machine
• This is not the kind of a virtual machine I’m
talking about today.
8. What we’ll survey
today
• JavaVirtual Machine
• Parrot
• Some applications of Low LevelVirtual Machine
• Rubinius
• PyPy
9. There’s lots of ways to
target programs today
• Directly for hardware.
• Compiled for a virtual machine.
• Have it interpreted.
• These are not mutually exclusive.
10. What are benefits of
managed runtimes?
• Automatic memory management
• Object model
• Code transformations
• ...
11. JavaVirtual Machine
• Probably the best knownVM out there.
• Started out as aVM for executing programs in Java.
• Today it has a vibrant ecosystem with myriad
languages around it.
12. JavaVirtual Machine
• Defined as a stack-based machine.
• Built-in concept of classes, objects, and fixed-size
arrays.
• Classes have fixed field layout, with strongly typed
field types.
• Single inheritance for classes.
13. JVM as target for
dynamic languages
• Fixed-layout classes make it harder.
• People end up with hashtables etc.
• Leading to poor interop with Java.
• Your dynamic object doesn’t look like a Java
object to Java program.
14. JVM as target for
dynamic languages
• No multiple dispatch.
• Wait, doesn’t Java have overloaded methods?
• It does, but they’re resolved by the Java
compiler, not by theVM.
• Every language has to figure it out themselves.
• No pluggable dispatch.
15. JVM as target for
dynamic languages
• Where it excels:
• Threading support
• Memory management
• JIT compiler
16. JVM as target for
dynamic languages
• How to fix the deficiencies for dynamic languages?
• Step 1: INVOKEDYNAMIC
• Step 2: high-level operation resolver framework
• This is what I’m doing by day.
18. Invokedynamic lets you
be abstract
Object duck = ...;
duck.quack(); // won’t work in Java!
INVOKEDYNAMIC call:quack(Object)Object
19. Invokedynamic lets you
be abstract
INVOKEINTERFACE quack(Duck)V
vs.
INVOKEDYNAMIC call:quack(Object)Object
• Doesn’t prescribe types
• Doesn’t prescribe dispatch
20. Invokedynamic lets you
be abstract
Duck duck = ...;
Voice voice = duck.voice;
INVOKEINTERFACE getVoice(Duck)Voice
21. Invokedynamic lets you
be abstract
Object duck = ...;
Object voice = duck.voice;
INVOKEDYNAMIC get:voice(Object)Object
22. Invokedynamic lets you
be abstract
INVOKEINTERFACE getVoice(Duck)Voice
vs.
INVOKEDYNAMIC get:voice(Object)Object
• “get” can map to a field getter, array element
getter, or a property method implementation.
• Okay, but what is mapping it?
23. Bootstrap methods
public static CallSite bootstrap(
String operation,
MethodType signature)
• The JVM will invoke it with bootstrap(“get:voice”,
MethodType(Object.class, Object.class))
• We can return a “CallSite” - basically a slot with a
target function pointer.
• Target can be set multiple times.
24. Putting it together
public class Ducks {
public static class ShyDuck {
public void quack() {
System.out.println("...quack?");
}
}
public static class LoudDuck {
public void quack() {
System.out.println("QUACK!");
}
}
public static class ConfusedDuck {
public void quack() {
System.out.println("Woof!");
}
}
}
25. Putting it together
var ducks = [
new org.szegedi.geekout2103.Ducks.ShyDuck(),
new org.szegedi.geekout2103.Ducks.LoudDuck(),
new org.szegedi.geekout2103.Ducks.ConfusedDuck()
]
for each(duck in ducks) {
duck.quack()
}
27. How’s JVM faring so far
• Java 8 will ship Nashorn, a JavaScript-on-the-JVM
• completely INVOKEDYNAMIC based
• in-house dogfooding of INVOKEDYNAMIC
• A lot of other languages, both using Indy and not,
already target the JVM. I hear some are here at this
conference too :-)
• My Dynalink project (on GitHub) helps you reduce
the pain of providing high level operations for your
language.
28. Parrot virtual machine
• Started out as aVM for Perl 6.
• Now it is language agnostic.
• Specifically designed with dynamic languages in
mind.
29. Parrot virtual machine
• Objects are “polymorphic containers” with
changing layout.
• Register based (not stack based as JVM).
• Continuations as primary expression of control
flow.
• Built-in opcodes invokecc, yield, tailcall,
capture_lex, newclosure…
30. Parrot virtual machine
• Cross-level language interop is basically built-in
• getprop, setprop opcodes!
• opcodes for loading languages and registering
compilers!
• Much higher level bytecode operations than
JVM.
• Basically starts out with Indy+Metaobject
Protocols built in.
32. Parrot virtual machine
• PIR is human readable assembly-level language
.sub factorial
# Get input parameter.
.param int n
# return (n > 1 ? n * factorial(n - 1) : 1)
.local int result
if n > 1 goto recurse
result = 1
goto return
recurse:
$I0 = n - 1
result = factorial($I0)
result *= n
return:
.return (result)
.end
33. LLVM
• It’s not actually aVM.
• Used to stand for “Low-LevelVirtual Machine”.
• Today, LLVM is the name of the project, and it’s not
considered an acronym.
• It’s a compiler toolchain project.
38. Emscripten
• LLVM backend for JavaScript
• Anything that compiles to LLVM IR can be
translated to JavaScript.
• Audio, graphics, IO libraries mapped to HTML5
constructs.
42. asm.js
• Mozilla embraced Emscripten’s code generator
output as a JS subset:
• arithmetic operations only
• loads and stores into a single ArrayBuffer
• calls to functions that only take numers and
return number.
43. asm.js
• Force an expression to be double:“+x”
• Force an expression to be int:“x | 0”
function diagonal(x, y) {
x = +x; // x has type double
y = +y; // y has type double
return +sqrt(square(x) + square(y));
}
function add1(x) {
x = x|0; // x : int
return (x+1)|0;
}
44. asm.js
• It’s a statically typed language that only looks like
JavaScript.
• No strings
• No allocation
• No calling of other JS libraries
46. • PyPy is Python runtime using LLVM.
• Has sandboxing, good memory management
• Has stackless mode (ever played EVE Online?)
• Itself largely written in Python!
47.
48. • Toolchain available as separate project RPython.
• Rpython is a statically compilable subset of Python
• Most of PyPy written in it.
• There’s now Topaz: a Ruby on top of PyPy!
• How crazy is that?!
49. • A word on “stackless”
• Execution doesn’t use C stack
• Can have million of micro-threads executing as
coroutines efficiently on few CPUs
• Very useful to program MMOs.
50. • Similar to PyPy, only for Ruby:
• Big part of implementation written in Ruby itself
• Relies on LLVM to efficiently compile to Ruby
• Similar memory management etc. characteristics
51. • Similar to JVM too:
• intermediate format is stack machine with
bytecode
• has high level bytecodes for yield, pushing blocks
etc.
52. • Object representation:
• Has immediates for fixnums, symbols, booleans
• This can be huge deal performance-wise
• JVM-like objects (header, class pointer, fields)
• Generational GC, similar layout to JVM:
• Nursery,Young, Mature generations.
53. Self-hosting
• Recurring theme is to write as much of the
runtime as possible in the runtime’s target
language itself.
• More accessible for language users.
• Reduced bootstrapping core.
• Benefits from its own optimizations.
• Of course, old news in Lisp world.
54. MaxineVM
• Speaking of self hostedVMs…
• Oracle’s open-sourced JavaVM written in Java.
• Pluggable GC and JIT-compiler.
• “Maxine Inspector” for debugging/visualizing
runningVM state.
• Great tool for learning and research ofVM
technologies.
• Great IDE support (Eclipse, NetBeans, IntelliJ)
56. JavaScript runtimes
• Probably biggest innovation hotbed right now.
• Google’sV8, Mozilla’s *Monkey,Apple’s Nitro
• … as well as Oracle’s Nashorn.
57. JavaScript is ideal
• JavaScript is ideal language to get paid to work on
it.
• Extreme dynamism ensures there’s no single
correct optimization approach.
• Got to try them all!
58. JS optimization
strategies
• Type-specializing code generators
• Optimistic typing with on-stack code rewrite
• Allocation-site object shaping
• Static analysis (as far as it can go)
• Profiling-driven recompilation.
• Many more.
59. Summary
• I love JVM. JVM is great. Lots of innovation going
on.
• There is life outside the JVM.
• I’m very enthusiastic for Parrot, PyPy, and Rubinius.
• Diversity of JS runtimes and their strategies for
efficient execution is also great to watch and
participate in.
• … especially if it means bringing back Transport
Tycoon.
60. Summary
• As a general observation, commercial JVM
technologies still have best memory management,
observability/serviceability, and threading support.
• Not saying others won’t catch up, but HotSpot/
JRockit/Azul/J9 etc. have a big lead in engineering
effort poured into them.
• So, if you stay with JVM, you’re also in a very good
place.