Tuesday, July 26, 2011

The Trouble with Erlang (or Erlang is a ghetto)


This is a blog post I have been meaning to write for quite some time. I lament doing so because I've made a considerable time investment into the Erlang infrastructure and really love some of its ideas. Erlang has done a great and still unique job of synthesizing a number of concepts in a very interesting way. But after using the platform in various capacities for some 4 years now, there are some glaring issues I think need to be called out.

Records suck and there's no struct/map data structure

Erlang has a feature called "records" which uses the preprocessor to give you something akin to a struct or map, i.e. a way to access named fields of a particular object/term within the system. As far as I can tell, there's pretty much universal agreement within the community that this is a huge limitation, and several proposals have been made to remedy the problem. The requested feature has typically been referred to as a "frame", and several proposals for implementing frames have been floating around for several years. Yet no action has been taken on the problem.

So why doesn't Erlang have frames? While Erlang is an open source project, its implementation and release cycle are managed by Ericsson, the company that created it, and Ericsson just doesn't seem to care. I'm not sure what Ericsson's priorities are when it comes to adding features to Erlang, but in my opinion they're doing a worse job of engaging the community than Oracle has been doing with Java. I hate Oracle as a company, but so far it feels like they've actually done a fairly good job managing Java development and moving Java forward. I can't say that at all with Ericsson, and frames are the quintessential example of this.

Erlang sucks at managing memory

Once upon a time I looked upon BEAM's design as the future pattern all virtual machines would follow. I strongly encourage you to read that post before taking issue with anything I have to say in regard to this matter. I have completely reversed my opinion since the time I write that post.

The other night I tweeted "If you're looking for a language that gets multicore concurrency right, look at how Azul implemented Java on their Vega architecture" and I definitely stand by that. Azul is a company that got a lot of smart hardware and software people together and had them work on designing a custom system which would scale to hundreds of CPU cores (up to 768 of them), heaps that topped 500 GB (up to 768GB), and had the GC pause only 10-20ms at a time. The realtime performance characteristics Azul managed to eek out of their system lead them to often describe their GC as "pauseless".

Where Azul was scaling up to 768 CPUs in 2007, Erlang was crapping out around 15 CPUs in 2009. For everything Erlang had to say about the importance of immutability and messaging in concurrent systems, and despite Joe Armstrong's promise that "your Erlang program should just run N times faster on an N core processor," it turns out that on the Erlang VM the N core processor promise had an upper bound of around 15.

Why is this? Erlang implements its own memory allocator and can't take advantage of libraries like tcmalloc to provide better multithreaded heap management. I can't fault a language VM like BEAM for doing this save for the fact that what Erlang provides is relatively crappy.

Erlang has done a fairly decent job given the constraints it was working within. Erlang wanted to provide a soft realtime system, and managed to create one that works on commodity architectures, unlike the Azul Vega appliances which require custom hardware. However, Azul has managed to port their version of the JVM to x86 hardware with their Zing Architecture, which wraps the JVM in a separate runtime container which uses software transactional memory to replace the hardware transactional memory found on the Vega appliances. It's higher overhead but provides similar guarantees. Java also provides the RTSJ specification for building realtime systems in Java.

Both Zing and RTSJ demonstrate that Erlang's approach to building a realtime garbage collected system, using separate heaps per process, isn't necessary to still provide realtime characteristics. Erlang's approach of using separate heaps is nonstandard and comparatively hard to optimize because most other systems are using a shared heap model. Azul's Vega architecture shows that shared heaps can scale up to hundreds of CPU cores and hundreds of gigabytes of heap while still providing realtime characteristics. Even more exciting is that AMD's Fusion architecture, which they're implementing in conjunction with ARM, provides read and write barriers at the hardware level necessary to provide a system like Azul using commodity hardware.

However, I think everything I just said is moot for the majority of applications. People building messaging systems want the best performance possible but don't typically have software realtime constraints. The Erlang VM's approach to soft realtime made a design decision which hampers its messaging speed, namely the use of separate heaps, which requires messages be copied from one heap to another. This means the Erlang VM does not provide zero-copy messaging. Every time you send a message from one Erlang process to another, some amount of data must be copied.

Erlang has partly mitigated this problem by providing a separate shared heap for binaries, which are the Erlang type for arbitrary blobs of binary data. This means if you ensure the majority of data you move around doesn't contain anything of significant size except binaries, perhaps this won't be a problem. However, if you're moving large collections of numbers around (Erlang's strings-as-lists-of-integers come to mind), messaging will be comparatively slow compared to a zero copy system.

Various solutions to this have been proposed for BEAM, such as switching from a shared-nothing heap to a shared heap or a hybrid heap (where message-passed objects are copied once), however the Erlang garbage collector is not suitable for managing shared/hybrid heaps and would need to be rewritten for the task, and nobody has managed to get the shared/hybrid heaps working with Erlang's SMP scheduler, or rewritten the garbage collector to be more suitable to the task of managing a shared/hybrid heap.

