представление числа в языке программирования

Предыдущая тема Следующая тема Перейти вниз

представление числа в языке программирования

Сообщение  Eric-S в Пт Авг 28, 2009 9:24 pm

Привет!

Я эту тему уже давно мусолю.
Всё не могу найти компромиса.

В каком формате представлять число в языке программирования?


В бэйсике следующий формат

123 целое число
0.123 число с плавающей точкой
0.123e12 число с основой 12
&b0101110 двоичное число
&o7501 восьмеричное число
&d195 десятичное число
&h1af0 шестнадцатиричное число



Но тут есть проблема. Вообще-то символ амперсанта "&" (and) обозначает логическое "и" или взятие адреса (в бэйсике заменённого символом "@").

Кстати, Electrik возмущался по поводу префиксного обозначения числа. Будь добр изложи свои возражения!


Ладно, посмотрим на другие языки. Возьмём C/C++

123 целое число
0.123 число с плавающей точкой
0.123e12 число с основой 12
07501 восьмеричное число
0x1af0 шестнадцатиричное число

Ха-эм... Скудно как-то! Для столь навороченного языка и... Или я не вкурил?
А ещё просто не удобно человеку.

Вот ассемблер.

123 целое число
0101110b двоичное число
7501o восьмеричное число
195d десятичное число
1af0h шестнадцатиричное число

Не знаю, в ассемблере ведь нельзя десятичное число указывать?


Всё нормально. Суфиксный вариант кажеться очень удобным... Пока я не сел писать лексический анализатор и на числах тормознул.

Если взять за основу формат бэйсика, или C/C++ то всё просто.

А вот с ассемблерным вариантом накладочки, мать их! (или отца...)

Допустим вот шестнадцатеричное число:
abc1h
А может быть это не число, а функция?

Короче подумав, я решил, что спецальный префикс для числа нужен.
Например символ "#"

123 целое число
0.123 число с плавающей точкой
0.123e12 число с основой 12
#b0101110 двоичное число
#o7501 восьмеричное число
#d195 десятичное число
#h1af0 шестнадцатиричное число

Есть ещё вариант, что символ "#" будет в начале числа, а суфикс "b", "d", "o" или "h" в конце.

Но вот спрашиваеться, разве вариант с обозначением в начале не удобнее?
Лексический анализатор будет сразу знать, какое число читает, а не гадать до последнего. Или вообще отдав это на милость синтаксическому анализатору.
Да и человеку наверное будет так удобнее.
Если ничего не измениться, остановлюсь на последнем варианте.

пожалуйста программеры выскажите свои мысли!

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

нужные типы и форматы

Сообщение  Eric-S в Пт Авг 28, 2009 9:39 pm

И ещё... Как по вашему, какие системы счисления и стандартные форматы нужны в языке?

null нулевое

bool булевое

fuzzy нечёткой логики

fload с плавающей точкой

integer целое с основанием 0, 8, 10 или 16

complex комплексное

day день недели с основанием 7

month день месяца с основанием 12

second секунда или минута, а так же милисекунда с основанием 60
(наверное лучше три разных типа?)

clock часы с основанием 24
(их кажеться правельнее как-то на h обозвать или сделать ещё отдельный тип?)

datetime это формат для unix timestamp

time время
date дата
(ха... А ещё бынадо дату вместе со временем udata.)

money денежная еденица с указанием целой, и двух дробных частей, а так же наименования валюты.

Я ничего не забыл?
И вообще, может стоит большую часть вынести в пользовательские типы?

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: представление числа в языке программирования

Сообщение  DiG. GeRR в Сб Авг 29, 2009 8:35 pm

Неужели все же взялся свой язык создавать? Блин... Короче, я вот тоже сейчас пишу компилер (project V-Lite) - исключительно в образовательных целях. Никаких сверхзадач (вроде новый супер-пупер-крутой-и-самый-навороченный-язык-которым-будет-пользоваться-каждый), просто небольшой простенький синтаксис, никаких объектов. Сплошной минимализм, короче. Уже есть лексический сканер, заканчиваю парсер и подумываю о генераторе кода Wink Сделаю альфу - запощу на форуме. Wink

Так вот, когда я только проектировал язык, проблема такая тоже вставала. Вот к какому решению я пришел - сразу оговорюсь, что это только лично мое мнение, вполне возможно, что ошибочное.

Форму записи чисел безжалостно содрал в Аде. Сначала идет основание системы счисления (допустимые значения от двух до шестнадцати, можно, конечно, больше, но зачем?), затем символ #, потом само число, в соответсвующей системе. Например:
10#84, 16#BADCODE, 2#01000010100
Допускается запись:
#2020 - основание 16
либо без явного указания системы:
84854 - десятичная система.
Думал еще сделать ## для двоичной, но передумал.

