Языки-чужеземцы: CT, Trython.

Уравновешенная троичная система счисления - форум переехал с http://ternary.info

Moderator: haqreu

User avatar
dashedman
Junior
Posts: 6
Joined: 16 Nov 2020 10:04

Языки-чужеземцы: CT, Trython.

Post by dashedman »

Идея: создать строго типизированый C-like язык программирования CT, оперирующий типами данных и операциями из троичного компьютера. По началу, сам язык будет работать на двоичном компьютере, однако программы написанные на нем в будут готовы к мгновенному экспорту на троичные компьютеры. По сути это будет копия языка C.

Поверх него также можно построить python-like язык - Trython, с динамической типизацией, ускоряющий разработку программ.

Типы используемые:
Определим, трайт как 6 трит.
Важная пометка: в таком языке знаковые и беззнаковые(assymetric) типы данных будут представляться в разных системах. Для знаковой это полюбившаяся на этом форуме {N, O, P}, для беззнакового это классическая ассиметрия {0, 1, 2}.

Code: Select all

Sizes:
 - signed char - 1 tryte - [-364, 364].
 - assymetric char - 1 tryte - [0, 728].

 - signed short - 2 tryte - [-265720, 265720].
 - assymetric short - 2 tryte - [0, 531440].

 - signed int - 4 tryte - [-141214768240, 141214768240].
 - assymetric int - 4 tryte - [0, 282429536480].

 - float - 4 tryte (а вот о способе реализации числа с плавающей точкой следует договариваться отдельно).

 - bool - 1 tryte - [false, unknown, true]

Литеральные константы:
"a", "A" - для ассиметрического типа
"f" - число с плавающей точкой.
Пометка: я не стал включать long тип, так как в двоичной реализации, его нечем покрывать. Впрочем для начала и этого хватит.