A potential solution to this? Erjang, an implementation of Erlang on the JVM, provides zero copy messaging using the Kilim library for lightweight threads.

JIT? What JIT?

Erlang has a "JIT" compiler called HiPE, which is mostly hype. I put JIT in quotes because HiPE is mostly an Erlang-to-native-code compiler with a limited set of backends which does a pretty bad job of optimizing and can't use runtime profiling information to improve the quality of the native code it generates in the way JIT compilers like HotSpot are able to. Calling HiPE a just-in-time compiler is a stretch as it is for most part an ahead-of-time native compiler for Erlang. The quality of native code produced by HiPE can be so poor that it's often outperformed by the userland bytecode interpreter implemented in BEAM.

HiPE can perform a very limited set of optimizations. In particular, Erlang code is factored into modules, and HiPE's inliner is unable to inline natie code across modules. This is due to HiPE's lack of a deoptimizer (a.k.a. deopt), or a way to translate JITed code back into bytecode, which is necessary in general but particularly necessary in Erlang for cases like hot code swapping. Deopt support is a feature of many JIT compilers in languages more popular than Erlang, most notably the HotSpot compiler on the JVM. Google's V8 virtual machine for JavaScript added deoptimization support as part of their "Crankshaft" compilation infrastructure.

Erlang isn't general purpose

Erlang hates state. It especially hates shared state. The only facility provided by the language for dealing with shared state in Erlang is called "Erlang Term Storage" and provides a Judy array that several Erlang processes can talk to. The semantics of ETS are fairly awkward and using it directly is difficult. Erlang has a baked-in database called Mnesia which is built on ETS. Mnesia's performance characteristics aren't great but it provides a friendlier face for ETS. These are the only solutions to shared state baked into the language.

What should you do if you want to deal with a shared-state concurrency program in Erlang? The general advice is: don't. Erlang isn't designed for solving shared-state concurrency problems. If you encounter a shared state concurrency problem while developing your Erlang program, sorry, you picked the wrong language. Perhaps you should move along... and Clojure offers you some great ways to tackle shared state concurrency problems.

The syntax is atrocious

I think this one goes without saying. That said...

Let me come at this from a different angle than you're probably expecting: I've recently started working with Clojure, and I have to say, I really think Erlang would've been a lot better off with a Lisp-like syntax than a Prolog-inspired syntax. To-date Erlang is the only popular language with a Prolog inspired syntax and all of the awkward tokens and gramatical constructions make me wish it just had a simple Lispy syntax. This has been implemented in Robert Virding's Lisp Flavoured Erlang, which is very cool and worth checking out.

That opinion might come as a surprise, because the main project I was developing in Erlang was Reia, a Ruby-like syntax and runtime for Erlang. I've discontinued this project, for many reasons, one of which is because it's been surpassed in features and documentation by a similar project, José Valim's Elixir. After years of working on Reia, I've really grown to believe I'd rather spend my time working on a language which incorporates Erlang's ideas, but on the JVM with mutable state.

The Erlang cargo cult would love to hang me out to dry for even saying that... so let me address it right now.

Immutable state sucks and isn't necessary for Erlang-Style Concurrency

Immutable state languages force object creation whenever anything changes. This can be partially mitigated by persistent data structures, which are able to share bits and pieces of each other because they're immutable. This works, for example, when attempting to create a sublist that consists of the last N elements of a list. But what if you want the first N elements? You have to make a new list. What if you want elements M..N? You have to make a new list.

In mutable state languages, performance problems can often be mitigated by mutating local (i.e. non-shared) state instead of creating new objects. To give an example from the Ruby language, combining two strings with the + operator, which creates a new string from two old ones, is significantly slower than combining two strings with the concatenating >> operator, which modifies the original string. Mutating state rather than creating new objects means there's fewer objects for the garbage collector to clean up and helps keep your program in-cache on inner loops. If you've seen Cliff Click's crash course on modern hardware, you're probably familiar with the idea that latency from cache misses is quickly becoming the dominating factor in today's software performance. Too much object creation blows the cache.

Cliff Click also covered Actors, the underpinning of Erlang's concurrency model, in his Concurrency Revolution from a Hardware Perspective talk at JavaOne. One takeaway from this is that actors should provide a safe system for mutable state, because all mutable state is confined to actors which only communicate using messages. Actors should facilitate a shared-nothing system where concurrent state mutations are impossible because no two actors share state and rely on messages for all synchronization and state exchange.

The Kilim library for Java provides a fast zero-copy messaging system for Java which still enables mutable state. In Kilim, when one actor sends a message, it loses visibility of the object it sends, and it becomes the responsibility of the recipient. If both actors need a copy of the message, the sender can make a copy of an object before it's sent to the recipient. Again, Erlang doesn't provide zero-copy (except for binaries) so Kilim's worst case is actually Erlang's best case.

The limitations of concurrent objects in Reia were solved using mutable state in my Celluloid concurrent object library for Ruby, but that deserves a blog post in and of itself.