В пользу этого - большая свобода для программера, да и проще транслировать числа - легче ведь написать один транслятор с переменной системой, чем четыре отдельных - для шест. чисел, двоичных и т.д.? Потом - префиксная запись, имхо, гораздо удобнее - не нужно просматривать все число, чтоб узнать, как его понимать. Кроме того, у постфиксного варианта есть минус - ведь символы указания системы являются, кроме того, еще и разделителями - то есть сканер не моджет точно определить начало числа, и в шест. системе для асма приходится писать 0BADCODEH вместо логичного BADCODEH. Ну и потом - что нагляднее - BADCODEH или #BADCODE?

Не знаю, в ассемблере ведь нельзя десятичное число указывать?
Почему же, без явного указания суффикса - десятичное. Как и во всех нормальных языках.


А вот с типами ты явно перегнул. У моего V-Lite голова бы закружилась от пестроты. У него все предельно просто: есть только три встроенных типа: абстрактный VOID (отсутствие типа), почти не менее абстрактный BIT (поскольку практически всегда расширяется до байта) и единственный реальный в этом царстве призраков BYTE. Все остальное - bool (который и есть bit, но по сути byte) и даже float (являющийся в общем случае последовательностью бит с определенным значением в зависимости от положения), не говоря уже об экзотике вроде money (я о таком даже не думал...) может и должно конструироваться с помощью составных типов. Если уж будет такая в них нужда, лучше я перепишу заголовочный файл, чем буду перекомпилировать компилер. И причем каждый может сделать это.

DiG. GeRR

Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 25
Откуда : Рудный, Казахстан

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: представление числа в языке программирования

Сообщение  DiG. GeRR в Сб Авг 29, 2009 9:13 pm

fuzzy logic... Боже... сколько вещей прошли мимо меня... (серьезно!) Sad Я тут "открыл для себя" Haskell и вообще функциональное программирование... Может, мы все не там? И императивный кодинг - уже прошедший век? Sad

DiG. GeRR

Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 25
Откуда : Рудный, Казахстан

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: представление числа в языке программирования

Сообщение  Eric-S в Сб Авг 29, 2009 10:50 pm

Ну пока я на что-то серьёзное не замахиваюсь. Хотя расчёт на будущее есть конечно же.
Просто присматриваюсь, что да как.

Язык... Ну дык если писать, так чтобы был уж цевильным. А то огрызки и не интересны.

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

В прочем кто мешает реализовывать часть функционала?
Например в рефале очень простенький, но не менее эффективный механизм проверок.

С префиксами чисел я согласен. Так оно действительно проще для лексического анализатора.
А вот аду я не смотрел, но то что ты привёл, действительно прикольно. Сразу задавать систему счисления, хе-хе.
А какой там потолок? 16 или больше?


Теперь о моих типах.
Я привёл типы только для математики.
Возможно правда нужно избавляться от лишних сущностей.
Но тут есть одна заморочка. Посмотри, как было с C/C++. Они ведь реализовали только базовые типы отдав прочее на усмотрение программеров.

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

Ну и с прочими типами похожая ситуация.

У меня для языка есть ещё несколько задумок. Не знаю, хватит ли сил, их все реализовать.

Я хочу сделать язык компилируемый и интерпретируемый.
Т.е. чтобы можно было выполнить код без компиляции. Или сделать компактный файлик, который можно будет запустить без интерпретатора.
Часть функций, в компилируемом файле, всё равно будет нескомпилирована и выполняться во время исполнения.
Чтобы программа могла порождать новые функции, в процессе выполнения.

Там с этим ещё несколько фичь.
Например при компиляции будет запускаться интерпретатор для вычисления некоторых функций. И если функция может быть вычислена, то она уже не будет компилироваться, а будет взят только её результат.

Или фича из той же оперы.
Выражения, например регулярные или запросы к базе, ведь интерпретируються уже во время выполнения, но до этого их нельзя проверить.
Так вот, думаю, чтобы они тоже компилировались.

Это вообще занятный механизм.
И компилятор не нужно будет перекомпилировать. Добавляя лишь статические библиотеки, в которых и будет реализован нужный функционал.

Короче мясо на мясе.

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


С классами и типами.

Классы будут динамические.
Т.е. можно будет на лету добавлять или удалять методы и свойства.

При этом типы будут статические.
В прочем их можно будет заюзать так же как классы.
Хотя только как статические.

Короче динамические классы, это между тем как в JavaScript и objective-C.
А типы, это как классы в C++.

Дальше, у переменных должен быть префикс "$".
Сколько я не ковырял, кажеться наиболее удачным решением.
Сразу видно, что переменная. А ещё можно разделить пространство имён переменных и функций.

Шаблоны. Точнее переменные у шаблонов будут с префиксом "%". Долго думал, не взять ли символ "@". Но "%" для шаблонов более привычен.

