A question about semantics from the standard library's documentation

A

Aseem Bansal

In Python 3.3.2 documentation on the Python Standard library's introductionthese sentences are given

"For these types, the Python language core defines the form of literals andplaces some constraints on their semantics, but does not fully define the semantics. (On the other hand, the language core does define syntactic properties like the spelling and priorities of operators.)"

That got me confused. What is defined by the language and what is not?
Can someone give me an example about what this means?
 
C

Chris Angelico

In Python 3.3.2 documentation on the Python Standard library's introduction these sentences are given

"For these types, the Python language core defines the form of literals and places some constraints on their semantics, but does not fully define the semantics. (On the other hand, the language core does define syntactic properties like the spelling and priorities of operators.)"

In future, a link would help :)

http://docs.python.org/3/library/intro.html
That got me confused. What is defined by the language and what is not?
Can someone give me an example about what this means?

The core language MUST be implemented in the "outer language" (C for
CPython, Java for Jython... PyPy makes this a bit confusing, but
there's still the same distinction). You can't write Python code to
determine how to parse Python code. However, this core is actually
quite small. It consists of everything necessary to actually parse
your script (so, the indentation and tokenization rules, etc), plus
enough classes to be able to handle literals (there needs to be a str
to handle "Hello, world", for instance). Once the core is built, the
rest of the language can be implemented in Python. That's the standard
library.

Quite a bit of CPython's stdlib is actually implemented in C, for
performance; but huge slabs of it aren't, they're just Python code on
par with the scripts you write yourself. They're part of the language
ecosystem - if you claim you "know Python", you have to know at least
something about the stdlib - but it's much more easily tinkered with,
since you can just drop in a replacement bit of Python.

Take the hex() built-in function as an example. I can replace it[1] by
simply creating my own function with the same name:
return x+curse(x)-sanity()

It's not hard to roll your own hex() if you want to (base conversion
is easy enough). So hex() needn't be part of the core language, but
can simply be provided by a bit of Python code that gets imported
automatically.

In contrast, the 'def' statement MUST be provided by the core
language. You can't create a function that gives you the ability to
create functions! You also can't create the + operator, although it's
conceivable to have a language that grants user-level code that power;
in Python, at least, all operators are language features. However, the
exact behaviour of that + operator can be customized in Python, using
magic methods. That's the main difference between the core language
and the standard library - the stdlib could be, even if it isn't,
implemented in the language itself.

ChrisA

[1] This example just shadows the name, but near enough. Fiddling with
__builtins__ is a better "replacement", but it comes to the same
thing.
 
T

Terry Reedy

In Python 3.3.2 documentation on the Python Standard library's introduction these sentences are given

"For these types, the Python language core defines the form of literalsand places some constraints on their semantics, but does not fully define the semantics. (On the other hand, the language core does define syntactic properties like the spelling and priorities of operators.)"

The two preceeding sentences are
"The “Python library†contains several different kinds ofcomponents.

It contains data types that would normally be considered part of the
“core†of a language, such as numbers and lists."
That got me confused. What is defined by the language and what is not?
Can someone give me an example about what this means?

Take ints. The language manual specific the form of int literals. It
specifies the operations in general terms of 'integers'. It specifies
the precedence of the operators. It does not actually specify the
meaning (semantics) of m + n. You are safe in assuming that (int)2 +
(int)2 = (int)4. However type(2**31) is different on 2.7- 32-bit builds
(long) and 3.0+ (always int). Also note that the language reference does
not specify the int methods other than the special methods needed to
implement the operators.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,042
Latest member
icassiem

Latest Threads

Top