Single assignment is just as problematic as destructive assignment

Erlang doesn't allow destructive assignments of variables, instead variables can only be assigned once. Single assignment is often trotted out as a panacea for the woes of mistakenly rebinding a variable then using it later expecting you had the original value. However, let me show you a real-world case that has happened to me on several occasions which wouldn't be an error in a language with destructive assignment and pattern matching (e.g. Reia).

There exists a complimentary case of mistaken variable usage to the afforementioned problem with destructive assignment. In single-assignment programs, it involves mistakenly using the same variable name twice excepting the variable to be unbound the second time:

The first pattern matching expression binds the Foo variable to something. In the second case, we've mistakenly forgot Foo was already bound. What's the result?

exception error: no match of right hand side... 

We get no compiler warning in this case. This is the type of error you only encounter at runtime. It can lay undetected in your codebase, unless you're writing tests. Know what other problem writing tests solves? Mistaken destructive assignments.

Single assignment is often trotted out by the Erlang cargo cult as having something to do with Erlang's concurrency model. This couldn't be more mistaken. Reia compiled destructive assignments into Static Single Assignment (SSA) form. This form provides versioned variables in the same manner as most Erlang programmers end up doing manually. Furthermore, SSA is functional programming. While it may not jive with the general idealism of functional programming, the two forms (SSA and continuation passing style) have been formally proven identical.

The standard library is inconsistent, ugly, and riddled with legacy

Should module names in the standard library be plural, like "lists"? Or should they be singular, like "string"? Should we count from 1, as in most of the functions found in things like the lists module, or should we count from 0 like the functions found in the array module? How do I get the length of a list? Is it lists:length/1? No, it's erlang:length/1. How do I get the Nth element of the tuple? Should I look in the tuple module? Wait, there is no tuple module! Instead it's erlang:element/2. How about the length of a tuple? It's erlang:tuple_size/1. Why is the length of a list just "length" whereas the length of a tuple is "tuple_size"? Wouldn't "list_length" be more consistent, as it calls out it works on lists?

When we call erlang:now() to get the current time, it returns {1311,657039,366306}.  What the hell does that mean? It's a tuple with three elements. How could time possible need three elements? A quick look at the documentation reveals that this tuple takes the form {Megaseconds, Seconds, Microseconds}. Separating out Microseconds makes sense... Erlang has no native decimal type so using a float would lose precision. But why split apart Megaseconds and Seconds?

Once upon a time Erlang didn't support integers large enough to store the combination of Megaseconds and Seconds, so they were split apart. The result is a meaningless jumble of three numbers, which you have to run through the confusingly named calendar:now_to_local_time/1 function to get a human meaningful result, which doesn't tell you what time it is now, but instead takes the tuple that erlang:now/0 returns as an argument and will spit back meaningful {Year, Month, Day} and {Hour, Minute, Second} tuples.

Legacy in the grammar

Try to use "query" as an atom in Erlang, e.g. {query, "SELECT * FROM foobar"}. What happens?

syntax error before: ','

This is because 'query' is a reserved word which was reserved for Mnemosyne queries. Never heard of Mnemosyne? That's because it's an archaic way of querying Erlang's built-in database, Mnesia, and has been replaced with Query List Comprehensions (QLC). However, it remains around for backwards compatibility.

You can't use "query" as a function name. You can't tag a tuple with "query". You can't do anything with "query" except invoke a deprecated legacy API which no one uses anymore.

Strings-as-lists suck

Erlang provides two ways of representing strings. One is as lists of integers, which is the traditional way that most of the library functions support. Another is binaries. Erlang has no way of differentiating lists of integers that represent strings from lists of integers that are actually lists of integers. If you send a list of integers in a message to another process, the entire list of integers is copied every time. On 64-bit platforms, every integer takes up 64-bits.

The obvious solution here is to use binaries instead of lists of integers. Binaries are more compact and exist in a separate heap so they aren't copied each time they're sent in a message. The Erlang ecosystem seems to be gradually transitioning towards using binaries rather than strings. However, much of the tooling and string functions are designed to work with list-based strings. To leverage these functions, you have to convert a binary to a list before working with it. This just feels like unnecessary pain.

The abstract concept of lists as strings isn't inherently flawed. In many ways it does make sense to think of strings as lists of characters. Lists as strings would probably make a lot more sense if Erlang had a native character type distinct from integers which was more compact and could avoid being copied each time a string is sent in a message like a binary. Perhaps in such a system it'd be possible to avoid transcoding strings read off the wire or completely transforming them to a different representation, which is costly, inefficient, and often times unnecessary (yes, this is a problem with Java too).

There's no "let"

Want a local binding in Erlang? Perhaps you've used let for this in a Lisp. What happens when you try to do this in Erlang? Even attempting to use "let" in Erlang just yields: syntax error before: 'let'

Once upon a time Erlang was supposed to get let bindings, and the "let" keyword was set aside for this purpose. But much like frames, it never happened. Instead, let is now an unimplemented reserved word which just breaks your programs.

