archivesOfToyLang/tshunhue/docs/source/index.rst

92 lines
2 KiB
ReStructuredText
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. Tshunhue Documents documentation master file, created by
sphinx-quickstart on Tue Sep 24 21:40:29 2019.
You can adapt this file completely to your liking, but it should at least
contain the root `toctree` directive.
Welcome to Tshunhue Documents's documentation!
==============================================
Indices and tables
==================
* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`
Tshunhue 是什麼呢?
===================
Tshunhue河洛語春花是一個 Lisp 系的玩具程式語言。初期計畫先編譯成 LLVM IR 再轉成可執行檔。主要的特徵有:
- 不可變物件。
- 閉包作為第一類物件。
- 靜態型別。
- 型別構造子
- 和型別 (Sum Type)
- 積型別 (Product Type)。
Todo
============
- □ S-表示式分析器
- □ 自由變數追蹤器
- □ 型別推論器
- □ 閉包生成
- □ LLVM IR 生成。
- □ 型別構造子
其他
============
垃圾回收
------------
先不實現垃圾回收。若是要實現垃圾回收,可以用引用記數。做一個這樣的表格:
+------------+------------+
| 記憶體位址 | 引用次數 |
+------------+------------+
| 0x12345 | 1 |
| | |
| …… | …… |
+------------+------------+
以下有一個範例:
::
(Type IntPair (IntPair Int Int))
(def IntPair a (IntPair x y))
; 這個時候我們可以呼叫引用計數增加函數 inc_ref_count()
; inc_ref_count(&a);
; inc_ref_count(&x);
; inc_ref_count(&y);
...程式碼
; x 活著的程式碼區段結束時,呼叫引用記數減少函數 dec_ref_count()
; dec_ref_count(&a);
; dec_ref_count(&a[0]); // &x
; dec_ref_count(&a[1]); // &y
實做方式
------------
用 Python3 將原始碼轉成 AST以 s-expression 表示。再進行型別推測後,進行閉包轉換,不進行 CPS 變換,利用 llvmlite 生成 LLVM IR。
需要的東西:
* llvmlite
* python3
其他內容
=========
.. toctree::
:maxdepth: 3
:caption: Contents
基本函數介紹
型別