<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-2481955042008564038</id><updated>2011-04-21T18:52:14.462-07:00</updated><category term='Differentiation'/><category term='Point to make'/><category term='Life'/><category term='calculus begin'/><category term='Trek'/><category term='Cricket'/><title type='text'>Me, My Existence , My thoughts</title><subtitle type='html'>A life of a 12 year old Kid pretending to be Captain Jean Luc Picard</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>22</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-3328701885215975820</id><published>2007-12-27T22:39:00.001-08:00</published><updated>2007-12-27T22:49:47.659-08:00</updated><title type='text'>Computers</title><content type='html'>most time of our lives we are usually found in front of the computer.... WHY THE HELL IS THAT?&lt;br /&gt;I sometimes feel that I am addicted to that LCD Screen with 2 MBPs broadband &amp;amp; a Intel Core 2 duo processor Desktop &amp;amp; Mac. Well.... I have a question to ask.... What does the computer yeild? This question arised in my mind when I was watching an Episode of monk which had the Six way killer story. Monk was better than the Supercomputers of FBI!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Computers have now become profittable buisness.... Hope a Ferengi DOESN'T invade us!. If this addiction to the computer continues we will land up as Zombies &amp;amp; end up like BORG!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;br /&gt;I have to say... We are not the borg &amp;amp; resistence is not futile... Enjoy your lives... Get out of the computer for a while &amp;amp; do something in a garden or play games with a friend or family! Dont waste all that 16 hours during the holiday season in front of that computer!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-3328701885215975820?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/3328701885215975820/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=3328701885215975820' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/3328701885215975820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/3328701885215975820'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/12/computers.html' title='Computers'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-6620455740846235556</id><published>2007-08-14T04:30:00.000-07:00</published><updated>2007-08-14T04:46:58.064-07:00</updated><title type='text'>Independence</title><content type='html'>&lt;span style="font-family: times new roman;"&gt;Tomorrow we the people of India will be celebrating Independence day... It will be 60 years since of freedom in India... on this day we celebrate the lives of the martyrs who gave their souls to India's freedom. We achieved freedom after nearly two centuries of invasion. We were invaded by Portuguese, Dutch, French &amp; British. Our nation has been the epicenter for the peace movement around the world which was started by Mahatma Gandhi. India has developed from nearly a zero level in 1947 to a semi-superpower in 2007. It is the duty of Indians like us to make India a better place to live in... Finally what makes us a semi-superpower in all the fields is the fact that we are a democracy &amp;amp; a billion creative people who achieve in each field right from agriculture to tourism to economy to politics.India is a par excellence country &amp;  I pay my tributes to India for what it has given me &amp;amp; The martyrs who fought for freedom.&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-6620455740846235556?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/6620455740846235556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=6620455740846235556' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6620455740846235556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6620455740846235556'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/08/independence.html' title='Independence'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-3784402295082582316</id><published>2007-06-17T09:05:00.000-07:00</published><updated>2007-06-17T10:25:32.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Life'/><title type='text'>Life That wasn't meant to be</title><content type='html'>The life we lead currently is  complicated... I am still a child but have seen the depths of life. People begging for help, people in need of money,  and many other sad things happen in their lives. I have seen some families &amp; I have understood  their  problems. I wont experience it because I have no idea of what it is to lead that life. I feel like a tiny ball in front of them. They work harder than me to come up in life.&lt;br /&gt;&lt;br /&gt;I can't feel their pain.  I can't think laterally, I can't make important decisions which they take. All that I can do is to sit here &amp;amp; talk forever.&lt;br /&gt;Where did this quest for the luxury come from? What makes people think they can be happy when they have money? What does this life stand for?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-3784402295082582316?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/3784402295082582316/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=3784402295082582316' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/3784402295082582316'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/3784402295082582316'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/06/life-that-wasnt-meant-to-be.html' title='Life That wasn&apos;t meant to be'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-6684603721092207123</id><published>2007-05-23T05:53:00.000-07:00</published><updated>2007-05-23T05:55:26.797-07:00</updated><title type='text'>Now this is Cool</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_FhOu_Ah0130/RlQ5sSLknSI/AAAAAAAAAAo/u-GkzAbRAN0/s1600-h/Screenshot-2.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_FhOu_Ah0130/RlQ5sSLknSI/AAAAAAAAAAo/u-GkzAbRAN0/s320/Screenshot-2.png" alt="" id="BLOGGER_PHOTO_ID_5067738913656053026" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-6684603721092207123?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/6684603721092207123/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=6684603721092207123' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6684603721092207123'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6684603721092207123'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/05/now-this-is-cool.html' title='Now this is Cool'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_FhOu_Ah0130/RlQ5sSLknSI/AAAAAAAAAAo/u-GkzAbRAN0/s72-c/Screenshot-2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-7447013272479940558</id><published>2007-04-27T08:47:00.000-07:00</published><updated>2007-04-27T08:57:30.482-07:00</updated><title type='text'>I am Ashvala not Ashwala!</title><content type='html'>Hi there...&lt;br /&gt;&lt;br /&gt;I have found this to be a problem in my life.&lt;br /&gt;People Spell MY NAME AS "ASHWALA"!!&lt;br /&gt;&lt;br /&gt;On this occasion I start a new blog called ASHVALA not ASHWALA(However it will link to this web page :-D)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-7447013272479940558?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/7447013272479940558/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=7447013272479940558' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/7447013272479940558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/7447013272479940558'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/04/i-am-ashvala-not-ashwala.html' title='I am Ashvala not Ashwala!'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-6413587878536938031</id><published>2007-04-26T07:19:00.000-07:00</published><updated>2007-04-26T07:22:21.007-07:00</updated><title type='text'>Revival</title><content type='html'>I have finally thought of Reconsidering my decision of quitting blogging...&lt;br /&gt;From now on I have decided to dedicate my life to Music, Blogging, Algebra &amp;amp; misc(Learning Values)&lt;br /&gt;&lt;br /&gt;Regards&lt;br /&gt;Writer&lt;br /&gt;&lt;br /&gt;You can visit my other blog http://ashvalav.wordpress.com/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-6413587878536938031?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/6413587878536938031/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=6413587878536938031' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6413587878536938031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6413587878536938031'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/04/revival.html' title='Revival'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-6069641498555215367</id><published>2007-04-20T22:28:00.000-07:00</published><updated>2007-04-20T22:40:02.781-07:00</updated><title type='text'>The End</title><content type='html'>This would be my last blog post ever! I quit blogging for the next 6 months... after 6 months &amp;amp; 12 posts I felt enough is enough. Please take my decision seriously&lt;br /&gt;&lt;br /&gt;Regards&lt;br /&gt;Writer(Out for six months)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-6069641498555215367?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/6069641498555215367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=6069641498555215367' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6069641498555215367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6069641498555215367'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/04/end.html' title='The End'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-2812982371087995327</id><published>2007-03-21T15:00:00.000-07:00</published><updated>2007-03-21T02:23:52.759-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Cricket'/><title type='text'>Cricket</title><content type='html'>&lt;span style="font-style: italic;"&gt;&lt;span style="font-size:100%;"&gt;Cricket was a passion,&lt;br /&gt;It is now a fashion&lt;br /&gt;Cricket was Just a Game&lt;br /&gt;But now gives you fame.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style="font-size:100%;"&gt;&lt;span&gt;&lt;span&gt;that was a poem which I wrote a day ago which was a poem I wrote yesterday&lt;br /&gt;&lt;br /&gt;Cricket gives you the fame . It may also give you the shame on the main frame.&lt;br /&gt;I believe we pressurize our  player too much because  they  dot perform. Which  of course is bad .&lt;br /&gt;&lt;br /&gt;Here is an example of what happened.&lt;br /&gt;When India lost to Minnows Bangladesh in their first match... Indian fans who were supporters became a angry mob. Security close to each of the Players home. They even had Dhoni's New house which was under construction was Destroyed. Why do the People pressurize them? Why? Why?&lt;br /&gt;&lt;br /&gt;Here are some reasons&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;ul&gt;&lt;li&gt;The people have some high  expectations from thew team to win the world cup or any series for that matter&lt;/li&gt;&lt;li&gt;Bad performance &amp;&lt;/li&gt;&lt;li&gt;Lack of Faith in the game&lt;/li&gt;&lt;/ul&gt;These are the factors why the people become angry.&lt;br /&gt;&lt;br /&gt;The losing of Pakistan to Ireland &amp;amp; their exit from the world cup threatened each of the members career. Which I believe they were afraid to go back to Pakistan.&lt;br /&gt;In India ... The people  are threatening the  cricketer's that " &lt;span style="font-style: italic;"&gt;Jab woh logh world cup harenge thab hum use yahan se baghadenge"  &lt;/span&gt;Was the reaction to the Indian loss of the match VS Bangladesh. Readers, Please send in your comments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-2812982371087995327?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/2812982371087995327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=2812982371087995327' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/2812982371087995327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/2812982371087995327'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/03/cricket.html' title='Cricket'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-6230860338992183816</id><published>2007-03-14T02:02:00.000-07:00</published><updated>2007-03-14T04:33:36.755-07:00</updated><title type='text'>Hiro Nakamura</title><content type='html'>&lt;span style="font-style: italic;"&gt;I am Hiro Nakamura ...&lt;br /&gt;&lt;br /&gt;I can bend SPACE &amp;amp; TIME!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Well, Well You are all wondering Who this Hiro Nakamura is ...&lt;br /&gt;He is a fictional Charecter in the TV Serial Heroes&lt;br /&gt;&lt;br /&gt;Here is what I thought about him...&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;He is great&lt;/li&gt;&lt;li&gt;He just  Time  Travels&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Most amazing... After Peter Peterreli&lt;/li&gt;&lt;li&gt;Nice Style&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Father is Mr.Hikaru Sulu whose car number is NCC-1701 !&lt;/li&gt;&lt;li&gt;Should've Been a Cricketer &lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;Bye For Now&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-6230860338992183816?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/6230860338992183816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=6230860338992183816' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6230860338992183816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6230860338992183816'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/03/hiro-nakamura.html' title='Hiro Nakamura'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-3158826880015221424</id><published>2007-03-09T01:52:00.000-08:00</published><updated>2007-03-09T01:58:43.672-08:00</updated><title type='text'>My character</title><content type='html'>Readers,&lt;br /&gt;&lt;br /&gt;I took the test about WHO IS your SCI-Fi character.&lt;br /&gt;&lt;br /&gt;apparently my character turns out to be Captain Jean Luc Picard!!!&lt;br /&gt;Can you please take the test &amp; tell me wht is your charecter?? &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.tk421.net/character/"&gt;&lt;img src="http://www.tk421.net/character/picard.jpg" width="164" height="225" style="border-color:#f8f8ff;" border="2" alt="Which Fantasy/SciFi Character Are You?" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-3158826880015221424?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/3158826880015221424/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=3158826880015221424' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/3158826880015221424'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/3158826880015221424'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/03/my-character.html' title='My character'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-676397099348310675</id><published>2007-03-02T23:21:00.000-08:00</published><updated>2007-03-05T17:53:55.458-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Trek'/><category scheme='http://www.blogger.com/atom/ns#' term='Point to make'/><title type='text'>Star Trek Part 2</title><content type='html'>Hi again...&lt;br /&gt;&lt;br /&gt;Returning to Star Trek...&lt;br /&gt;&lt;br /&gt;I just felt that the Series "&lt;span style="font-style:italic;"&gt;Star Trek : enterprise&lt;/span&gt; " Doesn't have a place in Star Trek History&lt;br /&gt;&lt;br /&gt;It just made things complicated for TOS fans like my self.&lt;br /&gt;Archer emerges from nowhere &amp; Tells  he's the very first United federation of planets First enterprise's  captains!&lt;br /&gt;While the first enterprise was USS Enterprise     (Constitution Class| NCC 1701) under the command of Christopher Pike &amp; Captain James T Kirk&lt;br /&gt;&lt;br /&gt;There is no mention of Enterprise NX-01 when Beverly Crusher the  Chief Medical Officer  USS Enterprise-D (Galaxy Class          | NCC 1701 D) Asks the Computer for the ships named Enterprise.(Remember Me An Episode in Star Trek The Next Generations) the computer Replies that  USS Enterprise D was the 5th ship named Enterprise:&lt;br /&gt;USS Enterprise     (Constitution Class| NCC 1701)&lt;br /&gt;USS Enterprise-A (Constitution Class | NCC 1701 A)&lt;br /&gt;USS Enterprise-B  (Excelsior Class     |  NCC 1701 B)&lt;br /&gt;USS Enterprise-C  (Ambassador Class |   NCC 1701 C)&lt;br /&gt;USS Enterprise-D (Galaxy Class          | NCC 1701 D) !!!!&lt;br /&gt;&lt;br /&gt;The computer was right&lt;br /&gt;&lt;br /&gt;Therefore I declare  the series &lt;span style="font-style:italic;"&gt;Star Trek : enterprise&lt;/span&gt; A myth&lt;br /&gt;&lt;br /&gt;Either Rick Berman was confused or I am&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-676397099348310675?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/676397099348310675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=676397099348310675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/676397099348310675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/676397099348310675'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/03/star-trek-part-2.html' title='Star Trek Part 2'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-1122319698061398311</id><published>2007-02-23T21:20:00.000-08:00</published><updated>2007-02-23T21:31:04.809-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Point to make'/><title type='text'>Taxed!!!</title><content type='html'>I would like to ask this very question&lt;br /&gt;Why the government Tax the Rich so much?&lt;br /&gt;It is because for the development of the country.&lt;br /&gt;&lt;br /&gt;I just came to know that 30  years back even talcum powder was taxed heavily because the rich used it.&lt;br /&gt;I just came up with a Idea. Why not tax the speech of the  rich because the rich seem to talk more than the poor .&lt;br /&gt;&lt;br /&gt;Regards&lt;br /&gt;Writer&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-1122319698061398311?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/1122319698061398311/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=1122319698061398311' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/1122319698061398311'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/1122319698061398311'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/02/taxed.html' title='Taxed!!!'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-3687453305795074371</id><published>2007-02-16T01:30:00.000-08:00</published><updated>2007-02-16T02:16:11.918-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Trek'/><title type='text'>Star Trek</title><content type='html'>One of the best Science Fiction TV serial I have ever seen&lt;br /&gt;Wondered what it is to be on a star ship&lt;br /&gt;Finding New life forms&lt;br /&gt;looking for a new era&lt;br /&gt;&lt;br /&gt;Archer , Kirk, Picard, Sisko, Janeway have done just the same.&lt;br /&gt;Visiting new quadrants ... of exploration&lt;br /&gt;&lt;br /&gt;I have seen TOS ,TNG &amp; DS9 &amp; these are the top episodes I have ever seen&lt;br /&gt;&lt;br /&gt;1.Darmok (TNG)&lt;br /&gt;2.Inner Light (TNG)&lt;br /&gt;3.Way of the Warrior (DS9)&lt;br /&gt;4.Balance of terror (TOS)&lt;br /&gt;5.troubles with tribble-ations (DS9)&lt;br /&gt;6.City on the edge forever (TOS)&lt;br /&gt;7.Journeys end (TNG)&lt;br /&gt;8.Best of both worlds Part 1 &amp; 2 (TNG)&lt;br /&gt;9. All good things (TNG)&lt;br /&gt;10.Measure of a man (TNG)&lt;br /&gt;&lt;br /&gt;Regards&lt;br /&gt;AsHvAlA&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-3687453305795074371?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/3687453305795074371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=3687453305795074371' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/3687453305795074371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/3687453305795074371'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2007/02/star-trek.html' title='Star Trek'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-4819308986388376098</id><published>2006-12-04T05:26:00.000-08:00</published><updated>2006-12-09T22:34:03.194-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Differentiation'/><category scheme='http://www.blogger.com/atom/ns#' term='calculus begin'/><title type='text'>Some more Calculus!</title><content type='html'>Hello there ... &lt;br /&gt;I am BACK after my exams. well I learn t a lot in Calculus over the week. i learnt   equations where&lt;br /&gt;I found all by myself that x&lt;sup&gt;n &lt;/sup&gt;  = nx&lt;sup&gt;n-1 &lt;/sup&gt; &amp; all powers can be proved from the pascals triangle.&lt;br /&gt;My father says Pascal's triangle is very essential. The proof of the binomial theorm was first given by sir Issac Newton which is the basis for calculus&lt;br /&gt;&lt;br /&gt;Pascals Triangle = &lt;br /&gt;  1&lt;br /&gt; 121               &lt;br /&gt;1331  &lt;br /&gt;14641 &amp; so on so forth.&lt;br /&gt;&lt;br /&gt;Well ...  see you some time later&lt;br /&gt;&lt;br /&gt;Regards&lt;br /&gt;Ashvala&lt;br /&gt;&lt;br /&gt;Calculus is divine&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-4819308986388376098?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/4819308986388376098/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=4819308986388376098' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/4819308986388376098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/4819308986388376098'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2006/12/calculus-diffrential-equations.html' title='Some more Calculus!'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-6685488386721036183</id><published>2006-11-18T06:45:00.000-08:00</published><updated>2006-11-20T09:06:20.202-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='calculus begin'/><title type='text'>Calculus ... Limits From my Heart</title><content type='html'>Hello There...&lt;br /&gt;&lt;br /&gt;I am just starting to learn Calculus under my father...&lt;br /&gt;It is quite Amazing ... And here are some of my thoughts :-)&lt;br /&gt;&lt;br /&gt;Q:What I felt about Limits in Calculus?&lt;br /&gt;A:            I had the Enthu to learn Calculus. But apparently I had to learn Limits first, Which ofcourse is the first step into calculus.(I belive) And I got to do some problems in 5 minutes after learning . which I felt was nearly Great :-D . But finally I feel With Enthu you can do anything&lt;br /&gt;&lt;script src="http://www.google-analytics.com/urchin.js" type="text/javascript"&gt;&lt;br /&gt;&lt;/script&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;br /&gt;_uacct = "UA-884289-1";&lt;br /&gt;urchinTracker();&lt;br /&gt;&lt;/script&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-6685488386721036183?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/6685488386721036183/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=6685488386721036183' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6685488386721036183'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6685488386721036183'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2006/11/calculus-limitation-from-my-heart.html' title='Calculus ... Limits From my Heart'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-8181759350006724254</id><published>2006-11-18T06:41:00.000-08:00</published><updated>2006-11-18T06:44:12.749-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Point to make'/><title type='text'>The Whole Point of writing this blog...</title><content type='html'>Dear Readers Of this Blog...&lt;br /&gt;&lt;br /&gt;I have created this blog to just express my thoughts &amp;amp; Nothing else...&lt;br /&gt;At first I had a feeling that I wanted to write bout programming languages...&lt;br /&gt;But now I want to Express My thoughts&lt;br /&gt;&lt;br /&gt;Regards&lt;br /&gt;Ashvala&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-8181759350006724254?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/8181759350006724254/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=8181759350006724254' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/8181759350006724254'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/8181759350006724254'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2006/11/whole-point-of-writing-this-blog.html' title='The Whole Point of writing this blog...'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-3384937599016033531</id><published>2006-10-24T09:10:00.000-07:00</published><updated>2006-10-25T10:12:37.231-07:00</updated><title type='text'>Global Warming!!! What is Global Warming?</title><content type='html'>&lt;a href="http://en.wikipedia.org"&gt;From Wikipedia, the free encyclopedia&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Global warming is the observed increase in the average temperature of the Earth's atmosphere and oceans in recent decades.&lt;br /&gt;&lt;br /&gt;The Earth's average near-surface atmospheric temperature rose 0.6 ± 0.2 °Celsius (1.1 ± 0.4 °Fahrenheit) in the 20th century. The prevailing scientific opinion on climate change is that "most of the warming observed over the last 50 years is attributable to human activities"[1].&lt;br /&gt;&lt;br /&gt;The increased amounts of carbon dioxide (CO2) and other greenhouse gases (GHGs) are the primary causes of the human-induced component of warming. They are released by the burning of fossil fuels, land clearing and agriculture, etc. and lead to an increase in the greenhouse effect. The first speculation that a greenhouse effect might occur was by the Swedish chemist Svante Arrhenius in 1897, although it did not become a topic of popular debate until some 90 years later. [2]&lt;br /&gt;&lt;br /&gt;The measure of the response to increased GHGs, and other anthropogenic and natural climate forcings, is climate sensitivity. It is found by observational [3] and model studies. This sensitivity is usually expressed in terms of the temperature response expected from a doubling of CO2 in the atmosphere. The current literature estimates sensitivity in the range 1.5–4.5 °C (2.7–8.1 °F). Models referenced by the Intergovernmental Panel on Climate Change (IPCC) project that global temperatures may increase between 1.4 and 5.8 °C (2.5 to 10.5 °F) between 1990 and 2100. The uncertainty in this range results from both the difficulty of estimating the volume of future greenhouse gas emissions and uncertainty about climate sensitivity.&lt;br /&gt;&lt;br /&gt;An increase in global temperatures can in turn cause other changes, including a rising sea level and changes in the amount and pattern of precipitation. These changes may increase the frequency and intensity of extreme weather events, such as floods, droughts, heat waves, hurricanes, and tornados. Other consequences include higher or lower agricultural yields, glacial retreat, reduced summer streamflows, species extinctions and increases in the ranges of disease vectors. Warming is expected to affect the number and magnitude of these events; however, it is difficult to connect particular events to global warming. Although most studies focus on the period up to 2100, warming (and sea level rise due to thermal expansion) is expected to continue past then, since CO2 has an estimated atmospheric lifetime of 50 to 200 years. [4]. Only a small minority of climate scientists discount the role that humanity's actions have played in recent warming. However, the uncertainty is more significant regarding how much climate change should be expected in the future, and there is a hotly contested political and public debate over what, if anything, should be done to reduce or reverse future warming, and how to deal with the predicted consequences.&lt;br /&gt;Nomenclature&lt;br /&gt;&lt;br /&gt;The term "global warming" is a specific case of the more general term "climate change" (which can also refer to "global cooling", such as occurs during ice ages). In principle, "global warming" is neutral as to the causes, but in common usage, "global warming" generally implies a human influence. However, the UNFCCC uses "climate change" for human-caused change, and "climate variability" for other changes [5]. Some organizations use the term "anthropogenic climate change" for human-induced changes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Relative to the period 1860–1900, global temperatures on both land and sea have increased by 0.75 °C (1.4 °F), according to the instrumental temperature record. Since 1979, land temperatures have increased about twice as fast as ocean temperatures (0.25 °C/decade against 0.13 °C/decade (Smith, 2005). Temperatures in the lower troposphere have increased between 0.12 and 0.22 °C per decade since 1979, according to satellite temperature measurements. Over the one or two thousand years before 1850, world temperature is believed to have been relatively stable, with possibly regional fluctuations such as the Medieval Warm Period or the Little Ice Age.&lt;br /&gt;&lt;br /&gt;Based on estimates by NASA's Goddard Institute for Space Studies, 2005 was the warmest year since reliable, widespread instrumental measurements became available in the late 1800s, exceeding the previous record set in 1998 by a few hundredths of a degree Celsius. Similar estimates prepared by the World Meteorological Organization and the UK Climatic Research Unit concluded that 2005 was still only the second warmest year, behind 1998 [6] [7].&lt;br /&gt;&lt;br /&gt;Depending on the time frame, a number of temperature records are available. These are based on different data sets, with different degrees of precision and reliability. An approximately global instrumental temperature record begins in about 1860; contamination from the urban heat island effect is believed to be small and well controlled for. A longer-term perspective is available from various proxy records for recent millennia; see temperature record of the past 1000 years for a discussion of these records and their differences. The attribution of recent climate change is clearest for the most recent period of the last 50 years, for which the most detailed data are available. Satellite temperature measurements of the tropospheric temperature date from 1979.&lt;br /&gt;&lt;br /&gt;The climate system varies both through natural, "internal" processes as well as in response to variations in external "forcing" from both human and non-human causes, including solar activity, volcanic emissions, and greenhouse gases. Climatologists agree that the earth has warmed recently. The detailed causes of this change remain an active field of research, but the scientific consensus identifies greenhouse gases as the primary cause of the recent warming. Outside of the scientific community, however, this conclusion can be controversial.&lt;br /&gt;&lt;br /&gt;Adding carbon dioxide (CO2) or methane (CH4) to Earth's atmosphere, with no other changes, will make the planet's surface warmer; greenhouse gases create a natural greenhouse effect without which temperatures on Earth would be an estimated 30 °C (54 °F) lower, and the Earth uninhabitable. It is therefore not correct to say that there is a debate between those who "believe in" and "oppose" the theory that adding carbon dioxide or methane to the Earth's atmosphere will, absent any mitigating actions or effects, result in warmer surface temperatures on Earth. Rather, the debate is about what the net effect of the addition of carbon dioxide and methane will be, when allowing for compounding or mitigating factors.&lt;br /&gt;&lt;br /&gt;One example of an important feedback process is ice-albedo feedback. The increased CO2 in the atmosphere warms the Earth's surface and leads to melting of ice near the poles. As the ice melts, land or open water takes its place. Both land and open water are less reflective than ice, and so absorb more solar radiation. This causes more warming, which in turn causes more melting, and the cycle continues.&lt;br /&gt;&lt;br /&gt;Due to the thermal inertia of the earth's oceans and slow responses of other indirect effects, the Earth's current climate is not in equilibrium with the forcing imposed by increased greenhouse gases. Climate commitment studies indicate that, even if greenhouse gases were stabilized at present day levels, a further warming of perhaps 0.5 °C to 1.0 °C (0.9–1.8 °F) would still occur.&lt;br /&gt;Greenhouse gases are transparent to shortwave radiation from the sun. However, they absorb some of the longer infrared radiation emitted as black body radiation from the Earth, making it more difficult for the Earth to cool. How much they warm the world by is shown in their global warming potential. The atmospheric concentrations of carbon dioxide and methane have increased by 31% and 149% respectively above pre-industrial levels since 1750. This is considerably higher than at any time during the last 650,000 years, the period for which reliable data has been extracted from ice cores. From less direct geological evidence it is believed that carbon dioxide values this high were last attained 40 million years ago. About three-quarters of the anthropogenic (man-made) emissions of carbon dioxide to the atmosphere during the past 20 years is due to fossil fuel burning. The rest of the anthropogenic emissions are predominantly due to land-use change, especially deforestation [8].&lt;br /&gt;&lt;br /&gt;The longest continuous instrumental measurement of carbon dioxide mixing ratios began in 1958 at Mauna Loa. Since then, the annually averaged value has increased monotonically by approximately 21% from the initial reading of 315 ppmv, as shown by the Keeling curve, to over 380 ppmv in 2006 [9] [10]. The monthly CO2 measurements display small seasonal oscillations in an overall yearly uptrend, with the maximum reached during the northern hemisphere's late spring (the growing season in the northern hemisphere temporarily removes some CO2 from the atmosphere).&lt;br /&gt;&lt;br /&gt;Methane, the primary constituent of natural gas, enters the atmosphere both from biological production and leaks from natural gas pipelines and other infrastructure. Some biological sources are natural, such as termites, but others have been increased or created by agricultural activities, such as the cultivation of rice paddies [11]. Recent evidence suggests that forests may also be a source (RC; BBC), and if so this would be an additional contribution to the natural greenhouse effect, and not to the anthropogenic greenhouse effect (Ealert).&lt;br /&gt;&lt;br /&gt;Future carbon dioxide levels are expected to continue rising due to ongoing fossil fuel usage, though the actual trajectory will depend on uncertain economic, sociological, technological, and natural developments. The IPCC Special Report on Emissions Scenarios gives a wide range of future carbon dioxide scenarios [12], ranging from 541 to 970 parts per million by the year 2100. Fossil fuel reserves are sufficient to reach this level and continue emissions past 2100, if coal and tar sands are extensively used.&lt;br /&gt;&lt;br /&gt;Globally, the majority of anthropogenic greenhouse gas emissions arise from fuel combustion. The remainder is accounted for largely by "fugitive fuel" (fuel consumed in the production and transport of fuel), emissions from industrial processes (excluding fuel combustion), and agriculture: these contributed 5.8%, 5.2% and 3.3% respectively in 1990. Current figures are broadly comparable.[13] Around 17% of emissions are accounted for by the combustion of fuel for the generation of electricity. A small percentage of emissions come from natural and anthropogenic biological sources, with approximately 6.3% derived from agriculturally produced methane and nitrous oxide.&lt;br /&gt;&lt;br /&gt;Positive feedback effects, such as the expected release of methane from the melting of permafrost peat bogs in Siberia (possibly up to 70,000 million tonnes), may lead to significant additional sources of greenhouse gas emissions. [14]. Note that the anthropogenic emissions of other pollutants—notably sulfate aerosols—exert a cooling effect; this partially accounts for the plateau/cooling seen in the temperature record in the middle of the twentieth century [15], though this may also be due to intervening natural cycles.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Alternative theories&lt;br /&gt;&lt;br /&gt;Various alternative hypotheses have been proposed to explain the observed increase in global temperatures, including but not limited to:&lt;br /&gt;&lt;br /&gt;   * The warming is within the range of natural variation.&lt;br /&gt;   * The warming is a consequence of coming out of a prior cool period — the Little Ice Age.&lt;br /&gt;   * The warming is primarily a result of variances in solar irradiance, possibly via modulation of cloud cover [16]. It is similar in concept to the operating princples of the Wilson cloud chamber, however acting on a global scale, where earth's atmosphere acts as the cloud chamber and the cosmic rays catalyze the production of Cloud condensation nuclei.&lt;br /&gt;   * The observance actually reflects the Urban Heat Island, as most readings are done in heavily populated areas[17].&lt;br /&gt;&lt;br /&gt;However, the strong scientific support for man-made global warming implies that such alternative opinions are not widely held. In the journal Science, an essay by Naomi Oreskes considered the abstracts of all 928 scientific articles in the ISI citation database identified with the keyword "global climate change". Dr. Oreskes concluded that none of these abstracts attempts to refute the position that man-made emissions of greenhouse gases are a substantial contributor to recent warming.&lt;br /&gt;&lt;br /&gt;Modeling studies reported in the IPCC Third Assessment Report (TAR) did not find that changes in solar forcing were needed in order to explain the climate record for the last four or five decades [20]. These studies found that volcanic and solar forcings may account for half of the temperature variations prior to 1950, but the net effect of such natural forcings has been roughly neutral since then [21]. In particular, the change in climate forcing from greenhouse gases since 1750 was estimated to be eight times larger than the change in forcing due to increasing solar activity over the same period [22].&lt;br /&gt;&lt;br /&gt;Since the TAR, some studies (Lean et al., 2002, Wang et al., 2005) have suggested that changes in irradiance since pre-industrial times are less by a factor of 3 to 4 than in the reconstructions used in the TAR (e.g. Hoyt and Schatten, 1993, Lean, 2000.). Other researchers (e.g. Stott et al. 2003 [23]) believe that the impact of solar forcing is being underestimated and propose that solar forcing accounts for 16% or 36% of recent greenhouse warming. Others (e.g. Marsh and Svensmark 2000 [24]) have proposed that feedback from clouds or other processes enhance the direct effect of solar variation, which if true would also suggest that the impact of solar variability was being underestimated. In general the level of scientific understanding of the contribution of variations in solar irradiance to historical climate changes is "very low" [25].&lt;br /&gt;&lt;br /&gt;The present level of solar activity is historically high. Solanki et al. (2004) suggest that solar activity for the last 60 to 70 years may be at its highest level in 8,000 years; Muscheler et al. disagree, suggesting that other comparably high levels of activity have occurred several times in the last few thousand years [26]. Solanki concluded based on their analysis that there is a 92% probability that solar activity will decrease over the next 50 years. In addition, researchers at Duke University (2005) have found that 10–30% of the warming over the last two decades may be due to increased solar output [27]. In a review of existing literature, Foukal et al. (2006) determined both that the variations in solar output were too small to have contributed appreciably to global warming since the mid-1970s and that there was no evidence of a net increase in brightness during this period. [&lt;br /&gt;The predicted effects of global warming are many and various, both for the environment and for human life. These effects include sea level rise, impacts on agriculture, reductions in the ozone layer, increased intensity and frequency of extreme weather events, and the spread of disease. In some cases, the effects may already be manifest, although it is difficult to attribute specific natural phenomena to long-term global warming. In particular, the relationship between global warming and hurricanes is still being debated.[29][30] A draft statement by the World Meteorological Organization acknowledges the differing viewpoints on this issue [31].&lt;br /&gt;&lt;br /&gt;The extent and likelihood of these consequences is a matter of considerable controversy. A summary of possible effects and recent understanding can be found in the report of the IPCC Working Group II [32]. Some scientists believe global warming is already causing death and disease across the world through flooding, environmental destruction, heat waves and other extreme weather events. (Reuters, February 9, 2006; archived)&lt;br /&gt;&lt;br /&gt;Both primary and secondary effects of global warming — such as higher temperatures, lessened snow cover, rising sea levels and weather changes — may influence not only human activities but also ecosystems. Some species may be forced out of their habitats (possibly to extinction) because of changing conditions, while others may flourish. Similarly, changes in timing of life patterns, such as annual migration dates, may alter regional predator-prey balance. The effect of advanced spring arrival dates in Scandinavia of birds that over winter in sub-saharan Africa has been ascribed to evolutionary adaptation of the species to climactic warming [33].&lt;br /&gt;&lt;br /&gt;Ocean pH is lowering as a result of increased carbon dioxide levels. Lowering of ocean pH along with changing water temperature and ocean depth will have a direct impact on coral reefs.&lt;br /&gt;&lt;br /&gt;Another suggested mechanism whereby a warming trend may be amplified involves the thawing of tundra, which can release significant amounts of the potent greenhouse gas methane that is trapped in permafrost and ice clathrate compounds [34].&lt;br /&gt;&lt;br /&gt;Global warming has led to negative glacier mass balance, causing glacier retreat around the world. Oerlemans (2005) showed a net decline in 142 of the 144 mountain glaciers with records from 1900 to 1980. Since 1980 global glacier retreat has increased significantly. Similarly, Dyurgerov and Meier (2005) averaged glacier data across large scale regions (e.g. Europe) and found that every region had a net decline from 1960 to 2002, though a few local regions (e.g. Scandinavia) have shown increases. Some glaciers that are in disequilibrium with present climate have already disappeared [35] and increasing temperatures are expected to cause continued retreat in the majority of alpine glaciers around the world. Upwards of 90% of glaciers reported to the World Glacier Monitoring Service have retreated since 1995 [36].&lt;br /&gt;&lt;br /&gt;Of particular concern is the potential for failure of the Hindu Kush and Himalayan glacial melts. The melt of these glaciers is a large and reliable source of water for China, India, and much of Asia, and these waters form a principal dry-season water source. Increased melting would cause greater flow for several decades, after which "some areas of the most populated region on Earth are likely to 'run out of water'" (T. P. Barnett, J. C. Adam and D. P. Lettenmaier 2005) [37]&lt;br /&gt;&lt;br /&gt;Miniature rock glaciers&lt;br /&gt;&lt;br /&gt;Rock glaciers — caches of ice under boulders — are among other water signs such as drying meadows and warming lakes that scientists are studying in the Sierras in the western United States[38]. Connie Millar searches for the rock glaciers in the Yosemite area of the Sierra crest. She hypothesizes that rock glaciers will be predictors of how ecosystems change with rising temperatures. Millar is leading an effort (the Consortium for Integrated Climate Research in Western Mountains[39]) to co-ordinate the work of many scientists to see how the pieces of the Global Warming puzzle may fit.&lt;br /&gt;&lt;br /&gt;There is also some speculation that global warming could, via a shutdown or slowdown of the thermohaline circulation, trigger localized cooling in the North Atlantic and lead to cooling, or lesser warming, in that region. This would affect in particular areas like Scandinavia and Britain that are warmed by the North Atlantic drift&lt;br /&gt;&lt;br /&gt;ven a relatively small rise in sea level would make some densely settled coastal plains uninhabitable and create a significant refugee problem. If the sea level were to rise in excess of 4 meters (13 ft) almost every coastal city in the world would be severely affected, with the potential for major impacts on world-wide trade and economy. Presently, the IPCC predicts sea level rise of less than 1 meter (3 ft) through 2100, but they also warn that global warming during that time may lead to irreversible changes in the Earth's glacial system and ultimately melt enough ice to raise sea level many meters over the next millennia. It is estimated that around 200 million people could be affected by sea level rise, especially in Vietnam, Bangladesh, China, India, Thailand, Philippines, Indonesia and Egypt.&lt;br /&gt;&lt;br /&gt;An example of the ambiguous nature of environmental refugees is the emigration from the island nation of Tuvalu, which has an average elevation of approximately one meter above sea level. Tuvalu already has an ad hoc agreement with New Zealand to allow phased relocation [40] and many residents have been leaving the islands. However, it is far from clear that rising sea levels from global warming are a substantial factor - best estimates are that sea level has been rising there at approximately 1–2 millimeters per year (~1/16th in/yr), but that shorter timescale factors—ENSO, or tides—have far larger temporary effects&lt;br /&gt;&lt;br /&gt;One of the largest known outbreaks of Vibrio parahaemolyticus gastroenteritis has been attributed to generally rising ocean temperature where infected oysters were harvested in Prince William Sound, Alaska in 2005. Before this, the northernmost reported risk of such infection was in British Columbia, 1000 km to the south (McLaughlin JB, et al.).&lt;br /&gt;&lt;br /&gt;Global warming may extend the range of vectors conveying infectious diseases such as malaria. A warmer environment boosts the reproduction rate of mosquitoes and the number of blood meals they take, prolongs their breeding season, and shortens the maturation period for the microbes they disperse[45]. Global warming has been implicated in the recent spread to the north Mediterranean region of bluetongue disease in domesticated ruminants associated with mite bites (Purse, 2005). Hantavirus infection, Crimean-Congo hemorrhagic fever, tularemia and rabies increased in wide areas of Russia during 2004–2005. This was associated with a population explosion of rodents and their predators but may be partially blamed on breakdowns in governmental vaccination and rodent control programs.[46] Similarly, despite the disappearance of malaria in most temperate regions, the indigenous mosquitoes that transmitted it were never eliminated and remain common in some areas. Thus, although temperature is important in the transmission dynamics of malaria, many other factors are influential&lt;br /&gt;&lt;br /&gt;Financial institutions, including the world's two largest insurance companies, Munich Re and Swiss Re, warned in a 2002 study (UNEP summary) that "the increasing frequency of severe climatic events, coupled with social trends" could cost almost US$150 billion each year in the next decade. These costs would, through increased costs related to insurance and disaster relief, burden customers, tax payers, and industry alike.&lt;br /&gt;&lt;br /&gt;According to the Association of British Insurers, limiting carbon emissions could avoid 80% of the projected additional annual cost of tropical cyclones by the 2080s. According to Choi and Fisher (2003) each 1% increase in annual precipitation could enlarge catastrophe loss by as much as 2.8%.&lt;br /&gt;&lt;br /&gt;The United Nations' Environmental Program recently announced that severe weather around the world has made 2005 the most costly year on record [48], although there is "no way to prove that [a given hurricane] either was, or was not, affected by global warming" [49]. Preliminary estimates presented by the German insurance foundation Munich Re put the economic losses at more than US$200 billion, with insured losses running at more than US$70 billion.&lt;br /&gt;&lt;br /&gt;The creation of biomass by plants is influenced by the availability of water, nutrients, and carbon dioxide. Part of this biomass is used (directly or indirectly) as the energy source for nearly all other life forms, including feed-stock for domestic animals, and fruits and grains for human consumption. It also includes timber for construction purposes.&lt;br /&gt;&lt;br /&gt;A rise in atmospheric carbon dioxide can increase the efficiency of the metabolism of most plants, potentially allowing them to create more biomass.[citation needed] A rising temperature can also increase the growing season in colder regions. It is sometimes argued that these effects can create a greener, richer planet, with more available biomass. However, there are many other factors involved, and it is currently unclear if plants really benefit from global warming. Plant growth can be limited by a number of factors, including soil fertility, water, temperature, and carbon dioxide concentration.&lt;br /&gt;&lt;br /&gt;IPCC models currently predict a possible modest increase in plant productivity. However, there are several negative impacts: decreases in productivity may occur at above-optimal temperatures; greater variation in temperature is likely to decrease wheat yields; in experiments, grain and forage quality declines if CO2 and temperature are increased; and the reductions in soil moisture in summer, which are likely to occur, would have a negative impact on productivity.[50]&lt;br /&gt;&lt;br /&gt;Satellite data show that the productivity of the northern hemisphere did indeed increase from 1982 to 1991 [51]. However, more recent studies [52],[53] found that from 1991 to 2002, widespread droughts had actually caused a decrease in summer photosynthesis in the mid and high latitudes of the northern hemisphere.&lt;br /&gt;&lt;br /&gt;Melting Arctic ice may open the Northwest Passage in summer in approximately ten years, which would cut 5,000 nautical miles (9,300 km) from shipping routes between Europe and Asia. This would be of particular relevance for supertankers which are too big to fit through the Suez Canal and currently have to go around the tip of Africa. According to the Canadian Ice Service, the amount of ice in Canada's eastern Arctic Archipelago decreased by 15% between 1969 and 2004 [54][55]. A similar opening is possible in the Arctic north of Siberia, allowing much faster East Asian to Europe transport.&lt;br /&gt;&lt;br /&gt;Negative impacts of the melting of ice include a potential increase in the rate of global warming, as that ice reflects more sunlight than the open water which is replacing it. There are also ecological effects of melting polar ice: for example, polar bears use sea ice to reach their prey, and swim to another ice floe when one breaks up. Ice is now becoming further separated, and dead polar bears are being found in the water, believed to have drowned.[56] More recently, observed cannibalistic behavior in polar bears has been suggested by some scientists to be the result of food shortages brought on by global warming (Amstrup et al. 2006).&lt;br /&gt;&lt;br /&gt;The likelihood that global temperatures will continue to significantly increase has led others to propose means to mitigate global warming. Mitigation covers all actions aimed at reducing the negative effects or the likelihood of global warming.&lt;br /&gt;&lt;br /&gt;There are five categories of actions that can be taken to mitigate global warming:&lt;br /&gt;&lt;br /&gt;  1. Reduction of energy use (conservation)&lt;br /&gt;  2. Shifting from carbon-based fossil fuels to alternative energy sources&lt;br /&gt;  3. Carbon capture and storage&lt;br /&gt;  4. Carbon sequestration&lt;br /&gt;  5. Planetary engineering to cool the earth&lt;br /&gt;&lt;br /&gt;Strategies for mitigation of global warming include development of new technologies; carbon offsets; renewable energy such as biodiesel, solar power, and wind power; nuclear power; electric or hybrid automobiles; fuel cells; energy conservation; carbon taxes; enhancing natural carbon dioxide sinks; population control; and carbon capture and storage. Many environmental groups encourage individual action against global warming, often aimed at the consumer, and there has been business action on climate change.&lt;br /&gt;&lt;br /&gt;The world's primary international agreement on combating climate change is the Kyoto Protocol. The Kyoto Protocol is an amendment to the United Nations Framework Convention on Climate Change (UNFCCC). Countries that ratify this protocol commit to reduce their emissions of carbon dioxide and five other greenhouse gases, or engage in emissions trading if they maintain or increase emissions of these gases.&lt;br /&gt;&lt;br /&gt;Although the combination of scientific consensus and economic incentives were enough to persuade the governments of more than 150 countries to ratify the Kyoto Protocol (notably excluding the United States and Australia), there is a continuing debate about just how much greenhouse gas emissions have warmed the planet. Some politicians, including President of the United States George W. Bush [57], Prime Minister of Australia John Howard [58] have argued that the cost of mitigating global warming is too large to be justified.&lt;br /&gt;&lt;br /&gt;However, some segments of the business community have accepted both the reality of global warming and its attribution to anthropogenic causes, as well as the need for actions such as carbon emissions trading and carbon taxes.&lt;br /&gt;&lt;br /&gt;Adaptation strategies accept some warming as a foregone conclusion and focus on preventing or reducing undesirable consequences. Examples of such strategies include defense against rising sea levels or ensuring food security.&lt;br /&gt;&lt;br /&gt;Scientists have studied global warming with computer models of the climate (see below). Before a climate model is accepted by the scientific community, it has to be validated against observed climate variations. As of 2006, sufficiently high-resolution models successfully simulate summer/winter differences, the North Atlantic Oscillation[citation needed], and El Niño [59]. All validated current models predict that the net effect of adding greenhouse gases will be a warmer climate in the future. However, the amount of predicted warming varies by model, and there still remains a considerable range of climate sensitivity predicted by the models which survive these tests; one of the most important sources of this uncertainty is believed to be different ways of handling clouds. Part of the technical summary of the IPCC TAR includes a recognition of the need to quantify this uncertainty: "In climate research and modeling, we should recognize that we are dealing with a coupled non-linear system, and therefore that the prediction of a specific future climate is not possible. Rather the focus must be on the probability distribution of the system's possible future states by the generation of ensembles of model solutions." (see [60], page 78). An example of a study which aims to do this is the climateprediction.net project; their methodology is to investigate the range of climate sensitivities predicted for the 21st century by those models which are first shown to give a reasonable simulation of late 20th century climate change.&lt;br /&gt;&lt;br /&gt;As noted above, climate models have been used by the IPCC to anticipate a warming of 1.4 °C to 5.8 °C (2.5 °F–10.4 °F) between 1990 and 2100 [61]. They have also been used to help investigate the causes of recent climate change by comparing the observed changes to those that the models predict from various natural and human derived forcing factors. In addition to having their own characteristic climate sensitivity, models have also been used to derive independent assessments of climate sensitivity.&lt;br /&gt;&lt;br /&gt;Climate models can produce a good match to observations of global temperature changes over the last century [62]. These models do not unambiguously attribute the warming that occurred from approximately 1910 to 1945 to either natural variation or human effects; however, they suggest that the warming since 1975 is dominated by man-made greenhouse gas emissions. Adding simulation of the carbon cycle to the models generally shows a positive feedback, though this response is uncertain (under the A2 SRES scenario, responses vary between an extra 20 and 200 ppm of CO2). Some observational studies also show a positive feedback [63].&lt;br /&gt;&lt;br /&gt;Uncertainties in the representation of clouds are a dominant source of uncertainty in existing models, despite clear progress in modeling of clouds [64]. There is also an ongoing discussion as to whether climate models are neglecting important indirect and feedback effects of solar variability. Further, all such models are limited by available computational power, so that they may overlook changes related to small scale processes and weather (e.g. storm systems, hurricanes). However, despite these and other limitations, the IPCC considered climate models "to be suitable tools to provide useful projections of future climates" [65].&lt;br /&gt;&lt;br /&gt;In December, 2005 Bellouin et al. suggested in Nature that the reflectivity effect of airborne pollutants was about double that previously expected, and that therefore some global warming was being masked. If supported by further studies, this would imply that existing models under-predict future global warming.&lt;br /&gt;&lt;br /&gt;Although global warming has been seen as potentially dangerous for some time, the first international attempt to define what constitutes a 'dangerous' level occurred at the Avoiding Dangerous Climate Change scientific conference in February 2005. This took place in Exeter, United Kingdom under the UK presidency of the G8 [67].&lt;br /&gt;&lt;br /&gt;At the conference it was said that increasing damage was forecast if the globe warms to about 1 to 3 °Celsius (1.8 to 5.4 °Fahrenheit) above pre-industrial levels. It was concluded that the stabilization of greenhouse gasses at the equivalent of 450 ppmv CO2 would provide a 50% likelihood of limiting global warming to the average figure of 2 °C (3.6 °F). Stabilization below 400 ppm would give a relatively high certainty of not exceeding 2 °C, while stabilization at 550 ppm would mean it was likely that 2 °C would be exceeded.&lt;br /&gt;&lt;br /&gt;It was stated that unless 'urgent and strenuous mitigation actions' were taken in the next 20 years, it was almost certain that by 2050 global temperatures will have risen to between 0.5 and 2 °C (0.9 and 3.6°F) above current levels. With carbon dioxide levels currently around 381 ppm and rising by 2ppm per year, without such action greenhouse gasses are likely to reach to reach 400ppm by 2016, 450ppm by 2041, and 550ppm by around 2091&lt;br /&gt;&lt;br /&gt;Increased atmospheric carbon dioxide increases the amount of CO2 dissolved in the oceans. This ameliorates the greenhouse effect by removing the greenhouse gas from the atmosphere. Unfortunately, carbon dioxide gas dissolved in the ocean reacts with water to form carbonic acid. The net effect, even accounting for warming of the oceans, is an observed and accelerating ocean acidification. Since biosystems are adapted to a narrow range of pH this is a very serious concern directly driven by increased atmospheric CO2 and not global warming. Ocean acidification would not be created by any other postulated climate change mechanisms. In fact, the result of these other forcings would be to decrease the acidity of the oceans as the sea temperature warmed. This is exactly contrary to what has been observed. The chemistry of the process was first described by Roger Revelle and Hans Suess.&lt;br /&gt;&lt;br /&gt;Although they are often interlinked in the mass media, the connection between global warming and ozone depletion is not strong. There are four areas of linkage:&lt;br /&gt;&lt;br /&gt;   * Global warming from carbon dioxide radiative forcing is expected (perhaps somewhat surprisingly) to cool the stratosphere. This, in turn, would lead to a relative increase in ozone depletion and the frequency of ozone holes.&lt;br /&gt;&lt;br /&gt;   * Conversely, ozone depletion represents a radiative forcing of the climate system. There are two opposed effects: reduced ozone allows more solar radiation to penetrate, thus warming the troposphere. But a colder stratosphere emits less long-wave radiation, tending to cool the troposphere. Overall, the cooling dominates: the IPCC concludes that observed stratospheric O3 losses over the past two decades have caused a negative forcing of the surface-troposphere system [68] of about −0.15 ± 0.10 W/m² [69].&lt;br /&gt;&lt;br /&gt;   * One of the strongest predictions of the greenhouse effect theory is that the stratosphere will cool. However, although this is observed, it is difficult to use it as an attribution of recent climate change since similar cooling is caused by ozone depletion.&lt;br /&gt;&lt;br /&gt;   * Ozone depleting chemicals are also greenhouse gases, representing 0.34 ±0.03 W/m², or about 14% of the total radiative forcing from well-mixed greenhouse gases [70].&lt;br /&gt;&lt;br /&gt;   * Decreased ozone leads to an increase in ultraviolet levels. Ultraviolet radiation may be responsible for the death of ocean algae, which operate as a carbon dioxide sink in the ocean. Increased UV, therefore, may lead to a decrease in carbon dioxide uptake, thereby raising global carbon dioxide&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Another concern is the possibility of a positive feedback loop: i.e., that global warming can cause further global warming in a vicious cycle, the nature of which may be difficult to predict in advance . For example, the melting of ice caps appears to be causing the release of large amounts of additional carbon dioxide or methane from decaying vegetation trapped beneath [72] [73] [74]; it could also lead to increased heat absorption because ice reflects more solar heat (has higher albedo) than land or water.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ome scientists now consider that the effects of global dimming (the reduction in sunlight reaching the surface of the planet, possibly due to aerosols) may have masked some of the effect of global warming. If this is so, the indirect aerosol effect is stronger than previously believed, which would imply that the climate sensitivity to greenhouse gases is also stronger. Concerns about the effect of aerosol on the global climate were first researched as part of concerns over global cooling in the 1970s.&lt;br /&gt;&lt;br /&gt;The Earth has experienced natural global warming and cooling many times in the past, and can offer useful insights into present processes. It is thought by some geologists that a rapid buildup of greenhouse gases caused the Earth to experience global warming in the early Jurassic period, with average temperatures rising by 5 °C (9.0 °F). Research by the Open University published in Geology (32: 157–160, 2004 [75]) indicates that this caused the rate of rock weathering to increase by 400%. As such weathering locks away carbon in calcite and dolomite, carbon dioxide levels dropped back to normal over roughly the next 150,000 years.&lt;br /&gt;&lt;br /&gt;Sudden releases of methane from clathrate compounds (the Clathrate Gun Hypothesis), have been hypothesized as a cause for other past global warming events, including the Permian-Triassic extinction event and the Paleocene-Eocene Thermal Maximum. However, warming at the end of the last glacial period is thought not to be due to methane release [76]. Instead, natural variations in the Earth's orbit (Milankovitch cycles) are believed to have triggered the retreat of ice sheets by changing the amount of solar radiation received at high latitude and led to deglaciation.&lt;br /&gt;&lt;br /&gt;The greenhouse effect is also invoked to explain how the Earth made it out of the Snowball Earth period 600 million years ago. During this period all silicate rocks were covered by ice, thereby preventing them from combining with atmospheric carbon dioxide. The atmospheric carbon dioxide level gradually increased until it reached level that could have been as much as 350 times current levels. At this point temperatures were raised enough to melt the ice, even though the reflective ice surfaces had been reflecting most sunlight back into space. Increased amounts of rainfall would quickly wash the carbon dioxide out of the atmosphere, and thick layers of abiotic carbonate sediment have been found on top of the glacial rocks from this period.&lt;br /&gt;&lt;br /&gt;Using paleoclimate data for the last 500 million years Veizer et al. (2000, Nature 408, pp. 698–701) concluded that long-term temperature variations are only weakly related to carbon dioxide variations. Most paleoclimatologists believe this is because other factors, such as continental drift and mountain building have larger effects in determining very long term climate. However, Shaviv and Veizer (2003, [77]) proposed that the biggest long-term influence on temperature is actually the solar system's motion around the galaxy, and the ways in which this influences the atmosphere by altering the flux of cosmic rays received by the Earth. Afterwards, they argued that over geologic times a change in carbon dioxide concentrations comparable to doubling pre-industrial levels, only results in about 0.75 °C (1.3 °F) warming rather than the usual 1.5–4.5 °C (2.7–8.1 °F) reported by climate models [78]. They acknowledge (Shaviv and Veizer 2004) however that this conclusion may only be valid on multi-million year time scales when glacial and geological feedback have had a chance to establish themselves. Rahmstorf et al. 2004 [79] argue that S+V have highly and arbitrarily tuned their data, and that their conclusions are unreliable.&lt;br /&gt;Paleoclimatologist William Ruddiman has argued (e.g., Scientific American, March 2005) that human influence on the global climate began around 8,000 years ago with the start of forest clearing to provide land for agriculture and 5,000 years ago with the start of Asian rice irrigation. He contends that forest clearing explains the rise in carbon dioxide levels in the current interglacial that started 8,000 years ago, contrasting with the decline in carbon dioxide levels seen in the previous three interglacials. He further contends that the spread of rice irrigation explains the breakdown in the last 5,000 years of the correlation between the Northern Hemisphere solar radiation and global methane levels, which has been maintained over at least the last 11 22,000-year cycles. Ruddiman argues that without these effects, the Earth would be nearly 2 °C cooler and "well on the way" to a new ice age. Ruddimann's viewpoint is a minority one[citation needed], however; and his interpretation of the historical record, with respect to the methane data, has been disputed [80].&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-3384937599016033531?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/3384937599016033531/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=3384937599016033531' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/3384937599016033531'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/3384937599016033531'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2006/10/global-warming-what-is-global-warming.html' title='Global Warming!!! What is Global Warming?'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-7358418197047860064</id><published>2006-10-13T07:49:00.000-07:00</published><updated>2006-10-13T07:53:38.339-07:00</updated><title type='text'>Cilk... Concurrent C! Wikipedia Answer</title><content type='html'>&lt;b&gt;Cilk&lt;/b&gt; is a &lt;a href="http://en.wikipedia.org/wiki/General-purpose_programming_language" title="General-purpose programming language"&gt;general-purpose&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Programming_language" title="Programming language"&gt;programming language&lt;/a&gt; designed for &lt;a href="http://en.wikipedia.org/wiki/Thread_%28computer_science%29" title="Thread (computer science)"&gt;multithreaded&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Parallel_programming" title="Parallel programming"&gt;parallel programming&lt;/a&gt;.&lt;h2&gt;Design&lt;/h2&gt; &lt;p&gt;The major principle behind the design of the Cilk language is that the programmer should be responsible for &lt;i&gt;exposing&lt;/i&gt; the parallelism, identifying elements that can safely be executed in parallel; it should then be left to the run-time environment, particularly the &lt;a href="http://en.wikipedia.org/wiki/Scheduler" title="Scheduler"&gt;scheduler&lt;/a&gt;, to decide during execution how to actually divide the work between processors. It is because these responsibilities are separated that a Cilk program can run without rewriting on any number of processors, including one.&lt;/p&gt; &lt;p&gt;The Cilk language is based on &lt;a href="http://en.wikipedia.org/wiki/GNU_C" title="GNU C"&gt;GNU C&lt;/a&gt;, with the addition of just a handful of Cilk-specific keywords. When the Cilk keywords are removed from Cilk source code, the result is a valid &lt;a href="http://en.wikipedia.org/wiki/C_%28programming_language%29" title="C (programming language)"&gt;C&lt;/a&gt; program, called the &lt;b&gt;serial elision&lt;/b&gt; (or &lt;i&gt;C elision&lt;/i&gt;) of the full Cilk program. Cilk is a clean extension of C and the serial elision of any Cilk program is always a valid serial implementation in C of the semantics of the parallel Cilk program.&lt;/p&gt; &lt;p&gt;The first Cilk keyword is in fact &lt;b&gt;cilk&lt;/b&gt;, which identifies a function which is written in Cilk. Since Cilk procedures can call C procedures directly, but C procedures cannot directly call or spawn Cilk procedures, this keyword is needed to distinguish Cilk code from C code.&lt;/p&gt; &lt;p&gt;The remaining keywords are:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;b&gt;spawn&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;sync&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;inlet&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;abort&lt;/b&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;They are described in further detail below.&lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Cilk&amp;action=edit&amp;amp;section=2" title="Edit section: Basic parallelism with Cilk"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Basic_parallelism_with_Cilk" id="Basic_parallelism_with_Cilk"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Basic parallelism with Cilk&lt;/h2&gt; &lt;p&gt;Two keywords are all that are needed to start using the parallel features of Cilk:&lt;/p&gt; &lt;p&gt;&lt;b&gt;spawn&lt;/b&gt; -- this keyword indicates that the procedure call it modifies can safely operate in parallel with other executing code. Note that the scheduler is not &lt;i&gt;obligated&lt;/i&gt; to run this procedure in parallel; the keyword merely alerts the scheduler that it can do so.&lt;/p&gt; &lt;p&gt;&lt;b&gt;sync&lt;/b&gt; -- this keyword indicates that execution of the current procedure cannot proceed until all previously spawned procedures have completed and returned their results to the parent frame.&lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Cilk&amp;action=edit&amp;amp;section=3" title="Edit section: Sample code"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Sample_code" id="Sample_code"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Sample code&lt;/h3&gt; &lt;p&gt;Below is a &lt;a href="http://en.wikipedia.org/wiki/Recursion" title="Recursion"&gt;recursive&lt;/a&gt; implementation of the &lt;a href="http://en.wikipedia.org/wiki/Fibonacci_number" title="Fibonacci number"&gt;Fibonacci&lt;/a&gt; function in Cilk, with parallel recursive calls, which demonstrates the &lt;b&gt;cilk&lt;/b&gt;, &lt;b&gt;spawn&lt;/b&gt;, and &lt;b&gt;sync&lt;/b&gt; keywords. (Cilk program code is not numbered; the numbers have been added only to make the discussion easier to follow.)&lt;/p&gt; &lt;pre&gt;01 &lt;u&gt;cilk&lt;/u&gt; int fib (int n)&lt;br /&gt;02 {&lt;br /&gt;03     if (n &lt; x =" &lt;u"&gt;spawn fib (n-1);&lt;br /&gt;09        y = &lt;u&gt;spawn&lt;/u&gt; fib (n-2);&lt;br /&gt;10&lt;br /&gt;11        &lt;u&gt;sync&lt;/u&gt;;&lt;br /&gt;12&lt;br /&gt;13        return (x+y);&lt;br /&gt;14     }&lt;br /&gt;15 }&lt;br /&gt;&lt;/u"&gt;&lt;/pre&gt; &lt;p&gt;If this code was executed by a &lt;i&gt;single&lt;/i&gt; processor to determine the value of fib(2), that processor would create a &lt;a href="http://en.wikipedia.org/w/index.php?title=Frame_%28computer_science%29&amp;action=edit" class="new" title="Frame (computer science)"&gt;frame&lt;/a&gt; for &lt;i&gt;fib(2)&lt;/i&gt;, and execute lines 01 through 05. On line 06, it would create spaces in the frame to hold the values of &lt;i&gt;x&lt;/i&gt; and &lt;i&gt;y&lt;/i&gt;. On line 08, the processor would have to suspend the current frame, create a new frame to execute the procedure &lt;i&gt;fib(1)&lt;/i&gt;, execute the code of that frame until reaching a return statement, and then resume the &lt;i&gt;fib(2)&lt;/i&gt; frame with the value of fib(1) placed into &lt;i&gt;fib(2)&lt;/i&gt;'s &lt;i&gt;x&lt;/i&gt; variable. On the next line, it would need to suspend again to execute &lt;i&gt;fib(0)&lt;/i&gt; and place the result in &lt;i&gt;fib(2)&lt;/i&gt;'s &lt;i&gt;y&lt;/i&gt; variable.&lt;/p&gt; &lt;p&gt;When the code is executed on a &lt;i&gt;multiprocessor&lt;/i&gt; machine, however, execution proceeds differently. One processor starts the execution of &lt;i&gt;fib(2)&lt;/i&gt;; when it reaches line 08, however, the &lt;b&gt;spawn&lt;/b&gt; keyword modifying the call to &lt;i&gt;fib(n-1)&lt;/i&gt; tells the processor that it can safely give the job to a second processor: this second processor can create a frame for &lt;i&gt;fib(1)&lt;/i&gt;, execute its code, and store its result in &lt;i&gt;fib(2)&lt;/i&gt;'s frame when it finishes; the first processor continues executing the code of &lt;i&gt;fib(2)&lt;/i&gt; at the same time. A processor is not obligated to assign a spawned procedure elsewhere; if the machine only has two processors and the second is still busy on &lt;i&gt;fib(1)&lt;/i&gt; when the processor executing &lt;i&gt;fib(2)&lt;/i&gt; gets to the procedure call, the first processor will suspend &lt;i&gt;fib(2)&lt;/i&gt; and execute &lt;i&gt;fib(0)&lt;/i&gt; itself, as it would if it were the only processor. Of course, if another processor &lt;i&gt;is&lt;/i&gt; available, then it will be called into service, and all three processors would be executing separate frames simultaneously.&lt;/p&gt; &lt;p&gt;(The preceding description is not entirely accurate. Even though the common terminology for discussing Cilk refers to processors making the decision to spawn off work to other processors, it is actually the scheduler which assigns procedures to processors for execution, using a policy called &lt;i&gt;work-stealing&lt;/i&gt;, described later.)&lt;/p&gt; &lt;p&gt;If the processor executing &lt;i&gt;fib(2)&lt;/i&gt; were to execute line 13 before both of the other processors had completed their frames, it would generate an incorrect result or an error; &lt;i&gt;fib(2)&lt;/i&gt; would be trying to add the values stored in &lt;i&gt;x&lt;/i&gt; and &lt;i&gt;y&lt;/i&gt;, but one or both of those values would be missing. This is the purpose of the &lt;b&gt;sync&lt;/b&gt; keyword, which we see in line 09: it tells the processor executing a frame that it must suspend its own execution, until all the procedure calls it has spawned off have returned. When &lt;i&gt;fib(2)&lt;/i&gt; is allowed to proceed past the &lt;b&gt;sync&lt;/b&gt; statement in line 11, it can only be because &lt;i&gt;fib(1)&lt;/i&gt; and &lt;i&gt;fib(0)&lt;/i&gt; have completed and placed their results in &lt;i&gt;x&lt;/i&gt; and &lt;i&gt;y&lt;/i&gt;, making it safe to perform calculations on those results.&lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Cilk&amp;action=edit&amp;amp;section=4" title="Edit section: Advanced parallelism with Cilk: Inlets"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Advanced_parallelism_with_Cilk:_Inlets" id="Advanced_parallelism_with_Cilk:_Inlets"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Advanced parallelism with Cilk: Inlets&lt;/h2&gt; &lt;p&gt;The two remaining Cilk keywords are slightly more advanced, and concern the use of &lt;i&gt;inlets&lt;/i&gt;. Ordinarily, when a Cilk procedure is spawned, it can only return its results to the parent procedure by putting those results in a variable in the parent's frame, as we assigned the results of our spawned procedure calls in the example to &lt;code&gt;x&lt;/code&gt; and &lt;code&gt;y&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;The alternative is to use an inlet. An inlet is a function internal to a Cilk procedure which handles the results of a spawned procedure call as they return. One major reason to use inlets is that all the inlets of a procedure are guaranteed to operate &lt;a href="http://en.wikipedia.org/wiki/Atomic_%28computer_science%29" title="Atomic (computer science)"&gt;atomically&lt;/a&gt; with regards to each other and to the parent procedure, thus avoiding the bugs that could occur if the multiple returning procedures tried to update the same variables in the parent frame at the same time.&lt;/p&gt; &lt;p&gt;&lt;b&gt;inlet&lt;/b&gt; -- This keyword identifies a function defined within the procedure as an inlet.&lt;/p&gt; &lt;p&gt;&lt;b&gt;abort&lt;/b&gt; -- This keyword can only be used inside an inlet; it tells the scheduler that any other procedures that have been spawned off by the parent procedure can safely be aborted.&lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Cilk&amp;action=edit&amp;amp;section=5" title="Edit section: Work-stealing"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Work-stealing" id="Work-stealing"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Work-stealing&lt;/h2&gt; &lt;p&gt;The Cilk scheduler uses a policy called "work-stealing" to divide procedure execution efficiently among multiple processors. Again, it is easiest to understand if we look first at how Cilk code is executed on a single-processor machine.&lt;/p&gt; &lt;p&gt;The processor maintains a &lt;a href="http://en.wikipedia.org/wiki/Call_stack" title="Call stack"&gt;stack&lt;/a&gt; on which it places each frame that it has to suspend in order to handle a procedure call. If it is executing &lt;i&gt;fib(2)&lt;/i&gt;, and encounters a recursive call to &lt;i&gt;fib(1)&lt;/i&gt;, it will save &lt;i&gt;fib(2)&lt;/i&gt;'s state, including its variables and where the code suspended execution, and put that state on the stack. It will not take a suspended state off the stack and resume execution until the procedure call that caused the suspension, and any procedures called in turn by that procedure, have all been fully executed.&lt;/p&gt; &lt;p&gt;With multiple processors, things of course change. Each processor still has a stack for storing frames whose execution has been suspended; however, these stacks are more like &lt;a href="http://en.wikipedia.org/wiki/Deque" title="Deque"&gt;deques&lt;/a&gt;, in that suspended states can be removed from either end. A processor can still only remove states from its &lt;i&gt;own&lt;/i&gt; stack from the same end that it puts them on; however, any processor which is not currently working (having finished its own work, or not yet having been assigned any) will pick another processor at random, through the scheduler, and try to "steal" work from the opposite end of their stack -- suspended states, which the stealing processor can then begin to execute. The states which get stolen are the states that the processor stolen from would get around to executing last.&lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Cilk&amp;action=edit&amp;amp;section=6" title="Edit section: External links"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="External_links" id="External_links"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-7358418197047860064?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/7358418197047860064/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=7358418197047860064' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/7358418197047860064'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/7358418197047860064'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2006/10/cilk-is-general-purpose-programming.html' title='Cilk... Concurrent C! Wikipedia Answer'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-1350502907924229842</id><published>2006-10-13T07:47:00.000-07:00</published><updated>2006-10-25T10:11:47.757-07:00</updated><title type='text'>Alice ... A wikipedia Answer</title><content type='html'>&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Functional_programming_language" title="Functional programming language"&gt;&lt;a href="http://en.wikipedia.org/"&gt;From Wikipedia A Free Encyclopedia&lt;/a&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Functional_programming_language" title="Functional programming language"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Functional_programming_language" title="Functional programming language"&gt;&lt;br /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Functional_programming_language" title="Functional programming language"&gt;Alice is a functional programming language&lt;/a&gt; designed by the &lt;a href="http://ps.uni-sb.de/" class="external text" title="http://ps.uni-sb.de/"&gt;Programming Systems Lab&lt;/a&gt; at &lt;a href="http://en.wikipedia.org/wiki/Saarland_University" title="Saarland University"&gt;Saarland University&lt;/a&gt;. It is a dialect of &lt;a href="http://en.wikipedia.org/wiki/Standard_ML" title="Standard ML"&gt;Standard ML&lt;/a&gt;, augmented with support for &lt;a href="http://en.wikipedia.org/wiki/Lazy_evaluation" title="Lazy evaluation"&gt;lazy evaluation&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29" title="Concurrency (computer science)"&gt;concurrency&lt;/a&gt; (&lt;a href="http://en.wikipedia.org/wiki/Thread_%28computer_science%29" title="Thread (computer science)"&gt;multithreading&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Distributed_computing" title="Distributed computing"&gt;distributed computing&lt;/a&gt; via &lt;a href="http://en.wikipedia.org/wiki/Remote_procedure_call" title="Remote procedure call"&gt;remote procedure calls&lt;/a&gt;) and &lt;a href="http://en.wikipedia.org/wiki/Constraint_programming" title="Constraint programming"&gt;constraint programming&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;The Alice implementation from Saarland University uses the SEAM (Simple Extensible Abstract Machine) &lt;a href="http://en.wikipedia.org/wiki/Virtual_machine" title="Virtual machine"&gt;virtual machine&lt;/a&gt;. It is &lt;a href="http://en.wikipedia.org/wiki/Free_software" title="Free software"&gt;free software&lt;/a&gt;, and features &lt;a href="http://en.wikipedia.org/wiki/Just-in-time_compilation" title="Just-in-time compilation"&gt;just-in-time compilation&lt;/a&gt; to &lt;a href="http://en.wikipedia.org/wiki/Bytecode" title="Bytecode"&gt;bytecode&lt;/a&gt; as well as &lt;a href="http://en.wikipedia.org/wiki/Native_code" title="Native code"&gt;native code&lt;/a&gt; for the &lt;a href="http://en.wikipedia.org/wiki/X86_architecture" title="X86 architecture"&gt;x86 architecture&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Early versions of Alice ran on the &lt;a href="http://en.wikipedia.org/wiki/Mozart_Programming_System" title="Mozart Programming System"&gt;Mozart/Oz&lt;/a&gt; VM, allowing interfacing between Alice and &lt;a href="http://en.wikipedia.org/wiki/Oz_programming_language" title="Oz programming language"&gt;Oz&lt;/a&gt; code.&lt;/p&gt; &lt;p&gt;Alice's remote procedure calling depends on the virtual machine, because it may actually send code to be computed from one computer to another.&lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Alice_%28programming_language%29&amp;action=edit&amp;amp;section=1" title="Edit section: Example"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Example" id="Example"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Example&lt;/h2&gt; &lt;p&gt;Alice extends Standard ML with several primitives for lazy evaluation and concurrency. For example, threads may be created using the &lt;tt&gt;spawn&lt;/tt&gt; &lt;a href="http://en.wikipedia.org/wiki/Keyword" title="Keyword"&gt;keyword&lt;/a&gt;. Consider the naive algorithm for computing the &lt;a href="http://en.wikipedia.org/wiki/Fibonacci_number#Computation" title="Fibonacci number"&gt;Fibonacci numbers&lt;/a&gt;:&lt;/p&gt; &lt;pre&gt;fun fib 0 = 0&lt;br /&gt;| fib 1 = 1&lt;br /&gt;| fib n = fib(n-1) + fib(n-2);&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;For large values of &lt;code&gt;&lt;i&gt;n&lt;/i&gt;&lt;/code&gt;, &lt;code&gt;fib &lt;i&gt;n&lt;/i&gt;&lt;/code&gt; will take a long time to compute. This computation can be performed in a separate thread by&lt;/p&gt; &lt;pre&gt;val x = spawn fib n;&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;The variable &lt;code&gt;x&lt;/code&gt; is now bound to a so-called "&lt;a href="http://en.wikipedia.org/wiki/Future_%28programming%29" title="Future (programming)"&gt;future&lt;/a&gt;". When an operation requires the actual value of &lt;code&gt;x&lt;/code&gt;, it blocks until the thread is done with the computation.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-1350502907924229842?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/1350502907924229842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=1350502907924229842' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/1350502907924229842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/1350502907924229842'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2006/10/alice-is-functional-programming.html' title='Alice ... A wikipedia Answer'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-7668927606713852803</id><published>2006-10-13T07:39:00.000-07:00</published><updated>2006-10-13T07:42:21.176-07:00</updated><title type='text'>Eiffel</title><content type='html'>&lt;p&gt;&lt;b&gt;Eiffel&lt;/b&gt; is an &lt;a href="http://en.wikipedia.org/wiki/International_Organization_for_Standardization" title="International Organization for Standardization"&gt;ISO&lt;/a&gt;-standardized &lt;a href="http://en.wikipedia.org/wiki/Object-oriented" title="Object-oriented"&gt;object-oriented&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Programming_language" title="Programming language"&gt;programming language&lt;/a&gt; designed for extensibility, reusability, reliability and programmer productivity.&lt;/p&gt; &lt;p&gt;With roots going back to 1985, Eiffel has development environments available from multiple suppliers. Although less well known than many other languages, Eiffel is used by large projects in various industries (finance, aerospace, health care, games and others) as well as for teaching programming in academia.&lt;/p&gt; &lt;p&gt;The language design is closely connected with the method, based on a set of principles: &lt;a href="http://en.wikipedia.org/wiki/Design_by_contract" title="Design by contract"&gt;Design by contract&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Command-query_separation" title="Command-query separation"&gt;Command-query separation&lt;/a&gt;, Uniform access principle, Single choice principle, Open-closed principle, Option-Operand separation and others.&lt;/p&gt; &lt;p&gt;Many concepts initially introduced by Eiffel have later found their way into other languages such as Java and C#, and Eiffel continues to try language design ideas, particularly through the &lt;a href="http://en.wikipedia.org/wiki/European_Computer_Manufacturers_Association" title="European Computer Manufacturers Association"&gt;ECMA&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/International_Standards_Organization" title="International Standards Organization"&gt;ISO&lt;/a&gt; standardization process.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Key characteristics of the language, explained in more detail below, include:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Mechanisms supporting Design by contract (routine pre- and postconditions, class invariants), tightly integrated with the inheritance mechanism and other language constructs.&lt;/li&gt;&lt;li&gt;Object-oriented program structure; classes are the basic decomposition unit.&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Static_typing" title="Static typing"&gt;Static typing&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Support for automatic memory management, typically implemented by &lt;a href="http://en.wikipedia.org/wiki/Garbage_collection_%28computer_science%29" title="Garbage collection (computer science)"&gt;garbage collection&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Central role of &lt;a href="http://en.wikipedia.org/wiki/Inheritance" title="Inheritance"&gt;inheritance&lt;/a&gt; including multiple inheritance and mechanisms to make it safe (renaming, redefinition, "select", non-conforming inheritance).&lt;/li&gt;&lt;li&gt;A uniform type system handling both value and reference semantics, where all types including basic types such as INTEGER are based on classes.&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Genericity" title="Genericity"&gt;Genericity&lt;/a&gt;, constrained and unconstrained.&lt;/li&gt;&lt;li&gt;"Agents" (objects wrapping computations, closely connected with &lt;a href="http://en.wikipedia.org/wiki/Closure" title="Closure"&gt;closures&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Lambda_calculus" title="Lambda calculus"&gt;lambda calculus&lt;/a&gt;).&lt;/li&gt;&lt;li&gt;"Once" routines (evaluated only the first time around), for object sharing and decentralized initialization.&lt;/li&gt;&lt;li&gt;Keyword-based syntax &lt;a href="http://en.wikipedia.org/wiki/ALGOL" title="ALGOL"&gt;ALGOL&lt;/a&gt;/&lt;a href="http://en.wikipedia.org/wiki/Pascal_%28programming_language%29" title="Pascal (programming language)"&gt;Pascal&lt;/a&gt; tradition but separator-free (semicolon is optional); operator syntax available for routines.&lt;/li&gt;&lt;/ul&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=2" title="Edit section: Design goals"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Design_goals" id="Design_goals"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Design goals&lt;/h2&gt; &lt;p&gt;Eiffel emphasizes declarative statements over procedural code, and attempts to eliminate the need for bookkeeping instructions.&lt;/p&gt; &lt;p&gt;Eiffel shuns coding tricks or coding techniques intended as &lt;a href="http://en.wikipedia.org/wiki/Optimization_%28computer_science%29" title="Optimization (computer science)"&gt;optimization&lt;/a&gt; hints to the compiler. The aim is not only to make the code more readable, but also to allow programmers to concentrate on the important aspects of a program without getting bogged down in implementation details. Eiffel's simplicity is intended to promote simple, extendible, reusable and reliable answers to computing problems. Compilers provide extensive optimization techniques such as automatic inlining which remove part of the burden of optimization from the programmer, with the aim of producing extremely efficient code comparable to e.g. C++.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=3" title="Edit section: Background"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Background" id="Background"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Background&lt;/h2&gt; &lt;p&gt;Eiffel was originally developed by &lt;a href="http://en.wikipedia.org/wiki/Eiffel_Software" title="Eiffel Software"&gt;Eiffel Software&lt;/a&gt;, a company founded by &lt;a href="http://en.wikipedia.org/wiki/Bertrand_Meyer" title="Bertrand Meyer"&gt;Bertrand Meyer&lt;/a&gt; (originally called Interactive Software Engineering Inc. or ISE). &lt;a href="http://en.wikipedia.org/wiki/Object-Oriented_Software_Construction" title="Object-Oriented Software Construction"&gt;Object-Oriented Software Construction&lt;/a&gt; contains a detailed treatment of the concepts and theory of object technology, which led to the design of Eiffel.&lt;sup id="_ref-0" class="reference"&gt;&lt;a href="http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29#_note-0" title=""&gt;[1]&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt; &lt;p&gt;The goal of the language, libraries, and programing methods is to create reliable, reusable software modules. Eiffel supports &lt;a href="http://en.wikipedia.org/wiki/Multiple_inheritance" title="Multiple inheritance"&gt;multiple inheritance&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Genericity" title="Genericity"&gt;genericity&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Polymorphism_%28computer_science%29" title="Polymorphism (computer science)"&gt;polymorphism&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Encapsulation" title="Encapsulation"&gt;encapsulation&lt;/a&gt;, type-safe conversions, and &lt;a href="http://en.wikipedia.org/wiki/Parameter_covariance" title="Parameter covariance"&gt;parameter covariance&lt;/a&gt;. Its most important contribution to &lt;a href="http://en.wikipedia.org/wiki/Software_engineering" title="Software engineering"&gt;software engineering&lt;/a&gt; is &lt;a href="http://en.wikipedia.org/wiki/Design_by_contract" title="Design by contract"&gt;Design by contract&lt;/a&gt; (DbC), in which &lt;a href="http://en.wikipedia.org/wiki/Assertion_%28computing%29" title="Assertion (computing)"&gt;assertions&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Precondition" title="Precondition"&gt;preconditions&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Postcondition" title="Postcondition"&gt;postconditions&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Class_invariant" title="Class invariant"&gt;class invariants&lt;/a&gt; are used to assist in assuring program correctness without sacrificing efficiency.&lt;/p&gt; &lt;p&gt;Eiffel's design is based on object-oriented programming theory, with only minor influence of other paradigms or concern for support of legacy code. The language has formal support for &lt;a href="http://en.wikipedia.org/wiki/Abstract_data_type" title="Abstract data type"&gt;abstract data types&lt;/a&gt;. Under Eiffel's design, a software text should be able to reproduce its design documentation from the text itself, using a formalized implementation of the "Abstract Data Type".&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=4" title="Edit section: Implementations and environments"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Implementations_and_environments" id="Implementations_and_environments"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Implementations and environments&lt;/h3&gt; &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/EiffelStudio" title="EiffelStudio"&gt;EiffelStudio&lt;/a&gt; is an &lt;a href="http://en.wikipedia.org/wiki/Integrated_development_environment" title="Integrated development environment"&gt;integrated development environment&lt;/a&gt; available under both an &lt;a href="http://en.wikipedia.org/wiki/Open_source" title="Open source"&gt;open source&lt;/a&gt; and a commercial licenses. It offers an object-oriented environment for &lt;a href="http://en.wikipedia.org/wiki/Software_engineering" title="Software engineering"&gt;software engineering&lt;/a&gt;, using user-interface techniques such as pick-and-drop. &lt;a href="http://en.wikipedia.org/w/index.php?title=EiffelEnvision&amp;action=edit" class="new" title="EiffelEnvision"&gt;EiffelEnvision&lt;/a&gt; is a plugin for &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Visual_Studio" title="Microsoft Visual Studio"&gt;Microsoft Visual Studio&lt;/a&gt; which allows users to edit, compile, and debug Eiffel apps from within the Microsoft Visual Studio IDE. EiffelStudio and EiffelEnvision are free for non-commercial use. Two &lt;a href="http://en.wikipedia.org/wiki/Open_source" title="Open source"&gt;open source&lt;/a&gt; implementations are available: &lt;a href="http://en.wikipedia.org/wiki/SmartEiffel" title="SmartEiffel"&gt;SmartEiffel&lt;/a&gt;—the GNU implementation, based on an older version of the language—and &lt;a href="http://en.wikipedia.org/wiki/Visual_Eiffel" title="Visual Eiffel"&gt;Visual Eiffel&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Originally, the language &lt;a href="http://en.wikipedia.org/wiki/Sather" title="Sather"&gt;Sather&lt;/a&gt; was based on Eiffel, but it has diverged, and now includes several &lt;a href="http://en.wikipedia.org/wiki/Functional_programming" title="Functional programming"&gt;functional programming&lt;/a&gt; features. The &lt;a href="http://en.wikipedia.org/wiki/Apple_Media_Tool" title="Apple Media Tool"&gt;Apple Media Tool&lt;/a&gt; includes an Eiffel-based Apple Media Language.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;amp;action=edit&amp;section=5" title="Edit section: Specifications and standards"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Specifications_and_standards" id="Specifications_and_standards"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Specifications and standards&lt;/h3&gt; &lt;p&gt;The Eiffel language definition is an international standard of ISO, the &lt;a href="http://en.wikipedia.org/wiki/International_Standards_Organization" title="International Standards Organization"&gt;International Standards Organization&lt;/a&gt;. The standard was developed by &lt;a href="http://en.wikipedia.org/wiki/European_Computer_Manufacturers_Association" title="European Computer Manufacturers Association"&gt;ECMA International&lt;/a&gt; and its first version approved by ECMA on &lt;a href="http://en.wikipedia.org/wiki/June_21" title="June 21"&gt;21 June&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/2005" title="2005"&gt;2005&lt;/a&gt; as ECMA standard 367, &lt;cite&gt;Eiffel: Analysis, Design and Implementation Language&lt;/cite&gt;. The second edition was adopted by ECMA in &lt;a href="http://en.wikipedia.org/wiki/June" title="June"&gt;June&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/2006" title="2006"&gt;2006&lt;/a&gt; and in the same month by ISO. Its text can be found, and used free of charge, on the ECMA site&lt;sup id="_ref-1" class="reference"&gt;&lt;a href="http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29#_note-1" title=""&gt;[2]&lt;/a&gt;&lt;/sup&gt;. The ISO version, standard ISO/IEC DIS 25436, has different formatting but its text is identical.&lt;/p&gt; &lt;p&gt;Eiffel Software and the Eiffel library developer Gobo have committed to implementing the standard; Eiffel Software's EiffelStudio 5.7 implements some of the major new mechanisms, in particular inline agents, assigner commands, bracket notation. The &lt;a href="http://en.wikipedia.org/wiki/SmartEiffel" title="SmartEiffel"&gt;SmartEiffel&lt;/a&gt; team has turned away from this standard to create its own version of the language, which they believe to be closer to the original style of Eiffel. Object Tools has not to date expressed a position.&lt;/p&gt; &lt;p&gt;The standard cites the following as earlier Eiffel Language specifications:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Bertrand Meyer: &lt;cite&gt;Eiffel: The Language&lt;/cite&gt;, Prentice Hall, second printing, 1992 (first printing: 1991)&lt;/li&gt;&lt;li&gt;Bertrand Meyer: &lt;cite&gt;Standard Eiffel&lt;/cite&gt; (revision of preceding entry), ongoing, 1997-present, at &lt;a href="http://www.inf.ethz.ch/%7Emeyer/ongoing/etl" class="external text" title="http://www.inf.ethz.ch/~meyer/ongoing/etl"&gt;&lt;cite&gt;Bertrand Meyer's ETL3 page&lt;/cite&gt;&lt;/a&gt;, and&lt;/li&gt;&lt;li&gt;Bertrand Meyer: &lt;cite&gt;Object-Oriented Software Construction&lt;/cite&gt;, Prentice Hall: first edition, 1988; second edition, 1997.&lt;/li&gt;&lt;/ul&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=6" title="Edit section: Syntax and semantics"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Syntax_and_semantics" id="Syntax_and_semantics"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Syntax and semantics&lt;/h2&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=7" title="Edit section: Overall structure"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Overall_structure" id="Overall_structure"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Overall structure&lt;/h3&gt; &lt;p&gt;An Eiffel "system" or "program" is a collection of &lt;i&gt;classes&lt;/i&gt;. Above the level of classes, Eiffel defines &lt;i&gt;cluster&lt;/i&gt;, which are essentially a group of classes, and possibly of &lt;i&gt;subclusters&lt;/i&gt; (nested clusters). Clusters are not a syntactic language construct, but rather a standard organizational convention. Typically an Eiffel application will be organized with each class in a separate file, and each cluster in a directory containing class files. In this organization, subclusters are subdirectories. For example, under standard organizational and casing conventions, &lt;code&gt;x.e&lt;/code&gt; might be the name of a file that defines a class called X.&lt;/p&gt; &lt;p&gt;A class contains &lt;i&gt;features&lt;/i&gt;, which are similar to "members", "attributes" or "methods" in other object-oriented programming languages. A class also defines its invariants, and contains other properties, such as a "notes" section for documentation. Eiffel's standard data types, such as &lt;code&gt;ARRAY&lt;/code&gt; are all themselves classes, and collections are modified and accessed via features rather than special syntax. Moreover, unlike some "impure" object-oriented languages like Java, Eiffel eschews "basic datatypes" outside of its class system.&lt;/p&gt; &lt;p&gt;Every system must have a class designated as "root", with one of its creation procedures designated as "root procedure". Executing a system consists of creating an instance of the root class and executing its root procedure. Generally, doing so creates new objects, calls new features, and so on.&lt;/p&gt; &lt;p&gt;Eiffel has six basic executable instructions: assignment; object creation; routine call; conditional; iteration; and choice. Eiffel's control structures are strict in enforcing structured programming: every block has exactly one entry and exactly one exit.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=8" title="Edit section: Scoping"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Scoping" id="Scoping"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h4&gt;Scoping&lt;/h4&gt; &lt;p&gt;Unlike many object-oriented languages, but like &lt;a href="http://en.wikipedia.org/wiki/Smalltalk_programming_language" title="Smalltalk programming language"&gt;Smalltalk&lt;/a&gt;, Eiffel does not permit any assignment into fields of objects, except within the features of an object. Eiffel emphasizes information hiding and data abstraction, by requiring formal interfaces to data mutation. To put it in the language of other object-oriented programming languages, all Eiffel fields are "private", and "setters" are needed to modify values. An upshot of this is that "setters" can, and normally do, implement the invariants Eiffel provides syntax for.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=9" title="Edit section: &amp;quot;Hello World&amp;quot;"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name=".22Hello_World.22"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h4&gt;"Hello World"&lt;/h4&gt; &lt;p&gt;Conventionally, the look-and-feel of a programming language is given with a "Hello World" toy program. In Eiffel such a program might look like:&lt;/p&gt; &lt;pre&gt;   &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;br /&gt;     &lt;i&gt;HELLO_WORLD&lt;/i&gt;&lt;br /&gt; &lt;b&gt;create&lt;/b&gt;&lt;br /&gt;     &lt;i&gt;make&lt;/i&gt;&lt;br /&gt; &lt;b&gt;feature&lt;/b&gt;&lt;br /&gt;    &lt;i&gt;make&lt;/i&gt;&lt;br /&gt;       &lt;b&gt;do&lt;/b&gt;&lt;br /&gt;          &lt;i&gt;io.put_string&lt;/i&gt; ("Hello, world!")&lt;br /&gt;          &lt;i&gt;io.put_new_line&lt;/i&gt;&lt;br /&gt;       &lt;b&gt;end&lt;/b&gt;&lt;br /&gt; &lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=10" title="Edit section: &amp;quot;Design by Contract&amp;quot;"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name=".22Design_by_Contract.22"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;"Design by Contract"&lt;/h3&gt; &lt;p&gt;The concept of &lt;a href="http://en.wikipedia.org/wiki/Design_by_Contract" title="Design by Contract"&gt;Design by Contract&lt;/a&gt; is central to Eiffel. The mechanisms are tightly integrated with the language. Contracts guide redefinition of features in inheritance.&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Routine precondition: The precondition may only be weakened by inheritance; any call that meets the requirements of the ancestor meets those of the descendant.&lt;/li&gt;&lt;li&gt;Routine postcondition: The postcondition can only be strengthened by inheritance;, any result guaranteed by the ancestor is still provided by the descendant.&lt;/li&gt;&lt;li&gt;Class invariant&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;In addition, the language supports a "check instruction" (a kind of "assert") and, loop invariants.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=11" title="Edit section: Features, commands, queries"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Features.2C_commands.2C_queries" id="Features.2C_commands.2C_queries"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Features, commands, queries&lt;/h3&gt; &lt;p&gt;The primary characteristic of a class is that it contains a set of features. As a class represents a set of run-time objects (its instances), a feature is an operation on these objects. Operations are of two kinds:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Queries, which give information about an instance.&lt;/li&gt;&lt;li&gt;Commands, which modify an instance.&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;This distinction is important to the Eiffel method. In particular:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;Uniform Access Principle: from the outside, whether a query is an attribute (field in each object) or a function (algorithm) should not make any difference. For example a_vehicle.speed could be an attribute, accessed from the object's representation; or it could be computed by a function that divides distance by time. The notation is the same in both cases, so that it's easy to change representation without affecting the rest of the software.&lt;/li&gt;&lt;/ul&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Command-Query_Separation" title="Command-Query Separation"&gt;Command-Query Separation Principle&lt;/a&gt;: Queries must not modify the instance. This is not a language rule but a methodological principle. So in good Eiffel style one does not find "get" functions that change something and return a result; instead there are commands (procedures) to change objects, and queries to obtain information about the object, resulting from preceding changes.&lt;/li&gt;&lt;/ul&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=12" title="Edit section: Overloading"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Overloading" id="Overloading"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Overloading&lt;/h3&gt; &lt;p&gt;A class in Eiffel is a mapping from feature names to features. Names can be reused in different classes, but always map to a specific feature within one class. &lt;a href="http://en.wikipedia.org/wiki/Overloading" title="Overloading"&gt;Overloading&lt;/a&gt; in Eiffel is simply the mapping of the same name in different classes to different corresponding features. For example to have several behaviors for &lt;code&gt;"+"&lt;/code&gt;, depending on the class of the objects responding to the operator, a program can define several aliases, e.g.&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;a&lt;/i&gt; + &lt;i&gt;b&lt;/i&gt;&lt;/span&gt;&lt;/code&gt;  for &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;a&lt;/i&gt;, &lt;i&gt;b&lt;/i&gt;: &lt;i&gt;INTEGER&lt;/i&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;a&lt;/i&gt; + &lt;i&gt;b&lt;/i&gt;&lt;/span&gt;&lt;/code&gt;  for &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;a&lt;/i&gt;, &lt;i&gt;b&lt;/i&gt;: &lt;i&gt;REAL&lt;/i&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;a&lt;/i&gt; + &lt;i&gt;b&lt;/i&gt;&lt;/span&gt;&lt;/code&gt;  for &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;a&lt;/i&gt;, &lt;i&gt;b&lt;/i&gt;: &lt;i&gt;VECTOR&lt;/i&gt; [&lt;i&gt;INTEGER&lt;/i&gt;]&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;&lt;br /&gt;Eiffel, by design, does not allow argument overloading where a given class has multiple same-named feature, such as &lt;code&gt;f (x: X)&lt;/code&gt; and &lt;code&gt;f (y: Y)&lt;/code&gt;, such as you might find in &lt;a href="http://en.wikipedia.org/wiki/C%2B%2B" title="C++"&gt;C++&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Haskell_%28programming_language%29" title="Haskell (programming language)"&gt;Haskell&lt;/a&gt;. Since operators are aliases for named features, this same design choice/limitation applies to &lt;a href="http://en.wikipedia.org/wiki/Operator_overloading" title="Operator overloading"&gt;operator overloading&lt;/a&gt; as to &lt;a href="http://en.wikipedia.org/wiki/Type_polymorphism#Parametric_polymorphism" title="Type polymorphism"&gt;parametric polymorphism&lt;/a&gt; generally.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=13" title="Edit section: Genericity"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Genericity" id="Genericity"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Genericity&lt;/h3&gt; &lt;p&gt;Classes can be generic, to express that they are parameterized by types. Generic parameters appear in square brackets:&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;class&lt;/b&gt; &lt;i&gt;LIST&lt;/i&gt; [&lt;i&gt;G&lt;/i&gt;] ...&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;G is known as a "formal generic parameter". (Eiffel reserves "argument" for routines, and uses "parameter" only for generic classes.) With such a declaration G represents within the class an arbitrary type; so a function can return a value of type G, and a routine can take an argument of that type:&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;item&lt;/i&gt;: &lt;i&gt;G&lt;/i&gt; &lt;b&gt;do&lt;/b&gt; ... &lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;i&gt;put&lt;/i&gt; (&lt;i&gt;x&lt;/i&gt;: &lt;i&gt;G&lt;/i&gt;) &lt;b&gt;do&lt;/b&gt; ... &lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;The &lt;code&gt;LIST [INTEGER]&lt;/code&gt; and &lt;code&gt;LIST [WORD]&lt;/code&gt; are "generic derivations" of this class. Permitted combinations(with &lt;code&gt;n: INTEGER&lt;/code&gt;, &lt;code&gt;w: WORD&lt;/code&gt;, &lt;code&gt;il: LIST [INTEGER]&lt;/code&gt;, &lt;code&gt;wl: LIST [WORD]&lt;/code&gt;) are&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;n&lt;/i&gt; := &lt;i&gt;il&lt;/i&gt;.&lt;i&gt;item&lt;/i&gt;&lt;br /&gt;&lt;i&gt;wl&lt;/i&gt;.&lt;i&gt;put&lt;/i&gt; (&lt;i&gt;w&lt;/i&gt;)&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;&lt;code&gt;INTEGER&lt;/code&gt; resp. &lt;code&gt;WORD&lt;/code&gt; are the "actual generic parameters" in these generic derivations.&lt;/p&gt; &lt;p&gt;It is also possible to have 'constrained' formal parameters, for which the actual parameter must inherit from a given class, the "constraint". For example in&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;class&lt;/b&gt; &lt;i&gt;HASH_TABLE&lt;/i&gt; [&lt;i&gt;G&lt;/i&gt;, &lt;i&gt;KEY&lt;/i&gt; -&gt; &lt;i&gt;HASHABLE&lt;/i&gt;]&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;a derivation &lt;code&gt;HASH_TABLE [INTEGER, STRING]&lt;/code&gt; is valid only if &lt;code&gt;STRING&lt;/code&gt; inherits from &lt;code&gt;HASHABLE&lt;/code&gt; (as it it indeed does in typical Eiffel libraries). Within the class, having &lt;code&gt;KEY&lt;/code&gt; constrained by &lt;code&gt;HASHABLE&lt;/code&gt; means that for &lt;code&gt;x: KEY&lt;/code&gt; it is possible to apply to &lt;code&gt;x&lt;/code&gt; all the features of &lt;code&gt;HASHABLE&lt;/code&gt;, as in &lt;code&gt;x.hash_code&lt;/code&gt;.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=14" title="Edit section: Inheritance basics"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Inheritance_basics" id="Inheritance_basics"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Inheritance basics&lt;/h3&gt; &lt;p&gt;To inherit from one or more others, a class will include a &lt;code&gt;inherit&lt;/code&gt; clause at the beginning:&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;class&lt;/b&gt; &lt;i&gt;C&lt;/i&gt; &lt;b&gt;inherit&lt;/b&gt;&lt;br /&gt;   &lt;i&gt;A&lt;/i&gt;&lt;br /&gt;   &lt;i&gt;B&lt;/i&gt;&lt;br /&gt;... Rest of class declaration ...&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;&lt;br /&gt;The class may redefine (override) some or all of the inherited features. This must be explicitly announced at the beginning of the class through a &lt;code&gt;redefine&lt;/code&gt; subclause of the inheritance clause, as in&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;class&lt;/b&gt; &lt;i&gt;C&lt;/i&gt; &lt;b&gt;inherit&lt;/b&gt;&lt;br /&gt;   &lt;i&gt;A&lt;/i&gt;&lt;br /&gt;      &lt;b&gt;redefine&lt;/b&gt; &lt;i&gt;f&lt;/i&gt;, &lt;i&gt;g&lt;/i&gt;, &lt;i&gt;h&lt;/i&gt; &lt;b&gt;end&lt;/b&gt;&lt;br /&gt;   &lt;i&gt;B&lt;/i&gt;&lt;br /&gt;      &lt;b&gt;redefine&lt;/b&gt; &lt;i&gt;u&lt;/i&gt;, &lt;i&gt;v&lt;/i&gt; &lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=15" title="Edit section: Deferred classes and features"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Deferred_classes_and_features" id="Deferred_classes_and_features"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Deferred classes and features&lt;/h3&gt; &lt;p&gt;Classes may be defined with &lt;code&gt;deferred class&lt;/code&gt; rather than with &lt;code&gt;class&lt;/code&gt; to indicate that the class may not be directly instantiated. Non-instantiatable classes are called &lt;a href="http://en.wikipedia.org/wiki/Abstract_class" title="Abstract class"&gt;abstract classes&lt;/a&gt; in some other object-oriented programming languages. In Eiffel parlance, only an "effective" class can be instantiated (it may be a descendent of a deferred class). A feature can can also be deferred by using the &lt;code&gt;deferred&lt;/code&gt; keyword in place of a &lt;code&gt;do&lt;/code&gt; clause. If a class has any deferred features it must be declared as deferred; however, a class with no deferred features may nonetheless itself be deferred.&lt;/p&gt; &lt;p&gt;Deferred classes play some of the same role as interfaces in languages such as Java, though many object-oriented programming theorists believe interfaces are themselves largely an answer to Java's lack of multiple-inheritance (which Eiffel has).&lt;sup title="The text preceeding this tag needs specification." class="noprint"&gt;[&lt;a href="http://en.wikipedia.org/wiki/Wikipedia:Specificity" title="Wikipedia:Specificity"&gt;&lt;i&gt;specify&lt;/i&gt;&lt;/a&gt;]&lt;/sup&gt;&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=16" title="Edit section: Renaming"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Renaming" id="Renaming"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Renaming&lt;/h3&gt; &lt;p&gt;A class that inherits from one or more others gets all its features, by default under their original names. It may, however, change their names through a &lt;code&gt;rename&lt;/code&gt; clauses. This is required in the case of multiple inheritance if there are name clashes between inherited features; without renaming, the resulting class would violate the no-overloading principle noted above and hence would be invalid.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=17" title="Edit section: Tuples"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Tuples" id="Tuples"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Tuples&lt;/h3&gt; &lt;p&gt;Tuples types may be viewed as a simple form of class, providing only attributes and the corresponding "setter" procedure. A typical tuple type reads&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;TUPLE&lt;/i&gt; [&lt;i&gt;name&lt;/i&gt;: &lt;i&gt;STRING&lt;/i&gt;; &lt;i&gt;weight&lt;/i&gt;: &lt;i&gt;REAL&lt;/i&gt;; &lt;i&gt;date&lt;/i&gt;: &lt;i&gt;DATE&lt;/i&gt;]&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;and could be use to describe a simple notion of birth record if a class is not needed. An instance of such a tuple is simply a sequence of values with the given types, given in brackets, such as&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;["Brigitte", 3.5, &lt;i&gt;Last_night&lt;/i&gt;]&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;Components of such a tuple can be accessed as if the tuple tags were attributes of a class, for example if &lt;code&gt;t]&lt;/code&gt; has been assigned the above tuple then &lt;code&gt;t.weight]&lt;/code&gt; has value 3.5.&lt;/p&gt; &lt;p&gt;Thanks to the notion of assigner command (see below), dot notation can also be used to assign components of such a tuple, as in&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;t&lt;/i&gt;.&lt;i&gt;weight&lt;/i&gt; := &lt;i&gt;t&lt;/i&gt;.&lt;i&gt;weight&lt;/i&gt; + 0.5&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;The tuple tags are optional, so that it is also possible to write a tuple type as &lt;code&gt;TUPLE [STRING, REAL, DATE]&lt;/code&gt;. (In some compilers this is the only form of tuple, as tags were introduced with the ECMA standard.)&lt;/p&gt; &lt;p&gt;The precise specification of e.g. &lt;code&gt;TUPLE [A, B, C]&lt;/code&gt; is that it describes sequences of &lt;i&gt;at least&lt;/i&gt; three elements, the first three being of types &lt;code&gt;A&lt;/code&gt;, &lt;code&gt;B&lt;/code&gt;, &lt;code&gt;C&lt;/code&gt; respectively. As a result &lt;code&gt;TUPLE [A, B, C]&lt;/code&gt; conforms to (may be assigned to) &lt;code&gt;TUPLE [A, B]&lt;/code&gt;, to &lt;code&gt;TUPLE [A]&lt;/code&gt; and to &lt;code&gt;TUPLE&lt;/code&gt; (without parameters), the topmost tuple type to which all tuple types conform.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=18" title="Edit section: Agents"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Agents" id="Agents"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Agents&lt;/h3&gt; &lt;p&gt;Eiffel's "agent" mechanism wraps operations into objects. This mechanism can be used for iteration, event-driven programming, and other contexts in which it is useful to pass operations around the program structure. Other programming language, especially ones that emphasize &lt;a href="http://en.wikipedia.org/wiki/Functional_programming" title="Functional programming"&gt;functional programming&lt;/a&gt;, allow a similar pattern using &lt;a href="http://en.wikipedia.org/wiki/Continuations" title="Continuations"&gt;continuations&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Closures" title="Closures"&gt;closures&lt;/a&gt;, or &lt;a href="http://en.wikipedia.org/wiki/Generators" title="Generators"&gt;generators&lt;/a&gt;; Eiffel's agents emphasis the language's object-oriented paradigm, and use a syntax and semantics similar to code blocks in &lt;a href="http://en.wikipedia.org/wiki/Smalltalk_programming_language" title="Smalltalk programming language"&gt;Smalltalk&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Ruby_%28programming_language%29" title="Ruby (programming language)"&gt;Ruby&lt;/a&gt;&lt;/p&gt; &lt;p&gt;For example, to execute the &lt;code&gt;my_action&lt;/code&gt; block for each element of &lt;code&gt;my_list&lt;/code&gt;, one would write:&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;my_list&lt;/i&gt;.&lt;i&gt;do_all&lt;/i&gt; (&lt;b&gt;agent&lt;/b&gt; &lt;i&gt;my_action&lt;/i&gt;)&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;To execute &lt;code&gt;my_action&lt;/code&gt; only on elements satisfying &lt;code&gt;my_condition&lt;/code&gt;, a limitation/filter can be added:&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;my_list&lt;/i&gt;.&lt;i&gt;do_all&lt;/i&gt; (&lt;b&gt;agent&lt;/b&gt; &lt;i&gt;my_action&lt;/i&gt;, &lt;b&gt;agent&lt;/b&gt; &lt;i&gt;my_condition&lt;/i&gt;)&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;In these examples, &lt;code&gt;my_action&lt;/code&gt; and &lt;code&gt;my_condition&lt;/code&gt; are routines. Prefixing them with &lt;code&gt;agent&lt;/code&gt; yields an object that represents the corresponding routine with all its properties, in particular the ability to be called with the appropriate arguments. So if &lt;code&gt;a&lt;/code&gt; represents that object (for example because &lt;code&gt;a&lt;/code&gt; is the argument to &lt;code&gt;do_all&lt;/code&gt;), the instruction&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;a&lt;/i&gt;.&lt;i&gt;call&lt;/i&gt; ([&lt;i&gt;x&lt;/i&gt;])&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;will call the original routine with the argument &lt;code&gt;x&lt;/code&gt;, as if we had directly called the original routine: &lt;code&gt;my_action (x)&lt;/code&gt;. Arguments to &lt;code&gt;call&lt;/code&gt; are passed as a tuple, here &lt;code&gt;[x]&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;It is possible to keep some arguments to an agent &lt;b&gt;open&lt;/b&gt; and make others &lt;b&gt;closed&lt;/b&gt;. The open arguments are passed as arguments to &lt;code&gt;call&lt;/code&gt;: they are provided at the time of &lt;i&gt;agent use&lt;/i&gt;. The closed arguments are provided at the time of agent &lt;i&gt;definition&lt;/i&gt;. For example, if &lt;code&gt;action2&lt;/code&gt; has two arguments, the iteration&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;my_list&lt;/i&gt;.&lt;i&gt;do_all&lt;/i&gt; (&lt;b&gt;agent&lt;/b&gt; &lt;i&gt;action2&lt;/i&gt; (&lt;b&gt;?&lt;/b&gt;, &lt;i&gt;y&lt;/i&gt;)&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;iterates &lt;code&gt;action2 (x, y)&lt;/code&gt; for successive values of &lt;code&gt;x&lt;/code&gt;, where the second arguments remained set to &lt;code&gt;y&lt;/code&gt;. The question mark &lt;code&gt;?&lt;/code&gt; indicates an open argument; &lt;code&gt;y&lt;/code&gt; is a closed argument of the agent. Note that the basic syntax &lt;code&gt;agent f&lt;/code&gt; is a short hand for &lt;code&gt;agent f (?, ?, ...)&lt;/code&gt; with all arguments open. It is also possible to make the &lt;i&gt;target&lt;/i&gt; of an agent open through the notation &lt;code&gt;{T}?&lt;/code&gt; where &lt;code&gt;T&lt;/code&gt; is the type of the target.&lt;/p&gt; &lt;p&gt;The distinction between open and closed operands (operands = arguments + target) corresponds to the distinction between bound and free variables in &lt;a href="http://en.wikipedia.org/wiki/Lambda_calculus" title="Lambda calculus"&gt;lambda calculus&lt;/a&gt;. An agent expression such as &lt;code&gt;action2 (?, y)&lt;/code&gt; with some operands closed and some open corresponds to a version of the original operation &lt;a href="http://en.wikipedia.org/wiki/Currying" title="Currying"&gt;&lt;i&gt;curried&lt;/i&gt;&lt;/a&gt; on the closed operands.&lt;/p&gt; &lt;p&gt;The agent mechanism has been recently generalized to allow defining an agent without reference to an existing routine (such as &lt;code&gt;my_action&lt;/code&gt;, &lt;code&gt;my_condition&lt;/code&gt;, &lt;code&gt;action2&lt;/code&gt;), through inline agents as in&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;my_list&lt;/i&gt;.&lt;i&gt;do_all&lt;/i&gt;&lt;br /&gt;   (&lt;b&gt;agent&lt;/b&gt; (&lt;i&gt;x&lt;/i&gt;: &lt;i&gt;INTEGER&lt;/i&gt;)&lt;br /&gt;      &lt;b&gt;require&lt;/b&gt;&lt;br /&gt;         positive: &lt;i&gt;x&lt;/i&gt; &gt; 0&lt;br /&gt;      &lt;b&gt;do&lt;/b&gt;&lt;br /&gt;         &lt;i&gt;x&lt;/i&gt; := &lt;i&gt;x&lt;/i&gt; – 1&lt;br /&gt;      &lt;b&gt;ensure&lt;/b&gt;&lt;br /&gt;         &lt;i&gt;x&lt;/i&gt; = &lt;b&gt;old&lt;/b&gt; &lt;i&gt;x&lt;/i&gt; – 1&lt;br /&gt;      &lt;b&gt;end&lt;/b&gt;&lt;br /&gt;   )&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;&lt;br /&gt;The inline agent passed here can have all the trappings of a normal routine, including precondition, postcondition, rescue clause (not used here), and a full signature. This avoids defining routines when all that's needed is a computation to be wrapped in an agent. This is useful in particular for contracts, as in an invariant clause that expresses that all elements of a list are positive:&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;my_list&lt;/i&gt;.&lt;i&gt;for_all&lt;/i&gt; (&lt;b&gt;agent&lt;/b&gt; (&lt;i&gt;x&lt;/i&gt;: &lt;i&gt;INTEGER&lt;/i&gt;): &lt;i&gt;BOOLEAN&lt;/i&gt; &lt;b&gt;do&lt;/b&gt; &lt;i&gt;Result&lt;/i&gt; := (&lt;i&gt;x&lt;/i&gt; &gt; 0) &lt;b&gt;end&lt;/b&gt;)&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;The current agent mechanism leaves a possibility of run-time type error (if a routine with &lt;i&gt;n&lt;/i&gt; arguments is passed to an agent expecting &lt;i&gt;m&lt;/i&gt; arguments with &lt;i&gt;m&lt;/i&gt; &lt; &lt;i&gt;n&lt;/i&gt;). This can be avoided by a run-time check through the precondition &lt;code&gt;valid_arguments&lt;/code&gt; of &lt;code&gt;call&lt;/code&gt;. Several proposals for a purely static correction of this problem are available, including a language change proposal by Ribet et al. &lt;sup id="_ref-2" class="reference"&gt;&lt;a href="http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29#_note-2" title=""&gt;[3]&lt;/a&gt;&lt;/sup&gt;.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=19" title="Edit section: Once routines"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Once_routines" id="Once_routines"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Once routines&lt;/h3&gt; &lt;p&gt;A routine's result can be cached using the &lt;code&gt;once&lt;/code&gt; keyword in place of &lt;code&gt;do&lt;/code&gt;. Non-first calls to a routine require no additional computation or resource allocation, but simply return a previously computed result. A common pattern for "once functions" is to provide shared objects; the first call will create the object, subsequent ones will return the reference to that object. The typical scheme is:&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;shared_object&lt;/i&gt;: &lt;i&gt;SOME_TYPE&lt;/i&gt;&lt;br /&gt;   &lt;b&gt;once&lt;/b&gt;&lt;br /&gt;      &lt;b&gt;create&lt;/b&gt; &lt;b&gt;Result&lt;/b&gt;.&lt;i&gt;make&lt;/i&gt; (&lt;i&gt;args&lt;/i&gt;)&lt;br /&gt;             -- This creates the object and returns a reference to it through &lt;b&gt;Result&lt;/b&gt;&lt;br /&gt;   &lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;The returned object—&lt;code&gt;Result&lt;/code&gt; in the example—can itself be mutable, but its reference remains the same.&lt;/p&gt; &lt;p&gt;Often "once routines" perform a required initialization: multiple calls to a libraries can include a call to the initialization procedure, but only the first such call will perform the required actions. Using this pattern initialization can be decentralized, avoiding the need for a special initialization module. "Once routines" are similar in purpose and effect to the &lt;a href="http://en.wikipedia.org/wiki/Singleton_pattern" title="Singleton pattern"&gt;singleton pattern&lt;/a&gt; in many programming languages, and to the &lt;a href="http://en.wikipedia.org/wiki/Singleton_pattern#Python_Borg_pattern" title="Singleton pattern"&gt;Borg pattern&lt;/a&gt; used in Python.&lt;/p&gt; &lt;p&gt;The ECMA specification allows variants of "once" (qualified by a keyword in parentheses, e.g. &lt;code&gt;once (THREAD)&lt;/code&gt;: once per process, once per thread, once per object. This is not, however, fully implemented yet by current compilers (typically, only PROCESS and THREAD).&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=20" title="Edit section: Conversions"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Conversions" id="Conversions"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Conversions&lt;/h3&gt; &lt;p&gt;Eiffel provides a mechanism to allow conversions between various types. The mechanisms coexists with inheritance and complements it. To avoid any confusion between the two mechanisms, the design enforces the following principle:&lt;/p&gt; &lt;dl&gt;&lt;dd&gt;&lt;b&gt;(Conversion principle) A type may not both conform and convert to another.&lt;/b&gt;&lt;/dd&gt;&lt;/dl&gt; &lt;p&gt;For example &lt;code&gt;NEWSPAPER&lt;/code&gt; may conform to to &lt;code&gt;PUBLICATION&lt;/code&gt;, but &lt;code&gt;INTEGER&lt;/code&gt; converts to &lt;code&gt;REAL&lt;/code&gt; (and does not inherit from it).&lt;/p&gt; &lt;p&gt;The conversion mechanism simply generalizes the ad hoc conversion rules (such as indeed between &lt;code&gt;INTEGER&lt;/code&gt; and &lt;code&gt;REAL&lt;/code&gt;) that exist in most programming languages, making them applicable to any type as long as the above principle is observed. For example a &lt;code&gt;REAL&lt;/code&gt; class may be declared to convert to &lt;code&gt;REAL&lt;/code&gt;; this makes it possible to create a string from a date simply through&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;my_string&lt;/i&gt; := &lt;i&gt;my_date&lt;/i&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;as a shortcut for using an explicit object creation with a conversion procedure:&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;create&lt;/b&gt; &lt;i&gt;my_string&lt;/i&gt;.&lt;i&gt;make_from_date&lt;/i&gt; (&lt;i&gt;my_date&lt;/i&gt;)&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;To make the first form possible as a synonym for the first, it suffices to list the creation procedure (constructor) &lt;code&gt;make_from_date&lt;/code&gt; in a &lt;code&gt;convert&lt;/code&gt; clause at the beginning of the class.&lt;/p&gt; &lt;p&gt;As another example, if there is such a conversion procedure listed from &lt;code&gt;TUPLE [day: INTEGER; month: STRING; year: INTEGER]]&lt;/code&gt;, then one can directly assign a tuple to a date, causing the appropriate conversion, as in&lt;/p&gt; &lt;pre&gt;     &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;Bastille_day&lt;/i&gt; := [14, "July", 1789]&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=21" title="Edit section: Exception handling"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Exception_handling" id="Exception_handling"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Exception handling&lt;/h3&gt; &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Exception_handling" title="Exception handling"&gt;Exception handling&lt;/a&gt; in Eiffel is done at the routine level. If any operation fails in a routine the entire routine is considered as not having satisfied its "contract" and an error is produced. If the routine is not set up to handle the error the failure is propagated up to the routine that called it and the process repeats.&lt;/p&gt; &lt;p&gt;In Eiffel one defines an exception handler using the &lt;tt&gt;rescue&lt;/tt&gt; keyword which defines a block of text to be executed upon failure. Using the &lt;tt&gt;retry&lt;/tt&gt; keyword in the &lt;tt&gt;rescue&lt;/tt&gt; section (the only section it is allowed to be used in) causes the routine to be executed again after making the changes specified. This allows the programmer to correct mistakes in the input data or to keep track of the number of attempts at executing the routine.&lt;/p&gt; &lt;pre&gt;-- Connect to a server or give up after 10 attempts&lt;br /&gt;&lt;code&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;connect_to_server (server: &lt;i&gt;SOCKET&lt;/i&gt;)&lt;br /&gt;  &lt;b&gt;require&lt;/b&gt;&lt;br /&gt;    server /= Void and then server.address /= Void&lt;br /&gt;  &lt;b&gt;local&lt;/b&gt;&lt;br /&gt;    attempts: &lt;i&gt;INTEGER&lt;/i&gt;&lt;br /&gt;  &lt;b&gt;do&lt;/b&gt;&lt;br /&gt;    server.connect&lt;br /&gt;  &lt;b&gt;rescue&lt;/b&gt;&lt;br /&gt;    &lt;b&gt;if&lt;/b&gt; attempts &lt;&gt;then&lt;br /&gt;        attempts := attempts + 1&lt;br /&gt;        &lt;b&gt;retry&lt;/b&gt;&lt;br /&gt;    &lt;b&gt;end&lt;/b&gt;&lt;br /&gt;  &lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=22" title="Edit section: Concurrency"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Concurrency" id="Concurrency"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Concurrency&lt;/h3&gt; &lt;p&gt;A number of networking and threading libraries are available, such as EiffelNet and EiffelThreads. A concurrency model for Eiffel, based on the concepts of Design by Contract, is &lt;a href="http://en.wikipedia.org/wiki/SCOOP_%28software%29" title="SCOOP (software)"&gt;SCOOP (software)&lt;/a&gt;, or &lt;i&gt;Simple Concurrent Object-Oriented Programming&lt;/i&gt;, not yet part of the official language definition but available as an add-on from &lt;a href="http://en.wikipedia.org/wiki/ETH_Zurich" title="ETH Zurich"&gt;ETH Zurich&lt;/a&gt;.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=23" title="Edit section: Operator and bracket syntax, assigner commands"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Operator_and_bracket_syntax.2C_assigner_commands" id="Operator_and_bracket_syntax.2C_assigner_commands"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Operator and bracket syntax, assigner commands&lt;/h3&gt; &lt;p&gt;Eiffel's view of computation is completely object-oriented in the sense that every operation is relative to an object, the "target". So for example an addition&lt;/p&gt; &lt;pre&gt; [1] &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;a&lt;/i&gt; + &lt;i&gt;b&lt;/i&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;is conceptually understood as if it were a function call&lt;/p&gt; &lt;pre&gt;  [2] &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;a&lt;/i&gt;.&lt;i&gt;plus&lt;/i&gt; (&lt;i&gt;b&lt;/i&gt;)&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;with target &lt;code&gt;a&lt;/code&gt;, feature &lt;code&gt;plus&lt;/code&gt; and argument &lt;code&gt;b&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;Of course [2] is the conventional syntax and usually preferred. Operator syntax makes it possible to use either form by declaring the feature (for example in &lt;code&gt;INTEGER&lt;/code&gt;, but this applies to other basic classes and can be used in any other for which such an operator appropriate):&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;plus&lt;/i&gt; &lt;b&gt;alias&lt;/b&gt; "+" (&lt;i&gt;other&lt;/i&gt;: &lt;i&gt;INTEGER&lt;/i&gt;): &lt;i&gt;INTEGER&lt;/i&gt;&lt;br /&gt;      ... Normal function declaration...&lt;br /&gt;      &lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;&lt;br /&gt;The range of operators that can be used as "alias" is quite broad; they include predefined operators such as "+" but also "free operators" made of non-alphanumeric symbols. This makes it possible to design special infix and prefix notations, for example in mathematics and physics applications.&lt;/p&gt; &lt;p&gt;Every class may in addition have &lt;i&gt;one&lt;/i&gt; function aliased to "[]", the "bracket" operator, allowing the notation &lt;code&gt;a [i, ...]&lt;/code&gt; as a synonym for &lt;code&gt;a.f (i, ...)&lt;/code&gt; where &lt;code&gt;f&lt;/code&gt; is the chosen function. This is particularly useful for container structures such as arrays, hash tables, lists etc. For example access to an element of a hash table with string keys can be written&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;number&lt;/i&gt; := &lt;i&gt;phone_book&lt;/i&gt; ["JILL SMITH"]&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;"Assigner commands" are a companion mechanism designed in the same spirit of allowing well-established, convenient notation reinterpreted in the framework of object-oriented programming. Assigner commands allow assignment-like syntax to call "setter" procedures. An assignment proper can never be of the form &lt;code&gt;a.x := v]&lt;/code&gt; as this violates information hiding; you have to go for a setter command (procedure). For example the hash table class can have the function and the procedure&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;item&lt;/i&gt; &lt;b&gt;alias&lt;/b&gt; "[]" (&lt;i&gt;key&lt;/i&gt;: &lt;i&gt;STRING&lt;/i&gt;): &lt;i&gt;ELEMENT&lt;/i&gt;&lt;/span&gt;&lt;/code&gt;    [3]&lt;code&gt;&lt;span style="color:blue;"&gt;&lt;br /&gt;      -- The element of key &lt;i&gt;key&lt;/i&gt;&lt;br /&gt;      -- ("Getter" query)&lt;br /&gt;   &lt;b&gt;do&lt;/b&gt;&lt;br /&gt;      ...&lt;br /&gt;   &lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;put&lt;/i&gt;(&lt;i&gt;e&lt;/i&gt;: &lt;i&gt;ELEMENT&lt;/i&gt;; &lt;i&gt;key&lt;/i&gt;: &lt;i&gt;STRING&lt;/i&gt;): &lt;i&gt;ELEMENT&lt;/i&gt;&lt;br /&gt;      -- Insert the element &lt;i&gt;e&lt;/i&gt;, associating it with the key &lt;i&gt;key&lt;/i&gt;.&lt;br /&gt;      -- ("Setter" command)&lt;br /&gt;   &lt;b&gt;do&lt;/b&gt;&lt;br /&gt;      ...&lt;br /&gt;   &lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;Then to insert an element you have to use an explicit call to the setter command:&lt;/p&gt; &lt;pre&gt;  [4] &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;phone_book&lt;/i&gt;.&lt;i&gt;put&lt;/i&gt; (&lt;i&gt;New_person&lt;/i&gt;, "JILL SMITH")&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;It is possible to write this equivalently as&lt;/p&gt; &lt;pre&gt;  [5] &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;phone_book&lt;/i&gt;  ["JILL SMITH"] := &lt;i&gt;New_person&lt;/i&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;(in the same way that &lt;code&gt;phone_book ["JILL SMITH"]&lt;/code&gt; is a synonym for &lt;code&gt;number := phone_book.item ("JILL SMITH")&lt;/code&gt;), provided the declaration of &lt;code&gt;item&lt;/code&gt; now starts (replacement for [3]) with&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;i&gt;item&lt;/i&gt; &lt;b&gt;alias&lt;/b&gt; "[]" (&lt;i&gt;key&lt;/i&gt;: &lt;i&gt;STRING&lt;/i&gt;): &lt;i&gt;ELEMENT&lt;/i&gt; &lt;b&gt;assign&lt;/b&gt; &lt;i&gt;put&lt;/i&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;This declares &lt;code&gt;put&lt;/code&gt; as the assigner command associated with &lt;code&gt;item&lt;/code&gt; and, combined with the bracket alias, makes [5] legal and equivalent to [4]. (It could also be written, without taking advantage of the bracket, as &lt;code&gt;phone_book.item ("JILL SMITH") := New_person&lt;/code&gt;.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=24" title="Edit section: Lexical and syntax properties"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Lexical_and_syntax_properties" id="Lexical_and_syntax_properties"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Lexical and syntax properties&lt;/h3&gt; &lt;p&gt;Eiffel is not case-sensitive. The tokens &lt;code&gt;make&lt;/code&gt;, &lt;code&gt;maKe&lt;/code&gt; and &lt;code&gt;MAKE&lt;/code&gt; all denote the same identifier. See, however, the "style rules" below.&lt;/p&gt; &lt;p&gt;Comments are introduced by &lt;code&gt;--&lt;/code&gt; (two consecutive dashes) and extend to the end of the line.&lt;/p&gt; &lt;p&gt;The semicolon, as instruction separator, is optional. Most of the time the semicolon is just omitted, except to separate multiple instructions on a line. This results in less clutter on the program page.&lt;/p&gt; &lt;p&gt;There is no nesting of feature and class declarations. As a result the structure of an Eiffel class is simple: some class-level clauses (inheritance, invariant) and a succession of feature declarations, all at the same level.&lt;/p&gt; &lt;p&gt;It is customary to group features into separate "feature clauses" for more readability, with a standard set of basic feature tags appearing in a standard order, for example:&lt;/p&gt; &lt;pre&gt;  &lt;code&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;class&lt;/b&gt; &lt;i&gt;HASH_TABLE&lt;/i&gt; [&lt;i&gt;ELEMENT&lt;/i&gt;, &lt;i&gt;KEY&lt;/i&gt; -&gt; &lt;i&gt;HASHABLE&lt;/i&gt;] &lt;b&gt;inherit&lt;/b&gt;&lt;br /&gt;      &lt;i&gt;TABLE&lt;/i&gt; [&lt;i&gt;ELEMENT&lt;/i&gt;]&lt;br /&gt;&lt;br /&gt;   &lt;b&gt;feature&lt;/b&gt; -- Initialization&lt;br /&gt;      ... Declarations of initialization commands (creation procedures/constructors) ...&lt;br /&gt;&lt;br /&gt;   &lt;b&gt;feature&lt;/b&gt; -- Access&lt;br /&gt;      ... Declarations of non-boolean queries on the object state, e.g. &lt;i&gt;item&lt;/i&gt; ...&lt;br /&gt;&lt;br /&gt;   &lt;b&gt;feature&lt;/b&gt; -- Status report&lt;br /&gt;      ... Declarations of boolean queries on the object state, e.g. &lt;i&gt;is_empty&lt;/i&gt; ...&lt;br /&gt;&lt;br /&gt;   &lt;b&gt;feature&lt;/b&gt; -- Element change&lt;br /&gt;      ... Declarations of commands that change the structure, e.g. &lt;i&gt;put&lt;/i&gt; ...&lt;br /&gt;&lt;br /&gt;   etc.&lt;br /&gt;&lt;b&gt;end&lt;/b&gt; &lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;p&gt;In contrast to most &lt;a href="http://en.wikipedia.org/wiki/Curly_bracket_programming_language" title="Curly bracket programming language"&gt;curly bracket programming languages&lt;/a&gt;, Eiffel makes a clear distinction between expressions and instructions. This is in line with the &lt;a href="http://en.wikipedia.org/wiki/Command-Query_Separation" title="Command-Query Separation"&gt;Command-Query Separation&lt;/a&gt; principle of the Eiffel method.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=25" title="Edit section: Style conventions"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Style_conventions" id="Style_conventions"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Style conventions&lt;/h3&gt; &lt;p&gt;Much of the documentation of Eiffel uses distinctive style conventions, designed to enforce a consistent look-and-feel. Some of these conventions apply to the code format itself, and others to the standard typographic rendering of Eiffel code in formats and publications where these conventions are possible.&lt;/p&gt; &lt;p&gt;While the language is case-insensitive, the style standards prescribe the use of all-capitals for class names (&lt;code&gt;LIST&lt;/code&gt;), all-lower-case for feature names (&lt;code&gt;make&lt;/code&gt;), and initial capitals for constants (&lt;code&gt;Avogadro&lt;/code&gt;). The recommended style also suggests underscore to separate components of a multi-word identifier, as in &lt;code&gt;average_temperature&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;The specification of Eiffel includes guidelines for displaying software texts in typeset formats: keywords in bold, user-defined identifiers and constants are shown in &lt;code&gt;italics&lt;/code&gt;, comments, operators, and punctuation marks in &lt;code&gt;roman&lt;/code&gt;, with program text in &lt;code&gt;blue&lt;/code&gt; as in the present article to distinguish it from explanatory text. For example, the "Hello World" program given above would be rendered as below in Eiffel documentation:&lt;/p&gt; &lt;pre&gt;&lt;code&gt;&lt;span style="color:blue;"&gt;&lt;b&gt;class&lt;/b&gt;&lt;br /&gt;  &lt;i&gt;HELLO_WORLD&lt;/i&gt;&lt;br /&gt;&lt;b&gt;create&lt;/b&gt;&lt;br /&gt;  &lt;i&gt;make&lt;/i&gt;&lt;br /&gt;&lt;b&gt;feature&lt;/b&gt;&lt;br /&gt; &lt;i&gt;make&lt;/i&gt;&lt;br /&gt;    &lt;b&gt;do&lt;/b&gt;&lt;br /&gt;       &lt;i&gt;io.put_string&lt;/i&gt; ("Hello, world!")&lt;br /&gt;&lt;br /&gt;Enjoy life to the fullest&lt;br /&gt;Ashvala&lt;br /&gt;       &lt;i&gt;io.put_new_line&lt;/i&gt;&lt;br /&gt;    &lt;b&gt;end&lt;/b&gt;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;&lt;/span&gt;&lt;/code&gt; &lt;/pre&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=26" title="Edit section: Interfaces to other tools and languages"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Interfaces_to_other_tools_and_languages" id="Interfaces_to_other_tools_and_languages"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h3&gt;Interfaces to other tools and languages&lt;/h3&gt; &lt;p&gt;Eiffel is a purely object-oriented language but provides an open architecture for interfacing with "external" software in any other programming language.&lt;/p&gt; &lt;p&gt;It is possible for example to program machine- and operating-system level operations in &lt;a href="http://en.wikipedia.org/wiki/C_programming_language" title="C programming language"&gt;C&lt;/a&gt;. Eiffel provides a straightforward interface to C routines, including support for "inline C" (writing the body of an Eiffel routine in C, typically for short machine-level operations).&lt;/p&gt; &lt;p&gt;Although there is no direct connection between Eiffel and C, all of the current Eiffel &lt;a href="http://en.wikipedia.org/wiki/Compiler" title="Compiler"&gt;compilers&lt;/a&gt; except one (&lt;a href="http://en.wikipedia.org/wiki/Visual_Eiffel" title="Visual Eiffel"&gt;Visual Eiffel&lt;/a&gt;) output C &lt;a href="http://en.wikipedia.org/wiki/Source_code" title="Source code"&gt;source code&lt;/a&gt; as an &lt;a href="http://en.wikipedia.org/wiki/Intermediate_language" title="Intermediate language"&gt;intermediate language&lt;/a&gt;, to submit to a C compiler, for &lt;a href="http://en.wikipedia.org/wiki/Optimization_%28computer_science%29" title="Optimization (computer science)"&gt;optimizing&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Porting" title="Porting"&gt;portability&lt;/a&gt;. On .NET, the &lt;a href="http://en.wikipedia.org/wiki/EiffelStudio" title="EiffelStudio"&gt;EiffelStudio&lt;/a&gt; compiler directly generates CIL (Common Intermediate Language) code for the .NET virtual machine. The &lt;a href="http://en.wikipedia.org/wiki/SmartEiffel" title="SmartEiffel"&gt;SmartEiffel&lt;/a&gt; compiler can also output Java bytecode.&lt;/p&gt; &lt;div class="editsection"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Eiffel_%28programming_language%29&amp;action=edit&amp;amp;section=27" title="Edit section: References"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="References" id="References"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-7668927606713852803?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/7668927606713852803/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=7668927606713852803' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/7668927606713852803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/7668927606713852803'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2006/10/eiffel.html' title='Eiffel'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-7253888635095344141</id><published>2006-10-11T08:54:00.002-07:00</published><updated>2006-10-11T08:56:32.417-07:00</updated><title type='text'>Erlang a wikipedia answer</title><content type='html'>Here is the wikipedia answer to ERLANG&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;b&gt;Erlang&lt;/b&gt; is a general-purpose &lt;a href="http://en.wikipedia.org/wiki/Concurrent_computing" title="Concurrent computing"&gt;concurrent&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Programming_language" title="Programming language"&gt;programming language&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Runtime" title="Runtime"&gt;runtime&lt;/a&gt; system. The sequential subset of Erlang is a &lt;a href="http://en.wikipedia.org/wiki/Functional_language" title="Functional language"&gt;functional language&lt;/a&gt;, with &lt;a href="http://en.wikipedia.org/wiki/Strict_evaluation" title="Strict evaluation"&gt;strict evaluation&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Single_assignment" title="Single assignment"&gt;single assignment&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/Dynamic_typing" title="Dynamic typing"&gt;dynamic typing&lt;/a&gt;. It was designed by &lt;a href="http://en.wikipedia.org/wiki/Ericsson" title="Ericsson"&gt;Ericsson&lt;/a&gt; to support distributed, fault-tolerant, soft-&lt;a href="http://en.wikipedia.org/wiki/Real-time" title="Real-time"&gt;real-time&lt;/a&gt;, non-stop applications. It supports &lt;a href="http://en.wikipedia.org/wiki/Hot_swapping" title="Hot swapping"&gt;hot swapping&lt;/a&gt; so code can be changed without stopping a system. Erlang was originally a proprietary language within Ericsson, but was released as &lt;a href="http://en.wikipedia.org/wiki/Open_source" title="Open source"&gt;open source&lt;/a&gt; in 1998. The Ericsson implementation is primarily interpreted, but also includes a compiler called HiPE (not supported on all platforms).&lt;/p&gt; &lt;p&gt;Creating and managing processes is trivial in Erlang, whereas &lt;a href="http://en.wikipedia.org/wiki/Thread_%28computer_science%29" title="Thread (computer science)"&gt;threads&lt;/a&gt; are considered a complicated and error prone topic in most languages. In Erlang, all concurrency is explicit.&lt;/p&gt; &lt;p&gt;Erlang is named after &lt;a href="http://en.wikipedia.org/wiki/Agner_Krarup_Erlang" title="Agner Krarup Erlang"&gt;A. K. Erlang&lt;/a&gt;. It is sometimes thought that its name is an abbreviation of &lt;b&gt;ER&lt;/b&gt;icsson &lt;b&gt;LANG&lt;/b&gt;uage, owing to its heavy use inside Ericsson. According to Bjarne Däcker who headed the Computer Science Lab at the time, this duality is intentional.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Code looks like this:&lt;/p&gt; &lt;pre&gt;&lt;b&gt;-module&lt;/b&gt;(fact).&lt;br /&gt;&lt;b&gt;-export&lt;/b&gt;([fac/1]).&lt;br /&gt;&lt;br /&gt;fac(0) -&gt; 1;&lt;br /&gt;fac(N) &lt;b&gt;when&lt;/b&gt; N &gt; 0 -&gt; N * fac(N-1).&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Below is an implementation of a &lt;a href="http://en.wikipedia.org/wiki/Quicksort" title="Quicksort"&gt;Quicksort&lt;/a&gt; algorithm.&lt;/p&gt; &lt;pre&gt;&lt;i&gt;%% quicksort:qsort(List)&lt;/i&gt;&lt;br /&gt;&lt;i&gt;%% Sort a list of items&lt;/i&gt;&lt;br /&gt;&lt;b&gt;-module&lt;/b&gt;(quicksort).&lt;br /&gt;&lt;b&gt;-export&lt;/b&gt;([qsort/1]).&lt;br /&gt;&lt;br /&gt;qsort([]) -&gt; [];&lt;br /&gt;qsort([Pivot|Rest]) -&gt;&lt;br /&gt;   qsort([ X || X &lt;- Rest, X &lt;&gt;= Pivot]).&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;The above example recursively calls the function &lt;code&gt;qsort&lt;/code&gt; until there is no more to be sorted. The expression &lt;code&gt;[ X || X &lt;- Rest, X &lt;&gt; can be read as "Choose all &lt;code&gt;X&lt;/code&gt; where &lt;code&gt;X&lt;/code&gt; is a member of &lt;code&gt;Rest&lt;/code&gt; and &lt;code&gt;X&lt;/code&gt; is less than &lt;code&gt;Pivot&lt;/code&gt;", resulting in a very easy way of handling Lists. Since you can evaluate any boolean expression between two different datatypes, the evaluation is straightforward: for example, &lt;code&gt;1 &lt;&gt; will return &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;However, a compare function can be used if the order on which Erlang bases its return value (&lt;code&gt;true&lt;/code&gt; or &lt;code&gt;false&lt;/code&gt;) needs to be changed. For example, if we would want an ordered list where &lt;code&gt;a &lt;&gt; evaluates &lt;code&gt;true&lt;/code&gt;.&lt;/p&gt; &lt;p&gt;The following code would sort lists according to length:&lt;/p&gt; &lt;pre&gt;&lt;b&gt;-module&lt;/b&gt;(listsort).&lt;br /&gt;&lt;b&gt;-export&lt;/b&gt;([by_length/1]).&lt;br /&gt;&lt;br /&gt;by_length(Lists) -&gt;&lt;br /&gt;   F = fun(A,B) when is_list(A), is_list(B) -&gt;&lt;br /&gt;           length(A) &lt; length(B)&lt;br /&gt;       end,&lt;br /&gt;   qsort(Lists, F).&lt;br /&gt;&lt;br /&gt;qsort([], _) -&gt; [];&lt;br /&gt;qsort([Pivot|Rest], Smaller) -&gt;&lt;br /&gt;    qsort([ X || X &lt;- Rest, Smaller(X, Pivot)], Smaller)&lt;br /&gt;    ++ [Pivot] ++&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;The main strength of Erlang is support for &lt;a href="http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29" title="Concurrency (computer science)"&gt;concurrency&lt;/a&gt;. It has a small but powerful set of primitives to create processes and communicate between them. Processes are the primary means to structure an Erlang application. It should also be noted that Erlang processes are neither OS processes nor OS threads, they are lightweight threads somewhat similar to Java's "green threads". As a result, Erlang processes are extremely lightweight (the estimated minimal overhead of an Erlang process is 300 bytes) and a very large number of them can be created without performance degradation (a benchmark with 20 million processes was tried &lt;sup id="_ref-0" class="reference"&gt;&lt;a href="http://en.wikipedia.org/wiki/Erlang_programming_language#_note-0" title=""&gt;[1]&lt;/a&gt;&lt;/sup&gt;). Since release R11B (May 2006) Erlang implements support for &lt;a href="http://en.wikipedia.org/wiki/Symmetric_multiprocessing" title="Symmetric multiprocessing"&gt;symmetric multiprocessing&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Communication between processes in Erlang is done via a share-nothing asynchronous message-passing system: every Erlang process has a &lt;i&gt;mailbox&lt;/i&gt; in which the messages sent by other processes are stored until consumed. Erlang threads then use the &lt;b&gt;receive&lt;/b&gt; primitive to retrieve messages. Message retrieval is done through pattern-matching (the message-handling routine tests the first message against each pattern, then the second, and so forth until one of them matches against a pattern). As the message is consumed (removed from the &lt;i&gt;mailbox&lt;/i&gt; queue), the thread resumes execution. Any Erlang structure can be used as a message, which include Erlang primitives (integers, floats, characters, atoms), tuples, lists or even functions.&lt;/p&gt; &lt;p&gt;Code examples:&lt;/p&gt;  Pid = &lt;b&gt;spawn&lt;/b&gt;(Mod, Func, Args)       &lt;i&gt;% execute function Func as new process&lt;/i&gt;  Pid = &lt;b&gt;spawn&lt;/b&gt;(Node, Mod, Func, Args) &lt;i&gt;% execute function Func in remote node Node&lt;/i&gt;   Pid ! a_message      &lt;i&gt;% send message to the process (asynchronously)&lt;/i&gt;   &lt;b&gt;receive&lt;/b&gt;       &lt;i&gt;% receive message sent to this process&lt;/i&gt;    a_message -&gt; do_something;    {data, Data_content} -&gt; do_something_else(); % This is a tuple of a type atom and some data    {hello, Text} -&gt; io:format("Got hello message: ~s", [Text]);    {goodbye, Text} -&gt; io:format("Got goodbye message: ~s", [Text])  &lt;b&gt;end&lt;/b&gt;.  &lt;p&gt;There is also built-in support for distributed processes. Processes may be created on remote nodes, and communication with them is transparent (i.e. the communication with remote processes is done exactly as the communication with local processes).&lt;/p&gt; &lt;p&gt;Concurrency supports the primary method of error-handling in Erlang. When a process crashes, it neatly exits and sends a message to the controlling process who can take action. This way of error handling may increase maintainability and reduce complexity of code.&lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Erlang_%28programming_language%29&amp;action=edit&amp;amp;section=3" title="Edit section: Distribution"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Distribution" id="Distribution"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Distribution&lt;/h2&gt; &lt;p&gt;Erlang was released by Ericsson as open-source to ensure its independence from a single vendor and to increase awareness of the language. Distribution of the language together with libraries and real-time distributed database (&lt;i&gt;Mnesia&lt;/i&gt;) is known as the Open Telecom Platform, or OTP. Ericsson and a few other companies offer commercial support for Erlang.&lt;/p&gt; &lt;p&gt;Since taking the open-source path in &lt;a href="http://en.wikipedia.org/wiki/1998" title="1998"&gt;1998&lt;/a&gt;, it became used by several companies world-wide, including &lt;a href="http://en.wikipedia.org/wiki/Nortel_Networks" title="Nortel Networks"&gt;Nortel&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/T-Mobile" title="T-Mobile"&gt;T-Mobile&lt;/a&gt;.&lt;sup id="_ref-1" class="reference"&gt;&lt;a href="http://en.wikipedia.org/wiki/Erlang_programming_language#_note-1" title=""&gt;[2]&lt;/a&gt;&lt;/sup&gt; However, it hasn't yet become a wide-spread mainstream programming language.&lt;/p&gt; &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/As_of_2006" title="As of 2006"&gt;As of 2006&lt;/a&gt;, Erlang is under active development with regular releases. It is available for several &lt;a href="http://en.wikipedia.org/wiki/Unix-like" title="Unix-like"&gt;Unix-like&lt;/a&gt; operating systems and &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Windows" title="Microsoft Windows"&gt;Microsoft Windows&lt;/a&gt;.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Enjoy life to the fullest&lt;/p&gt;&lt;p&gt;himself!&lt;br /&gt;&lt;/p&gt;&lt;pre&gt;&lt;br /&gt;&lt;br /&gt;    qsort([ Y || Y &lt;- Rest, not(Smaller(Y, Pivot))], Smaller).&lt;br /&gt;&lt;/pre&gt;&lt;p&gt; &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-7253888635095344141?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/7253888635095344141/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=7253888635095344141' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/7253888635095344141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/7253888635095344141'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2006/10/erlang-wikipedia-answer.html' title='Erlang a wikipedia answer'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-2481955042008564038.post-6138585819239122679</id><published>2006-10-09T08:49:00.000-07:00</published><updated>2006-10-09T08:57:44.943-07:00</updated><title type='text'>Concurrency</title><content type='html'>&lt;div id="jump-to-nav"&gt;Jump to: &lt;a href="http://en.wikipedia.org/wiki/Concurrent_programming#column-one"&gt;navigation&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Concurrent_programming#searchInput"&gt;search&lt;/a&gt;&lt;/div&gt;   &lt;!-- start content --&gt;    &lt;p&gt;&lt;b&gt;Concurrent computing&lt;/b&gt; is the &lt;a href="http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29" title="Concurrency (computer science)"&gt;concurrent&lt;/a&gt; (simultaneous) execution of multiple interacting computational tasks. These tasks may be implemented as separate &lt;a href="http://en.wikipedia.org/wiki/Computer_program" title="Computer program"&gt;programs&lt;/a&gt;, or as a set of &lt;a href="http://en.wikipedia.org/wiki/Process_%28computer_science%29" title="Process (computer science)"&gt;processes&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Thread_%28computer_science%29" title="Thread (computer science)"&gt;threads&lt;/a&gt; created by a single program. The tasks may also be executing on a single &lt;a href="http://en.wikipedia.org/wiki/Central_processing_unit" title="Central processing unit"&gt;processor&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Multiprocessing" title="Multiprocessing"&gt;several processors&lt;/a&gt; in close proximity, or &lt;a href="http://en.wikipedia.org/wiki/Distributed_computing" title="Distributed computing"&gt;distributed&lt;/a&gt; across a network. Concurrent computing is related to &lt;a href="http://en.wikipedia.org/wiki/Parallel_computing" title="Parallel computing"&gt;parallel computing&lt;/a&gt;, but focuses more on the interactions between tasks. Correct sequencing of the interactions or communications between different tasks, and the coordination of access to resources that are shared between tasks, are key concerns during the design of concurrent computing systems. Pioneers in the field of concurrent computing include &lt;a href="http://en.wikipedia.org/wiki/Edsger_Dijkstra" title="Edsger Dijkstra"&gt;Edsger Dijkstra&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Per_Brinch_Hansen" title="Per Brinch Hansen"&gt;Per Brinch Hansen&lt;/a&gt;, and &lt;a href="http://en.wikipedia.org/wiki/C._A._R._Hoare" title="C. A. R. Hoare"&gt;C. A. R. Hoare&lt;/a&gt;.&lt;/p&gt;&lt;h2&gt;Concurrent interaction and communication&lt;/h2&gt; &lt;p&gt;In some concurrent computing systems communication between the concurrent components is hidden from the programmer (e.g., by using &lt;a href="http://en.wikipedia.org/wiki/Future_%28programming%29" title="Future (programming)"&gt;futures&lt;/a&gt;), while in others it must be handled explicitly. Explicit communication can be divided into two classes:&lt;/p&gt; &lt;dl&gt;&lt;dt&gt;&lt;a href="http://en.wikipedia.org/wiki/Shared_memory" title="Shared memory"&gt;Shared memory&lt;/a&gt; communication &lt;/dt&gt;&lt;dd&gt;Concurrent components communicate by altering the contents of shared memory locations (exemplified by &lt;a href="http://en.wikipedia.org/wiki/Java_programming_language" title="Java programming language"&gt;Java&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/C_sharp" title="C sharp"&gt;C#&lt;/a&gt;). This style of concurrent programming usually requires the application of some form of locking (e.g., &lt;a href="http://en.wikipedia.org/wiki/Mutual_exclusion" title="Mutual exclusion"&gt;mutexes&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Semaphore_%28programming%29" title="Semaphore (programming)"&gt;semaphores&lt;/a&gt;, or &lt;a href="http://en.wikipedia.org/wiki/Monitor_%28synchronization%29" title="Monitor (synchronization)"&gt;monitors&lt;/a&gt;) to coordinate between threads.&lt;/dd&gt;&lt;/dl&gt; &lt;dl&gt;&lt;dt&gt;&lt;a href="http://en.wikipedia.org/wiki/Message_passing" title="Message passing"&gt;Message passing&lt;/a&gt; communication &lt;/dt&gt;&lt;dd&gt;Concurrent components communicate by exchanging messages (exemplified by &lt;a href="http://en.wikipedia.org/wiki/Erlang_programming_language" title="Erlang programming language"&gt;Erlang&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Occam_programming_language" title="Occam programming language"&gt;occam&lt;/a&gt;). The exchange of messages may be carried out asynchronously (sometimes referred to as "send and pray", although it is standard practice to resend messages that are not acknowledged as received), or may use a rendezvous style in which the sender blocks until the message is received. Message-passing concurrency tends to be far easier to reason about than shared-memory concurrency, and is typically considered a more robust form of concurrent programming. A wide variety of mathematical theories for understanding and analyzing message-passing systems are available, including the &lt;a href="http://en.wikipedia.org/wiki/Actor_model" title="Actor model"&gt;Actor model&lt;/a&gt;, and various &lt;a href="http://en.wikipedia.org/wiki/Process_calculi" title="Process calculi"&gt;process calculi&lt;/a&gt;.&lt;/dd&gt;&lt;/dl&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Concurrent_computing&amp;action=edit&amp;amp;section=2" title="Edit section: Coordinating access to resources"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Coordinating_access_to_resources" id="Coordinating_access_to_resources"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Coordinating access to resources&lt;/h2&gt; &lt;p&gt;One of the major issues in concurrent computing is preventing concurrent processes from interfering with each other. For example, consider the following algorithm for making withdrawals from a checking account represented by the shared resource &lt;code&gt;balance&lt;/code&gt;:&lt;/p&gt; &lt;pre&gt;1  bool withdraw(int withdrawal) {&lt;br /&gt;2     if( balance &gt; withdrawal ) {&lt;br /&gt;3         balance = balance - withdrawal;&lt;br /&gt;4         return true;&lt;br /&gt;5     } else return false;&lt;br /&gt;6  }&lt;br /&gt;&lt;/pre&gt; &lt;p&gt;Suppose &lt;code&gt;balance=500&lt;/code&gt;, and two concurrent processes make the calls &lt;code&gt;withdraw(300)&lt;/code&gt; and &lt;code&gt;withdraw(350)&lt;/code&gt;. If line 2 in both operations executes before line 3 both operations will find that &lt;code&gt;balance &gt; withdrawal&lt;/code&gt; evaluates to &lt;code&gt;true&lt;/code&gt;, and execution will proceed to subtracting the withdrawal amount. However, since both processes perform their withdrawals, the total amount withdrawn will end up being more than the original balance. These sorts of problems with shared resources require the use of &lt;a href="http://en.wikipedia.org/wiki/Concurrency_control" title="Concurrency control"&gt;concurrency control&lt;/a&gt;, or &lt;a href="http://en.wikipedia.org/wiki/Non-blocking_algorithm" title="Non-blocking algorithm"&gt;non-blocking algorithms&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Because concurrent systems rely on the use of shared resources (including communications mediums), concurrent computing in general requires the use of some form of &lt;a href="http://en.wikipedia.org/wiki/Metastability_in_electronics" title="Metastability in electronics"&gt;arbiter&lt;/a&gt; somewhere in the implementation to mediate access to these resources. This introduces the possibility that problems with &lt;a href="http://en.wikipedia.org/wiki/Unbounded_nondeterminism" title="Unbounded nondeterminism"&gt;unbounded nondeterministic&lt;/a&gt; decisions can arise, although careful design of the arbiters can reduce the probability of these situations arising in practice to near zero.&lt;/p&gt; &lt;p&gt;Unfortunately, while many solutions exist to the problem of a conflict over one resource, many of those "solutions" have their own &lt;a href="http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29" title="Concurrency (computer science)"&gt;concurrency&lt;/a&gt; problems such as &lt;a href="http://en.wikipedia.org/wiki/Deadlock" title="Deadlock"&gt;deadlock&lt;/a&gt; when more than one resource is involved.&lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Concurrent_computing&amp;action=edit&amp;amp;section=3" title="Edit section: Concurrent programming languages"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Concurrent_programming_languages" id="Concurrent_programming_languages"&gt;&lt;/a&gt;&lt;/p&gt; &lt;h2&gt;Concurrent programming languages&lt;/h2&gt; &lt;p&gt;Concurrent programming languages are &lt;a href="http://en.wikipedia.org/wiki/Programming_languages" title="Programming languages"&gt;programming languages&lt;/a&gt; that use language constructs for &lt;a href="http://en.wikipedia.org/wiki/Concurrency_%28computer_science%29" title="Concurrency (computer science)"&gt;concurrency&lt;/a&gt;. These constructs may involve &lt;a href="http://en.wikipedia.org/wiki/Multi-threading" title="Multi-threading"&gt;multi-threading&lt;/a&gt;, support for &lt;a href="http://en.wikipedia.org/wiki/Distributed_computing" title="Distributed computing"&gt;distributed computing&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Message_passing_programming" title="Message passing programming"&gt;message passing&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Sharing" title="Sharing"&gt;shared resources&lt;/a&gt; (including &lt;a href="http://en.wikipedia.org/wiki/Parallel_Random_Access_Machine" title="Parallel Random Access Machine"&gt;shared memory&lt;/a&gt;) or &lt;a href="http://en.wikipedia.org/wiki/Future_%28programming%29" title="Future (programming)"&gt;futures&lt;/a&gt; (known also as &lt;i&gt;promises&lt;/i&gt;).&lt;/p&gt; &lt;p&gt;Today, the most commonly used programming languages that have specific constructs for concurrency are &lt;a href="http://en.wikipedia.org/wiki/Java_programming_language" title="Java programming language"&gt;Java&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/C_sharp" title="C sharp"&gt;C#&lt;/a&gt;. Both of these languages fundamentally use a shared-memory concurrency model, with locking provided by &lt;a href="http://en.wikipedia.org/wiki/Monitor_%28synchronization%29" title="Monitor (synchronization)"&gt;monitors&lt;/a&gt; (although message-passing models can and have been implemented on top of the underlying shared-memory model). Of the languages that use a message-passing concurrency model, &lt;a href="http://en.wikipedia.org/wiki/Erlang_programming_language" title="Erlang programming language"&gt;Erlang&lt;/a&gt; is probably the most widely used in industry at present.&lt;/p&gt; &lt;p&gt;Many concurrent programming languages have been developed more as research languages (e.g. &lt;a href="http://en.wikipedia.org/wiki/Pict_programming_language" title="Pict programming language"&gt;Pict&lt;/a&gt;) rather than as languages for production use. However, languages such as Erlang, Limbo, and occam have seen industrial use at various times in the last 20 years. Languages in which concurrency plays an important role include:&lt;/p&gt; &lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Ada_programming_language" title="Ada programming language"&gt;Ada&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Afnix_programming_language" title="Afnix programming language"&gt;Afnix&lt;/a&gt; – concurrent access to data is protected automatically (previously called &lt;i&gt;Aleph&lt;/i&gt;, but unrelated to &lt;i&gt;Alef&lt;/i&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Alef_programming_language" title="Alef programming language"&gt;Alef&lt;/a&gt; – concurrent language with threads and message passing, used for systems programming in early versions of &lt;a href="http://en.wikipedia.org/wiki/Plan_9_from_Bell_Labs" title="Plan 9 from Bell Labs"&gt;Plan 9 from Bell Labs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Alice_programming_language" title="Alice programming language"&gt;Alice&lt;/a&gt; – extension to &lt;a href="http://en.wikipedia.org/wiki/Standard_ML" title="Standard ML"&gt;Standard ML&lt;/a&gt;, adding support for concurrency through futures.&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.connectivelogic.co.uk/whatisclip.html" class="external text" title="http://www.connectivelogic.co.uk/whatisclip.html"&gt;CDL (Concurrent Description Language)&lt;/a&gt;, a machine-translatable, composable, object-oriented, visual programming language.&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/ChucK" title="ChucK"&gt;ChucK&lt;/a&gt; – domain specific programming language for audio.&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Cilk" title="Cilk"&gt;Cilk&lt;/a&gt; – a concurrent &lt;a href="http://en.wikipedia.org/wiki/C_programming_language" title="C programming language"&gt;C&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/C%CF%89" title="Cω"&gt;Cω&lt;/a&gt; – C Omega, a research language extending C#, uses asynchronous communication&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/w/index.php?title=Concurrent_C&amp;action=edit" class="new" title="Concurrent C"&gt;Concurrent C&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Concurrent_Clean" title="Concurrent Clean"&gt;Concurrent Clean&lt;/a&gt; – a functional programming language, similar to &lt;a href="http://en.wikipedia.org/wiki/Haskell_programming_language" title="Haskell programming language"&gt;Haskell&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/w/index.php?title=Concurrent_Pascal_programming_language&amp;amp;action=edit" class="new" title="Concurrent Pascal programming language"&gt;Concurrent Pascal&lt;/a&gt; – by &lt;a href="http://en.wikipedia.org/wiki/Per_Brinch_Hansen" title="Per Brinch Hansen"&gt;Brinch-Hansen&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/w/index.php?title=Corn_programming_language&amp;action=edit" class="new" title="Corn programming language"&gt;Corn&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Curry_programming_language" title="Curry programming language"&gt;Curry&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/E_programming_language" title="E programming language"&gt;E&lt;/a&gt; – uses promises, ensures deadlocks cannot occur&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Eiffel_%28programming_language%29" title="Eiffel (programming language)"&gt;Eiffel&lt;/a&gt; – through its &lt;a href="http://en.wikipedia.org/wiki/SCOOP_%28software%29" title="SCOOP (software)"&gt;SCOOP&lt;/a&gt; mechanism based on the concepts of Design by Contract&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Erlang_programming_language" title="Erlang programming language"&gt;Erlang&lt;/a&gt; – uses asynchronous message passing with nothing shared&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Janus_computer_programming_language" title="Janus computer programming language"&gt;Janus&lt;/a&gt; features distinct "askers" and "tellers" to logical variables, bag channels; is purely declarative&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Join_Java" title="Join Java"&gt;Join Java&lt;/a&gt; – concurrent language based on the &lt;a href="http://en.wikipedia.org/wiki/Java_programming_language" title="Java programming language"&gt;Java programming language&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Joule_programming_language" title="Joule programming language"&gt;Joule&lt;/a&gt; – dataflow language, communicates by message passing&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Limbo_programming_language" title="Limbo programming language"&gt;Limbo&lt;/a&gt; – relative of &lt;a href="http://en.wikipedia.org/wiki/Alef_programming_language" title="Alef programming language"&gt;Alef&lt;/a&gt;, used for systems programming in &lt;a href="http://en.wikipedia.org/wiki/Inferno_%28operating_system%29" title="Inferno (operating system)"&gt;Inferno (operating system)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Oz_programming_language" title="Oz programming language"&gt;Oz&lt;/a&gt; – multiparadigm language, supports shared-state and message-passing concurrency, and futures &lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Mozart_Programming_System" title="Mozart Programming System"&gt;Mozart Programming System&lt;/a&gt; – &lt;a href="http://en.wikipedia.org/wiki/Multiplatform" title="Multiplatform"&gt;multiplatform&lt;/a&gt; Oz&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/MultiLisp" title="MultiLisp"&gt;MultiLisp&lt;/a&gt; – &lt;a href="http://en.wikipedia.org/wiki/Scheme_programming_language" title="Scheme programming language"&gt;Scheme&lt;/a&gt; variant extended to support parallelism&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Occam_programming_language" title="Occam programming language"&gt;occam&lt;/a&gt; – influenced heavily by &lt;a href="http://en.wikipedia.org/wiki/Communicating_Sequential_Processes" title="Communicating Sequential Processes"&gt;Communicating Sequential Processes&lt;/a&gt; (CSP). &lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Occam-Pi" title="Occam-Pi"&gt;occam-π&lt;/a&gt; – a modern variant of &lt;a href="http://en.wikipedia.org/wiki/Occam_programming_language" title="Occam programming language"&gt;occam&lt;/a&gt;, which incorporates ideas from Milner's &lt;a href="http://en.wikipedia.org/wiki/Pi-Calculus" title="Pi-Calculus"&gt;π-calculus&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Pict_programming_language" title="Pict programming language"&gt;Pict&lt;/a&gt; – essentially an executable implementation of Milner's &lt;a href="http://en.wikipedia.org/wiki/Pi-Calculus" title="Pi-Calculus"&gt;π-calculus&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/SALSA_programming_language" title="SALSA programming language"&gt;SALSA&lt;/a&gt; – actor language with token-passing, join, and first-class continuations for distributed computing over the Internet&lt;/li&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/SR_language" title="SR language"&gt;SR&lt;/a&gt; – research language&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Many other languages provide support for concurrency in the form of libraries (on level roughly comparable with the above list).&lt;/p&gt;&lt;p&gt;This was the Wiki edition&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Enjoy!&lt;/p&gt;&lt;p&gt;AsHvAlA&lt;br /&gt;&lt;/p&gt; &lt;div class="editsection" style="float: right; margin-left: 5px;"&gt;[&lt;a href="http://en.wikipedia.org/w/index.php?title=Concurrent_computing&amp;action=edit&amp;amp;section=4" title="Edit section: Models of concurrency"&gt;edit&lt;/a&gt;]&lt;/div&gt; &lt;p&gt;&lt;a name="Models_of_concurrency" id="Models_of_concurrency"&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/2481955042008564038-6138585819239122679?l=ashvalav.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ashvalav.blogspot.com/feeds/6138585819239122679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=2481955042008564038&amp;postID=6138585819239122679' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6138585819239122679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/2481955042008564038/posts/default/6138585819239122679'/><link rel='alternate' type='text/html' href='http://ashvalav.blogspot.com/2006/10/concurrency.html' title='Concurrency'/><author><name>ASHVALA</name><uri>http://www.blogger.com/profile/10037333986796564094</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