There's no "nil"

In Clojure, I can write the following: (if false :youll-never-know).  This implicitly returns "nil" because the condition was false. What's the equivalent Erlang?

Erlang forces you to specify a clause that always matches regardless of whether you care about the result or not. If no clause matches, you get the amazingly fun "badmatch" exception. In cases where you don't care about the result, you're still forced to add a nonsense clause which returns a void value just to prevent the runtime from raising an exception.

Where do I go from here?

Again, I want to emphasize that I have a great deal of respect for Erlang conceptually. But at this point I'd like to take what I've learned and go elsewhere with it. One direction I've gone is the Celluloid concurrent object library for Ruby. You can read more about it in the original blog post I wrote about Celluloid, which is a bit out-of-date at this point. I have a forthcoming blog post which should dive a bit deeper into Celluloid's guts and how it can do things which aren't possible in Erlang.

As you've probably guess from the references sprinkled throughout this post, I'm learning Clojure. I'm a fan of the JVM and Clojure provides a great functional language for leveraging the JVM's features. I think the sort of things that I'd be writing in Erlang I'll try writing in Clojure instead. Clojure has elegant Lisp syntax. Clojure has maps. Clojure has powerful facilities for dealing with concurrent shared state problems. Clojure has great semantics for safely managing mutable state in a concurrent environment. Clojure has real strings. Clojure has let. Clojure has nil. Clojure runs on the JVM and can leverage the considerable facilities of the HotSpot JIT and JVM garbage collectors.

I'd also like to try my hand at creating a JVM language, especially with the impeding release of Java 7 this Thursday. Java 7 brings with it InvokeDynamic, a fast way to dispatch methods in dynamic languages, and considerably eases the difficulty of implementing dynamic languages on the JVM. Stay tuned for more details on this.

659 comments:

«Oldest   ‹Older   601 – 659 of 659
intercom4u said...

Nice Post.
אינטרקום עם מצלמה

Pune Escorts said...

Hello Friends, I am Allia a High Profile Hot Pune Escorts. I am only 23 and living in Pune. If you are looking Hot Pune Escorts in your bed then visit my website today and booking.I am availbale 24/7.

Pune Escorts
Pune Escort
Escorts Pune
Pune Escorts Service
Escorts in Pune
Escort Services in Pune
Call Girls in Pune

Metalizing Gun said...


Airoshot Blast is a Leading Manufacturer, Supplier, and exporter of Sand Blasting Machine & Shot Blasting Machine. We also Manufacture and supply customized grit blasting Machine with dust collectors & the best quality sandblasting room

See More:-
.Shot Blasting Cabinet
Grit Blasting Machine
Portable Shot Blasting Machine



Airo shot blast said...

Sand Blasting Machine is applying to rust, corrosion removal, smooth the rough surfaces of metals and non-metals. Sandblasting machine is using to clean or mold a surface using abrasive material known as abrasive which is propelled using high pressure typically through compressed air or blast wheel. Sand Blasting Machine are various types so as a Portable Sandblasting Machine, Sand Blasting Cabinet, Blast Room.

See More:
Sand Blasting Machine
Shot Blasting Machine
Sand Blasting Hopper
Suction Blasting Cabinet

sandblastingmachine said...

Shot Blasting Machine Manufacturer in India. Shot blasting machine also provides shot blasting cabinet, portable shot blasting machine.Our organization is known to be one of the trustworthy Supplier, Manufacturers, and Exporters of the Sandblasting machine, Thermal Spray Guns, and Abrasive Blasting Media. For more Information contact us @+918003997469

See More:-
Sandblasting Cabinet
Portable shot blasting machine
Portable sandblasting machine

Spot Less said...

She is a high society young lady comes into this calling just to win some extra bucks of money.
||chennai escorts
||escort in chennai
||chennai escorts service
||independent chennai escorts
||chennai escort
||chennai call girl
||call girl service in chennai
||call girl in chennai
||escort service in chennai
||Chennai Escorts
||https://tinyurl.com/ycvgjz7p
||chennai escorts
||escort in chennai
||chennai escorts service
||independent chennai escorts
||chennai escort
||chennai call girl
||call girl service in chennai
||call girl in chennai
||escort service in chennai
||Chennai Escorts
||https://tinyurl.com/y9vdrtkv
||Bangalore Escorts
||Escorts in Bangalore
||Escort in Bangalore
||Bangalore escort
||Independent Bangalore escorts
||Independent Escorts in Bangalore
||escort service in Bangalore
||Bangalore Escorts Service
||Bangalore Female Escorts
||Bangalore Russian Escorts
||Escort Agency in Bangalore
||Female Escort in Bangalore
||Call Girls in Bangalore
||Bangalore Call Girl
||Bangalore Escort Girls
||Bangalore Escorts Agency
||https://tinyurl.com/y85awo5c

plansite said...

قیمت حمل بار به ترکیه
حمل بار به ترکیه

