MacRuby is a new implementation of the Ruby programming language powered by LLVM and built on top of CoreFoundation. It provides a fast and beautiful way for Cocoa developers to use Ruby while having full access to and integration with the Cocoa frameworks. While still in development, MacRuby aims to be a robust alternative to Objective-C that addresses limitations like code reuse and safety while maintaining compatibility.
PVS-Studio team experience: checking various open source projects, or mistake...Andrey Karpov
To let the world know about our product, we check open-source projects. By the moment we have checked 245 projects. A side effect: we found 9574 errors and notified the authors about them.
PVS-Studio team experience: checking various open source projects, or mistake...Andrey Karpov
To let the world know about our product, we check open-source projects. By the moment we have checked 245 projects. A side effect: we found 9574 errors and notified the authors about them.
Lambda functions in C++ are unnamed functions contained typically within other functions and examples of their usage includes but is not limited to:
a) Specializing the behavior of an algorithm
b) Encapsulating complex expressions within a function
c) Creating callbacks to be passed onto other functions
Their syntax may look exotic, but once you get accustomed to them they can increase the readability of your software and prove to be particularly useful.
In this workshop we will learn about their syntax and demonstrate multiple real-world examples of their usage.
A Speculative Technique for Auto-Memoization Processor with MultithreadingMatsuo and Tsumura lab.
Yushi KAMIYA, Tomoaki TSUMURA, Hiroshi MATSUO, Yasuhiko NAKASHIMA:
"A Speculative Technique for Auto-Memoization Processor with Multithreading"(発表資料)
Proc. 10th Intl. Conf. on Parallel and Distributed Computing, Applications and Technologies (PDCAT'09), Higashi-Hiroshima, Japan, pp.160-166 (Dec. 2009)
The python interpreter converts programs to bytecodes before beginning execution. Execution itself consist of looping over these bytecodes and performing specific operations over each one. This talk gives a very brief overview of the main classes of bytecodes.
This presentation was given as a lightning talk at the Boston Python Meetup group on July 24th, 2012.
Our favorite language is now powering everything from event-driven servers to robots to Git clients to 3D games. The JavaScript package ecosystem has quickly outpaced past that of most other languages, allowing our vibrant community to showcase their talent. The front-end framework war has been taken to the next level, with heavy-hitters like Ember and Angular ushering in the new generation of long-lived, component-based web apps. The extensible web movement, spearheaded by the newly-reformed W3C Technical Architecture Group, has promised to place JavaScript squarely at the foundation of the web platform. Now, the language improvements of ES6 are slowly but surely making their way into the mainstream— witness the recent interest in using generators for async programming. And all the while, whispers of ES7 features are starting to circulate…
JavaScript has grown up. Now it's time to see how far it can go.
This contains all the slides used in Silicon Valley Code Camp presentation on Sunday Oct 4, 10:45 session on "Amazing new features in JavaScript". At the end ut also includes the last year presentation covering ES 5
We all know, or should know, about SOLID. The question is, do we write C++ according to the SOLID principles?
https://platis.solutions/blog/2020/06/22/how-to-write-solid-cpp/
Exploring Color Spaces with Gesture Tracking and Smart Bulbs (Distill 2014)Daniel Luxemburg
RGB, CMYK, HSV, HSL… We have a lot of ways to write code about colors. One thing they all have in common is that they define a space with more than two dimensions. When visualizing or interacting with these spaces we are forced to flatten them to fit on our two-dimensional screens and to interact with them using our puny, two-dimensional pointing devices. The results fail to convey the reasoning behind different modes of color definition. As a result, it can be difficult to develop an intuitive sense of what the numbers that go with these acronyms represent. In turn, communicating about color with others can be a challenge.
Translating Classic Arcade Games to JavaScriptnorbert_kehrer
These are the slides of a talk held on the viennajs JavaScript meetup in Vienna on June 24, 2015. It describes how the game program code of old arcade games based on the old 6502 microprocessor can be translated to JavaScript automatically and also describes specific optimizations of the resulting programs. By adding HTML5 canvas code for the graphics, you get a browser playable video game.
New and delete are a thing of the past, with the new features in C++14 and beyond (such as smart pointers and move semantics) memory management is easier and safer. Learn how to use the new constructs of C++14 and beyond to create, move, and free objects in a safer and more efficient manner.
Lambda functions in C++ are unnamed functions contained typically within other functions and examples of their usage includes but is not limited to:
a) Specializing the behavior of an algorithm
b) Encapsulating complex expressions within a function
c) Creating callbacks to be passed onto other functions
Their syntax may look exotic, but once you get accustomed to them they can increase the readability of your software and prove to be particularly useful.
In this workshop we will learn about their syntax and demonstrate multiple real-world examples of their usage.
A Speculative Technique for Auto-Memoization Processor with MultithreadingMatsuo and Tsumura lab.
Yushi KAMIYA, Tomoaki TSUMURA, Hiroshi MATSUO, Yasuhiko NAKASHIMA:
"A Speculative Technique for Auto-Memoization Processor with Multithreading"(発表資料)
Proc. 10th Intl. Conf. on Parallel and Distributed Computing, Applications and Technologies (PDCAT'09), Higashi-Hiroshima, Japan, pp.160-166 (Dec. 2009)
The python interpreter converts programs to bytecodes before beginning execution. Execution itself consist of looping over these bytecodes and performing specific operations over each one. This talk gives a very brief overview of the main classes of bytecodes.
This presentation was given as a lightning talk at the Boston Python Meetup group on July 24th, 2012.
Our favorite language is now powering everything from event-driven servers to robots to Git clients to 3D games. The JavaScript package ecosystem has quickly outpaced past that of most other languages, allowing our vibrant community to showcase their talent. The front-end framework war has been taken to the next level, with heavy-hitters like Ember and Angular ushering in the new generation of long-lived, component-based web apps. The extensible web movement, spearheaded by the newly-reformed W3C Technical Architecture Group, has promised to place JavaScript squarely at the foundation of the web platform. Now, the language improvements of ES6 are slowly but surely making their way into the mainstream— witness the recent interest in using generators for async programming. And all the while, whispers of ES7 features are starting to circulate…
JavaScript has grown up. Now it's time to see how far it can go.
This contains all the slides used in Silicon Valley Code Camp presentation on Sunday Oct 4, 10:45 session on "Amazing new features in JavaScript". At the end ut also includes the last year presentation covering ES 5
We all know, or should know, about SOLID. The question is, do we write C++ according to the SOLID principles?
https://platis.solutions/blog/2020/06/22/how-to-write-solid-cpp/
Exploring Color Spaces with Gesture Tracking and Smart Bulbs (Distill 2014)Daniel Luxemburg
RGB, CMYK, HSV, HSL… We have a lot of ways to write code about colors. One thing they all have in common is that they define a space with more than two dimensions. When visualizing or interacting with these spaces we are forced to flatten them to fit on our two-dimensional screens and to interact with them using our puny, two-dimensional pointing devices. The results fail to convey the reasoning behind different modes of color definition. As a result, it can be difficult to develop an intuitive sense of what the numbers that go with these acronyms represent. In turn, communicating about color with others can be a challenge.
Translating Classic Arcade Games to JavaScriptnorbert_kehrer
These are the slides of a talk held on the viennajs JavaScript meetup in Vienna on June 24, 2015. It describes how the game program code of old arcade games based on the old 6502 microprocessor can be translated to JavaScript automatically and also describes specific optimizations of the resulting programs. By adding HTML5 canvas code for the graphics, you get a browser playable video game.
New and delete are a thing of the past, with the new features in C++14 and beyond (such as smart pointers and move semantics) memory management is easier and safer. Learn how to use the new constructs of C++14 and beyond to create, move, and free objects in a safer and more efficient manner.
In 1954 it was well recognized by those in positions of authority that it was only a matter of time, only a few decades, before the general public would be able to grasp and upset the cradle of power, for the very elements of the new silent-weapon technology were as accessible for a public utopia as they were for providing a private utopia.
The issue of primary concern, that of dominance, revolved around the subject of the energy sciences.
Energy is recognized as the key to all activity on earth. Natural science is the study of the sources and control of natural energy, and social science, theoretically expressed as economics, is the study of the sources and control of social energy. Both are bookkeeping systems: mathematics. Therefore, mathematics is the primary energy science. And the bookkeeper can be king if the public can be kept ignorant of the methodology of the
bookkeeping.
Third part nations - S-CCO leaked document 1Marc Manthey
In the case of Germany, France, and others, they are both partners and targets and leaders like German Chancellor Angela Merkel is well aware that the German intelligence agencies assist NSA in spying on Germans and others in the same manner as the UK, Canada, Australia, and New Zealand, the so-called "Five Eyes [FVEY]" English-speaking club of signals intelligence partners.
For the people that STILL not believe this is the ORIGINAL document from the http://dtic.mil website via archive.org http://web.archive.org/web/20060512051411/http://www.dtic.mil/ndia/2001testing/bushnell.pdf
Top Secret National Reconnaissance Office declassification guidelineMarc Manthey
Top Secret National Reconnaissance Office declassification guideline, refers to Signals Intelligence (SIGINT) Exchange descriptors. I explained to The Observer that code words found on Page 9 of the document like DIKTER and SETTEE, stood for Third Party SIGINT exchanges with Norway and the Republic of Korea, respectively. I also impressed on The Observer that these agreements, like the Second Party arrangements, are truly one-way streets, whereby NSA grabs all of the SIGINT from partner countries with the partners, especially the Third and Fourth Parties -- the latter include China, Sweden, Finland, Austria, and Switzerland
This is a set of modified MacRuby presentation slides given at the Pittsburgh Ruby Brigade meeting on Nov 5, 2009. The original presentation was given by Patrick Thomson at C4[3] in September, 2009. Slides 68 and 69 were added by me for the PghRB talk.
Patrick's original slides are available at http://www.slideshare.net/importantshock/why-macruby-matters
The talk focuses on the processes and requirements to ship a software, which was written with MacRuby, to the end user. I present libraries and tools, that are helpful for this purpose and show how to use them.
My presentation will be on the topic of MacRuby. MacRuby is relevent to Ruby developers because it allows us to dive into the world of Mac OS X development using Ruby 1.9. Unlike RubyCocoa, where we would need to use both Ruby and Objective-C, MacRuby's API allows us to just use Ruby.
I will go into a brief history of MacRuby and explain just why it is important to us as Ruby developers. I will then do some live coding of a quick desktop application using MacRuby. Attendees will be able to take away from the presentation a good understanding of MacRuby and the passion to develop something of their own using it.
Le slide deck de l'Université que nous avons donnée avec Rémi Forax à Devoxx France 2019.
Comme promis, Java sort sa version majeure tous les 6 mois. Le train passe et amène son lot de nouveautés. Parmi elles, certaines sont sorties : une nouvelle syntaxe pour les clauses switch et l'instruction de byte code CONSTANT_DYNAMIC. D'autres sont en chantier, plus ou moins avancé : une nouvelle façon d'écrire des méthodes de façon condensée, un instanceof 'intelligent', des constantes évaluées au moment où elles sont utilisées. Les projets progressent. Loom, et son nouveau modèle de programmation concurrente que l'ont peut tester avec Jetty. Amber, qui introduit les data types et des nouvelles syntaxes. Valhalla, dont les value types donnent leurs premiers résultats. S'il est difficile de prévoir une date de sortie pour ces nouveautés, on sait en revanche qu'une fois prêtes elles sortiront en moins de 6 mois. De tout ceci nous parlerons donc au futur et en public, avec des démonstrations de code, des slides, du code, de la joie et de la bonne humeur !
Slides from my "Swift, Swiftly" session at Øredev 2014.
Revealed by Apple in June of this year, the Swift programming language has already established itself as a huge leap forward for iOS and OS X developers. Learn the ins and outs of this new language, see how it compares to other modern OO languages, and hear about how Apple developers are using Swift to achieve new levels of productivity and efficiency.
Full video available: http://oredev.org/2014/sessions/swift-swiftly
This is the slide for what I shared in JS Group meetup, 2014, Taiwan. It covers what JavaScript could do for making the program more "functional", the benefits, price and the limitation.
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.
Generating a custom Ruby SDK for your web service or Rails API using Smithyg2nightmarescribd
Have you ever wanted a Ruby client API to communicate with your web service? Smithy is a protocol-agnostic language for defining services and SDKs. Smithy Ruby is an implementation of Smithy that generates a Ruby SDK using a Smithy model. In this talk, we will explore Smithy and Smithy Ruby to learn how to generate custom feature-rich SDKs that can communicate with any web service, such as a Rails JSON API.
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.
Software Delivery At the Speed of AI: Inflectra Invests In AI-Powered QualityInflectra
In this insightful webinar, Inflectra explores how artificial intelligence (AI) is transforming software development and testing. Discover how AI-powered tools are revolutionizing every stage of the software development lifecycle (SDLC), from design and prototyping to testing, deployment, and monitoring.
Learn about:
• The Future of Testing: How AI is shifting testing towards verification, analysis, and higher-level skills, while reducing repetitive tasks.
• Test Automation: How AI-powered test case generation, optimization, and self-healing tests are making testing more efficient and effective.
• Visual Testing: Explore the emerging capabilities of AI in visual testing and how it's set to revolutionize UI verification.
• Inflectra's AI Solutions: See demonstrations of Inflectra's cutting-edge AI tools like the ChatGPT plugin and Azure Open AI platform, designed to streamline your testing process.
Whether you're a developer, tester, or QA professional, this webinar will give you valuable insights into how AI is shaping the future of software delivery.
Key Trends Shaping the Future of Infrastructure.pdfCheryl Hung
Keynote at DIGIT West Expo, Glasgow on 29 May 2024.
Cheryl Hung, ochery.com
Sr Director, Infrastructure Ecosystem, Arm.
The key trends across hardware, cloud and open-source; exploring how these areas are likely to mature and develop over the short and long-term, and then considering how organisations can position themselves to adapt and thrive.
Kubernetes & AI - Beauty and the Beast !?! @KCD Istanbul 2024Tobias Schneck
As AI technology is pushing into IT I was wondering myself, as an “infrastructure container kubernetes guy”, how get this fancy AI technology get managed from an infrastructure operational view? Is it possible to apply our lovely cloud native principals as well? What benefit’s both technologies could bring to each other?
Let me take this questions and provide you a short journey through existing deployment models and use cases for AI software. On practical examples, we discuss what cloud/on-premise strategy we may need for applying it to our own infrastructure to get it to work from an enterprise perspective. I want to give an overview about infrastructure requirements and technologies, what could be beneficial or limiting your AI use cases in an enterprise environment. An interactive Demo will give you some insides, what approaches I got already working for real.
Dev Dives: Train smarter, not harder – active learning and UiPath LLMs for do...UiPathCommunity
💥 Speed, accuracy, and scaling – discover the superpowers of GenAI in action with UiPath Document Understanding and Communications Mining™:
See how to accelerate model training and optimize model performance with active learning
Learn about the latest enhancements to out-of-the-box document processing – with little to no training required
Get an exclusive demo of the new family of UiPath LLMs – GenAI models specialized for processing different types of documents and messages
This is a hands-on session specifically designed for automation developers and AI enthusiasts seeking to enhance their knowledge in leveraging the latest intelligent document processing capabilities offered by UiPath.
Speakers:
👨🏫 Andras Palfi, Senior Product Manager, UiPath
👩🏫 Lenka Dulovicova, Product Program Manager, UiPath
GDG Cloud Southlake #33: Boule & Rebala: Effective AppSec in SDLC using Deplo...James Anderson
Effective Application Security in Software Delivery lifecycle using Deployment Firewall and DBOM
The modern software delivery process (or the CI/CD process) includes many tools, distributed teams, open-source code, and cloud platforms. Constant focus on speed to release software to market, along with the traditional slow and manual security checks has caused gaps in continuous security as an important piece in the software supply chain. Today organizations feel more susceptible to external and internal cyber threats due to the vast attack surface in their applications supply chain and the lack of end-to-end governance and risk management.
The software team must secure its software delivery process to avoid vulnerability and security breaches. This needs to be achieved with existing tool chains and without extensive rework of the delivery processes. This talk will present strategies and techniques for providing visibility into the true risk of the existing vulnerabilities, preventing the introduction of security issues in the software, resolving vulnerabilities in production environments quickly, and capturing the deployment bill of materials (DBOM).
Speakers:
Bob Boule
Robert Boule is a technology enthusiast with PASSION for technology and making things work along with a knack for helping others understand how things work. He comes with around 20 years of solution engineering experience in application security, software continuous delivery, and SaaS platforms. He is known for his dynamic presentations in CI/CD and application security integrated in software delivery lifecycle.
Gopinath Rebala
Gopinath Rebala is the CTO of OpsMx, where he has overall responsibility for the machine learning and data processing architectures for Secure Software Delivery. Gopi also has a strong connection with our customers, leading design and architecture for strategic implementations. Gopi is a frequent speaker and well-known leader in continuous delivery and integrating security into software delivery.
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.
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.
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
14. In Objective-C:
1. create a static, shared instance
2. initialize once and only once
3. add an sharedInstance accessor method
…for every singleton class.
Tedious.
98. Last summer I had an internship at Apple.
My views here, however, represent that of an open-source contributor,
and not an Apple employee. Any speculations on the future of MacRuby
are entirely mine and are in no way representative of any plans, attitudes,
or future directions that Apple may take. This presentation is neither
sponsored nor endorsed by Apple.
Apple: please donʼt sue me.
revolutionary graph-search algorithm that powers just about every network routing protocol
this quote of Dijkstra’s draws attention to a central conundrum facing Cocoa programmers today
the conundrum is this: Objective-C, the language we all know and love…
…provides us with an insufficiently powerful level of abstraction. We build the best desktop apps out there, but we do it in spite of ObjC.
So, as a language, what does ObjC lack?
I submit that perhaps the most fundamental problem with ObjC is its lack of support for code reuse. At the Objective-C level of abstraction, effective code reuse is like pulling teeth.
And sure, inheritance provides a good measure of code reuse. But for many use cases, it simply doesn’t apply.
Consider the singleton. It’s a great example of a common Objective-C pattern which cannot be abstracted out, forcing us to resort to boilerplate code.
Every singleton class needs its own static, shared instance. Single inheritance can’t solve the problem, and it’s questionable that multiple inheritance is the right solution in this case.
So, creating a singleton in Objective-C is really tedious. Add to the fact that very few people agree on the right way to go about this tedium - should you synchronize on sharedInstance, or init? Should you check for NULL or use pthread_once or dispatch_once? - and ensuring proper behavior seems hardly worth the trouble. It’s too tedious.
And tedium sucks.
A sufficiently powerful language would provide us with a code reuse mechanism like mixins.
Mixins, for those who haven’t heard of them, provide another level of abstraction into class definitions. Like classes, you define them and define method implementations in them; however, instead of including them in the class hierarchy, you mix them into classes - the resulting class copies the methods you defined in your mixin.
Here’s an example. In this language, the “include” keyword mixes a mixin into a class. By including the Singleton mixin in this class, it defines initialization and accessor methods as well as setting aside a static, shared instance.
Now we can access the shared instance. Easy.
And sure, I understand that the Objective-C language designers held off on implementing New and Fancy Ideas. And I agree with them.
But mixins have been around since Symbolics Lisp. Anyone remember that? I don’t. I wasn’t even born yet.
That was a while ago. And we, as Mac programmers, should ask more from our development tools.
Though Objective-C has a huge advantage in that it’s based on C, it also has a huge disadvantage - that it’s based on C.
Being a representation of a Von Neumann machine, C can solve any computable problem. But what’s interesting is that C is actually pretty expressive, even when you need to do fancy, comp-sci-sexy things. You’ve got a reasonable approximation of continuations with setjmp, of exceptions with sigsetjmp, and first-class functions with function pointers.
But all of these things are hideously unsafe. We’re programmers, not superheroes - if our tools allow us to make a mistake, we will make it.
And C’s unsafeness is visible in almost every part Objective-C.
We program in a high-level language. Why do we still have the ability to shoot ourselves so profoundly in the foot with raw pointers? You, or the library functions you call, can stomp all over memory silently and watch as you drown in bizarre and irreproducible behavior.
C’s ability to treat just about anything as a memory address means that you can bamboozle the hell out of the garbage collector.
Nowhere is the unsafe and backwards nature of C - and consequently, Objective-C - more apparent than exceptions. C really doesn’t play nice with the notion of exceptions at all, and has therefore hobbled ObjC exception support throughout ObjC’s lifetime.
ObjC exception handling is horrifically inefficient. Since on 32-bit exceptions are based on setjmp and longjmp, pretty much everything about them are expensive. Exception creation and try-blocks got much faster with 64-bit C++-compatible exceptions, but throwing them got even slower.
And the kicker is that the vast majority of Cocoa frameworks aren’t exception-safe. So there is absolutely no guarantee that objects will be cleaned up or finalized properly if you throw an exception.
So thanks to this, nobody ever checks for exceptions - honestly, when was the last time you checked for alloc throwing an NSMallocException? - and we make do with functions that take pointers to NSErrors and some functions that return either Carbon, Cocoa, POSIX, or Mach error codes.
Go ahead. Call me lazy.
But I’m tired of creating arrays manually. I want a language that has sufficient syntactic abstraction so that I can just create arrays inline. I mean, imagine if we had to do this to create NSStrings - it would be endlessly tedious!
And don’t even get me started on how tedious NSDictionary creation is. These may seem like syntactic quibbles to some of you, but I know that in the past I’ve avoided using dictionaries in favor of long if-else statements, just because creating dictionaries is so tedious!
Similarly, I want operator overloading, because it lets me say what I mean. I want the less-than sign to be transformed into a call to compare - and let’s be frank, operator overloading is never going to come to Objective-C.
Basically, I want a language that’s as well-designed as Cocoa.
And so far, the closest I have come to that ideal is when I write code in MacRuby.
For those of you that haven’t heard of it, MacRuby is a new implementation of Ruby, a scripting language from Japan.
MacRuby differs from the standard implementation of Ruby 1.9 in that its its virtual machine, optimization routines, bytecode generation, and just-in-time compilation are all implemented on top of LLVM, the Low-Level Virtual Machine project. LLVM is already blazingly fast, and I’m confident that its performance will only continue to improve.
In addition to replacing the Ruby 1.9 VM with the LLVM one, we also reimplemented the standard Ruby data structures on top of CoreFoundation. In addition to providing us with a set of memory-efficient, fast, and mature set of data structures, implementing MacRuby on top of Core Foundation also ensured that…
…Ruby objects are absolutely indistinguishable from Cocoa objects - they even respond to the same API calls! NS/CFStrings are Ruby strings, NS/CFArrays are Ruby arrays, NS/CFDictionaries are Ruby hashes.
But we go beyond what Objective-C offers, and return to a Smalltalk heritage where there are no primitive types. Everything descends from NSObject, even floats and integers.
Though MacRuby is an Apple-supported project, it is released under the Ruby license so you can embed it into your commercial applications.
The MacRuby team is one of the smartest and most focused I’ve ever seen. Laurent Sansonetti, an employee at Apple, started MacRuby just as an experiment to see how well Ruby would run on top of the Objective-C runtime and garbage collector. Yet in its current form, I truly believe that it’s stable enough
Clarification!
Bridges, as Tim pointed out in C4[1], are unreliable, difficult, and tend to be slow.
Explain the differences.
not a toy!
everyone has to deal with it sooner or later
explain what they are, what systems (Python, Ruby, Lua) use them
explain how much they suck
green threads suck
So. The big question.
MacRuby is fast. Not just Fast Enough, but fast.
This may surprise many of you, as most people know Ruby as “that weird, slow, Japanese space-Perl.” And the conception that Ruby is slower than other comparable languages has been true - up until now.
A good example of the speed boosts that we aim for is the Fibonacci sequence.
Take naïve implementations of the Fibonacci sequence, using recursion, in C…
and in Objective-C (using ObjC message sending),
and, predictably, C is going to be a lot faster. And trying to get MacRuby faster than C for everything is beyond the scope of this project.
But take the same Fibonacci implementation in Ruby, run it under MacRuby…
and we see that MacRuby is, in this benchmark, faster than Objective-C.
The answer lies in the --compile flag. MacRuby can compile Ruby source down to Mach-O x86 executables.
This is hugely exciting. Nobody else has done this before. And up until now, shipping a closed-source desktop application written in Ruby has been a Bad Idea - but now you can hide your source code from prying eyes.
keyword syntax is readable.
worst of both worlds: verbosity of keyword syntax and unreadability of ALGOL-style syntax
syntactic extensions to make ObjC calls look gorgeous.
optional set of layers
to make common idioms concise
nestable, elegant, yet completely optional
like in Lisp and Scheme
Ruby and Objective-C are almost absurdly similar - how similar, you ask?
contrived example, but talk about CoreImage, CoreGraphics, PDF documents
hooray for my GCD layer
talk about how things just work, and plug topfunky’s MacRuby screencast
hooray
whine about all of these features
be honest!
Though one can obviously treat Objective-C like a dynamic language, and give the ‘id’ type to everything, well-written and idiomatic Objective-C code takes advantage of static typing to catch errors before they happen. And because Ruby is a duck-typed language, you’re going to lose some power.
And rather than viewing this as a problem for MacRuby, I think this is a great opportunity for another language to come in and apply all the innovations in the world of static typing - type inference, currying, existential types - to the world of Cocoa. So, uh, someone get on that.
The 0.5 release of MacRuby is almost upon us. This release will be the first one based on the new virtual machine.
If you want to play with the new features now, I recommend checking out the source from MacRuby.org
or get builds for Snowy.
DISCLAIMER!
I’m here to talk about what is TECHNICALLY POSSIBLE, not what’s *going* to happen.
we want to be the fastest Ruby implementation around
we still need continuations, fibers, and to make all C exts compatible
The first thing people usually ask about MacRuby is “Does it run Rails yet?”
No. It doesn’t. And though we’d like to have it run Rails in the future, there’s still a lot of work to be done in that direction - revamping the sockets interface, improving IO speed and flexibility, and making sure that MacRuby supports all the maddening little metaprogramming quirks of which Rails takes advantage.
Much more interesting to me is the question of whether or not