Bohnenmaschinen-Retrospektive, Teil 6

Bohnenmaschinen-Retrospektive, Teil 6


Frohes neues Jahr euch allen!

Das letzte Mal habe ich kurz die Grundstrategie des Beanstalk-Compilers beschrieben: Transformieren Sie den Quellcodejeder abgefragten oder beobachteten Funktion (und transitiv ihrer aufgerufenen Funktionen) in ein äquivalentes Programm, dasteilweise wertet ausdas Modell,Akkumulieren eines Diagrammswie es geht. In diesem Beitrag werde ich den ersten Schritt der Transformation durchgehen.

Die Idee der ersten Quelle-zu-Quelle-Transformation besteht darin, eine relativ komplizierte Sprache – Python – durch das zu ersetzen, was ich als „vereinfachtes Python“ bezeichne. Im Zen von Python heißt es bekanntlich: „Es sollte einen – und vorzugsweise nur einen – offensichtlichen Weg geben, dies zu tun” aber das ist nicht das Ziel dieses Vereinfachungsschrittes. Das Zen von Python betont Offensichtlichkeit. Es geht darum, den Code klar und die Sprache erkennbar zu machen. Mein Ziel mit vereinfachtem Python ist „Es sollte nur einen Weg geben, dies zu tun” – weil es einfacher ist, ein Programm so zu instrumentieren, dass es seine Bedeutung während der Ausführung erfasst, wenn es nur eine Möglichkeit gibt, alles zu erledigen.

Überlegen Sie beispielsweise, wie Sie eine Funktion foo mit drei Argumenten aufrufen:

foo(1, 2, 3)
x = [1, 2, 3)
foo(*x)
foo(1, 2, bar=3)
x = {"bar":3}
foo(1, 2, **x)

… und so weiter – es gibt viele offensichtliche Möglichkeiten, eine Funktion in Python aufzurufen, aber ich möchte, dass es genau eine in vereinfachtem Python gibt.

Das erste, was wir bei der Analyse einer abgefragten oder beobachteten Funktion tun, besteht darin, ihren Quellcode abzurufen, diesen in einen abstrakten Syntaxbaum (AST) zu analysieren und dann eine Reihe von AST-Transformationen durchzuführen, die die Funktion in ein äquivalentes, aber einfacheres Python-Programm reduzieren. Dies ist der traditionellste Compiler-Schritt in der Pipeline.

(Wie erhalten wir den Quellcode? Denken Sie daran, dass wir für jede Beobachtung und Abfrage eine RVID haben; die RVID enthält eine Referenz auf das ursprüngliche Funktionsobjekt. Pythons Laufzeit kann den Quellcode für eine bestimmte Funktionsreferenz bereitstellen.)

Schauen wir uns eine nur etwas kompliziertere Version unseres „Hallo Welt“-Modells an:

@random_variable
def fairness():
  return Beta(2,2)

@random_variable
def flip(n):
  return Bernoulli(0.5 * fairness())

In unserem vereinfachten Python:

  • Jeder Wert bekommt sein eigenes Variable
  • Jeder Berechnung bekommt sein eigenes Stellungnahme
  • Jeder Anruf hat das gleiche Syntax: a = b(*c, **d)

Unsere beiden Methoden in vereinfachter Form wären:

def fairness():
  _t1 = 2
  _t2 = 2
  _t3 = [_t1, _t2)
  _t4 = {}
  _t5 = Beta(*_t3, **_t4)
  return _t5

def flip(n):
  _t1 = 0.5
  _t2 = [)
  _t3 = {}
  _t4 = fairness(*_t2, **_t3)
  _t5 = _t1 * t4
  _t6 = [_t5)
  _t7 = {}
  _t8 = Bernoulli(*_t6, **_t7)
  return _t8