plansite said...

قفل اثر انگشتی

دستگیره دیجیتال
دستگیره دیجیتالی
خرید قفل الکترونیکی کمد
قیمت قفل الکترونیکی استخری

قفل مچ بندی

Grit Blaster said...

We Grit Blasting Machine Manufacturers in India, Supplier and Exporter of Air Operated Abrasive Blasting Machines like shot blasting machine, Portable sand blasting machine, Automated grit blasting machine,
and Wood Working Machinery Dust Extraction unit, Abrasive Blasting Media grit blasting machines manufacturers in India, and various others. All these products are highly demanded in the market for their enhanced productivity, high efficiency, low maintenance, least running cost, optimum performance, and convenient installation.

See More:
Wet grit blasting machine
Portable Grit Blasting Machine
Grit blasting Cabinet
Flame Spray Gun
Grit Blasting Machine Price in India

sandblastingmachine said...


Unique blog, thanks for sharing!

Micro Blaster is India's Leading manufacturer of Portable Sand Blasting Machine, Grit Sand Blasting Machine, Sand blasting machine, Thermal Spray Guns,Shot Blasting Machine Abrasive Materials, Matelizing Gun Wires for sale & exporters at low cost & best quality.

See More:-
Sand Blasting Cabinet
Shot Blasting Room
Portable Shot Blasting Machine

Thermal Spray Gun said...

Thermal Spray Gun company manufacture and export all types of spray gun-like thermal spray, Powder Flame spray gun, Electric Arc spray, HVOF (High-Velocity Oxy-fuel) Spray Gun, Arc Spray Gun, Zinc Spray Gun, etc. Involve high temperatures which ultimately cause frequent wear & tear of parts being used in these spray guns. Wire Flame Spray Gun Is having a specialized team of employees who are experts in different manners of Wire Flame Spray Gun Manufacturing technology. Our continuous efforts are directed towards reducing the operational cost of all metalizing spray guns without making any compromise in their quality.

See More:
Flame Spray Gun
Sand Blasting Machine
Portable Abrasive Shot Blasting Machine
Zinc Spray Gun

sandblastingmachine said...

Unique blog, thanks for sharing!

Micro Blaster is India's Leading manufacturer of Portable Sand Blasting Machine, Grit Sand Blasting Machine, Sand blasting machine, Thermal Spray Guns,Shot Blasting Machine Abrasive Materials, Matelizing Gun Wires for sale & exporters at low cost & best quality.

See More:-
Sand Blasting Cabinet
Shot Blasting Room
Portable Shot Blasting Machine

Clark said...

great.
global asset management

Manish Jangid said...

We are is the best Sand Blasting Machine manufacturer in Jodhpur , India offers a complete machine with the R&D. Our team of experts essentially brings you a customized machine for efficiently increasing the result. We also offer grit blasting machine, Sand blasting machine, Shot blasting machine, and abrasive media, Wire Flame Spray Gun , Thermal Spray Gun at a low price.



Pressure Blasting Cabinet
sandblasting Machine
Portable Shot Blasting Machine
Arc Spray Gun
Metalizing Gun

Contact Us :
Mob. No - 91-8003997469
Mail Id - info@sandblastingmachine.in

Fixadoor said...

valuable information
Garage door repair Mississauga

Jin1234 said...

it is really a great and helpful piece of info. I am glad that you shared this helpful information with us. Please keep us
online astrology

Manish Jangid said...

Unique blog, thanks for sharing!
We are is the best Sand Blasting Machine manufacturer in Jodhpur , India offers a complete machine with the R&D. Our team of experts essentially brings you a customized machine for efficiently increasing the result. We also offer grit blasting machine, Sand blasting machine, Shot blasting machine, and abrasive media, Wire Flame Spray Gun , Thermal Spray Gun at a low price.



Pressure Blasting Cabinet
sandblasting Machine
Portable Shot Blasting Machine
Arc Spray Gun
Metalizing Gun

Contact Us :
Mob. No - 91-8003997469
Mail Id - info@sandblastingmachine.in

plansite said...

پارتیشن اداری شیشه ای
پارتیشن اداری ام دی اف
پارتیشن تک جداره
پارتیشن اداری

Nil123 said...

it is really a great and helpful piece of info. I am glad that you shared this helpful information with us. Please keep us
satta chart

Sumer said...

Sand Blast are specialized in the Manufacturing of Sand Blasting Machine and Shot Blasting machine at affordable prices. Shot Blasting Machine manufacturers are customized and slandered type portable shot blasting equipments that are used to clean the surface. Sand blasting machine manufacturers provide Portable Sand Blasting Machine with various type portable blasting equipment like Blast Hopper, Blast Rooms, Blast Cabinet, etc. Airo Shot blasting manufacture a wide range of portable shot blasting machine/sand blasting machines for various applications to meet the requirements of different sectors. We also manufacture vibratory finishing shot blasting machine, sand blasting chambers, and automated sand & shot blasting machine. Sand blasting is a method used to clean, strengthen (peen), or polish metal and remove old paints. It's also called "Sandblasting graffiti removal machine". The shot blasting machine is used in almost every industry. In pneumatically operated machines, the media is accelerated by compressed air and is projected by nozzles/guns on the component to be blasted. Blasting can be dry blasting or wet blasting. The blasting task determines the choice of abrasive media. Sandblasting machine is used in almost every industry that uses metal, including aerospace, automotive, construction, foundry, shipbuilding, rail, and many others.

