返回主页
魔戒的“大一统”铭文（英德）
魔戒的“大一统”铭文（英德）
Dark Lord Sauron Vs. Wizard Gandalf《魔戒》
魔戒上的文字属腾格瓦古文字，在魔都（Mordor/Moskow）一带使用。魔戒上铭文在火焰中才能显现。
将魔戒上的铭文日耳曼神话腾格瓦文字直接翻译至英语和德语，如下：
英文：
One Ring to rule them all, One Ring to find them,
One Ring to bring them all and in the darkness bind them
德文：
Ein Ring, sie zu knechten, sie alle zu finden,
Ins Dunkel (dark) zu treiben und ewig (eternal/永恒) zu binden
这样对照才能比较准确地理解原文翻译。Lost in translation！英国一直害怕“公权力”，害怕“绝对真理”和“终极秩序”。
《德语简史》：P26，共同日耳曼语中有航海（Segel等）方面的词汇，而在当时的印欧语中找不到。
挑战原文：但泽（Danzig）
日耳曼人大迁徙（蛮族入侵）
Harry Potter 核心情节
德语名言：激励奋斗（5）
德语名言：激励奋斗（6）
Harry Potter 核心情节
爱（Was du liebst, lass frei）
亚洲是亚洲人的亚洲
欧洲大陆一直有“大一统”的传统，从罗马到拿破仑，从希特勒到斯大林。所以来自大论的“统一”企图都被视为对WAPS的征服和奴役。这不，卡迈隆（Cameron）在2013年又提议要公投“是否脱离欧盟”。而德国、俄国和法国一直努力促成欧洲（至少是西欧）的统一，不管付出何种代价。
舆论战、心理战、法律战
The New Cold War: China vs Japan
世界大战的心理逻辑
一生中只追求完美
Der Zweck heiligt die Mittel(The end justifies the means)
Promote pro-reformist allies to replace purged officials, but also cows others into backing (or at least not opposing) more ambitious reforms. The plans to use the corruption probe as pseudo-blackmail, purposefully leaving some implicated 涉及military officials in power to lean on them later to support tough reforms. 《中国转向内在（China turning inward）》，刘子健（江苏人民出版社，2012.1）
哥萨克民主的困境
爱（Was du liebst, lass frei）
2014：奥巴马西点演讲
战舰美利坚号
Dawkins: A Devil's Chaplain
History doesn't repeat itself, but it does rhyme. Mark Twain
挑战原文：默克尔演讲录音（1）
脱离欧盟的英国没有前途
作者：英国工党领袖 米利班德
2014年03月21日
在国家遭遇黑暗危险之时挥舞着欧盟(EU)蓝天金星旗、期待更美好未来的乌克兰年轻人，应该会提醒人们，一个强大而自由、用一个声音说话的欧洲空前重要。
对我的父辈来说，欧盟代表着和平和繁荣，而我们这一代人经常轻易地认为这一切理所当然。
的确，我们这个自豪、自信、传统上放眼世界的国家，正由这样一个政府主政，这个政府正在与自己辩论：我们是否应该向内转、背离我们自己所处的大陆？在这种情况下，有一点具有前所未有的重要性：英国的政治领袖们应当在下次大选之前，阐明各自对于欧盟的立场。
戴维 卡梅伦(David Cameron，现任英国首相)承诺，保守党人将按照一个武断的时间表（2017年英国将举行要不要脱离欧盟的公投），就英国与欧盟的关系重启重大谈判。
然而，作为首相，他却不能告诉我们，他的重新谈判战略的性质是什么？他会不会大力支持让英国留在欧盟？我们的欧盟伙伴对他的做法毫无兴趣。德国总理安格拉 默克尔(Angela Merkel)在最近出访伦敦期间，拒绝支持卡梅伦抛出的时间表或提议。她解释道，为了达成一项新条约，卡梅伦需要在欧盟内获得一致支持。显然，卡梅伦得不到任何支持。
卡梅伦的立场充斥着疑虑，并受到弱点的驱使，这意味着，2015年大选之后，如果保守党主政，卡梅伦的优先任务将不是应对生活成本危机，也不是创造就业和繁荣，相反，保守党政府将会被党内某些派别念念不忘的一个心结所主导，这个破坏性很大的心结便是：英国是否应该脱离欧盟？
你不需要水晶球就能预测这种情况的后果，你只需读一读约翰 梅杰(John Major，英国保守党的前首相)政府的历史就明白了。
相比之下，工党(Labour)对于欧洲的立场是明确而有原则的：我们坚信，英国的未来在于其作为欧盟一员。下次大选之后，如果工党主政，我的工作重点与保守党相比将会非常不同。工党将聚焦于应对生活成本危机上，方法是打造一个更强大的经济，让人们能够期待他们的子女会有一个更美好的未来。按照武断的时间表举行脱离欧盟的公投，将会损害我们完成这些优先任务的能力。
但我也知道，出于一些众所周知的原因，欧盟的名誉正处于低谷。要确保英国在欧洲的未来，欧洲就需要更好地服务于英国的利益，同时英国需要更有效地推动欧盟内部的改革。
欧洲必须采取更多措施，应对我们共同面对的经济挑战，方法是提高竞争力，解决年轻人失业问题，并打造一个更有利于促进繁荣的经济。就此而言，完善能源、服务业和数字经济的单一市场至关重要。
欧洲还应采取更多措施化解人们对于移民的焦虑。我们需要对他国公民移居英国制定更加公平的规定，我们也需要采取措施，防止那种压低已经在英国的劳动者的薪资或条件的恶性竞争。
如果下次大选后由工党主政，我们将与我们的欧盟伙伴一道，为加入欧盟的国家延长现有的过渡安排，使它们的公民不得不等上更久才能获得在英国工作的权利。现有规定允许人们为生活在海外的子女申领儿童福利金或儿童税收减免，这些规定应得到改革。我们应设法简化程序，将那些抵达英国不久之后就犯罪的人驱逐出境。
一个由工党主政的英国政府可以立即开始为这些改革在欧洲构建同盟，而不受我们党内分歧的阻碍，也不必赶在2017年之前与另外27个欧盟成员国谈判达成一项重大的新条约。
然而，改革议程必须应对人们对于欧盟内部权力如何行使的担忧。这意味着将更多控制权交还给各成员国议会。这意味着要回应这样一个担忧：欧盟有意以不可阻挡的势头，建立一个越来越紧密的联盟。我可以明确地说，这并非工党的欧洲愿景。
有必要强调一点：目前，无论是欧盟或是任何一个成员国都没有提议让英国进一步交出权力。因此，下届议会不太可能出现此类提案。但英国人民知道，欧盟的历史，加上围绕不断变化的欧洲和欧元区进一步一体化究竟可能意味着什么这个问题的不确定性，意味着权力的进一步移交仍是有可能的。
因此我在最近的一个讲话中宣布，下届工党政府将立法设置新的保障：欧盟如果想让英国移交新的权力，英国就会举行公投，决定是否继续留在欧盟。
公投将不仅仅是关于是否允许英国向欧盟交权的狭义问题；正如我们在其他国家所看到的那样，这种投票太容易被忽视了。工党的这种立场将为下届议会设定相应条件，而工党政府将根据这些条件举行有关英国是否脱离欧盟的公投；工党的这种立场也将在下次大选时为英国选民提供一个明确的选择。
这个选择就是：他们可以选择一个分裂、失控、但党内主张退出欧盟的呼声越来越响亮的保守党，这个选择的后果可能给商业带来巨大的不确定性，并削弱英国在海外的影响力；他们也可以选择一个主张“一个国家”、服务于英国最佳利益、致力于在欧盟内部推动实现真正改革的工党。
古之学者为己，今之学者为人。我们用心做，您来细细品。您也可以 先下载一个应用程序（App），有空再慢慢看。
普鲁士（Prussia）地图
名言佳句（俾斯麦）
In January 2013, British Prime Minister David Cameron promised a referendum on British membership of the European Union if the Conservative Party win a majority at the next general election. Since the announcement in January 2013 of a proposed referendum on continued membership, more business and political leaders have expressed their opposition to the idea. Since 2010 opinion polls have favoured a British withdrawal, with opposition peaking in November 2012 at 56% compared to 30% who wanted to remain.
Membership of the European Union has long been a controversial issue in the United Kingdom. Eurosceptics, who believe the UK would be better off outside the political and economic bloc, seek the United Kingdom's withdrawal from the European Union.
No member state has ever left the European Union but after the UK joined its precursor, the European Economic Community in 1973, this decision was put to a referendum in 1975 which endorsed the continuation of the UK's membership.
德国何以获得以色列信任
默克尔在以色列国会演讲（德语全文）
基地组织（Al-Qaeda）在 Fallujah 建国
End the Slavery Blame-Game
Kissinger: How the Ukraine crisis ends
至尊魔戒（One Ring），亦即是支配魔戒（Ruling Ring）、大魔戒(The Great Ring,或译为统御魔戒)、强力魔戒（Great Ring of Power）、魔戒(The Ring)、宝贝(Precious)及埃西铎的克星（Isildur's Bane），是托尔金（J. R. R. Tolkien）小说中的中土大陆的一件神器。在托尔金小说《魔戒》里主要讲述摧毁至尊魔戒的任务，亦讲述了至尊魔戒的大部分历史。
Three Rings for the Elven-kings under the sky,
Seven for the Dwarf-lords in their halls of stone,
Nine for Mortal Men doomed to die,
One for the Dark Lord on his dark throne
In the Land of Mordor where the Shadows lie.
One Ring to rule them all, One Ring to find them,
One Ring to bring them all and in the darkness bind them
In the Land of Mordor where the Shadows lie.
您也可以 先下载一个应用程序（App），有空再慢慢看。
EU Speech: Cameron Says Britain to Hold 'In or Out' Referendum in 2017
In a sweeping address on Britain's future role in Europe, British Prime Minister David Cameron on Wednesday said his country would hold a referendum on EU membership in 2017. Without reform, he has warned, Britain may choose another path.
January 23, 2013
In his strongest warning to Europe yet, British Prime Minister David Cameron said Wednesday that he planned to hold a referendum on whether the United Kingdom should remain in the European Union by the end of 2017.
"I don't just want a better deal for Britain," David Cameron said in his sharply critical and long-awaited speech on London's future relations with Brussels. "I want a better deal for Europe too." He went on to describe major challenges, including high debt, a lack of competitiveness and the people's diminishing trust in European institutions. The union, he argued, must urgently be reformed.
"The biggest danger to the European Union comes not from those who advocate change," Cameron said, "but from those who denounce new thinking as heresy."
Without reform, he warned, "the danger is that Europe will fail and the British people will drift towards the exit". With that statement, Cameron continued on to the most important point of his speech with his announcement that, if he is re-elected, he will offer the British people a referendum by the end of 2017 on whether the country should stay in the EU. He described it as a "very simple in or out choice. To stay in the EU on these new terms; or come out altogether."
Cameron said his decision is based on the crisis of confidence in the European Union, saying that the people no longer feel represented. He described an acute feeling in Britain that more and more power is flowing to the EU, treaty after treaty is changing the balance of power between member states and the EU and "they were never given a say." The result of this, he said, is that "democratic consent for the EU in Britain is now wafer thin." People, he warned "feel that the EU is now heading for a level of political integration that is far outside Britain's comfort zone."
The British leader said it is not his goal for Britain to exit the EU. "I want the European Union to be a success," he said. "And I want a relationship between Britain and the EU that keeps us in." Noting that Britain wanted to remain in NATO because it was in its national interest to stay, he also said that "we have more power and influence ... if we act together."
Still, it is likely that euroskeptics in Britain and in Europe will applaud Cameron's speech. "Would Britain collapse if we left the EU? No, of course not," Cameron told the BBC last week. "You could choose a different path. The question is, what is in our national interest?"
2014：奥巴马西点演讲
战舰美利坚号
'All This Doesn't Make Us Somehow Un-European'
Without radical reforms, he warned, Europe cannot continue. He also named five principles upon which a future EU shold be anchored: competitiveness, flexibility, power must flow back to member states, democratic accountability and fairness. If these challenges aren't addressed, he warned, "the danger is that Europe will fail and the British people will drift towards the exit."
Cameron also sought to explain the strong will of the British people when it comes to the conditions of its EU membership. "I know that the United Kingdom is sometimes seen as an argumentative and rather strong-minded member of the family of European nations," he said. "And it's true that our geography has shaped our psychology. We have the character of an island nation: independent, forthright, passionate in defense of our sovereignty." He also argued that the European Union is a means to an end for Britain.
"We insistently ask: how, why, to what end?" he said. "But all this doesn't make us somehow un-European."
In Brussels, Martin Schulz, the German president of the European Parliament and a member of the center-left Social Democratic Party (SPD), sharply rebuffed Cameron's criticism. In an interview with German public radio station Deutschlandfunk, he said that the reforms necessary to make the EU more effective, more transparent and leaner had failed in part because Britain had blocked them. "They are the ones who are largley responsible for the delays in Europe and also the ones pointing their fingers at Europe."
Cameron's Speech: 'The Danger Is that Europe Will Fail'
Read the full text of British Prime Minister David Cameron's Wednesday speech on his country's plan to hold a referendum on the future of its membership in the European Union.
Editor's note: This version of the speech given by David Cameron at Bloomberg's London headquarters, is as written not as spoken.
This morning I want to talk about the future of Europe.
美国领导世界
“优等民族”考
ANZEIGE
But first, let us remember the past.
Seventy years ago, Europe was being torn apart by its second catastrophic conflict in a generation. A war which saw the streets of European cities strewn with rubble. The skies of London lit by flames night after night. And millions dead across the world in the battle for peace and liberty.
As we remember their sacrifice, so we should also remember how the shift in Europe from war to sustained peace came about. It did not happen like a change in the weather. It happened because of determined work over generations. A commitment to friendship and a resolve never to revisit that dark past -- a commitment epitomised by the Elyseé Treaty signed 50 years ago this week.
After the Berlin Wall came down I visited that city and I will never forget it.
The abandoned checkpoints. The sense of excitement about the future. The knowledge that a great continent was coming together. Healing those wounds of our history is the central story of the European Union.
What Churchill described as the twin marauders of war and tyranny have been almost entirely banished from our continent. Today, hundreds of millions dwell in freedom, from the Baltic to the Adriatic, from the Western Approaches to the Aegean.
And while we must never take this for granted, the first purpose of the European Union -- to secure peace -- has been achieved and we should pay tribute to all those in the EU, alongside Nato, who made that happen.
But today the main, overriding purpose of the European Union is different: not to win peace, but to secure prosperity.
The challenges come not from within this continent but outside it. From the surging economies in the east and south. Of course a growing world economy benefits us all, but we should be in no doubt that a new global race of nations is under way today.
A race for the wealth and jobs of the future.
The map of global influence is changing before our eyes. And these changes are already being felt by the entrepreneur in the Netherlands, the worker in Germany, the family in Britain.
So I want to speak to you today with urgency and frankness about the European Union and how it must change -- both to deliver prosperity and to retain the support of its peoples.
But first, I want to set out the spirit in which I approach these issues.
I know that the United Kingdom is sometimes seen as an argumentative and rather strong-minded member of the family of European nations.
And it's true that our geography has shaped our psychology.
We have the character of an island nation: independent, forthright, passionate in defence of our sovereignty.
We can no more change this British sensibility than we can drain the English Channel.
And because of this sensibility, we come to the European Union with a frame of mind that is more practical than emotional.
For us, the European Union is a means to an end -- prosperity, stability, the anchor of freedom and democracy both within Europe and beyond her shores -- not an end in itself.
We insistently ask: how, why, to what end?
But all this doesn't make us somehow un-European.
The fact is that ours is not just an island story -- it is also a continental story.
For all our connections to the rest of the world -- of which we are rightly proud -- we have always been a European power, and we always will be.
From Caesar's legions to the Napoleonic wars. From the Reformation, the Enlightenment and the industrial revolution to the defeat of nazism. We have helped to write European history, and Europe has helped write ours.
Over the years, Britain has made her own, unique contribution to Europe. We have provided a haven to those fleeing tyranny and persecution. And in Europe's darkest hour, we helped keep the flame of liberty alight. Across the continent, in silent cemeteries, lie the hundreds of thousands of British servicemen who gave their lives for Europe's freedom.
In more recent decades, we have played our part in tearing down the iron curtain and championing the entry into the EU of those countries that lost so many years to Communism. And contained in this history is the crucial point about Britain, our national character, our attitude to Europe.
Britain is characterised not just by its independence but, above all, by its openness.
We have always been a country that reaches out. That turns its face to the world. That leads the charge in the fight for global trade and against protectionism.
This is Britain today, as it's always been: independent, yes -- but open, too.
I never want us to pull up the drawbridge and retreat from the world.
I am not a British isolationist.
I don't just want a better deal for Britain. I want a better deal for Europe too.
So I speak as British prime minister with a positive vision for the future of the European Union. A future in which Britain wants, and should want, to play a committed and active part.
Some might then ask: why raise fundamental questions about the future of Europe when Europe is already in the midst of a deep crisis?
Why raise questions about Britain's role when support in Britain is already so thin.
There are always voices saying: "Don't ask the difficult questions."
But it's essential for Europe -- and for Britain -- that we do because there are three major challenges confronting us today.
First, the problems in the eurozone are driving fundamental change in Europe.
Second, there is a crisis of European competitiveness, as other nations across the world soar ahead. And third, there is a gap between the EU and its citizens which has grown dramatically in recent years. And which represents a lack of democratic accountability and consent that is -- yes --- felt particularly acutely in Britain.
If we don't address these challenges, the danger is that Europe will fail and the British people will drift towards the exit.
I do not want that to happen. I want the European Union to be a success. And I want a relationship between Britain and the EU that keeps us in it.
That is why I am here today: to acknowledge the nature of the challenges we face. To set out how I believe the European Union should respond to them. And to explain what I want to achieve for Britain and its place within the European Union.
Let me start with the nature of the challenges we face.
Piratenpartei
First, the eurozone.
The future shape of Europe is being forged. There are some serious questions that will define the future of the European Union -- and the future of every country within it.
The union is changing to help fix the currency -- and that has profound implications for all of us, whether we are in the single currency or not.
Britain is not in the single currency, and we're not going to be. But we all need the eurozone to have the right governance and structures to secure a successful currency for the long term.
And those of us outside the eurozone also need certain safeguards to ensure, for example, that our access to the single market is not in any way compromised.
And it's right we begin to address these issues now.
Second, while there are some countries within the EU which are doing pretty well. Taken as a whole, Europe's share of world output is projected to fall by almost a third in the next two decades. This is the competitiveness challenge -- and much of our weakness in meeting it is self-inflicted.
Complex rules restricting our labour markets are not some naturally occurring phenomenon. Just as excessive regulation is not some external plague that's been visited on our businesses.
These problems have been around too long. And the progress in dealing with them, far too slow.
As Chancellor Merkel has said, if Europe today accounts for just over 7% of the world's population, produces around 25% of global GDP and has to finance 50% of global social spending, then it's obvious that it will have to work very hard to maintain its prosperity and way of life.
Third, there is a growing frustration that the EU is seen as something that is done to people rather than acting on their behalf. And this is being intensified by the very solutions required to resolve the economic problems.
People are increasingly frustrated that decisions taken further and further away from them mean their living standards are slashed through enforced austerity or their taxes are used to bail out governments on the other side of the continent.
We are starting to see this in the demonstrations on the streets of Athens, Madrid and Rome. We are seeing it in the parliaments of Berlin, Helsinki and the Hague.
And yes, of course, we are seeing this frustration with the EU very dramatically in Britain.
Europe's leaders have a duty to hear these concerns. Indeed, we have a duty to act on them. And not just to fix the problems in the eurozone.
For just as in any emergency you should plan for the aftermath as well as dealing with the present crisis, so too in the midst of the present challenges we should plan for the future, and what the world will look like when the difficulties in the eurozone have been overcome.
The biggest danger to the European Union comes not from those who advocate change, but from those who denounce new thinking as heresy. In its long history Europe has experience of heretics who turned out to have a point.
And my point is this. More of the same will not secure a long-term future for the eurozone. More of the same will not see the European Union keeping pace with the new powerhouse economies. More of the same will not bring the European Union any closer to its citizens. More of the same will just produce more of the same: less competitiveness, less growth, fewer jobs.
And that will make our countries weaker not stronger.
That is why we need fundamental, far-reaching change.
So let me set out my vision for a new European Union, fit for the 21st century.
It is built on five principles.
The first: competitiveness. At the core of the European Union must be, as it is now, the single market. Britain is at the heart of that single market, and must remain so.
But when the single market remains incomplete in services, energy and digital -- the very sectors that are the engines of a modern economy -- it is only half the success it could be.
It is nonsense that people shopping online in some parts of Europe are unable to access the best deals because of where they live. I want completing the single market to be our driving mission.
I want us to be at the forefront of transformative trade deals with the US, Japan and India as part of the drive towards global free trade. And I want us to be pushing to exempt Europe's smallest entrepreneurial companies from more EU directives.
These should be the tasks that get European officials up in the morning -- and keep them working late into the night. And so we urgently need to address the sclerotic, ineffective decision-making that is holding us back.
That means creating a leaner, less bureaucratic union, relentlessly focused on helping its member countries to compete.
In a global race, can we really justify the huge number of expensive peripheral European institutions?
Can we justify a commission that gets ever larger?
Can we carry on with an organisation that has a multibillion pound budget but not enough focus on controlling spending and shutting down programmes that haven't worked?
And I would ask: when the competitiveness of the single market is so important, why is there an environment council, a transport council, an education council but not a single market council?
The second principle should be flexibility.
We need a structure that can accommodate the diversity of its members -- north, south, east, west, large, small, old and new. Some of whom are contemplating much closer economic and political integration. And many others, including Britain, who would never embrace that goal.
I accept, of course, that for the single market to function we need a common set of rules and a way of enforcing them. But we also need to be able to respond quickly to the latest developments and trends.
Competitiveness demands flexibility, choice and openness -- or Europe will fetch up in a no-man's land between the rising economies of Asia and market-driven North America.
The EU must be able to act with the speed and flexibility of a network, not the cumbersome rigidity of a bloc.
We must not be weighed down by an insistence on a one size fits all approach which implies that all countries want the same level of integration. The fact is that they don't and we shouldn't assert that they do.
Some will claim that this offends a central tenet of the EU's founding philosophy. I say it merely reflects the reality of the European Union today. 17 members are part of the eurozone. 10 are not.
26 European countries are members of Schengen -- including four outside the European Union -- Switzerland, Norway, Liechtenstein and Iceland. 2 EU countries -- Britain and Ireland -- have retained their border controls.
Some members, like Britain and France, are ready, willing and able to take action in Libya or Mali. Others are uncomfortable with the use of military force.
Let's welcome that diversity, instead of trying to snuff it out.
Let's stop all this talk of two-speed Europe, of fast lanes and slow lanes, of countries missing trains and buses, and consign the whole weary caravan of metaphors to a permanent siding.
Instead, let's start from this proposition: we are a family of democratic nations, all members of one European Union, whose essential foundation is the single market rather than the single currency. Those of us outside the euro recognise that those in it are likely to need to make some big institutional changes.
By the same token, the members of the Eurozone should accept that we, and indeed all Member States, will have changes that we need to safeguard our interests and strengthen democratic legitimacy. And we should be able to make these changes too.
Some say this will unravel the principle of the EU -- and that you can't pick and choose on the basis of what your nation needs.
But far from unravelling the EU, this will in fact bind its Members more closely because such flexible, willing cooperation is a much stronger glue than compulsion from the centre.
Let me make a further heretical proposition.
The European Treaty commits the Member States to "lay the foundations of an ever closer union among the peoples of Europe".
This has been consistently interpreted as applying not to the peoples but rather to the states and institutions compounded by a European Court of Justice that has consistently supported greater centralisation.
We understand and respect the right of others to maintain their commitment to this goal. But for Britain -- and perhaps for others -- it is not the objective.
And we would be much more comfortable if the Treaty specifically said so freeing those who want to go further, faster, to do so, without being held back by the others.
So to those who say we have no vision for Europe.
I say we have.
We believe in a flexible union of free member states who share treaties and institutions and pursue together the ideal of co-operation. To represent and promote the values of European civilisation in the world. To advance our shared interests by using our collective power to open markets. And to build a strong economic base across the whole of Europe.
And we believe in our nations working together to protect the security and diversity of our energy supplies. To tackle climate change and global poverty. To work together against terrorism and organised crime. And to continue to welcome new countries into the EU.
This vision of flexibility and co-operation is not the same as those who want to build an ever closer political union -- but it is just as valid.
My third principle is that power must be able to flow back to Member States, not just away from them. This was promised by European Leaders at Laeken a decade ago.
It was put in the Treaty. But the promise has never really been fulfilled. We need to implement this principle properly.
So let us use this moment, as the Dutch Prime Minister has recently suggested, to examine thoroughly what the EU as a whole should do and should stop doing.
In Britain we have already launched our balance of competences review -- to give us an informed and objective analysis of where the EU helps and where it hampers.
Let us not be misled by the fallacy that a deep and workable single market requires everything to be harmonised, to hanker after some unattainable and infinitely level playing field.
Countries are different. They make different choices. We cannot harmonise everything. For example, it is neither right nor necessary to claim that the integrity of the single market, or full membership of the European Union requires the working hours of British hospital doctors to be set in Brussels irrespective of the views of British parliamentarians and practitioners.
In the same way we need to examine whether the balance is right in so many areas where the European Union has legislated including on the environment, social affairs and crime.
Nothing should be off the table.
My fourth principle is democratic accountability: we need to have a bigger and more significant role for national parliaments.
There is not, in my view, a single European demos.
It is national parliaments, which are, and will remain, the true source of real democratic legitimacy and accountability in the EU.
It is to the Bundestag that Angela Merkel has to answer. It is through the Greek Parliament that Antonis Samaras has to pass his Government's austerity measures.
It is to the British Parliament that I must account on the EU budget negotiations, or on the safeguarding of our place in the single market.
Those are the Parliaments which instil proper respect -- even fear -- into national leaders.
We need to recognise that in the way the EU does business.
My fifth principle is fairness: whatever new arrangements are enacted for the Eurozone, they must work fairly for those inside it and out.
That will be of particular importance to Britain. As I have said, we will not join the single currency. But there is no overwhelming economic reason why the single currency and the single market should share the same boundary, any more than the single market and Schengen.
Our participation in the single market, and our ability to help set its rules is the principal reason for our membership of the EU.
So it is a vital interest for us to protect the integrity and fairness of the single market for all its members.
And that is why Britain has been so concerned to promote and defend the single market as the Eurozone crisis rewrites the rules on fiscal coordination and banking union.
These five principles provide what, I believe, is the right approach for the European Union.
So now let me turn to what this means for Britain.
Today, public disillusionment with the EU is at an all time high. There are several reasons for this.
People feel that the EU is heading in a direction that they never signed up to. They resent the interference in our national life by what they see as unnecessary rules and regulation. And they wonder what the point of it all is.
Put simply, many ask "why can't we just have what we voted to join -- a common market?"
They are angered by some legal judgements made in Europe that impact on life in Britain. Some of this antipathy about Europe in general really relates of course to the European Court of Human Rights, rather than the EU. And Britain is leading European efforts to address this.
There is, indeed, much more that needs to be done on this front. But people also feel that the EU is now heading for a level of political integration that is far outside Britain's comfort zone.
They see Treaty after Treaty changing the balance between Member States and the EU. And note they were never given a say.
They've had referendums promised -- but not delivered. They see what has happened to the Euro. And they note that many of our political and business leaders urged Britain to join at the time.
And they haven't noticed many expressions of contrition.
And they look at the steps the Eurozone is taking and wonder what deeper integration for the Eurozone will mean for a country which is not going to join the Euro.
The result is that democratic consent for the EU in Britain is now wafer thin.
Some people say that to point this out is irresponsible, creates uncertainty for business and puts a question mark over Britain's place in the European Union.
But the question mark is already there and ignoring it won't make it go away.
In fact, quite the reverse. Those who refuse to contemplate consulting the British people, would in my view make more likely our eventual exit.
Simply asking the British people to carry on accepting a European settlement over which they have had little choice is a path to ensuring that when the question is finally put -- and at some stage it will have to be -- it is much more likely that the British people will reject the EU.
That is why I am in favour of a referendum. I believe in confronting this issue -- shaping it, leading the debate. Not simply hoping a difficult situation will go away.
Some argue that the solution is therefore to hold a straight in-out referendum now.
I understand the impatience of wanting to make that choice immediately.
But I don't believe that to make a decision at this moment is the right way forward, either for Britain or for Europe as a whole.
A vote today between the status quo and leaving would be an entirely false choice.
Now -- while the EU is in flux, and when we don't know what the future holds and what sort of EU will emerge from this crisis is not the right time to make such a momentous decision about the future of our country.
It is wrong to ask people whether to stay or go before we have had a chance to put the relationship right.
How can we sensibly answer the question 'in or out' without being able to answer the most basic question: 'what is it exactly that we are choosing to be in or out of?'
The European Union that emerges from the Eurozone crisis is going to be a very different body. It will be transformed perhaps beyond recognition by the measures needed to save the Eurozone.
We need to allow some time for that to happen -- and help to shape the future of the European Union, so that when the choice comes it will be a real one.
A real choice between leaving or being part of a new settlement in which Britain shapes and respects the rules of the single market but is protected by fair safeguards, and free of the spurious regulation which damages Europe's competitiveness.
A choice between leaving or being part of a new settlement in which Britain is at the forefront of collective action on issues like foreign policy and trade and where we leave the door firmly open to new members.
A new settlement subject to the democratic legitimacy and accountability of national parliaments where Member States combine in flexible cooperation, respecting national differences not always trying to eliminate them and in which we have proved that some powers can in fact be returned to Member States.
In other words, a settlement which would be entirely in keeping with the mission for an updated European Union I have described today. More flexible, more adaptable, more open -- fit for the challenges of the modern age.
And to those who say a new settlement can't be negotiated, I would say listen to the views of other parties in other European countries arguing for powers to flow back to European states.
And look too at what we have achieved already. Ending Britain's obligation to bail-out Eurozone members. Keeping Britain out of the fiscal compact. Launching a process to return some existing justice and home affairs powers. Securing protections on Banking Union. And reforming fisheries policy.
So we are starting to shape the reforms we need now. Some will not require Treaty change.
But I agree too with what President Barroso and others have said. At some stage in the next few years the EU will need to agree on Treaty change to make the changes needed for the long term future of the Euro and to entrench the diverse, competitive, democratically accountable Europe that we seek.
I believe the best way to do this will be in a new Treaty so I add my voice to those who are already calling for this.
My strong preference is to enact these changes for the entire EU, not just for Britain.
But if there is no appetite for a new Treaty for us all then of course Britain should be ready to address the changes we need in a negotiation with our European partners.
The next Conservative Manifesto in 2015 will ask for a mandate from the British people for a Conservative Government to negotiate a new settlement with our European partners in the next Parliament.
It will be a relationship with the Single Market at its heart.
And when we have negotiated that new settlement, we will give the British people a referendum with a very simple in or out choice. To stay in the EU on these new terms; or come out altogether.
It will be an in-out referendum.
Legislation will be drafted before the next election. And if a Conservative Government is elected we will introduce the enabling legislation immediately and pass it by the end of that year. And we will complete this negotiation and hold this referendum within the first half of the next parliament.
It is time for the British people to have their say. It is time to settle this European question in British politics.
I say to the British people: this will be your decision.
And when that choice comes, you will have an important choice to make about our country's destiny.
I understand the appeal of going it alone, of charting our own course. But it will be a decision we will have to take with cool heads. Proponents of both sides of the argument will need to avoid exaggerating their claims.
Of course Britain could make her own way in the world, outside the EU, if we chose to do so. So could any other Member State.
But the question we will have to ask ourselves is this: is that the very best future for our country?
We will have to weigh carefully where our true national interest lies.
Alone, we would be free to take our own decisions, just as we would be freed of our solemn obligation to defend our allies if we left Nato. But we don't leave Nato because it is in our national interest to stay and benefit from its collective defence guarantee.
We have more power and influence -- whether implementing sanctions against Iran or Syria, or promoting democracy in Burma -- if we can act together.
If we leave the EU, we cannot of course leave Europe. It will remain for many years our biggest market, and forever our geographical neighbourhood. We are tied by a complex web of legal commitments.
Hundreds of thousands of British people now take for granted their right to work, live or retire in any other EU country.
Even if we pulled out completely, decisions made in the EU would continue to have a profound effect on our country. But we would have lost all our remaining vetoes and our voice in those decisions.
We would need to weigh up very carefully the consequences of no longer being inside the EU and its single market, as a full member.
Continued access to the Single Market is vital for British businesses and British jobs.
Since 2004, Britain has been the destination for one in five of all inward investments into Europe.
And being part of the Single Market has been key to that success.
There will be plenty of time to test all the arguments thoroughly, in favour and against the arrangement we negotiate. But let me just deal with one point we hear a lot about.
There are some who suggest we could turn ourselves into Norway or Switzerland -- with access to the single market but outside the EU. But would that really be in our best interests?
I admire those countries and they are friends of ours -- but they are very different from us. Norway sits on the biggest energy reserves in Europe, and has a sovereign wealth fund of over 500 billion euros. And while Norway is part of the single market -- and pays for the principle -- it has no say at all in setting its rules: it just has to implement its directives.
The Swiss have to negotiate access to the Single Market sector by sector. Accepting EU rules -- over which they have no say -- or else not getting full access to the Single Market, including in key sectors like financial services.
The fact is that if you join an organisation like the European Union, there are rules.
You will not always get what you want. But that does not mean we should leave -- not if the benefits of staying and working together are greater.
We would have to think carefully too about the impact on our influence at the top table of international affairs. There is no doubt that we are more powerful in Washington, in Beijing, in Delhi because we are a powerful player in the European Union.
That matters for British jobs and British security.
It matters to our ability to get things done in the world. It matters to the United States and other friends around the world, which is why many tell us very clearly that they want Britain to remain in the EU.
We should think very carefully before giving that position up.
If we left the European Union, it would be a one-way ticket, not a return.
So we will have time for a proper, reasoned debate.
At the end of that debate you, the British people, will decide.
And I say to our European partners, frustrated as some of them no doubt are by Britain's attitude: work with us on this.
Consider the extraordinary steps which the Eurozone members are taking to keep the Euro together, steps which a year ago would have seemed impossible.
It does not seem to me that the steps which would be needed to make Britain -- and others -- more comfortable in their relationship in the European Union are inherently so outlandish or unreasonable.
And just as I believe that Britain should want to remain in the EU so the EU should want us to stay.
For an EU without Britain, without one of Europe's strongest powers, a country which in many ways invented the single market, and which brings real heft to Europe's influence on the world stage which plays by the rules and which is a force for liberal economic reform would be a very different kind of European Union.
And it is hard to argue that the EU would not be greatly diminished by Britain's departure.
Let me finish today by saying this.
I have no illusions about the scale of the task ahead.
I know there will be those who say the vision I have outlined will be impossible to achieve. That there is no way our partners will co-operate. That the British people have set themselves on a path to inevitable exit. And that if we aren't comfortable being in the EU after 40 years, we never will be.
But I refuse to take such a defeatist attitude -- either for Britain or for Europe.
Because with courage and conviction I believe we can deliver a more flexible, adaptable and open European Union in which the interests and ambitions of all its members can be met.
With courage and conviction I believe we can achieve a new settlement in which Britain can be comfortable and all our countries can thrive.
And when the referendum comes let me say now that if we can negotiate such an arrangement, I will campaign for it with all my heart and soul.
Because I believe something very deeply. That Britain's national interest is best served in a flexible, adaptable and open European Union and that such a European Union is best with Britain in it.
Over the coming weeks, months and years, I will not rest until this debate is won. For the future of my country. For the success of the European Union. And for the prosperity of our peoples for generations to come.
2014：奥巴马西点演讲
战舰美利坚号
Cameron’s EU referendum gamble has failed
By Janan Ganesh
January 13, 2014
Almost a year ago, David Cameron promised a referendum on Britain’s membership of the EU for no nobler reason than that he had to. The prime minister and other eminent Conservatives now tout that speech as proof of high principle, contrasting their democratic trust in Everyman with the apparent elitism of other mainstream parties.
The truth is they never wanted a referendum, scorned the idea when their MPs raised it in 2011 and only relented when the clamour became an existential menace to Mr Cameron’s leadership. It was emergency politics draped in the dignity of foreign policy.
There is nothing innately wrong with this. Practical politicians have to deal with pugnacious backbenchers, ornery grassroots and other realities that columnists can hover above. But it does mean that the most important speech by a British prime minister since Tony Blair’s case for war in Iraq must be judged on its political utility. The substantive rights and wrongs, the case for and against EU membership and plebiscites themselves, are aired often enough. The question is whether the referendum pledge, a year on, has met its narrow aims.
Only the most fantastic reading of events could yield a positive answer. Downing Street’s three objectives were to pacify Tory MPs, sap the momentum of the fringe UK Independence party and put the troublesome subject of Europe to sleep until the general election in 2015. On all scores, it failed.
Eurosceptic MPs did what they always do: win a concession they pretend is “final” before coming back for more. Backbenchers who said the referendum speech would satiate them have since hounded Mr Cameron to “guarantee” it takes place in the next parliament by legislating for it in this one. Downing Street initially resisted this constitutional nonsense before, again, capitulating under duress. The House of Lords is now voting on a bill to that effect.
At the same time, the prime minister has taken delivery of a letter signed by about 100 backbench Tories asking for a parliamentary veto over European regulations. As EU membership is defined by acquiescence to the primacy of European law, this means a third of his MPs and half of his backbenchers are asking Mr Cameron for “Brexit”, before his vaunted renegotiation of the terms of membership has even begun. Again, the signatories include people who said the referendum pledge would mollify them a year ago. Historians will decide whether deceit or chronic amnesia explains their behaviour.
Ukip, meanwhile, is polling more formidably than ever and on course to crush the Tories in May’s European parliament elections. And these ignominies are as nothing next to the prospect that, a year later, Ukip will take enough rightwing voters in enough constituencies to cost the Conservatives the general election. Tories still gamely offer the untestable theory that this insurgency would be even more ferocious had they not committed to a referendum but, a year ago, their expectations were rather grander than that.
Finally, having predicted that the referendum pledge would save them talking about Europe again before the election, the Conservatives have actually made it their second-favourite subject, behind the recovering economy. They have spent months loudly brainstorming ways to curb the EU’s right of free movement. William Hague – a quisling, mutter Tory hardliners, but actually the most eurosceptic foreign secretary since Britain joined the project – has publicly responded to the backbench letter to Mr Cameron.
George Osborne, the chancellor, is to give a speech explaining how the EU can be remade (a prediction: whatever he says will not be enough for his party). And in a country where Europe still does not make the top 10 of salient issues, Tory MPs, summoning the robotic message-discipline they lack at all other times, use any chance to remind voters that they are the only major party that supports a referendum, like parents forcing their baby photos on to bored dinner companions.
When Margaret Thatcher left office in 1990, her victories in domestic policy were so total that the right only had one great cause left: euroscepticism.  Mr Cameron has withdrawn his party from the centre-right caucus in the European parliament, vetoed a fiscal treaty and promised the first referendum on membership since 1975. Nothing is ever enough but the pattern does at least suggest what the next request will be.
If Mr Cameron survives the election, his party will demand that he joins them in campaigning to leave the EU in that referendum. They simply will not wear a leader who advises voters to stay in the club they have dedicated their careers to leaving. Of course, the spectacle of Mr Cameron fighting for Brexit is utterly fanciful – as was the prospect of him calling a referendum when he first became prime minister.
PIRATE PARTY
Open Source; Privacy Protection; Government Transparency.
返回页首
返回主页
version:1.0<EMAIL_ADDRESS>© retter2012.com


