|
nedoPC.orgElectronics hobbyists community established in 2002 |
|
Языки-чужеземцы: CT, Trython.
Author |
Message |
dashedman
Junior
Joined: 16 Nov 2020 10:04 Posts: 6
|
Идея: создать строго типизированый C-like язык программирования CT, оперирующий типами данных и операциями из троичного компьютера. По началу, сам язык будет работать на двоичном компьютере, однако программы написанные на нем в будут готовы к мгновенному экспорту на троичные компьютеры. По сути это будет копия языка C. Поверх него также можно построить python-like язык - Trython, с динамической типизацией, ускоряющий разработку программ. Типы используемые: Определим, трайт как 6 трит. Важная пометка: в таком языке знаковые и беззнаковые(assymetric) типы данных будут представляться в разных системах. Для знаковой это полюбившаяся на этом форуме {N, O, P}, для беззнакового это классическая ассиметрия {0, 1, 2}. Пометка: я не стал включать long тип, так как в двоичной реализации, его нечем покрывать. Впрочем для начала и этого хватит.Операторы:
- Унарные операторы:
- "+" - Унарный плюс;
- "-" - Унарный минус;
- "++" - Постфиксный инкремент(думаю будет неплохо отказаться от префиксного);
- "--" - Постфиксный декремент(думаю будет неплохо отказаться от префиксного);
- "&" - Взятие адреса;
- "*" - Разыменовывание указателя;
- "sizeof" - Размер объекта;
- "~" - Поразрядное Отрицание Лукашевича (~t := 2-t| t={0,1,2});
- "`" - Порязрядное Отрицание Поста (`t := (t+1)mod 3 | t={0,1,2});
- "!" - Логическое отрицание(Лукашевича);
- Бинарные операторы:
- "=" - Присвоение;
- "+" - Сложение;
- "-" - Вычитание;
- "*" - Умножение;
- "**" - Можно добавить в возведение в степень, под вопросом;
- "/" - Деление;
- "%" - Остаток от деления;
- "&" - Потритовый минимум;
- "|" - Потритовый максимум;
- "^" - Потритовый XOR (тут надо будет еще подумать);
Можно еще какую-нибудь потритовую операцию добавить.
- "&:" - Побитовый минимум;
- "|:" - Побитовый максимум;
- "^:" - Побитовый XOR;
Вообще, все эти побитовые операции можно убрать. Сдивиги оставить.
- "<<" - Побитовый сдвиг влево.
- "<<" - Побитовый сдвиг вправо.
- "<<<" - Потритовый сдвиг влево.
- ">>>" - Потритовый сдвиг вправо.
Имитацию этих штук в системе чужеземце , кстати, будем реализовывать с помощью того алгоритма быстрого деления. Он может быть релизован при делении на base+1 и base-1, что замечательно подходит.
- "&&" - Логический минимум;
- "||" - Логический максимум;
Кстати тут надо подумать, а не будет ли лучше сделать так чтоб, при появлении unknown, любое выражение превращалось в unknown.
- ">" - Больше;
- "<" - Меньше;
- ">=" - Больше или равно;
- "<=" - Меньше или равно;
- "==" - Равно;
- "!=" - Неравно;
- Тернарные операторы - отсутствуют.
- Кваднарные(какие? - у которых четыре операнда, сам придумал) операторы:
- "[условие] ? [true выражение] : [false выражение] : [unknown выражение]" - (тут еще можно подумать какой будет 3й символ)
...потом дополню еще, про операторы и выражения и конструкции и т.д.
Last edited by dashedman on 19 Nov 2020 13:32, edited 4 times in total.
|
18 Nov 2020 05:31 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Тут будет путаница, например signed char PONNOP будет означать 243-27-9+1=208, далее преобразуем это в unsigned char (вроде казалось бы положительное число должно без проблем перевести тоже значение беззнакового типа), где те же триты уже интерпретируются как 0,1,2: что напечатается? 208=208? неа PONNOP проинтерпретируется как 210012, что уже есть 2*243+81+3+2*1=572 т.е. эта программа напечатает 208=572 при таком присвоении ни одно значение signed не совпадёт с unsigned...
|
18 Nov 2020 17:33 |
|
|
dashedman
Junior
Joined: 16 Nov 2020 10:04 Posts: 6
|
Нет. В этом языке ситуация между знаковым и беззнаковым числами будет разительна. Примерно как между целочисленными и числами с плавающей точкой. Ведь когда мы приводим флоат к инту, его пересчитывает, умножает мантису на экспоненту и записывает целую часть, чтоб использовать в вычислениях. Также и с беззнаковым к знаковому, будет происходить перевод. Для перевода достаточно прибавить/отнять [1]*w - такое число(все разряды заполнены единицами). Пример: Симметрический переведем в ассиметрию... 210012 - 111111 = 021201 Проверим на подлиность... 0 + 2*3^4 + 3^3 + 2*3^2 + 0 + 1 = 162+27+18+1 = 208
|
19 Nov 2020 08:10 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Ну тогда не надо пользоваться сишными типами - назвать это [signed] tryte и unsigned tryte раз уж на то пошло...
|
19 Nov 2020 10:06 |
|
|
TernarySystem
Doomed
Joined: 27 Jul 2018 12:07 Posts: 609
|
Выполняется вычитание с учетом переносов?
|
19 Nov 2020 10:11 |
|
|
dashedman
Junior
Joined: 16 Nov 2020 10:04 Posts: 6
|
Обязательно. Пока нет четкого стандарта использовал правила вычитания из ассиметрической системы. После надо будет подумать над вычитанием в симетрической. Оно будет иным. Ведь ooo - ooo = ooo Если на все это смотреть через призму ассиметрии получается что 111-111 =000 => NNN . Не очень красивая картина. Будем в дальнейшем опиратся на то как происходит арифметика в процессоре
|
19 Nov 2020 10:22 |
|
|
TernarySystem
Doomed
Joined: 27 Jul 2018 12:07 Posts: 609
|
Согласен, нельзя смотреть только через призму ассиметрии. Но при этом Вы все равно оперировать будете только в одной системе. Или как?
|
19 Nov 2020 10:34 |
|
|
dashedman
Junior
Joined: 16 Nov 2020 10:04 Posts: 6
|
Посмотрим как процессор будет складывать, какие у него будут команды. Если будут команды для прямого ассиметричного сложения, оставлю так. Если сложения не будет, и комбинация других команд для имитации сложения будет слишком сложна, скорее всего откажусь от беззнаковых чисел, как от рудимента. Местные умельцы мастерят копии на базе x86, в котором есть команды на все случаи жизни. Я бы отдал предпочтение копии ARM, где есть только необходимый минимум команд.
|
19 Nov 2020 10:53 |
|
|
TernarySystem
Doomed
Joined: 27 Jul 2018 12:07 Posts: 609
|
Значит Ваш язык это будет эмуляция на двоичном движке. Я правильно Вас понял?
|
19 Nov 2020 11:18 |
|
|
dashedman
Junior
Joined: 16 Nov 2020 10:04 Posts: 6
|
Он разрабатывается таким образом чтоб работать на сейчашних двоичных компьютерах. Но синтаксис и механизмы, рассчитываются такими, чтоб можно было мгновенно начать им пользоваться на троичном компьютере. При этом на двоичном у него будут неоптимальные просадки по скорости и памяти, на троичном оптимально. Программы написанные на этом языке, будут работать и на двоичных и на троичных компьютерах.
|
19 Nov 2020 12:23 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
В современных армах тоже есть команды на все случаи жизни - оно уже давно не риск
|
19 Nov 2020 22:54 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Во как! Ну надо же... а я только недавно читал, что все х86 современные - галимый риск!
_________________ iLavr
|
20 Nov 2020 07:33 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
|
20 Nov 2020 23:21 |
|
|
Lavr
Supreme God
Joined: 21 Oct 2009 08:08 Posts: 7777 Location: Россия
|
Ага... прям щязз...
_________________ iLavr
|
21 Nov 2020 03:32 |
|
|
Shaos
Admin
Joined: 08 Jan 2003 23:22 Posts: 22730 Location: Silicon Valley
|
Это цитата из какого-то безграмотного популизма конца 90х В настоящее время и интел, и амд (и даже арм) имеют несколько линеек процессоров, каждая из которых имеет больше микрокода (работает медленнее и стоит дешевле) или меньше микрокода (имеет больше специфического железа, работает быстрее и соответственно стоит дороже), однако внутри как бы не совсем риск с каким то примитивным набором инструкций - там несколько более сложная молотилка входящего кода с переименованием регистров, переупорядочиванием инструкций и т.д.
|
21 Nov 2020 14:57 |
|
|
Who is online |
Users browsing this forum: No registered users and 6 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
|
|