See More:
Shot Blasting Machine in Jodhpur
Pressure Sand Blasting Machine
Sand Blasting Safety Equipment
Grit Blasting Machine Manufacturers in India
Wire Flame Spray Gun
Metalizing Gun

Unboxthedigital said...

[05/06, 6:51 pm] 😎: Woahh great i loved it Casing pipe mann you doing soo welll....
[05/06, 6:52 pm] 😎: Reallyy good post dear upvc Casing pipe thanks for sharing this valuable infooo...
[05/06, 6:53 pm] 😎: Thanks for sharing this damnn perfect hdpe pipe and understandable article for us... really great work

Clark said...

great.
Global asset management Seoul

ramsingh said...

NICE BLOG ! I LIKE IT. thanks for sharing. Kanhai Jewels is Mumbai based company established in 2001, We are manufacturer and wholesaler of Indian Jewellery and Western trendy jewellery, as well as Exporters of Traditional Indian Jewellery.
website: Artificialjewellery

Decoro events said...

Nice content, this was my first visit to your page and I really liked it and will visit more often. Thanks for Sharing!
https://decoro.in/occassions/romantic__trashed/proposal-setup/

Manish Jangid said...

Nice Blog!!!
Here we are manufacturer of sand blasting machine Price in india. for more details contact us. we are also Manufacturers of shot blasting machine & grit blasting machine.
See More:
Portable Sand Blasting Machine
Sand Blasting Cabinet
Sand Blasting Machine

Manish Jangid said...

Nice Blog!!!
Here we are manufacturer of sand blasting machine Price in india. for more details contact us. We are also Manufacturers of shot blasting machines & grit blasting machines.
See More:
Portable Sand Blasting Machine
Sand Blasting Cabinet
Sand Blasting Machine

Delhi Escorts | High Profile VIP Delhi Escorts Service 24/7 said...

Hello Ye you have shared Good Article...Thanks for the information, I am Riya Sharma a High Profile VIP Delhi Escorts.I am only 23.and Looking So hot.My BrestSize is 34.Looking For Delhi Call Girls,Then Call me,I am giving you Unlimited Sex Entertainment.I am Available 24/7.to more infoPlese Visit my website today https://delhi-escortss.com/.

Delhi Escort
Escorts Delhi
Delhi Escorts Service
Cheap Escorts in Delhi
Escort Services in Delhi
Call Girls in Delhi
Delhi Independent Escorts
Delhi Russian Escorts

micro blaster said...

Nice Blog!!!!
Here Micro Blaster is a Sand blasting machine Manufacturers in india.we also supplier of shot blasting machine, grit blasting machine.
see more:
sand blasting machine Price in india
Sand Blasting Machine

Bhavya gaur said...

For those who want Government Jobs Latest Update and news, this is the website to come. You can check here for the latest updates about govt job. On this website you can found  All India Govt Jobs Employment News of Central and State Government Jobs, Govt Undertaking, Public Sector, Railway and Bank Jobs In India.

Army Recruitment
Railway Jobs in India
Teaching Jobs
Govt Engineering Jobs
Bank Jobs in India
State Government Jobs

Grit Blaster said...

The best portable sand blasting machine manufacturers in Jodhpur and suppliers in Jodhpur, India. All kinds of Sand blasting machine are manufactured and exported all over India by us. Our sand blasting machine price in India is best among all other suppliers. Client review is our aim like timely delivery, the best price for the machines, timely services of the machines. We have all types of portable sandblasting machine with different dimensions.


Sand Blasting Machine is applying to rust, corrosion removal, smooth the rough surfaces of metals and non-metals. Portable Sandblasting machine is using to clean or mold a surface using abrasive media which is propelled using high pressure typically through compressed air or blast wheel. It is various types so as a Portable Sandblaster, Sand Blasting Cabinet, Blast Room.

This process mainly helps to prevent harm and present perfection before the material is coated with a protective layer and for that this process becomes necessary in all metallic structures before it undertakes to coat. There are various methods of abrasive cleaning but Sand blasting Machine is the most effective method among them for cleaning metal surfaces.


See More:
Sand Blasting Machine
Portable Sand Blasting Machine manufaturers
Sand Blasting Cabinet
Pressure Sand Blasting Machine

HashtagPP said...

Hi,
I really appreciate your effort of sharing this post. Thanks for enlightening!

For Web Development services, contact:
https://hashtagpp.com

neet said...