An Atombuf is an alternative to Binbufs for temporary storage of atoms.
More...
|
| struct | t_atombuf |
| | The atombuf struct provides a way to pass a collection of atoms. More...
|
| |
An Atombuf is an alternative to Binbufs for temporary storage of atoms.
Its principal advantage is that the internal structure is publicly available so you can manipulate the atoms in place. The standard Max text objects (message box, object box, comment) use the Atombuf structure to store their text (each word of text is stored as a t_symbol or a number).
◆ atombuf_free()
◆ atombuf_new()
Use atombuf_new() to create a new Atombuf from an array of t_atoms.
- Parameters
-
| argc | Number of t_atoms in the argv array. May be 0. |
| argv | Array of t_atoms. If creating an empty Atombuf, you may pass 0. |
- Returns
- atombuf_new() create a new t_atombuf and returns a pointer to it. If 0 is returned, insufficient memory was available.
◆ atombuf_text()
| void atombuf_text |
( |
t_atombuf ** |
x, |
|
|
char ** |
text, |
|
|
long |
size |
|
) |
| |
Use atombuf_text() to convert text to a t_atom array in a t_atombuf.
To use this routine to create a new Atombuf from the text buffer, first create a new empty t_atombuf with a call to atombuf_new(0,NULL).
- Parameters
-
| x | Pointer to existing atombuf variable. The variable will be replaced by a new Atombuf containing the converted text. |
| text | Handle to the text to be converted. It need not be zero-terminated. |
| size | Number of characters in the text. |