NEBENBEI: Leser mit etwas Erfahrung im Schreiben von Compilern könnten sich fragen: „Ist das eine statische Einzelzuweisungsform?“ Das SSA-Formular ist eine Transformation, bei der jede Variable genau einmal zugewiesen wird; Es wird für die Kontrollflussanalyse und andere Programmanalysen verwendet. Ich habe keine vollständige SSA-Transformation geschrieben, aber als ich das erste Prototyping durchführte, wusste ich, dass ich in Zukunft möglicherweise ein SSA-Formular benötigen würde. Betrachten Sie es als SSA-light, wenn das Sinn macht.


Wir können noch weiter gehen; in unserem vereinfachten Python:

  • logische Operatoren and Und or werden beseitigt
x = y and z

kann vereinfacht werden zu

x = y
if x:
  x = z

und jetzt muss sich der Graphenakkumulator keine Sorgen mehr machen überhaupt über logische Operatoren, da diese im vereinfachten Programm nicht vorhanden sind.

  • Jeder while Schleife ist while True.
  • Keine Schleife hat eine else Klausel. (Wussten Sie, dass Python-Schleifen… else Klauseln? Es ist wahr!)
  • Es gibt keine zusammengesetzten Vergleiche:
x = a < b < c

kann vereinfacht werden zu

x = a < b
if x:
  x = b < c

und jetzt muss sich der Graphenakkumulator nicht mehr um zusammengesetzte Vergleiche kümmern, da es keine gibt.

  • Ebenso gibt es keine Lambdas, keine Funktionsanmerkungen und so weiter. Alle praktischen syntaktischen Zucker werden in ihre grundlegendere Form entzuckert.

Die vereinfachte Sprache ist definitiv keine Sprache, in der ich gerne ein langes Programm schreiben würde, aber Es ist eine Sprache, die sich leicht programmgesteuert analysieren lässt. Bisher machen die Transformationen das Programm länger und einfacher, ändern aber nichts an seiner Bedeutung; Wenn wir die vereinfachte Version des Programms kompiliert und ausgeführt haben, sollte es dasselbe tun wie die normale Version.


Das nächste Mal auf FAIC: Lassen Sie uns näher auf die Funktionsweise des AST-zu-AST-Transformationscodes eingehen. Es hat mir viel Spaß gemacht, es zu schreiben.



Source link

