nedoPC.org

Community of electronics hobbyists established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 20 Apr 2021 10:41



Reply to topic  [ 17 posts ]  Go to page 1, 2  Next
Языки-чужеземцы: CT, Trython. 
Author Message
Junior
User avatar

Joined: 16 Nov 2020 11:04
Posts: 6
Reply with quote
Идея: создать строго типизированый C-like язык программирования CT, оперирующий типами данных и операциями из троичного компьютера. По началу, сам язык будет работать на двоичном компьютере, однако программы написанные на нем в будут готовы к мгновенному экспорту на троичные компьютеры. По сути это будет копия языка C.

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

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

Code:
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 14:32, edited 4 times in total.



18 Nov 2020 06:31
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19623
Location: Silicon Valley
Reply with quote
Тут будет путаница, например signed char PONNOP будет означать 243-27-9+1=208, далее преобразуем это в unsigned char (вроде казалось бы положительное число должно без проблем перевести тоже значение беззнакового типа), где те же триты уже интерпретируются как 0,1,2:
Code:
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...

_________________
:eugeek: https://twitter.com/Shaos1973


18 Nov 2020 18:33
Profile WWW
Junior
User avatar

Joined: 16 Nov 2020 11:04
Posts: 6
Reply with quote
Shaos wrote:
Тут будет путаница, например signed char PONNOP будет означать 243-27-9+1=208, далее преобразуем это в unsigned char (вроде казалось бы положительное число должно без проблем перевести тоже значение беззнакового типа), где те же триты уже интерпретируются как 0,1,2:
Code:
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


19 Nov 2020 09:10
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19623
Location: Silicon Valley
Reply with quote
Ну тогда не надо пользоваться сишными типами - назвать это [signed] tryte и unsigned tryte раз уж на то пошло...

_________________
:eugeek: https://twitter.com/Shaos1973


19 Nov 2020 11:06
Profile WWW
Doomed
User avatar

Joined: 27 Jul 2018 13:07
Posts: 513
Reply with quote
dashedman wrote:
Пример:

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

Проверим на подлиность...
0 + 2*3^4 + 3^3 + 2*3^2 + 0 + 1 = 162+27+18+1 = 208


Выполняется вычитание с учетом переносов?


19 Nov 2020 11:11
Profile
Junior
User avatar

Joined: 16 Nov 2020 11:04
Posts: 6
Reply with quote
TernarySystem wrote:
Выполняется вычитание с учетом переносов?


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

После надо будет подумать над вычитанием в симетрической. Оно будет иным. Ведь ooo - ooo = ooo
Если на все это смотреть через призму ассиметрии получается что 111-111 =000 => NNN . Не очень красивая картина. Будем в дальнейшем опиратся на то как происходит арифметика в процессоре


19 Nov 2020 11:22
Profile
Doomed
User avatar

Joined: 27 Jul 2018 13:07
Posts: 513
Reply with quote
dashedman wrote:
Если на все это смотреть через призму ассиметрии получается что 111-111 =000 => NNN . Не очень красивая картина. Будем в дальнейшем опиратся на то как происходит арифметика в процессоре



Согласен, нельзя смотреть только через призму ассиметрии. Но при этом Вы все равно оперировать будете только в одной системе. Или как?


19 Nov 2020 11:34
Profile
Junior
User avatar

Joined: 16 Nov 2020 11:04
Posts: 6
Reply with quote
TernarySystem wrote:
Согласен, нельзя смотреть только через призму ассиметрии. Но при этом Вы все равно оперировать будете только в одной системе. Или как?


Посмотрим как процессор будет складывать, какие у него будут команды. Если будут команды для прямого ассиметричного сложения, оставлю так. Если сложения не будет, и комбинация других команд для имитации сложения будет слишком сложна, скорее всего откажусь от беззнаковых чисел, как от рудимента.

Местные умельцы мастерят копии на базе x86, в котором есть команды на все случаи жизни. Я бы отдал предпочтение копии ARM, где есть только необходимый минимум команд.


19 Nov 2020 11:53
Profile
Doomed
User avatar

Joined: 27 Jul 2018 13:07
Posts: 513
Reply with quote
dashedman wrote:
Местные умельцы мастерят копии на базе x86, в котором есть команды на все случаи жизни. Я бы отдал предпочтение копии ARM, где есть только необходимый минимум команд.

Значит Ваш язык это будет эмуляция на двоичном движке. Я правильно Вас понял?


19 Nov 2020 12:18
Profile
Junior
User avatar

Joined: 16 Nov 2020 11:04
Posts: 6
Reply with quote
TernarySystem wrote:
Значит Ваш язык это будет эмуляция на двоичном движке. Я правильно Вас понял?


Он разрабатывается таким образом чтоб работать на сейчашних двоичных компьютерах. Но синтаксис и механизмы, рассчитываются такими, чтоб можно было мгновенно начать им пользоваться на троичном компьютере. При этом на двоичном у него будут неоптимальные просадки по скорости и памяти, на троичном оптимально. Программы написанные на этом языке, будут работать и на двоичных и на троичных компьютерах.


19 Nov 2020 13:23
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19623
Location: Silicon Valley
Reply with quote
dashedman wrote:
Местные умельцы мастерят копии на базе x86, в котором есть команды на все случаи жизни. Я бы отдал предпочтение копии ARM, где есть только необходимый минимум команд.

В современных армах тоже есть команды на все случаи жизни - оно уже давно не риск :mrgreen:

_________________
:eugeek: https://twitter.com/Shaos1973


19 Nov 2020 23:54
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
В современных армах тоже есть команды на все случаи жизни - оно уже давно не риск :mrgreen:

Во как! Ну надо же... а я только недавно читал, что все х86 современные - галимый риск! :wink:

_________________
iLavr


20 Nov 2020 08:33
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19623
Location: Silicon Valley
Reply with quote
Lavr wrote:
Shaos wrote:
В современных армах тоже есть команды на все случаи жизни - оно уже давно не риск :mrgreen:

Во как! Ну надо же... а я только недавно читал, что все х86 современные - галимый риск! :wink:

они фсё врут

_________________
:eugeek: https://twitter.com/Shaos1973


21 Nov 2020 00:21
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 09:08
Posts: 7777
Location: Россия
Reply with quote
Shaos wrote:
Lavr wrote:
Shaos wrote:
В современных армах тоже есть команды на все случаи жизни - оно уже давно не риск :mrgreen:
Во как! Ну надо же... а я только недавно читал, что все х86 современные - галимый риск! :wink:
они фсё врут

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

_________________
iLavr


21 Nov 2020 04:32
Profile
Admin
User avatar

Joined: 09 Jan 2003 00:22
Posts: 19623
Location: Silicon Valley
Reply with quote
Lavr wrote:
Ага... прям щязз... :lol:
Quote:
Наиболее широко используемые в настольных компьютерах процессоры архитектуры x86 ранее являлись CISC-процессорами, однако новые процессоры, начиная с Intel Pentium Pro (1995 г.), являются CISC-процессорами с RISC-ядром. Они непосредственно перед исполнением преобразуют CISC-инструкции x86-процессоров в более простой набор внутренних инструкций RISC.
После того, как процессоры архитектуры x86 были переведены на суперскалярную RISC-архитектуру, можно сказать, что большинство существующих ныне процессоров основано на архитектуре RISC.
Это цитата из какого-то безграмотного популизма конца 90х :)

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

_________________
:eugeek: https://twitter.com/Shaos1973


21 Nov 2020 15:57
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 17 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 5 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron

Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.