Stephanie Major
Thomas and I are working together on it. We are having fun.


CSS describes the styling. Plenty of colours to chose from.
Go doctype, html, head, title, style, body.
Tags close to right hand, thank goodness. Tags wrap around elements.
Two types of elements.
Javascripts in script tags. Not everyone likes javascripts because of spammers, evil spammers.
DIV box around things you want to treat the same. SPAN is inline.
http is the protocol the net uses to talk to servers, like php into databases. Server speak.
URL are the net addresses. They seem to be getting shorter and shorter.


Frank Lampard sends message to Chelsea fans over January transfers
by Metro Sport ReporterFrank Lampard insists he will not be ‘too reactionary’ in the January window following Chelsea’s defeat to Everton on Saturday.
Lampard’s side have lost three out of their last four Premier League matches and a 3-1 defeat away to Everton has allowed their rivals to close the gap on fourth place even more.
Last week, it was confirmed that Chelsea’s transfer ban has been lifted, which means they will be able to sign players in the January window.
But Lampard has stressed that he will not dictate his transfer plans based on his side’s recent run of results.
‘I think you’ve got to be careful about being too reactionary – ban lifted and defeat to Everton – it’s quite easy to come to that conclusion,’ said Lampard.
‘Just as much as people at the start of the season who were saying we’ve got all these young boys, this is going to be no problem, we don’t need any players.
‘I think at a club like Chelsea there needs to be a balance. You have a strong squad which I believe we have but you have to look at can we strengthen.
‘And there will time times going forward, whether it’s January or next summer, of course we’re going to look at an opportunity to strengthen because we want to improve.’
Asked if his perception has changed following his side’s recent run, Lampard replied: ‘No, it doesn’t change it at all but you do learn as you go along with your players, you learn every day in training, you learn in games.
‘It certainly hasn’t changed my mindset right now, I was the same going into Everton.
‘That’s always pretty fluid, I haven’t got an exact, ‘I need this, this and this’, you look at the squad as you go along.
‘I wouldn’t say my mind was set on anything to be changed.
‘But you do learn from your players in tough times, not just in terms of what they do on the pitch but in terms of how their personality is.
‘That’s what the disappointment with Everton was.
‘It wasn’t just we were off on the ball, we were a little bit, but more than that I didn’t like the fact there were individual contact moments throughout the game that we lost.
‘So that’s a personality thing more than anything else.’