Postagens Similares

  • تنفيذ أجهزة الحالة في PostgreSQL · Felix Geisendörfer

    تم النشر: 27 يوليو 2017 تعد آلة الحالة المحدودة (FSM) نموذجًا رائعًا للحساب وله العديد من التطبيقات العملية. أحد الأشياء المفضلة لدي هو تحويل منطق الأعمال إلى ولايات ميكرونيزيا الموحدة البسيطة. على سبيل المثال، ضع في اعتبارك المتطلبات التالية لنظام إدارة الطلبات: يجب ألا يتم شحن الطلبات قبل أن يتم دفعها. يمكن إلغاء الطلبات، ولكن…

  • WikipediaのブラックリストArchive.today、695,000のアーカイブリンクの削除を開始

    物議を醸しているアーカイブ サイトがブログに対する分散型サービス拒否 (DDoS) 攻撃を指示するために使用されたことを受け、英語版ウィキペディアは Archive.today をブラックリストに登録しました。 DDoS を理由に Archive.today を廃止すべきかどうかを議論する過程で、Wikipedia 編集者は、アーカイブ サイトが Web ページのスナップショットを変更して DDoS の標的となったブロガーの名前を挿入していたことを発見しました。この改変は明らかに、Archive.today の管理者が複数のエイリアスで自分の身元を隠した方法を説明した投稿に対するブロガーに対する恨みによって煽られたようです。 「archive.today をただちに非推奨にし、実行可能な限り速やかにスパム ブラックリストに追加し (または新しいリンクの追加をブロックする編集フィルターを作成し)、そこへのすべてのリンクを削除するという合意が得られています」と、今日の Wikipedia の Archive.today ディスカッションの最新情報には記載されています。 「ユーザーのコンピュータを乗っ取ってDDoS攻撃を実行するようなWebサイトにWikipediaが読者を誘導すべきではないという強いコンセンサスがある(WP:ELNO#3を参照)。さらに、archive.todayの運営者がアーカイブされたページのコンテンツを改変し、信頼性を失わせたという証拠も提示されている。」 Archive.today への 695,000 を超えるリンクが、約 400,000 の Wikipedia ページに分散されています。アーカイブ サイトは、ニュース ペイウォールをバイパスするためによく使用されます。彼はFBIを持っています 求めた情報 サイト運営者の身元について、ドメイン登録業者 Tucows への召喚状を提出します。 「現状維持を支持する人たちは、主に検証可能性のための archive.today の有用性に議論を置いた」とウィキペディアの今日の更新には書かれている。 「しかし、既存のリンクの分析により、その用途のほとんどは置き換えられることがわかりました。この RfC (コメント要求) 中に数人の編集者が実装の詳細を検討し始めました。コミュニティは、archive.today へのリンクを効率的に削除する方法を見つけ出す必要があります。」 編集者はリンクを削除するよう要請 この決定の結果として公開されたガイダンスでは、アーカイブ サイトで使用されている次のドメイン名へのリンクを削除および置換するよう編集者に協力するよう求めています: archive.today、archive.is、archive.ph、archive.fo、archive.li、archive.md、および archive.vn。ガイダンスでは、元のソースがまだオンラインであり、内容が同一である場合、編集者は Archive.today のリンクを削除できると記載されています。アーカイブ…

  • 大衛·萊特曼(David Letterman)

    傳奇的深夜主持人戴維·萊特曼(David Letterman)在導致ABC暫停吉米·金梅爾(Jimmy Kimmel)的事件中加重了這一事件。 當被問及金梅爾的停賽時,萊特曼說:“這真是痛苦。” “我對此感到難過,”他繼續說道。 “我們看到這一切都在哪裡,對嗎?這是管理媒體。這不是很好。這很愚蠢。這太荒謬了。您不能四處解僱某人,因為您害怕或試圖在橢圓形辦公室裡吸引專制犯罪管理局。這不是這樣做的。” 萊特曼說:“在一個專制的人,也許是獨裁統治的世界中,每個人都將被感動。” 萊特曼還說:“美國總統的機構應該比參加脫口秀的人大。”他說,金梅爾從深夜電視台上撤離,“斯蒂芬·科爾伯特(Stephen Colbert)離開後,我們的總統預言了我們的總統,所以你告訴我這沒有在某種程度上進行預謀嗎?” 萊特曼(Letterman)在深夜電視節目中度過了三十年的時間,他說,金梅爾(Kimmel)在星期四早上給他發了短信。萊特曼說:“他躺在床上,接受營養。他會沒事的。” 週三,美國廣播公司(ABC)暫停了金梅爾(Kimmel)的深夜節目“無限期”。這是在FCC董事長佈倫丹·卡爾(Brendan Carr)僅幾個小時前就威脅ABC及其分支機構之後,如果他們沒有對Kimmel“採取行動”對他認為對Charlie Kirk的殺手的令人反感的評論。卡爾在保守的播客中說:“我們可以以簡單的方式或艱難的方式做到這一點。” “坦率地說,這些公司可以找到改變行為和採取行動的方法,否則將為FCC提供其他工作。”此後不久,兩個大型電視台集團經營ABC分支機構 – Nexstar Media和Sinclair,兩者都受到FCC的監督 – 表示他們不會播出“ Jimmy Kimmel Live!”在可預見的未來。然後,美國廣播公司(ABC)宣布了金梅爾(Kimmel)的停賽。 關於卡爾的評論:“我們可以以簡單的方式或艱難的方式做到這一點,”萊特曼說:“誰在僱用這些傻瓜 – 馬里奧·普佐(Mario Puzo)?”,指的是“教父”的作者。萊特曼說,當他在電視上時,他從未受到總統政府,FCC或任何其他政府機構對他的空中評論的壓力。 萊特曼說:“以喜劇的名義,正確,正確,準確或可能不正確地毆打(過去的美國總統),我們從來沒有任何人都被任何政府機構的任何人擠過,更不用說可怕的FCC了。” 批評金梅爾的停賽的其他人包括巴拉克·奧巴馬,萬達·賽克斯,本·斯蒂勒,讓·斯瑪特等,而像總統唐納德·特朗普這樣的保守派人物卻慶祝了這一舉動。 萊特曼(Letterman)接受了大西洋總編輯杰弗裡·戈德堡(Jeffrey Goldberg)的採訪,後者稱他為深夜的“教父”。萊特曼(Letterman)的深夜電視生涯始於1982年,當時NBC的“深夜”首次亮相,並繼續CBS的“ Late Late Show” 1993 – 2015年。從那以後,他主持了Netflix的談話系列,“我的下一位客人不需要介紹。” “十年前,我足夠聰明,可以取消自己,”萊特曼打趣道。 戈德堡認為,今天,儘管特朗普對媒體發動了攻擊,“我們仍然有一個免費的媒體”,萊特曼回答說:“我們嗎?” 7月,在哥倫比亞廣播公司宣布取消“與斯蒂芬·科爾伯特的後期演出”之後,萊特曼將網絡的行動猛烈抨擊為“純粹的怯ward”。萊特曼在與YouTube共享的視頻中說:“他們沒有做正確的事情。他們沒有按照他應得的處理方式來處理斯蒂芬·科爾伯特(Stephen Colbert) – 該網絡的面孔。”他還對哥倫比亞廣播公司(CBS)宣稱的該節目的理由表示懷疑是“純粹”的財務決定。 萊特曼在大西洋節上談到了科爾伯特的取消時說:“那是不可原諒的。那個男人值得一提……因為埃里森一家人不想讓唐納德·特朗普(Ellison Trump)帶來這一舉動困擾唐納德·特朗普(Donald Trump),所以他們被他擺脫了,所以擺脫了整個節目。 (Skydance Media上個月在拉里·埃里森(Larry Ellison)的主要支持下為派拉蒙(Paramount Global)提供的80億美元交易說,其高管沒有參與“遲到”取消。) 在撰寫本文時,迪斯尼或美國廣播公司(ABC)對金梅爾情況的唯一評論是美國廣播公司(ABC)發言人周三的聲明:“’吉米·金梅爾(Jimmy Kimmel Live)!”將無限期地被搶占。 ”金梅爾沒有發表評論。 上圖:2019年5月23日在洛杉磯舉行的Netflix活動,吉米·金梅爾和大衛·萊特曼 Source…

  • XOXO ਲਈ ਇੱਕ ਸਥਾਈ ਪੁਰਾਲੇਖ ਲਾਂਚ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ

    ਪਿਛਲੇ ਹਫ਼ਤੇ, ਅਸੀਂ XOXO ਐਕਸਪਲੋਰ ਨੂੰ ਲਾਂਚ ਕੀਤਾ, XOXO ਲਈ ਇੱਕ ਸਥਾਈ ਪੁਰਾਲੇਖ, ਪੋਰਟਲੈਂਡ-ਅਧਾਰਿਤ ਤਿਉਹਾਰ ਅਤੇ ਕਾਨਫਰੰਸ ਜੋ ਮੈਂ 2012 ਅਤੇ 2024 ਦੇ ਵਿਚਕਾਰ ਅੱਠ ਸਾਲਾਂ ਲਈ ਐਂਡੀ ਮੈਕਮਿਲਨ ਨਾਲ ਸਹਿ-ਸੰਗਠਿਤ ਕੀਤੀ ਸੀ। ਇਹ ਇੱਕ ਬਹੁਤ ਵੱਡਾ ਉੱਦਮ ਸੀ, ਜਿਸ ਵਿੱਚ ਹਰ ਲਾਈਨਅੱਪ, ਸਮਾਂ-ਸਾਰਣੀ, ਰੀਕੈਪ ਵੀਡੀਓ, ਕਾਨਫਰੰਸ ਟਾਕ, ਅਤੇ ਸਟੈਂਡਅਲੋਨ ਵੈੱਬਸਾਈਟ ਨੂੰ ਇਕੱਠਾ ਕੀਤਾ ਗਿਆ…

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *