Python po polsku - proof of concept



Przyszła mi do głowy szalona myśl, z rodzaju tych myśli, które przemeblowują aparat pojęciowy wewnątrz czaszki. Co by się stało, gdyby to nie anglosasi (w szczególności Amerykanie) wynaleźli komputer, a wraz z nim programowanie? Jakby to wyglądało, gdyby zamiast:

if, elif, else, while, try:except

używać kolejno:

jeżeli, albo jeżeli, dopóki, spróbuj:wyjąwszy ?

W myśl zasady, że należy podejmować wyzwania dla samej przyjemności podejmowania wyzwań, zmieniłem kod źródłowy Pythona 3.5 i zastąpiłem angielską składnię jej polskimi odpowiednikami. Poniżej działający przykład.


 1 [sir@Utnapisztim Python-3.5]$ ./python
2 >>>
zaimportuj math jako matematyka
3 >>> logarytm = matematyka.log(10)
4 >>> jeżeli logarytm > 1:
5 ... wyświetl('No jest.')
6 ... inaczej:
7 ... wyświetl('Nie tym razem')
8 ...
9 No jest.



Nowe polecenia:
 1 {
2 del: "usuń",
3 pass: "dalej",
4 break: "przerwij",
5 continue: "kontynuuj",
6 return: "zwróć",
7 raise: "podnieś",
8 with: "z",
9 import: "zaimportuj",
10 as: "jako",
11 if "jeżeli",
12 elif: "albo_inaczej",
13 else: "inaczej",
14 while: "dopóki",
15 for: "dla",
16 in: "w",
17 try: "spróbuj",
18 except: "wyjąwszy",
19 finally: "w_końcu",
20 with: "przy",
21 or: "albo",
22 and: "oraz",
23 not: "nie",
24 is: "jest",
25 None: "Nic",
26 True: "Prawda",
27 False: "Nieprawda",
28 class: "klasa",
29 yield: "uzyskaj"
30 }

Jest to zwykły Python3, w którym można programować po polsku. Zmieniłem przede wszystkim składnię i niektóre wbudowane polecenia (built-iny). Już samo to wymagało żmudnej pracy przy zmianie kodu źródłowego i wielu frustrujących prób kompilacji.

Kod źródłowy:

PolskiPython.tar.gz

Zachęcam do ściągnięcia i skompilowania kodu.

1 ./configure
2 make
3 ./python

Całość się nie skompiluje do końca, ponieważ nie udało mi się rozwiązać wszystkich problemów, ale sam interpreter powinien działać. Gdyby kogoś interesowało podjęcie wyzwania, najistotniejsze zmiany należy poczynić tu:

1 Grammar/Grammar - deklaracja składni
2 Python/graminit.c - tablica poleceń
3 Modules/parsermodule.c - funkcje parsera

Po wprowadzeniu zmian trzeba zmienić setki tysięcy linii w bibliotekach Pythona, które są w przeważającej większości napisane właśnie w Pythonie. Wszystkie polecenia powinny być już po polsku, żeby interpreter potrafił je zrozumieć. Na szczęście nie trzeba tego poprawiać ręcznie, bo trwało by to wieki; zamiast tego można użyć finda:

1 find .  -name '*.py' 
2 ! -name 'generate_opcode_h.py' ! -name 'makeopcodetargets.py'
3 ! -name 'opcode.py' ! -name 'asdl_c.py' ! -name 'asdl.py'
4 -exec sed -i 's/try:/spróbuj:/g' {} \;

W powyższym przykładzie zamieniamy zawartość wszystkich plików *py, tak by "try:" zamienił się w "spróbuj". Pomijamy jedynie te pliki, które powinny pozostać w starej składni, ponieważ przy kompilacji wykorzystywany jest również zwykły Python.

Po skompilowaniu, takiego polskiego Pythona można uruchomić interaktywnie lub na skrypcie. Zasadniczo jest to bezużyteczny język, ponieważ nie wyobrażam sobie, żeby ktokolwiek chciał programować po polsku i w naturalny sposób izolował się od reszty świata. Bardziej interesowało mnie czy "się da". Otóż da się.

(•_•)

( •_•)>⌐■-■

(⌐■_■)

PolskiPython.tar.gz

blog comments powered by Disqus