Hello! I'm Jishnu DeyWelcome to my website! |
I am a Graduate student in Computer Science at the University of Illinois at Urbana-Champaign, pursuing MS with thesis (Expected - May 2020). My advisor is Prof. ChengXiang Zhai. I'm interested in deep learning, natural language processing and information retrieval. I'm proficient in Python, R, MATLAB, C, C++, and have also worked on Java and Android development. I am always interested in learning new languages and technologies.
Prior to this, I was working as a Senior Software Engineer at Samsung R&D Institute India - Bangalore. I graduated from IIT Kharagpur, India in 2016 with a B.Tech in Electronics and Electrical Communication Engineering.
Neural Image Captioning |
Try demo | |
| University of Illinois at Urbana-Champaign (Oct 2018 - Present) | ||
| Image caption generation in natural language. | ||
InstaBP - Blood Pressure Monitoring App |
|
| Samsung R&D Institute India - Bangalore (May 2017 - Aug 2018) | |
| 1 publication in IEEE EMBC 2018: | |
|
|
| Recipient of NASSCOM's AI Game Changer Awards 2018. | |
Alertness Indicator |
|
| Samsung R&D Institute India - Bangalore (Jun 2016 - Apr 2017) | |
| 2 publications in IEEE EMBC 2017: | |
|
|
|
|
Distributed Deployment of Wireless sensor networks |
| Bachelor's Thesis, IIT Kharagpur (August 2015 - May 2016) |
| Advised by Prof. Rajarshi Roy. |
| Achieved specific coverage tasks while maintaining connectivity for sensor networks with limited sensing and peer-to-peer communication radii using distributed optimization methods. |
Robust Heart Rate Estimation for Gear devices |
| Summer Internship, Samsung R&D Institute India - Bangalore (May 2015 - Jul 2015) |
| Estimated the heart rate using photoplethysmography of the wrist through Galaxy Gear devices during intense physical activities. |
Modeling and Simulation of interaction between Nanopropellers |
| Summer Internship, Indian Institute of Science, Bangalore (May 2014 - Jul 2014) |
| Advised by Prof. Ambarish Ghosh. |
| Performed a MATLAB simulation of the interaction between nanopropellers and demonstrated the process of mutual synchronization. |