zigya.com is the only organization that provides CBSE, NCERT and State wise board solutions for free, that too online.
So you can get an online test series of NEET and JEE 2020 from www.zigya.com for free.
neet previous year solved paper
NEET Test Series

NEET Test your self
NEET



https://neetnotesjee.blogspot.com/2020/01/neet-solved-papers-zigya.html
https://www.zigya.com/competition/NEET
https://www.zigya.com/test-series/neet
https://www.zigya.com/previous-year-papers/neet/12
https://www.zigya.com/competition/neet/subject
https://www.zigya.com/previous-year-papers
https://www.facebook.com/Zigyaneet/

Arena Mesin said...

toko mesin,
kios mesin,
toko bunga jogja,
mesin pelet,
toko mesin makanan,
toko bunga jogja,

Grit Blaster said...

Airo Shot Blast is Leading Manufacturer, Supplier & Exporter of Sand Blasting Machine price in India, Shot Blasting Machine, Grit Blasting Machine, Sand Blasting Cabinet, Sand Blasting Hopper for sale.
See More :
Portable Sand Blasting Machine Manufacturer in India
Sand Blasting Machine Price in India
Pressure Sand Blasting Machine
Sand Blasting Machine Price

Grit Blaster said...

Grit Blaster is Leading Manufacturer, Supplier & Exporter of Sand Blasting Machine Price, Sand Blasting Cabinet, Sand Blasting Hopper, Sand Blasting Room in India at a low price for sale.
See More:
Portable Sand Blasting Machine Manufacturer in India
Sand Blasting Machine Price
Sand Blasting Machine Supplier

Escort Service said...

Are you looking for call girls, then we have a stock of escort agency, we have one to one female hot girls to provide 24/7 service to you and can be enjoyed by contacting our website.Cheap Call Girls In Neemrana

Grit Blaster said...

Grit Blaster is Sand Blasting Machine Manufacturer, Supplier in all countries. Sand blasting machine Supplier in India is an effective way to harness the abrasive qualities of the material to thoroughly clean an industrial or commercial component. The various styles and sizes of Sand blasting machines price India that are available make abrasive blasting a perfect solution for companies in many different manufacturing and repair industries.

See More :

Portable Sand Blasting Machine Manufacturer in India
Sand Blasting Machine Price in India
Pressure Sand Blasting Machine
Sand Blasting Machine Price

Unknown said...

Hello I am Mansi Sharma workng as a modal in mansi escort service in manali. We are Provide All Kind Of Profile Like : Indian Profile - College girls, Housewife

Escorts, Punjabi Escorts, , Escorts Profile, manali model, Ramp Model and Top Classical escorts girls available in manali.
http://www.mansiescorts.com/

bharuch Call Girls
bharuch escorts
call girl in bharuch


chamba Call Girls
chamba escorts
call girl in chamba

chitkul Call Girls
chitkul escorts
call girl in chitkul

chail Call Girls
chail escorts
call girl in chail

Grit Blaster said...

Airo Shot Blast is Sand Blasting Machine Manufacturer in India. We also Manufacturer, Supplier & Exporter of Shot Blasting Machine, Grit Blasting Machine, Sand Blasting Hopper in India at a low price for sale.
See More :
Sand Blasting Machine price in India
Sand Blasting Machine

dev said...

I have learned a lot from your article and I’m looking forward to apply
digital marketing company in delhi
best digital marketing company in delhi
digital marketing company in delhi ncr

Grit Blasting Machines said...

Grit Blasting Machine is a technique which smoot a surface with the help of high-velocity steel abrasive material. The grit blasting machine method helps in obtaining the cleaning and preparation of the surfaces for the secondary finishing operations. The selection process of the type of grit blasting equipment and machines depends on the size and shape of the equipment. The surface to be cleaned, the required final surface finish specification, and the overall required process.

We are grit blasting Machine Manufacturer in India, Supplier & Exporter of, grit blasting cabinet, room, hopper in India at a low price for sale.
See More:
Grit Blasting Machine Price in India
Grit Blasting Machine Manufacturers

Sumer said...

Sand blasting Cabinets are one of the top manufacturers of abrasive Sand Blasting Cabinet Manufacturer in India such as Pressure Blasting Cabinet (PB) and Suction Blasting Cabinet(SB) from India. The superior quality blasting cabinet machines are widely applied for varied uses in the construction, agricultural and other industrial applications for surface cleaning of concrete and metal surfaces efficiently.
See More:
Sand Blasting Cabinets
Sand Blasting Cabinet price in India
Sand Blasting Cabinet Manufacturers

Sumer said...

We are is the leading Grit Blasting Machine manufacturer in India offers the complete automatic grit blasting machines with the R&D (Research & Development). Our team of experts mainly brings you a customized machine for efficiently increasing the result. Based on the complete understanding of the prerequisite of customers along with other essential conditions, we design the complete system accordingly in more uniqueness.

See More :
Grit Blasting Machine
Grit Blasting Machine Price in India
Grit Blasting Machines Manufacturers