А тогда префикс "@" остаёться для сообщений, которые можно будет посылать объекту.
Тоже занятный момент.
Объекты хочу делать автономные. Оно так гибче получаеться.

Хотя для статических типов, всё же статические объекты, иначе смысла не будет. Да и код будет более оптимизирован.

Вот такая каша. Я надеюсь, что идея жизнеспособна.

У меня есть лексический и синтаксический анализаторы. Хотя их сейчас ещё доделываю и переделываю.

Не знаю, в машинный код как перегонять.
Можно транслировать в C или ассемблер.
Или прямо гнать в машинный код.
До этого ещё не добрался. Делал несколько заходов, но с обломами.
Ладно, всё ещё впереди.
Буду наверное крошить на фрагменты.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: представление числа в языке программирования

Сообщение  Eric-S в Вс Авг 30, 2009 5:51 am

DiG. GeRR пишет:Не знаю, в ассемблере ведь нельзя десятичное число указывать?
Почему же, без явного указания суффикса - десятичное. Как и во всех нормальных языках.

Ндя-с. Я хотел спросить, на асме можно ли писать десятичные дроби или числа с основанием десятой степени?
А может он кушает натуральные дроби?
Вроде бы нет.

Обычные системы счисления, это да, я знаю - кушает.

И кстати debug.exe по умолчанию шестнадцатеричные цифорки кушает. А другие кажись вообще нет.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: представление числа в языке программирования

Сообщение  DiG. GeRR в Вс Авг 30, 2009 1:33 pm

masm -

fl1 dq 10.0
fl2 dq 38.2e10


debug.exe = debug.com?


Часть функций, в компилируемом файле, всё равно будет нескомпилирована и выполняться во время исполнения.
Теперь моя очередь - ндя-с... Wink

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

[qoute]Я надеюсь, что идея жизнеспособна.[/quote]
Еще и не такие монстры живут! Но боюсь, что одному человеку этого не потянуть. Нужна команда, по крайней мере человек пять, и даже тогда на это потребуется по меньшей мере полгода.

DiG. GeRR

Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 25
Откуда : Рудный, Казахстан

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: представление числа в языке программирования

Сообщение  Eric-S в Вс Авг 30, 2009 4:07 pm

Угу может и debug.com
Я его уже не помню. Набираю просто debug.

А препроцессор это зло.
Я просто не представляю, что с ним нужно сделать, чтобы исправить все его недостатки.
И как его ещё развивать.
Имхо, штатными средствами языка можно добиться большего эффекта с меньшими опастными местами.

А компиляция с интерпретацией в одном флаконе это очень интересная фича. Кстати очень широко используеться в функциональных языках.
Но для этой фичи можно найти ещё множество областей применения. Хотя это значительно усложнит разработку компилера.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: представление числа в языке программирования

Сообщение  DiG. GeRR в Вс Авг 30, 2009 8:11 pm

Я его уже не помню. Набираю просто debug.

А я думал, под виндой асм-код все уже давно отлаживают олькой... ну если только dos-mz или com...

DiG. GeRR

Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 25
Откуда : Рудный, Казахстан

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: представление числа в языке программирования

Сообщение  Eric-S в Вс Авг 30, 2009 8:20 pm

Да я особо с этим и не заморачиваюсь.

А дебаг есть, всегда под рукой.
Буду я ещё лишний совфт ставить?

Кстати им можно и win32 гgui кодить.
Его сила в простоте и прямолинейности.

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: представление числа в языке программирования

Сообщение  DiG. GeRR в Вс Авг 30, 2009 8:27 pm

странное понятие о простоте и силе... Имхо олька намного удобнее, нагляднее и проще. А сайс (даже сисер) вообще космический корабль. Ну ладно, у каждого свои вкусы.

DiG. GeRR

Сообщения : 101
Дата регистрации : 2009-01-30
Возраст : 25
Откуда : Рудный, Казахстан

Посмотреть профиль

Вернуться к началу Перейти вниз

Re: представление числа в языке программирования

Сообщение  Eric-S в Вс Авг 30, 2009 9:58 pm

Ну что поделать. Люди ведь разные.

А debug мне понятен. А значит и прост.
С ним можно многое сделать.

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

Eric-S

Сообщения : 738
Дата регистрации : 2008-08-06
Возраст : 34
Откуда : Россия, Санкт-Петербург

Посмотреть профиль http://eric50.narod.ru

Вернуться к началу Перейти вниз

Re: представление числа в языке программирования

Сообщение  Спонсируемый контент


Спонсируемый контент


Вернуться к началу Перейти вниз

Предыдущая тема Следующая тема Вернуться к началу


 
Права доступа к этому форуму:
Вы не можете отвечать на сообщения