Операторы:
  1. Унарные операторы:
    1. "+" - Унарный плюс;
    2. "-" - Унарный минус;
    3. "++" - Постфиксный инкремент(думаю будет неплохо отказаться от префиксного);
    4. "--" - Постфиксный декремент(думаю будет неплохо отказаться от префиксного);
    5. "&" - Взятие адреса;
    6. "*" - Разыменовывание указателя;
    7. "sizeof" - Размер объекта;
    8. "~" - Поразрядное Отрицание Лукашевича (~t := 2-t| t={0,1,2});
    9. "`" - Порязрядное Отрицание Поста (`t := (t+1)mod 3 | t={0,1,2});
    10. "!" - Логическое отрицание(Лукашевича);
  2. Бинарные операторы:
    1. "=" - Присвоение;
    2. "+" - Сложение;
    3. "-" - Вычитание;
    4. "*" - Умножение;
    5. "**" - Можно добавить в возведение в степень, под вопросом;
    6. "/" - Деление;
    7. "%" - Остаток от деления;
    8. "&" - Потритовый минимум;
    9. "|" - Потритовый максимум;
    10. "^" - Потритовый XOR (тут надо будет еще подумать);
      Можно еще какую-нибудь потритовую операцию добавить.
    11. "&:" - Побитовый минимум;
    12. "|:" - Побитовый максимум;
    13. "^:" - Побитовый XOR;
      Вообще, все эти побитовые операции можно убрать. Сдивиги оставить.
    14. "<<" - Побитовый сдвиг влево.
    15. "<<" - Побитовый сдвиг вправо.
    16. "<<<" - Потритовый сдвиг влево.
    17. ">>>" - Потритовый сдвиг вправо.
      Имитацию этих штук в системе чужеземце , кстати, будем реализовывать с помощью того алгоритма быстрого деления. Он может быть релизован при делении на base+1 и base-1, что замечательно подходит.
    18. "&&" - Логический минимум;
    19. "||" - Логический максимум;
      Кстати тут надо подумать, а не будет ли лучше сделать так чтоб, при появлении unknown, любое выражение превращалось в unknown.
    20. ">" - Больше;
    21. "<" - Меньше;
    22. ">=" - Больше или равно;
    23. "<=" - Меньше или равно;
    24. "==" - Равно;
    25. "!=" - Неравно;
  3. Тернарные операторы - отсутствуют.
  4. Кваднарные(какие? - у которых четыре операнда, сам придумал) операторы:
    1. "[условие] ? [true выражение] : [false выражение] : [unknown выражение]" - (тут еще можно подумать какой будет 3й символ)
...потом дополню еще, про операторы и выражения и конструкции и т.д.
Last edited by dashedman on 19 Nov 2020 13:32, edited 4 times in total.
User avatar
Shaos
Admin
Posts: 24006
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Языки-чужеземцы: CT, Trython.

Post by Shaos »

Тут будет путаница, например signed char PONNOP будет означать 243-27-9+1=208, далее преобразуем это в unsigned char (вроде казалось бы положительное число должно без проблем перевести тоже значение беззнакового типа), где те же триты уже интерпретируются как 0,1,2:

Code: Select all

signed char a = 208;
unsigned char b = (unsigned char)a;
printf("%i=%u\n",a,b);
что напечатается? 208=208? неа :)
PONNOP проинтерпретируется как 210012, что уже есть 2*243+81+3+2*1=572
т.е. эта программа напечатает 208=572
при таком присвоении ни одно значение signed не совпадёт с unsigned...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
dashedman
Junior
Posts: 6
Joined: 16 Nov 2020 10:04

Re: Языки-чужеземцы: CT, Trython.

Post by dashedman »

Shaos wrote:Тут будет путаница, например signed char PONNOP будет означать 243-27-9+1=208, далее преобразуем это в unsigned char (вроде казалось бы положительное число должно без проблем перевести тоже значение беззнакового типа), где те же триты уже интерпретируются как 0,1,2:

Code: Select all

signed char a = 208;
unsigned char b = (unsigned char)a;
printf("%i=%u\n",a,b);
что напечатается? 208=208? неа :)
PONNOP проинтерпретируется как 210012, что уже есть 2*243+81+3+2*1=572
т.е. эта программа напечатает 208=572
при таком присвоении ни одно значение signed не совпадёт с unsigned...
Нет. В этом языке ситуация между знаковым и беззнаковым числами будет разительна. Примерно как между целочисленными и числами с плавающей точкой. Ведь когда мы приводим флоат к инту, его пересчитывает, умножает мантису на экспоненту и записывает целую часть, чтоб использовать в вычислениях. Также и с беззнаковым к знаковому, будет происходить перевод.

Для перевода достаточно прибавить/отнять [1]*w - такое число(все разряды заполнены единицами). Пример:

Симметрический переведем в ассиметрию...
210012 - 111111 = 021201

Проверим на подлиность...
0 + 2*3^4 + 3^3 + 2*3^2 + 0 + 1 = 162+27+18+1 = 208
User avatar
Shaos
Admin
Posts: 24006
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Языки-чужеземцы: CT, Trython.

Post by Shaos »

Ну тогда не надо пользоваться сишными типами - назвать это [signed] tryte и unsigned tryte раз уж на то пошло...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
TernarySystem
Doomed
Posts: 625
Joined: 27 Jul 2018 12:07

Re: Языки-чужеземцы: CT, Trython.

Post by TernarySystem »

dashedman wrote:Пример:

Симметрический переведем в ассиметрию...
210012 - 111111 = 021201

Проверим на подлиность...
0 + 2*3^4 + 3^3 + 2*3^2 + 0 + 1 = 162+27+18+1 = 208
Выполняется вычитание с учетом переносов?
User avatar
dashedman
Junior
Posts: 6
Joined: 16 Nov 2020 10:04

Re: Языки-чужеземцы: CT, Trython.

Post by dashedman »

TernarySystem wrote: Выполняется вычитание с учетом переносов?
Обязательно. Пока нет четкого стандарта использовал правила вычитания из ассиметрической системы.

После надо будет подумать над вычитанием в симетрической. Оно будет иным. Ведь ooo - ooo = ooo
Если на все это смотреть через призму ассиметрии получается что 111-111 =000 => NNN . Не очень красивая картина. Будем в дальнейшем опиратся на то как происходит арифметика в процессоре
User avatar
TernarySystem
Doomed
Posts: 625
Joined: 27 Jul 2018 12:07

Re: Языки-чужеземцы: CT, Trython.

Post by TernarySystem »

dashedman wrote:Если на все это смотреть через призму ассиметрии получается что 111-111 =000 => NNN . Не очень красивая картина. Будем в дальнейшем опиратся на то как происходит арифметика в процессоре

Согласен, нельзя смотреть только через призму ассиметрии. Но при этом Вы все равно оперировать будете только в одной системе. Или как?
User avatar
dashedman
Junior
Posts: 6
Joined: 16 Nov 2020 10:04

Re: Языки-чужеземцы: CT, Trython.

Post by dashedman »

TernarySystem wrote: Согласен, нельзя смотреть только через призму ассиметрии. Но при этом Вы все равно оперировать будете только в одной системе. Или как?
Посмотрим как процессор будет складывать, какие у него будут команды. Если будут команды для прямого ассиметричного сложения, оставлю так. Если сложения не будет, и комбинация других команд для имитации сложения будет слишком сложна, скорее всего откажусь от беззнаковых чисел, как от рудимента.

Местные умельцы мастерят копии на базе x86, в котором есть команды на все случаи жизни. Я бы отдал предпочтение копии ARM, где есть только необходимый минимум команд.
User avatar
TernarySystem
Doomed
Posts: 625
Joined: 27 Jul 2018 12:07

Re: Языки-чужеземцы: CT, Trython.

Post by TernarySystem »

dashedman wrote:Местные умельцы мастерят копии на базе x86, в котором есть команды на все случаи жизни. Я бы отдал предпочтение копии ARM, где есть только необходимый минимум команд.
Значит Ваш язык это будет эмуляция на двоичном движке. Я правильно Вас понял?
User avatar
dashedman
Junior
Posts: 6
Joined: 16 Nov 2020 10:04

Re: Языки-чужеземцы: CT, Trython.

Post by dashedman »

TernarySystem wrote: Значит Ваш язык это будет эмуляция на двоичном движке. Я правильно Вас понял?
Он разрабатывается таким образом чтоб работать на сейчашних двоичных компьютерах. Но синтаксис и механизмы, рассчитываются такими, чтоб можно было мгновенно начать им пользоваться на троичном компьютере. При этом на двоичном у него будут неоптимальные просадки по скорости и памяти, на троичном оптимально. Программы написанные на этом языке, будут работать и на двоичных и на троичных компьютерах.
User avatar
Shaos
Admin
Posts: 24006
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Языки-чужеземцы: CT, Trython.

Post by Shaos »

dashedman wrote:Местные умельцы мастерят копии на базе x86, в котором есть команды на все случаи жизни. Я бы отдал предпочтение копии ARM, где есть только необходимый минимум команд.
В современных армах тоже есть команды на все случаи жизни - оно уже давно не риск :mrgreen:
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Языки-чужеземцы: CT, Trython.

Post by Lavr »

Shaos wrote:В современных армах тоже есть команды на все случаи жизни - оно уже давно не риск :mrgreen:
Во как! Ну надо же... а я только недавно читал, что все х86 современные - галимый риск! :wink:
iLavr
User avatar
Shaos
Admin
Posts: 24006
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Языки-чужеземцы: CT, Trython.

Post by Shaos »

Lavr wrote:
Shaos wrote:В современных армах тоже есть команды на все случаи жизни - оно уже давно не риск :mrgreen:
Во как! Ну надо же... а я только недавно читал, что все х86 современные - галимый риск! :wink:
они фсё врут
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Lavr
Supreme God
Posts: 16680
Joined: 21 Oct 2009 08:08
Location: Россия

Re: Языки-чужеземцы: CT, Trython.

Post by Lavr »

Shaos wrote:
Lavr wrote:
Shaos wrote:В современных армах тоже есть команды на все случаи жизни - оно уже давно не риск :mrgreen:
Во как! Ну надо же... а я только недавно читал, что все х86 современные - галимый риск! :wink:
они фсё врут
Ага... прям щязз... :lol:
Наиболее широко используемые в настольных компьютерах процессоры архитектуры x86 ранее являлись CISC-процессорами, однако новые процессоры, начиная с Intel Pentium Pro (1995 г.), являются CISC-процессорами с RISC-ядром. Они непосредственно перед исполнением преобразуют CISC-инструкции x86-процессоров в более простой набор внутренних инструкций RISC.
После того, как процессоры архитектуры x86 были переведены на суперскалярную RISC-архитектуру, можно сказать, что большинство существующих ныне процессоров основано на архитектуре RISC.
iLavr
User avatar
Shaos
Admin
Posts: 24006
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Языки-чужеземцы: CT, Trython.

Post by Shaos »

Lavr wrote:Ага... прям щязз... :lol:
Наиболее широко используемые в настольных компьютерах процессоры архитектуры x86 ранее являлись CISC-процессорами, однако новые процессоры, начиная с Intel Pentium Pro (1995 г.), являются CISC-процессорами с RISC-ядром. Они непосредственно перед исполнением преобразуют CISC-инструкции x86-процессоров в более простой набор внутренних инструкций RISC.
После того, как процессоры архитектуры x86 были переведены на суперскалярную RISC-архитектуру, можно сказать, что большинство существующих ныне процессоров основано на архитектуре RISC.
Это цитата из какого-то безграмотного популизма конца 90х :)

В настоящее время и интел, и амд (и даже арм) имеют несколько линеек процессоров, каждая из которых имеет больше микрокода (работает медленнее и стоит дешевле) или меньше микрокода (имеет больше специфического железа, работает быстрее и соответственно стоит дороже), однако внутри как бы не совсем риск с каким то примитивным набором инструкций - там несколько более сложная молотилка входящего кода с переименованием регистров, переупорядочиванием инструкций и т.д.
Я тут за главного - если что шлите мыло на me собака shaos точка net