rishabh jangid said...

Nice Blog!!!
Here we are Manufacturers of Sand Blasting Cabinet in india.we provide all type of sand blasting machine, shot blasting machine & Grit blasting machine.
See More:-
Large Sand Blasting Cabinet
Sand Blasting Machine

dev said...

Hi! I really like your contentYour post is really informative.
sgb global tech
.sgb globaltech

Grit Blasting Machines said...

Grit Blasting Machine is a technique which smoot a surface with the help of high-velocity steel abrasive material. The grit blasting machine Manufacturer in India method helps in obtaining the cleaning and preparation of the surfaces for the secondary finishing operations. The selection process of the type of grit blasting machines and equipment depends on the size and shape of the equipment. The surface to be cleaned, the required final surface finish specification, and the overall required process.

See More:
Grit Blasting Machine
Grit Blasting Machine price
Grit Blasting Machine Manufacturer in India

Refinery Automation said...

Just wanted to say I love reading your blog. we provide Gasoline Blending Services at affordable prices. for more info visit our website.

Unknown said...

Hello I am Mansi Sharma workng as a modal in mansi escort service in manali. We are Provide All Kind Of Profile Like : Indian Profile - College girls, Housewife

Escorts, Punjabi Escorts, , Escorts Profile, manali model, Ramp Model and Top Classical escorts girls available in manali.
http://www.mansiescorts.com




Amritsar Call Girls
Amritsar escorts
call girl in Amritsar


Ambala Call Girls
Ambalar escorts
call girl in Ambala

Agra Call Girls
Agra escorts
call girl in Agra

Ahmedabad Call Girls
Ahmedabad escorts
call girl in Ahmedabad

Almora Call Girls
Almora escorts
call girl in Almora

Baddi Call Girls
Baddi escorts
call girl in Baddi

Bharuch Call Girls
Bharuch escorts
call girl in Bharuch

Chamba Call Girls
Chamba escorts
call girl in Chamba

Chitkul Call Girls
Chitkul escorts
call girl in Chitkul

sona kirar said...

I have read your article, it is really interesting and has lots of useful information. I also recommend it to friends so they can read it and they see the same thing
Website: Main Mumbai Bazar

rishabh jangid said...

Nice Blog!!!
Here we are Manufacturers of Sand Blasting Cabinet in india.We provide all type of sand blasting machine, shot blasting machine & Grit blasting machine.
See More:-
Large Sand Blasting Cabinet
Sand Blasting Machine

Universal Investment Strategies Reviews said...

Dear Admin,
I am Universal Investment Strategies. Very informative post! I am thankful to you for providing this unique information.
Universal Investment Strategies provides one-on-one options trading mentorship and education to investors seeking to generate active, passive and/or retirement income. With over 25 years of combined experience and thousands of satisfied customers, Universal Investment Strategies was founded on the principals of we will walk with you side by side every step of the way.​
Universal Investment Strategies LOS ANGELES CA
Online Stock Trading
Best Options To Trade
Learn How To Trade Stocks
Best Trading Courses
Best Way To Learn Stock Trading

Indeed SEO said...

Thanks for the inspired use of both new image sets, and that sentiment stamp is a must-have. Your cards are wonderful; first time on your blog, but I'll be back!!
Top web development companies in india

Stratford Management said...

nice sharing.
stratford management Japan

Petersons said...

you are providing great and quality services, i appreciate you.

Bastion Balance Seoul

iranlock said...

درب چوبی اتاقی
درب اتاقی ملامینه

Sumer said...

Manufacturer of Sandblasting machine manufacturers">Sand Blasting Machine in India and all Cabinet Type sand Blasting Machine, Shot Blasting Machine, sandblasting cabinet, Sand Blasting Room, Nozzle, Grit Blasting Machine is Supplied & Manufactured by us.

See More :

Sand Blasting Machine price
Shot Blasting Machine Manufacturer
Shot Blasting Machine Price in India

we provide all size and type sand Blasting Machine & Shot Blasting Machine and satisfy our customers.

Petersons said...

wow lovely cake. looks so delicious.


investorsdiurnal.com

Pune Escorts said...

Hello I am Isajain Pune Escorts you have shared magnificent article. I truly like and value your work. The focuses you have referenced in this article are useful,Excellent perused, Positive site, where did u thought of the data on this posting? I have perused a couple of the articles on your site now, and I truly like your style. Thank you so much obliged and please keep up the compelling work
Visit my Website just click :

Chennai Escorts
Kolkata Escorts
Indore Escorts
Pune Call Girls
Surat Escorts
Morbi Escorts
Hyderabad Escorts
Ahmedabad Escorts
Vadodara Escorts

Pune Escorts said...

Rajkot Escorts
Nagpur Escorts
Nashik Escorts
Kochi Escorts
Daman Escorts
Anand Escorts
Vapi Escorts
Pune Independent Escorts
Pune Escorts Agency

«Oldest ‹Older   601 – 659 of 659   Newer› Newest»