--- layout: stats title: Missouri State Statistics permalink: "/stats/teams/missouri-state.html" ---
| Year | Team | Status | Finish | W-L | PPG | PAPG | Margin | TU/G | N/G | BHrd | BPts | PPB |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2009 | Missouri State | 19 | 5-10 | 85.7 | 162.3 | -76.6 | 5.2 | 1.53 | 78 | 620 | 7.95 |
| Year | Round | Team | Opponent | Result | Score | 10 | -5 | PPB | Packet |
|---|---|---|---|---|---|---|---|---|---|
| 2009 | 1 (Prelims) | Missouri State | Carnegie Mellon | Loss | 60 - 95 | 4 | 2 | 7.50 | Brown |
| 2009 | 2 (Prelims) | Missouri State | UCLA | Win | 70 - 50 | 5 | 2 | 6.00 | Brandeis |
| 2009 | 3 (Prelims) | Missouri State | Missouri S&T | Win | 160 - 30 | 10 | 0 | 6.00 | Chicago B + Harvard |
| 2009 | 4 (Prelims) | Missouri State | Chicago A | Loss | 25 - 430 | 1 | 1 | 20.00 | VCU |
| 2009 | 5 (Prelims) | Missouri State | Minnesota B | Loss | 105 - 125 | 6 | 1 | 8.33 | Illinois + Maryland |
| 2009 | 6 (Prelims) | Missouri State | VCU A | Loss | 55 - 255 | 3 | 3 | 13.33 | Minnesota A |
| 2009 | 7 (Prelims) | Missouri State | Hunter College | Win | 150 - 90 | 9 | 0 | 6.67 | MIT |
| 2009 | 9 (Prelims) | Missouri State | Dartmouth A | Loss | 75 - 260 | 6 | 1 | 3.33 | UCLA + South Carolina |
| 2009 | 10 (Prelims) | Missouri State | Missouri | Loss | 105 - 160 | 6 | 3 | 10.00 | Truman State + Dartmouth |
| 2009 | 11 (Prelims) | Missouri State | Ike Jose | Win | 145 - 70 | 8 | 1 | 8.75 | Stanford |
| 2009 | 12 (Prelims) | Missouri State | Harvard A | Loss | 15 - 330 | 2 | 3 | 5.00 | Rutgers |
| 2009 | 13 (Prelims) | Missouri State | Illinois A | Loss | 85 - 215 | 5 | 1 | 8.00 | Chicago A |
| 2009 | 14 (Playoffs) | Missouri State | Rutgers | Loss | 60 - 100 | 4 | 0 | 5.00 | No Packet Recorded |
| 2009 | 15 (Playoffs) | Missouri State | Carnegie Mellon | Loss | 90 - 165 | 4 | 2 | 15.00 | No Packet Recorded |
| 2009 | 16 (Playoffs) | Missouri State | Penn A | Win | 85 - 60 | 5 | 3 | 10.00 | No Packet Recorded |
| Year | Team | Player | Games | Tossups | Negs | Pts | PPG |
|---|---|---|---|---|---|---|---|
| 2009 | Missouri State | Jason Loy | 15 | 67 | 17 | 585 | 39.00 |
| 2009 | Missouri State | Phil | 15 | 10 | 4 | 80 | 5.33 |
| 2009 | Missouri State | Ashly | 15 | 1 | 0 | 10 | 0.67 |
| 2009 | Missouri State | Ray | 15 | 0 | 2 | -10 | -0.67 |


Untitled
A quick look at V2Ray
A normal way to escape from censorship or blockage of access to information is to use proxy.
There are several different proxy protocols and software. And today I’m gonna talk about V2Ray.
It’s home page is https://www.v2ray.com.
It’s written in Golang, with these features:
- It supports several protocols (SOCKS, HTTP, Shadowsocks, VMess)(And VMess is it’s own protocol).
- Built-in routing support.
- Cross-platform support.
But these features also causes it’s a bit hard for newbies to configure it.
But in fact, if you just need basic proxy features, it could be very easy to use.
First, V2Ray use JSON as the format of configuration file. A basic configuration of V2Ray can be split to several parts: inbound
, outbound
and routing
.
inbound
is just about how others connect to V2Ray software.
outbound
is about how V2Ray connect to the web or other V2Ray servers.
routing
is the part to configure the route of packages.
Also there are inboundDetour
/outboundDetour
and parts about how to transport packages.
###In the part inbound
:
For servers, inbound have to be the protocol and ports that clients will connect. As an example:
"inbound": {
"port": 37192, // port
"protocol": "vmess", // main inbound protocol
"settings": {
"clients": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // User ID
"level": 1 // User level
}
]
}
}
In the example, port
will be the port that clients will connect; protocol
is the protocol it gonna use; settings
are the parameters of inbound protocols.
For more detailed information about VMess and it’s settings, please visit: https://www.v2ray.com/chapter_04/03_vmess.html
For clients, inbound have to be the settings of how other applications connects to it. For example:
"inbound": {
"port": 1080, // port
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": false
}
}
port
is the port that other applications will connect; protocol
is the protocol it will use. For now V2Ray supports SOCKS5 and HTTP.
For detailed information, please visit: https://www.v2ray.com/chapter_04/03_vmess.html
###In the part outbound
:
For servers, this part is about how V2Ray communicates with the web.
"outbound": {
"protocol": "freedom",
"settings": {}
}
In this example, traffics will use a protocol called freedom
. In fact, it’s just about to make normal TCP/UDP connections to the web.
For more detailed information about freedom
, please visit: https://www.v2ray.com/chapter_02/protocols/freedom.html
For clients, this part is about how V2Ray communicates with V2Ray on the server.
"outbound": {
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "<IP_ADDRESS>", // Server IP
"port": 17173, // Server port
"users": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", // User ID
"security": "aes-128-gcm",
"alterId": 128
},
]
}
]
}
}
Note that in this part, all of the settings must be the same with the server.
For more detailed information about VMess and it’s settings, please visit: https://www.v2ray.com/chapter_04/03_vmess.html
###In the part routing
:
Absolutely it’s about routing of packages.
For detailed information, please visit: https://www.v2ray.com/chapter_02/03_routing.html
Here is an example about routing
:
"routing": {
"strategy": "rules",
"settings": {
"rules": [
{
"type": "field",
"ip": [
"<IP_ADDRESS>/8",
"<IP_ADDRESS>/8",
"<IP_ADDRESS>/10",
"<IP_ADDRESS>/8",
"<IP_ADDRESS>/16",
"<IP_ADDRESS>/12",
"<IP_ADDRESS>/24",
"<IP_ADDRESS>/24",
"<IP_ADDRESS>/16",
"<IP_ADDRESS>/15",
"<IP_ADDRESS>/24",
"<IP_ADDRESS>/24",
"::1/128",
"fc00::/7",
"fe80::/10"
],
"outboundTag": "blocked"
}
]
}
}
P.S. “outboundTag” determines which route the traffics that meets the rules above will go. It’s about inboundDetor/outboundDetor, please visit official manual.
###Here is the basic config:
Server:
{
"inbound": {
"port": 12138,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"level": 1,
"alterId": 128
}
]
}
},
"outbound": {
"protocol": "freedom",
"settings": {}
},
"outboundDetour": [
{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}
],
"routing": {
"strategy": "rules",
"settings": {
"rules": [
{
"type": "field",
"ip": [
"<IP_ADDRESS>/8",
"<IP_ADDRESS>/8",
"<IP_ADDRESS>/10",
"<IP_ADDRESS>/8",
"<IP_ADDRESS>/16",
"<IP_ADDRESS>/12",
"<IP_ADDRESS>/24",
"<IP_ADDRESS>/24",
"<IP_ADDRESS>/16",
"<IP_ADDRESS>/15",
"<IP_ADDRESS>/24",
"<IP_ADDRESS>/24",
"::1/128",
"fc00::/7",
"fe80::/10"
],
"outboundTag": "blocked"
}
]
}
}
}
Client:
{
"inbound": {
"port": 1080,
"protocol": "socks",
"settings": {
"auth": "noauth",
"udp": true
}
},
"outbound": {
"protocol": "vmess",
"settings": {
"vnext": [
{
"address": "<IP_ADDRESS>",
"port": 12138,
"users": [
{
"id": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"alterId": 128,
"security": "aes-128-gcm"
}
]
}
]
}
},
"outboundDetour": [
{
"protocol": "freedom",
"settings": {},
"tag": "direct"
}
],
"routing": {
"strategy": "rules",
"settings": {
"rules": [
{
"type": "field",
"ip": [
"<IP_ADDRESS>/8",
"<IP_ADDRESS>/8",
"<IP_ADDRESS>/10",
"<IP_ADDRESS>/8",
"<IP_ADDRESS>/16",
"<IP_ADDRESS>/12",
"<IP_ADDRESS>/24",
"<IP_ADDRESS>/24",
"<IP_ADDRESS>/16",
"<IP_ADDRESS>/15",
"<IP_ADDRESS>/24",
"<IP_ADDRESS>/24",
"::1/128",
"fc00::/7",
"fe80::/10"
],
"outboundTag": "direct"
}
]
}
}
}


