9 episodes

It's a-us, foreigners speaking bad English talking about Python internals! One talks like a Mexican, the other like a Russian. Both hate the comparison!

core.py Pablo Galindo and Łukasz Langa

    • News
    • 5.0 • 11 Ratings

It's a-us, foreigners speaking bad English talking about Python internals! One talks like a Mexican, the other like a Russian. Both hate the comparison!

    Episode 9: Py Day with Emily Morehouse-Valcarcel

    Episode 9: Py Day with Emily Morehouse-Valcarcel

    Let's talk about the Steering Council, running a small consultancy business, the Walrus, and pet peeves with our special guest today!



    ## Outline



    (00:00:00)  INTRO

    (00:00:56)  PART 1: Emily Morehouse

    (00:02:15)  Running a small consultancy business

    (00:04:39)  What features of JS do you miss in Python?

    (00:05:50)  Łukasz outnumbered in a world of Steering Council members

    (00:06:12)  Upgrading to new Python versions

    (00:07:00)  It depends on who deployed the project

    (00:09:44)  Second term as a Steering Council member

    (00:11:33)  Barry, play some bass for us

    (00:13:04)  Let's hear a recent war story

    (00:15:17)  Is this progress bar even working?

    (00:17:40)  The Villain Origin Story

    (00:21:37)  Emily, The Bringer of Doom

    (00:22:37)  Consensus within the Steering Council

    (00:25:52)  Syntax changes in Python are rare, right? Right?

    (00:28:22)  On implementing PEP 572

    (00:32:52)  How would PyCon 2020 in Pittsburgh feel?

    (00:34:18)  How can you be mad about the Walrus?

    (00:36:10)  Favorite parts of the standard library

    (00:38:10)  Is hacking on Python a good experience to newcomers?

    (00:40:26)  Emily's pet peeve about Python, take 1

    (00:42:17)  Emily's favorite change in Python in recent years

    (00:44:34)  Emily's pet peeve about Python, take 2

    (00:46:34)  Łukasz's pet peeve

    (00:48:25)  Surprise extra question

    (00:49:42)  At core.py we are professionals

    (00:51:00)  PART 2: PR of the Week

    (00:54:00)  CALL TO ACTION: Upgrade Python.org to Django 4!

    (00:56:22)  PART 3: What's Going On in CPython?

    (00:56:38)  Faster Python updates

    (01:00:10)  Free threading: GIL can be disabled but we're not done yet!

    (01:04:17)  New defaults for SSL context flags

    (01:05:39)  python -m asyncio and sys.__interactivehook__

    (01:06:24)  Surprise question: what is sys.__interactivehook__ even doing?

    (01:08:11)  OUTRO

    • 1 hr 9 min
    Episode 8: The New Parser

    Episode 8: The New Parser

    The suspense was killing us! OK, the old parser was then... but what about NOW? We're finally answering this question... in more detail than you dared to ask for. PEG, memoization, funky secrets, and how a certain auto-formatter self-inflicted an existential crisis on itself. It's all there, told in barely 100 minutes! Can you believe it?



    # Timestamps



    (00:00:00)  INTRO

    (00:00:54)  PART 1: What even is PEG?

    (00:04:02)  You can't prove anything!

    (00:05:03)  What's a "parsing expression"?

    (00:08:23)  Our old LL1 parser wasn't doing its job

    (00:09:37)  "Soft keywords" in LL1: A Horror Story

    (00:13:16)  PART 2: How PEG was adopted by Python

    (00:17:10)  Why not LALR?

    (00:22:11)  The PEG paper wasn't enough either, if we're honest

    (00:26:26)  Less obvious advantages of the new parser

    (00:31:28)  Black is stuck with LL1, can it cope?

    (00:36:24)  Hedging against Łukasz, the bringer of doom

    (00:41:14)  PART 3: How does the PEG parser of CPython work?

    (00:44:30)  Pedantic Pablo on "exponential"

    (00:45:14)  Fresh news from literally yesterday last week

    (00:46:39)  Pedantic Pablo on "infinite"

    (00:47:32)  Memoization in the PEG parser

    (00:50:41)  Parse once, and if it fails, try again!

    (00:52:14)  How to model a grammar of programming mistakes?

    (00:56:36)  Why is there C code in my grammar file?

    (00:59:57)  Bro, do you even lift?

    (01:01:45)  How soft keywords work today: it's not free lunch

    (01:04:29)  Funky grammar secrets

    (01:09:07)  PART 4: PR OF THE WEEK

    (01:09:15)  audioop.c license shenanigans

    (01:14:56)  The secret profiler inside CPython (tests)

    (01:22:45)  PART 5: WHAT'S GOING ON IN CPYTHON?

    (01:23:30)  Free-threading changes

    (01:28:15)  Faster Python changes

    (01:35:39)  End of an era: docs get rid of Python 2 migration info

    (01:36:45)  Python --help output is now nicer

    (01:38:43) SQLite as a dbm backend

    (01:41:08)  OUTRO

    • 1 hr 42 min
    Episode 7: The Old Parser

    Episode 7: The Old Parser

    Context-free grammars, non-deterministic finite automatons, left-to-right leftmost derivations... what even is all that?! Today we're talking about how Python parses your source code. We start gently with how this worked in the past. Come listen to Łukasz's high-level explanations and Pedantic Pablo's "well actuallys".



    # Timestamps



    (00:00:00) INTRO

    (00:01:35) You can still download Python 1.0!

    (00:02:19) The original tokenizer

    (00:03:10) What even is a tokenizer?

    (00:04:08) FUN FACTS ABOUT THE TOKENIZER

    (00:04:34) Circumflex

    (00:05:16) Python's invisible braces

    (00:08:29) Backticks in the syntax

    (00:11:00) Where are the comments stored?

    (00:12:27) GRAMMAR

    (00:13:37) What is a grammar?

    (00:16:25) The long-forgotten 'access' keyword

    (00:20:25) Making LL1 do things it wasn't meant to do

    (00:23:24) SURPRISE QUESTION 1: soft keywords

    (00:24:46) What's a context-free grammar?

    (00:26:51) A note about backslashes

    (00:29:33) The Dragon Book(s)

    (00:31:27) PARSING: What is it?

    (00:35:23) How to generate a parser?

    (00:39:00) LL Cool Parser

    (00:41:15) What if we used LR?

    (00:44:01) Let's have three tokenizers!

    (00:47:50) 2to3 and its legacy

    (00:52:38) Black and its blib2to3

    (00:54:04) The pesky 'with' statement and the death of LL1

    (01:00:05) PR OF THE WEEK: GH-113745

    (01:05:41) SURPRISE QUESTION 2: Subclasses of SyntaxError

    (01:07:02) WHAT'S GOING ON IN CPYTHON?

    (01:09:16) Sam Gross nominated as a core dev

    (01:10:13) Free-threading progress

    (01:13:11) Faster CPython changes

    (01:17:29) ntpath.isreserved()

    (01:20:11) Pablo and the DWARF

    (01:22:02) OUTRO

    • 1 hr 23 min
    Episode 6 - An Exceptional Episode

    Episode 6 - An Exceptional Episode

    Happy New Year! In this episode we're talking about exceptions, how they work, and how they evolved. Expect the unexpected.



    # Timestamps



    (00:00:00)  INTRO

    (00:01:43)  How does a 'try' block work?

    (00:04:00)  How many 'try' blocks can you fit on a bus?

    (00:05:56)  How does Python store the current exception?

    (00:09:30)  Pre-history: exceptions as strings

    (00:12:59)  Try out string exceptions with CentOS 5

    (00:14:28)  PEP 341: Combining 'finally' and 'except' in one 'try' block

    (00:16:15)  Core Hacker in Residence

    (00:16:51)  PEP 3109: Raising exceptions in Python 3K

    (00:19:17)  Automatic tuple unpacking for raised exceptions?!

    (00:21:55)  PEP 3110: Catching exceptions in Python 3K

    (00:26:00)  Foreshadowing: exception groups

    (00:27:10)  PEP 3134: Exception chaining

    (00:29:12)  __cause__, __context__, __traceback__

    (00:31:50)  Back in the day we had to walk uphill both ways

    (00:32:56)  PEP 409: Suppressing exception chaining

    (00:34:44)  Raise from None? Or raise from Ellipsis?

    (00:37:11)  __supress_context__

    (00:38:13)  Semantic difference between 'pass', 'None', and '....'

    (00:41:02)  NotImplemented vs NotImplementedError

    (00:43:02)  Zero-cost exceptions in Python 3.11

    (00:51:12)  Reconstructing exception table entries dynamically

    (00:52:51)  Objects/exception_handling_notes.txt

    (00:54:19)  PEP 654: Historical context

    (00:56:58)  PEP 654: BaseExceptionGroup and ExceptionGroup

    (00:58:29)  PEP 654: except*

    (01:03:23)  PEP 678: Exception notes

    (01:06:09)  PEP 657: Cooler Errors

    (01:08:36)  A message to language implementers

    (01:09:15)  Fine-grained error locations in tracebacks

    (01:12:05)  This is useful for tracing coverage and Specializator

    (01:13:50)  Hacker in Residence fired?

    (01:16:25)  WHAT'S GOING ON IN CPYTHON

    (01:16:58)  Copy&patch JIT PR open

    (01:21:30)  Free-threading progress: GC split, stop-the-world

    (01:24:22)  The buildbots are red

    (01:25:27)  Faster CPython changes: interpreter code generator refactors

    (01:26:27)  Eval Game crash fix

    (01:28:41)  Three developers in residence!

    (01:29:54)  OUTRO



    # Links



    https://compilercrim.es/rust-np/

    • 1 hr 31 min
    Episode 5 - Cinder with Carl Meyer

    Episode 5 - Cinder with Carl Meyer

    This time we're hosting a special guest: Carl Meyer from Meta. What is Cinder, how does it work, and how does it intersect with the future of Python 3? Find out in today's episode. 100% serious stuff!



    # Timestamps



    (00:00:00)  INTRO

    (00:00:53)  Carl Meyer's war story

    (00:02:27)  CINDER

    (00:03:22)  Static Python makes things significantly faster

    (00:08:15)  Cinder JIT and how it's tuned for Instagram

    (00:11:57)  Strict Python and the joy of import side effects

    (00:16:35)  The static typing controversy

    (00:18:52)  Upstreaming changes from Cinder?

    (00:22:53)  PEP 709: Comprehension inlining

    (00:28:35)  pip install CinderX

    (00:31:19)  Immortal instances

    (00:35:15)  asyncio.eager_task_factory()

    (00:39:39)  Carl's pet peeve with Python

    (00:44:49)  PR OF THE WEEK: PyPy's REPL in CPython

    (00:52:07)  WHAT'S GOING ON IN CPYTHON

    (00:52:22)  Python 3.12.1

    (00:53:17)  Python 3.11.7

    (00:54:45)  multiprocessing.SharedMemory track

    (00:56:49)  Fine-grained error locations for multi-line expressions

    (01:00:03)  libedit tab completion is fixed

    (01:02:14)  Colored exception tracebacks

    (01:05:11)  Removing testing modules from sys.modules, correctly

    (01:06:47)  SBOMs are a very serious matter

    (01:09:08)  Arrays by value on ARM

    (01:12:24)  Remove development environments and CAPS LOCK

    (01:15:30)  Interpreter cases generator refactored

    (01:16:17)  Free-threading news

    (01:20:01)  OUTRO

    • 1 hr 21 min
    Episode 4 - Frame Evaluation

    Episode 4 - Frame Evaluation

    What makes Python an interpreter? Today we're talking about ceval.c, the wonders of frame evaluation, and how it changed over the years.



    # Timestamps



    (00:00:00)  INTRO

    (00:00:59)  BACK TO PYTHON 2.6

    (00:02:53)  Stack virtual machine

    (00:04:41)  First encounter with opcodes

    (00:08:06)  What even is frame evaluation?

    (00:12:51)  Stack! Which stack?

    (00:15:46)  PRESENT DAY

    (00:16:41)  Computed gotos

    (00:21:22)  PEP 523: JIT me, maybe

    (00:26:53)  Let's generate the interpreter

    (00:29:08)  The JIT is coming

    (00:33:13)  Python function call inlining

    (00:37:23)  Instrumentation: DTrace, PEP 669

    (00:41:50)  lltrace and pystats

    (00:44:02)  Eval breaker

    (00:47:54)  Signal handling

    (00:50:47)  Recursion limits

    (00:54:27)  String concatenation special case

    (00:58:24)  WHAT'S GOING ON IN CPYTHON?

    (00:58:42)  3.12.0a2

    (00:59:12)  Critical section API adoption

    (00:59:34)  PyOnceFlag

    (01:00:28)  PyDict_GetItemRef()

    (01:03:36)  PyList_Extend() and PyDict_Pop()

    (01:04:18)  Parser: better error messages for non-matching elif/else

    (01:05:39)  glob.translate()

    (01:07:22)  TLS-PSK in the ssl module

    (01:08:35)  IDLE debugger improvements

    (01:10:50)  First micro-op in the Tier 2 interpreter

    (01:11:18)  OUTRO

    • 1 hr 13 min

Customer Reviews

5.0 out of 5
11 Ratings

11 Ratings

Top Podcasts In News

The Daily
The New York Times
Serial
Serial Productions & The New York Times
Up First
NPR
Pod Save America
Crooked Media
The Tucker Carlson Podcast
Tucker Carlson Network
The Ben Shapiro Show
The Daily Wire

You Might Also Like

Python Bytes
Michael Kennedy and Brian Okken
Talk Python To Me
Michael Kennedy (@mkennedy)
The Real Python Podcast
Real Python
Data Engineering Podcast
Tobias Macey
Syntax - Tasty Web Development Treats
Wes Bos & Scott Tolinski - Full Stack JavaScript Web Developers
Practical AI: Machine Learning, Data Science
Changelog Media