FrostForecast collects local and regional weather data. This data is received and handled through a gateway. Through this FrostForecast's predictive model generates frost event alerts to allow producers focus their efforts for frosts active control in their crops.


Base API
REST API
addcomm
addftrgroup
adduserassoc
calcuassoc
calcuftrassoc
makecommunities
makeftrgroups
deleteusercomm
deleteftrgroup
getusercomm
getftrgroups
getcommprofile
getcommusers
getftrgroupfeatures
getusrcommu
getftrftrgroups
getalgorithms
1.0/community/:ClientCredentials/cluster/custom/users
1.0/community/:ClientCredentials/cluster/custom/features
1.0/community/:ClientCredentials/association/custom/users
1.0/community/:ClientCredentials/association/users
1.0/community/:ClientCredentials/association/features
1.0/community/:ClientCredentials/cluster/users
1.0/community/:ClientCredentials/cluster/features
1.0/community/:ClientCredentials/delete/users
1.0/community/:ClientCredentials/delete/features
1.0/community/:ClientCredentials/communities
1.0/community/:ClientCredentials/feature_groups
1.0/community/:ClientCredentials/community
1.0/community/:ClientCredentials/community/users
1.0/community/:ClientCredentials/feature_groups/features
1.0/community/:ClientCredentials/user/communities
1.0/community/:ClientCredentials/feature/feature_groups
1.0/community/:ClientCredentials/cluster/algorithms
Command:
Description:
Return types:
Methods:
GET/POST
Parameter Name
Status
Description
Example
Example:


Hi, my name is Patryk and I come from Poland. I've been living in the U.S. for most of my life, living in multiple cities like Boston, New York, and now Chicago.
I'm a single child, no brothers or sisters, and the only family I have here in the U.S. is just my parents. I am a commuter to Lewis University and will be majoring
in computer science. This class is my first step forwards towards my career.
Some of my favorite hobbies are running, working out, biking, martial arts, and soccer. Despite them being hobbies, I do like to take these things seriously as well
Pretty much all of these things are very active, but I do find enjoyment in these things. Not only that, but it also helps me out in managing my stressors, as I find
The best way to get your head off of things is through some sort of sport/exercise.
I was born on 9/11 :)


this is div1 using color
this is div2 using HEX
this is div3 using rgb
this is div4 using rgba
this is div5 using HSL
this is div6 using HSLA


Melvin Gordon takes flight, hurdles Chiefs defender for first down (Video)
by TSD StaffChargers running back Melvin Gordon held out of training camp and got off to a slow start this season, which hurt the team, but he’s clearly in midseason form now.
Gordon finally got his sea legs against the Packers two weeks ago, when he rushed for 80 yards, and he followed that up wit 108 on the ground the following week.
He carried that momentum into Monday’s game against the Chiefs in Mexico City, when he received a handoff, in search of a first game, which he got. It wasn’t easy, though, as he had to showcase his athleticism in leaping and hurdling a Chiefs defender.
Air Gordon.


Exception Handling in LLVM¶
Introduction¶
This document is the central repository for all information pertaining to exception handling in LLVM. It describes the format that LLVM exception handling information takes, which is useful for those interested in creating front-ends or dealing directly with the information. Further, this document provides specific examples of what exception handling information is used for in C and C++.
Itanium ABI Zero-cost Exception Handling¶
Exception handling for most programming languages is designed to recover from conditions that rarely occur during general use of an application. To that end, exception handling should not interfere with the main flow of an application’s algorithm by performing checkpointing tasks, such as saving the current pc or register state.
The Itanium ABI Exception Handling Specification defines a methodology for providing outlying data in the form of exception tables without inlining speculative exception handling code in the flow of an application’s main algorithm. Thus, the specification is said to add “zero-cost” to the normal execution of an application.
A more complete description of the Itanium ABI exception handling runtime support of can be found at Itanium C++ ABI: Exception Handling. A description of the exception frame format can be found at Exception Frames, with details of the DWARF 4 specification at DWARF 4 Standard. A description for the C++ exception table formats can be found at Exception Handling Tables.
Setjmp/Longjmp Exception Handling¶
Setjmp/Longjmp (SJLJ) based exception handling uses LLVM intrinsics llvm.eh.sjlj.setjmp and llvm.eh.sjlj.longjmp to handle control flow for exception handling.
For each function which does exception processing — be it try
/catch
blocks or cleanups — that function registers itself on a global frame
list. When exceptions are unwinding, the runtime uses this list to identify
which functions need processing.
Landing pad selection is encoded in the call site entry of the function context. The runtime returns to the function via llvm.eh.sjlj.longjmp, where a switch table transfers control to the appropriate landing pad based on the index stored in the function context.
In contrast to DWARF exception handling, which encodes exception regions and frame information in out-of-line tables, SJLJ exception handling builds and removes the unwind frame context at runtime. This results in faster exception handling at the expense of slower execution when no exceptions are thrown. As exceptions are, by their nature, intended for uncommon code paths, DWARF exception handling is generally preferred to SJLJ.
Windows Runtime Exception Handling¶
LLVM supports handling exceptions produced by the Windows runtime, but it requires a very different intermediate representation. It is not based on the “landingpad” instruction like the other two models, and is described later in this document under Exception Handling using the Windows Runtime.
Overview¶
When an exception is thrown in LLVM code, the runtime does its best to find a handler suited to processing the circumstance.
The runtime first attempts to find an exception frame corresponding to the function where the exception was thrown. If the programming language supports exception handling (e.g. C++), the exception frame contains a reference to an exception table describing how to process the exception. If the language does not support exception handling (e.g. C), or if the exception needs to be forwarded to a prior activation, the exception frame contains information about how to unwind the current activation and restore the state of the prior activation. This process is repeated until the exception is handled. If the exception is not handled and no activations remain, then the application is terminated with an appropriate error message.
Because different programming languages have different behaviors when handling
exceptions, the exception handling ABI provides a mechanism for
supplying personalities. An exception handling personality is defined by
way of a personality function (e.g. __gxx_personality_v0
in C++),
which receives the context of the exception, an exception structure
containing the exception object type and value, and a reference to the exception
table for the current function. The personality function for the current
compile unit is specified in a common exception frame.
The organization of an exception table is language dependent. For C++, an exception table is organized as a series of code ranges defining what to do if an exception occurs in that range. Typically, the information associated with a range defines which types of exception objects (using C++ type info) that are handled in that range, and an associated action that should take place. Actions typically pass control to a landing pad.
A landing pad corresponds roughly to the code found in the catch
portion of
a try
/catch
sequence. When execution resumes at a landing pad, it
receives an exception structure and a selector value corresponding to the
type of exception thrown. The selector is then used to determine which catch
should actually process the exception.
LLVM Code Generation¶
From a C++ developer’s perspective, exceptions are defined in terms of the
throw
and try
/catch
statements. In this section we will describe the
implementation of LLVM exception handling in terms of C++ examples.
Throw¶
Languages that support exception handling typically provide a throw
operation to initiate the exception process. Internally, a throw
operation
breaks down into two steps.
- A request is made to allocate exception space for an exception structure. This structure needs to survive beyond the current activation. This structure will contain the type and value of the object being thrown.
- A call is made to the runtime to raise the exception, passing the exception structure as an argument.
In C++, the allocation of the exception structure is done by the
__cxa_allocate_exception
runtime function. The exception raising is handled
by __cxa_throw
. The type of the exception is represented using a C++ RTTI
structure.
Try/Catch¶
A call within the scope of a try statement can potentially raise an
exception. In those circumstances, the LLVM C++ front-end replaces the call with
an invoke
instruction. Unlike a call, the invoke
has two potential
continuation points:
- where to continue when the call succeeds as per normal, and
- where to continue if the call raises an exception, either by a throw or the unwinding of a throw
The term used to define the place where an invoke
continues after an
exception is called a landing pad. LLVM landing pads are conceptually
alternative function entry points where an exception structure reference and a
type info index are passed in as arguments. The landing pad saves the exception
structure reference and then proceeds to select the catch block that corresponds
to the type info of the exception object.
The LLVM ‘landingpad’ Instruction is used to convey information about the landing
pad to the back end. For C++, the landingpad
instruction returns a pointer
and integer pair corresponding to the pointer to the exception structure and
the selector value respectively.
The landingpad
instruction looks for a reference to the personality
function to be used for this try
/catch
sequence in the parent
function’s attribute list. The instruction contains a list of cleanup,
catch, and filter clauses. The exception is tested against the clauses
sequentially from first to last. The clauses have the following meanings:
catch <type> @ExcType
- This clause means that the landingpad block should be entered if the
exception being thrown is of type
@ExcType
or a subtype of@ExcType
. For C++,@ExcType
is a pointer to thestd::type_info
object (an RTTI object) representing the C++ exception type. - If
@ExcType
isnull
, any exception matches, so the landingpad should always be entered. This is used for C++ catch-all blocks (“catch (...)
”). - When this clause is matched, the selector value will be equal to the value
returned by “
@llvm.eh.typeid.for(i8* @ExcType)
”. This will always be a positive value.
- This clause means that the landingpad block should be entered if the
exception being thrown is of type
filter <type> [<type> @ExcType1, ..., <type> @ExcTypeN]
- This clause means that the landingpad should be entered if the exception
being thrown does not match any of the types in the list (which, for C++,
are again specified as
std::type_info
pointers). - C++ front-ends use this to implement C++ exception specifications, such as
“
void foo() throw (ExcType1, ..., ExcTypeN) { ... }
”. - When this clause is matched, the selector value will be negative.
- The array argument to
filter
may be empty; for example, “[0 x i8**] undef
”. This means that the landingpad should always be entered. (Note that such afilter
would not be equivalent to “catch i8* null
”, becausefilter
andcatch
produce negative and positive selector values respectively.)
- This clause means that the landingpad should be entered if the exception
being thrown does not match any of the types in the list (which, for C++,
are again specified as
cleanup
This clause means that the landingpad should always be entered.
C++ front-ends use this for calling objects’ destructors.
When this clause is matched, the selector value will be zero.
The runtime may treat “
cleanup
” differently from “catch <type> null
”.In C++, if an unhandled exception occurs, the language runtime will call
std::terminate()
, but it is implementation-defined whether the runtime unwinds the stack and calls object destructors first. For example, the GNU C++ unwinder does not call object destructors when an unhandled exception occurs. The reason for this is to improve debuggability: it ensures thatstd::terminate()
is called from the context of thethrow
, so that this context is not lost by unwinding the stack. A runtime will typically implement this by searching for a matching non-cleanup
clause, and aborting if it does not find one, before entering any landingpad blocks.
Once the landing pad has the type info selector, the code branches to the code for the first catch. The catch then checks the value of the type info selector against the index of type info for that catch. Since the type info index is not known until all the type infos have been gathered in the backend, the catch code must call the llvm.eh.typeid.for intrinsic to determine the index for a given type info. If the catch fails to match the selector then control is passed on to the next catch.
Finally, the entry and exit of catch code is bracketed with calls to
__cxa_begin_catch
and __cxa_end_catch
.
__cxa_begin_catch
takes an exception structure reference as an argument and returns the value of the exception object.__cxa_end_catch
takes no arguments. This function:- Locates the most recently caught exception and decrements its handler count,
- Removes the exception from the caught stack if the handler count goes to zero, and
- Destroys the exception if the handler count goes to zero and the exception was not re-thrown by throw.
Note
a rethrow from within the catch may replace this call with a
__cxa_rethrow
.
Cleanups¶
A cleanup is extra code which needs to be run as part of unwinding a scope. C++ destructors are a typical example, but other languages and language extensions provide a variety of different kinds of cleanups. In general, a landing pad may need to run arbitrary amounts of cleanup code before actually entering a catch block. To indicate the presence of cleanups, a ‘landingpad’ Instruction should have a cleanup clause. Otherwise, the unwinder will not stop at the landing pad if there are no catches or filters that require it to.
Note
Do not allow a new exception to propagate out of the execution of a cleanup. This can corrupt the internal state of the unwinder. Different languages describe different high-level semantics for these situations: for example, C++ requires that the process be terminated, whereas Ada cancels both exceptions and throws a third.
When all cleanups are finished, if the exception is not handled by the current
function, resume unwinding by calling the resume instruction,
passing in the result of the landingpad
instruction for the original
landing pad.
Throw Filters¶
C++ allows the specification of which exception types may be thrown from a
function. To represent this, a top level landing pad may exist to filter out
invalid types. To express this in LLVM code the ‘landingpad’ Instruction will have a
filter clause. The clause consists of an array of type infos.
landingpad
will return a negative value
if the exception does not match any of the type infos. If no match is found then
a call to __cxa_call_unexpected
should be made, otherwise
_Unwind_Resume
. Each of these functions requires a reference to the
exception structure. Note that the most general form of a landingpad
instruction can have any number of catch, cleanup, and filter clauses (though
having more than one cleanup is pointless). The LLVM C++ front-end can generate
such landingpad
instructions due to inlining creating nested exception
handling scopes.
Restrictions¶
The unwinder delegates the decision of whether to stop in a call frame to that call frame’s language-specific personality function. Not all unwinders guarantee that they will stop to perform cleanups. For example, the GNU C++ unwinder doesn’t do so unless the exception is actually caught somewhere further up the stack.
In order for inlining to behave correctly, landing pads must be prepared to
handle selector results that they did not originally advertise. Suppose that a
function catches exceptions of type A
, and it’s inlined into a function that
catches exceptions of type B
. The inliner will update the landingpad
instruction for the inlined landing pad to include the fact that B
is also
caught. If that landing pad assumes that it will only be entered to catch an
A
, it’s in for a rude awakening. Consequently, landing pads must test for
the selector results they understand and then resume exception propagation with
the resume instruction if none of the conditions
match.
Exception Handling Intrinsics¶
In addition to the landingpad
and resume
instructions, LLVM uses several
intrinsic functions (name prefixed with llvm.eh
) to provide exception
handling information at various points in generated code.
llvm.eh.typeid.for
¶
i32 @llvm.eh.typeid.for(i8* %type_info)
This intrinsic returns the type info index in the exception table of the current
function. This value can be used to compare against the result of
landingpad
instruction. The single argument is a reference to a type info.
Uses of this intrinsic are generated by the C++ front-end.
llvm.eh.begincatch
¶
void @llvm.eh.begincatch(i8* %ehptr, i8* %ehobj)
This intrinsic marks the beginning of catch handling code within the blocks
following a landingpad
instruction. The exact behavior of this function
depends on the compilation target and the personality function associated
with the landingpad
instruction.
The first argument to this intrinsic is a pointer that was previously extracted
from the aggregate return value of the landingpad
instruction. The second
argument to the intrinsic is a pointer to stack space where the exception object
should be stored. The runtime handles the details of copying the exception
object into the slot. If the second parameter is null, no copy occurs.
Uses of this intrinsic are generated by the C++ front-end. Many targets will
use implementation-specific functions (such as __cxa_begin_catch
) instead
of this intrinsic. The intrinsic is provided for targets that require a more
abstract interface.
When used in the native Windows C++ exception handling implementation, this intrinsic serves as a placeholder to delimit code before a catch handler is outlined. When the handler is is outlined, this intrinsic will be replaced by instructions that retrieve the exception object pointer from the frame allocation block.
llvm.eh.endcatch
¶
void @llvm.eh.endcatch()
This intrinsic marks the end of catch handling code within the current block,
which will be a successor of a block which called llvm.eh.begincatch''.
The exact behavior of this function depends on the compilation target and the
personality function associated with the corresponding ``landingpad
instruction.
There may be more than one call to llvm.eh.endcatch
for any given call to
llvm.eh.begincatch
with each llvm.eh.endcatch
call corresponding to the
end of a different control path. All control paths following a call to
llvm.eh.begincatch
must reach a call to llvm.eh.endcatch
.
Uses of this intrinsic are generated by the C++ front-end. Many targets will
use implementation-specific functions (such as __cxa_begin_catch
) instead
of this intrinsic. The intrinsic is provided for targets that require a more
abstract interface.
When used in the native Windows C++ exception handling implementation, this intrinsic serves as a placeholder to delimit code before a catch handler is outlined. After the handler is outlined, this intrinsic is simply removed.
llvm.eh.exceptionpointer
¶
i8 addrspace(N)* @llvm.eh.padparam.pNi8(token %catchpad)
This intrinsic retrieves a pointer to the exception caught by the given
catchpad
.
SJLJ Intrinsics¶
The llvm.eh.sjlj
intrinsics are used internally within LLVM’s
backend. Uses of them are generated by the backend’s
SjLjEHPrepare
pass.
llvm.eh.sjlj.setjmp
¶
i32 @llvm.eh.sjlj.setjmp(i8* %setjmp_buf)
For SJLJ based exception handling, this intrinsic forces register saving for the
current function and stores the address of the following instruction for use as
a destination address by llvm.eh.sjlj.longjmp. The buffer format and the
overall functioning of this intrinsic is compatible with the GCC
__builtin_setjmp
implementation allowing code built with the clang and GCC
to interoperate.
The single parameter is a pointer to a five word buffer in which the calling context is saved. The front end places the frame pointer in the first word, and the target implementation of this intrinsic should place the destination address for a llvm.eh.sjlj.longjmp in the second word. The following three words are available for use in a target-specific manner.
llvm.eh.sjlj.longjmp
¶
void @llvm.eh.sjlj.longjmp(i8* %setjmp_buf)
For SJLJ based exception handling, the llvm.eh.sjlj.longjmp
intrinsic is
used to implement __builtin_longjmp()
. The single parameter is a pointer to
a buffer populated by llvm.eh.sjlj.setjmp. The frame pointer and stack
pointer are restored from the buffer, then control is transferred to the
destination address.
llvm.eh.sjlj.lsda
¶
i8* @llvm.eh.sjlj.lsda()
For SJLJ based exception handling, the llvm.eh.sjlj.lsda
intrinsic returns
the address of the Language Specific Data Area (LSDA) for the current
function. The SJLJ front-end code stores this address in the exception handling
function context for use by the runtime.
llvm.eh.sjlj.callsite
¶
void @llvm.eh.sjlj.callsite(i32 %call_site_num)
For SJLJ based exception handling, the llvm.eh.sjlj.callsite
intrinsic
identifies the callsite value associated with the following invoke
instruction. This is used to ensure that landing pad entries in the LSDA are
generated in matching order.
Asm Table Formats¶
There are two tables that are used by the exception handling runtime to determine which actions should be taken when an exception is thrown.
Exception Handling Frame¶
An exception handling frame eh_frame
is very similar to the unwind frame
used by DWARF debug info. The frame contains all the information necessary to
tear down the current frame and restore the state of the prior frame. There is
an exception handling frame for each function in a compile unit, plus a common
exception handling frame that defines information common to all functions in the
unit.
The format of this call frame information (CFI) is often platform-dependent, however. ARM, for example, defines their own format. Apple has their own compact unwind info format. On Windows, another format is used for all architectures since 32-bit x86. LLVM will emit whatever information is required by the target.
Exception Tables¶
An exception table contains information about what actions to take when an
exception is thrown in a particular part of a function’s code. This is typically
referred to as the language-specific data area (LSDA). The format of the LSDA
table is specific to the personality function, but the majority of personalities
out there use a variation of the tables consumed by __gxx_personality_v0
.
There is one exception table per function, except leaf functions and functions
that have calls only to non-throwing functions. They do not need an exception
table.
Exception Handling using the Windows Runtime¶
Background on Windows exceptions¶
Interacting with exceptions on Windows is significantly more complicated than on Itanium C++ ABI platforms. The fundamental difference between the two models is that Itanium EH is designed around the idea of “successive unwinding,” while Windows EH is not.
Under Itanium, throwing an exception typically involes allocating thread local
memory to hold the exception, and calling into the EH runtime. The runtime
identifies frames with appropriate exception handling actions, and successively
resets the register context of the current thread to the most recently active
frame with actions to run. In LLVM, execution resumes at a landingpad
instruction, which produces register values provided by the runtime. If a
function is only cleaning up allocated resources, the function is responsible
for calling _Unwind_Resume
to transition to the next most recently active
frame after it is finished cleaning up. Eventually, the frame responsible for
handling the exception calls __cxa_end_catch
to destroy the exception,
release its memory, and resume normal control flow.
The Windows EH model does not use these successive register context resets.
Instead, the active exception is typically described by a frame on the stack.
In the case of C++ exceptions, the exception object is allocated in stack memory
and its address is passed to __CxxThrowException
. General purpose structured
exceptions (SEH) are more analogous to Linux signals, and they are dispatched by
userspace DLLs provided with Windows. Each frame on the stack has an assigned EH
personality routine, which decides what actions to take to handle the exception.
There are a few major personalities for C and C++ code: the C++ personality
(__CxxFrameHandler3
) and the SEH personalities (_except_handler3
,
_except_handler4
, and __C_specific_handler
). All of them implement
cleanups by calling back into a “funclet” contained in the parent function.
Funclets, in this context, are regions of the parent function that can be called as though they were a function pointer with a very special calling convention. The frame pointer of the parent frame is passed into the funclet either using the standard EBP register or as the first parameter register, depending on the architecture. The funclet implements the EH action by accessing local variables in memory through the frame pointer, and returning some appropriate value, continuing the EH process. No variables live in to or out of the funclet can be allocated in registers.
The C++ personality also uses funclets to contain the code for catch blocks
(i.e. all user code between the braces in catch (Type obj) { ... }
). The
runtime must use funclets for catch bodies because the C++ exception object is
allocated in a child stack frame of the function handling the exception. If the
runtime rewound the stack back to frame of the catch, the memory holding the
exception would be overwritten quickly by subsequent function calls. The use of
funclets also allows __CxxFrameHandler3
to implement rethrow without
resorting to TLS. Instead, the runtime throws a special exception, and then uses
SEH (__try / __except
) to resume execution with new information in the child
frame.
In other words, the successive unwinding approach is incompatible with Visual C++ exceptions and general purpose Windows exception handling. Because the C++ exception object lives in stack memory, LLVM cannot provide a custom personality function that uses landingpads. Similarly, SEH does not provide any mechanism to rethrow an exception or continue unwinding. Therefore, LLVM must use the IR constructs described later in this document to implement compatible exception handling.
SEH filter expressions¶
The SEH personality functions also use funclets to implement filter expressions,
which allow executing arbitrary user code to decide which exceptions to catch.
Filter expressions should not be confused with the filter
clause of the LLVM
landingpad
instruction. Typically filter expressions are used to determine
if the exception came from a particular DLL or code region, or if code faulted
while accessing a particular memory address range. LLVM does not currently have
IR to represent filter expressions because it is difficult to represent their
control dependencies. Filter expressions run during the first phase of EH,
before cleanups run, making it very difficult to build a faithful control flow
graph. For now, the new EH instructions cannot represent SEH filter
expressions, and frontends must outline them ahead of time. Local variables of
the parent function can be escaped and accessed using the llvm.localescape
and llvm.localrecover
intrinsics.
New exception handling instructions¶
The primary design goal of the new EH instructions is to support funclet generation while preserving information about the CFG so that SSA formation still works. As a secondary goal, they are designed to be generic across MSVC and Itanium C++ exceptions. They make very few assumptions about the data required by the personality, so long as it uses the familiar core EH actions: catch, cleanup, and terminate. However, the new instructions are hard to modify without knowing details of the EH personality. While they can be used to represent Itanium EH, the landingpad model is strictly better for optimization purposes.
The following new instructions are considered “exception handling pads”, in that
they must be the first non-phi instruction of a basic block that may be the
unwind destination of an EH flow edge:
catchswitch
, catchpad
, and cleanuppad
.
As with landingpads, when entering a try scope, if the
frontend encounters a call site that may throw an exception, it should emit an
invoke that unwinds to a catchswitch
block. Similarly, inside the scope of a
C++ object with a destructor, invokes should unwind to a cleanuppad
.
New instructions are also used to mark the points where control is transferred
out of a catch/cleanup handler (which will correspond to exits from the
generated funclet). A catch handler which reaches its end by normal execution
executes a catchret
instruction, which is a terminator indicating where in
the function control is returned to. A cleanup handler which reaches its end
by normal execution executes a cleanupret
instruction, which is a terminator
indicating where the active exception will unwind to next.
Each of these new EH pad instructions has a way to identify which action should
be considered after this action. The catchswitch
instruction is a terminator
and has an unwind destination operand analogous to the unwind destination of an
invoke. The cleanuppad
instruction is not
a terminator, so the unwind destination is stored on the cleanupret
instruction instead. Successfully executing a catch handler should resume
normal control flow, so neither catchpad
nor catchret
instructions can
unwind. All of these “unwind edges” may refer to a basic block that contains an
EH pad instruction, or they may unwind to the caller. Unwinding to the caller
has roughly the same semantics as the resume
instruction in the landingpad
model. When inlining through an invoke, instructions that unwind to the caller
are hooked up to unwind to the unwind destination of the call site.
Putting things together, here is a hypothetical lowering of some C++ that uses all of the new IR instructions:
struct Cleanup {
Cleanup();
~Cleanup();
int m;
};
void may_throw();
int f() noexcept {
try {
Cleanup obj;
may_throw();
} catch (int e) {
may_throw();
return e;
}
return 0;
}
define i32 @f() nounwind personality i32 (...)* @__CxxFrameHandler3 {
entry:
%obj = alloca %struct.Cleanup, align 4
%e = alloca i32, align 4
%call = invoke %struct.Cleanup* @"\01??0Cleanup@@QEAA@XZ"(%struct.Cleanup* nonnull %obj)
to label %invoke.cont unwind label %lpad.catch
invoke.cont: ; preds = %entry
invoke void @"\01?may_throw@@YAXXZ"()
to label %invoke.cont.2 unwind label %lpad.cleanup
invoke.cont.2: ; preds = %invoke.cont
call void @"\01??_DCleanup@@QEAA@XZ"(%struct.Cleanup* nonnull %obj) nounwind
br label %return
return: ; preds = %invoke.cont.3, %invoke.cont.2
%retval.0 = phi i32 [ 0, %invoke.cont.2 ], [ %3, %invoke.cont.3 ]
ret i32 %retval.0
lpad.cleanup: ; preds = %invoke.cont.2
%0 = cleanuppad within none []
call void @"\01??1Cleanup@@QEAA@XZ"(%struct.Cleanup* nonnull %obj) nounwind
cleanupret %0 unwind label %lpad.catch
lpad.catch: ; preds = %lpad.cleanup, %entry
%1 = catchswitch within none [label %catch.body] unwind label %lpad.terminate
catch.body: ; preds = %lpad.catch
%catch = catchpad within %1 [%rtti.TypeDescriptor2* @"\01??_R0H@8", i32 0, i32* %e]
invoke void @"\01?may_throw@@YAXXZ"()
to label %invoke.cont.3 unwind label %lpad.terminate
invoke.cont.3: ; preds = %catch.body
%3 = load i32, i32* %e, align 4
catchret from %catch to label %return
lpad.terminate: ; preds = %catch.body, %lpad.catch
cleanuppad within none []
call void @"\01?terminate@@YAXXZ"
unreachable
}
Funclet parent tokens¶
In order to produce tables for EH personalities that use funclets, it is necessary to recover the nesting that was present in the source. This funclet parent relationship is encoded in the IR using tokens produced by the new “pad” instructions. The token operand of a “pad” or “ret” instruction indicates which funclet it is in, or “none” if it is not nested within another funclet.
The catchpad
and cleanuppad
instructions establish new funclets, and
their tokens are consumed by other “pad” instructions to establish membership.
The catchswitch
instruction does not create a funclet, but it produces a
token that is always consumed by its immediate successor catchpad
instructions. This ensures that every catch handler modelled by a catchpad
belongs to exactly one catchswitch
, which models the dispatch point after a
C++ try.
Here is an example of what this nesting looks like using some hypothetical C++ code:
void f() {
try {
throw;
} catch (...) {
try {
throw;
} catch (...) {
}
}
}
define void @f() #0 personality i8* bitcast (i32 (...)* @__CxxFrameHandler3 to i8*) {
entry:
invoke void @_CxxThrowException(i8* null, %eh.ThrowInfo* null) #1
to label %unreachable unwind label %catch.dispatch
catch.dispatch: ; preds = %entry
%0 = catchswitch within none [label %catch] unwind to caller
catch: ; preds = %catch.dispatch
%1 = catchpad within %0 [i8* null, i32 64, i8* null]
invoke void @_CxxThrowException(i8* null, %eh.ThrowInfo* null) #1
to label %unreachable unwind label %catch.dispatch2
catch.dispatch2: ; preds = %catch
%2 = catchswitch within %1 [label %catch3] unwind to caller
catch3: ; preds = %catch.dispatch2
%3 = catchpad within %2 [i8* null, i32 64, i8* null]
catchret from %3 to label %try.cont
try.cont: ; preds = %catch3
catchret from %1 to label %try.cont6
try.cont6: ; preds = %try.cont
ret void
unreachable: ; preds = %catch, %entry
unreachable
}
The “inner” catchswitch
consumes %1
which is produced by the outer
catchswitch.
Funclet transitions¶
The EH tables for personalities that use funclets make implicit use of the funclet nesting relationship to encode unwind destinations, and so are constrained in the set of funclet transitions they can represent. The related LLVM IR instructions accordingly have constraints that ensure encodability of the EH edges in the flow graph.
A catchswitch
, catchpad
, or cleanuppad
is said to be “entered”
when it executes. It may subsequently be “exited” by any of the following
means:
- A
catchswitch
is immediately exited when none of its constituentcatchpad
s are appropriate for the in-flight exception and it unwinds to its unwind destination or the caller. - A
catchpad
and its parentcatchswitch
are both exited when acatchret
from thecatchpad
is executed. - A
cleanuppad
is exited when acleanupret
from it is executed. - Any of these pads is exited when control unwinds to the function’s caller,
either by a
call
which unwinds all the way to the function’s caller, a nestedcatchswitch
marked “unwinds to caller
”, or a nestedcleanuppad
’scleanupret
marked “unwinds to caller"
. - Any of these pads is exited when an unwind edge (from an
invoke
, nestedcatchswitch
, or nestedcleanuppad
’scleanupret
) unwinds to a destination pad that is not a descendant of the given pad.
Note that the ret
instruction is not a valid way to exit a funclet pad;
it is undefined behavior to execute a ret
when a pad has been entered but
not exited.
A single unwind edge may exit any number of pads (with the restrictions that
the edge from a catchswitch
must exit at least itself, and the edge from
a cleanupret
must exit at least its cleanuppad
), and then must enter
exactly one pad, which must be distinct from all the exited pads. The parent
of the pad that an unwind edge enters must be the most-recently-entered
not-yet-exited pad (after exiting from any pads that the unwind edge exits),
or “none” if there is no such pad. This ensures that the stack of executing
funclets at run-time always corresponds to some path in the funclet pad tree
that the parent tokens encode.
All unwind edges which exit any given funclet pad (including cleanupret
edges exiting their cleanuppad
and catchswitch
edges exiting their
catchswitch
) must share the same unwind destination. Similarly, any
funclet pad which may be exited by unwind to caller must not be exited by
any exception edges which unwind anywhere other than the caller. This
ensures that each funclet as a whole has only one unwind destination, which
EH tables for funclet personalities may require. Note that any unwind edge
which exits a catchpad
also exits its parent catchswitch
, so this
implies that for any given catchswitch
, its unwind destination must also
be the unwind destination of any unwind edge that exits any of its constituent
catchpad
s. Because catchswitch
has no nounwind
variant, and
because IR producers are not required to annotate calls which will not
unwind as nounwind
, it is legal to nest a call
or an “unwind to
caller
” catchswitch
within a funclet pad that has an unwind
destination other than caller; it is undefined behavior for such a call
or catchswitch
to unwind.
Finally, the funclet pads’ unwind destinations cannot form a cycle. This ensures that EH lowering can construct “try regions” with a tree-like structure, which funclet-based personalities may require.


{% extends "base.html" %} {% load url from future %} {% load bootstrap_toolkit %} {% load cache %} {% block meta_title %}Create or edit your question{% endblock %} {% block main %}
User the form below to share your question with the community.
{% endblock %}


Chart with different Simulation results
Simulation results
Result Type
stat
text
linear
logarithmic
line chart
bar chart
pie chart