Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 19:38

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 114 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8  След.
Автор Сообщение
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Сб ноя 24, 2012 20:04 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
Так ячейка - это уже тип данных. Поскольку есть элемент информации про который неизвестно сколько в нем бит и байт. Зато фиксированы правила его использования. Ячейка - есть тип signed int и тип unsigned int из Си в одном флаконе.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Сб ноя 24, 2012 20:54 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Ethereal писал(а):
Это две сущности, которые полностью эквивалентны тем сущностям которыми оперирует процессор.

Сермяжная правда 8/16-битников. Там да, было две сущности, 8-битный байт и 16-битный адрес :)

Цитата:
А Вы предлагаете вместо увеличения количества операций сделать их перегрузку ? Т.е. чтобы одна и та-же операция могла означать четыре разных вещи в зависимости от контекста ?

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

Цитата:
Так в процессе компиляции столько раз вылезало предупреждение о сравнении знакового с беззнаковым, что я к нему даже привык. Уж если даже создатели де факто стандартного компилятора Си не в состоянии проследить за контекстом, то о чем уже говорить ?

Вот нормальный стандартный код С. Видно, что от знаковости результат не зависит:
Код:
int i, a[10];
for (i=0; i < sizeof a; i++) putchar(i);

Да, gcc -Wextra выдаёт бесполезное предупреждение, что знаковое сравнивают с беззнаковым. О чем тут можно говорить? О мелком баге в gcc.

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

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

Цитата:
С применением сдвигов и масок, которые бесполезно захламляют код и при исполнении будут отъедать время. Я же приводил пример криптоалгоритмов. Их реализации оптимизируют по быстродействию очень жестко. Поэтому в них не может быть не являющихся необходимыми сдвигов и масок. И в результате ... получается либо алгоритм только под малый эндиан, либо только под большой. Почему-то не получается алгоритма "вообще".

И что? Допущение, что целевая архитектура умеет прочитать/записать 8-битный байт, уже делает программу непереносимой. Кроме шуток. Альфа читала только словами, большинство DSP--тоже.

Цитата:
Операция extract byte требует только один аргумент - адрес по которому этот байт лежит. И если ввести прагму "эндиан", то у транслятора будет вся информация, чтобы этот адрес определить. Только забыли эту прагму ввести в традиционные языки. Забыли.

У компилятора и так есть вся информация о порядке байт в слове:
Цитата:
static inline int
big_endian(void)
{
int x = 1;
return !((char *)&x)[0];
}

void
ins2(unsigned *p, char c)
{
if (big_endian())
((char *)p)[2] = c;
else
((char *)p)[1] = c;
}

8)
Код:
ins2:
        movb    %sil, 1(%rdi)
        ret


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Сб ноя 24, 2012 22:29 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Ethereal писал(а):
Так ячейка - это уже тип данных.

однако, это размер, а не тип.
Ethereal писал(а):
signed int и unsigned int

а вот это - именно типы, совпадающие по размеру.

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Вт ноя 27, 2012 00:01 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
WingLion писал(а):
однако, это размер, а не тип.

Размер, который не определен ?


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Вт ноя 27, 2012 00:16 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
dynamic-wind писал(а):
Цитата:
Так в процессе компиляции столько раз вылезало предупреждение о сравнении знакового с беззнаковым, что я к нему даже привык. Уж если даже создатели де факто стандартного компилятора Си не в состоянии проследить за контекстом, то о чем уже говорить ?

Вот нормальный стандартный код С. Видно, что от знаковости результат не зависит:
Код:
int i, a[10];
for (i=0; i < sizeof a; i++) putchar(i);

Да, gcc -Wextra выдаёт бесполезное предупреждение, что знаковое сравнивают с беззнаковым. О чем тут можно говорить? О мелком баге в gcc.

Бесполезное предупреждение ? :shock:
Только что компильнул на gcc 4.2.4. Так этот gcc даже и предупреждения не выдал.
Код:
#include <stdio.h>
int main(void)
{
     signed int i = -1 ;
   unsigned int j =  1 ;
   
   if (i > j)
      printf("-1 > 1\n") ;
   else
      printf("-1 <= 1\n") ;
   return 0 ;
}
Для него просто -1 > 1 и все тут ! :))
dynamic-wind писал(а):
Это плохо, но зато формулы будут читаемыми.
Смотри пример выше.
Формула i > j читается легко и кажется простой и понятной, не так ли ?
Зато означает в данном случае -1 > 1.
И почему именно так, а не иначе - совсем не очевидно.
Я и говорю - перегрузка операторов создает иллюзию понятности.

Зато если бы было две операции сравнения - знаковая > и беззнаковая u> ,
то i > j читалось бы "если i больше j знаково" и никакой ошибки или
двусмысленности не было бы.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Вт ноя 27, 2012 03:23 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
dynamic-wind писал(а):
И что? Допущение, что целевая архитектура умеет прочитать/записать 8-битный байт, уже делает программу непереносимой. Кроме шуток. Альфа читала только словами
На таких архитектурах как Альфа прочитать/записать байт означало прочитать слово, модифицировать в нем байт, записать слово обратно. Программист высокого уровня мог даже и не догадываться об этом. На Альфе для этого были предусмотрены команды экстракции байта из слова EXTBx и вставки его обратно INSBx и выглядело это примерно (я так ассемблер Альфы толком и не освоил, хотя доступ имел) так :
LDQ_U R1,смещение(регистр_с_адресом) ; выровняли адрес байта и хапнули из ОЗУ сразу 4-слово
LDA R3,смещение(регистр_с_адресом) ; тот-же адрес, три его мл.бита есть номер искомого байта в 4-слове
EXTBL R1,R3,R5 ; извлекли искомый байт в R5, сдвинув его в младшие биты и занулив остальное
; SEXTB R31,R5,R5 ; если байт знаковый, то распространили его знак
; что-то с байтом в R5 сделали (модифицировали его)
INSBL R5,R3,R5 ; сдвинули байт на свою изначальную позицию, занулив остальное
MSKBL R1,R3,R1 ; занулили под него ту-же позицию в старом 4-х слове
OR R1,R5,R1 ; воткнули модифицированный байт на зануленное место в старом 4-слове, не трогая остального
STQ_U R1,смещение(регистр_с_адресом) ; засунули старое 4-слово вместе с новым байтом обратно в ОЗУ


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Вт ноя 27, 2012 08:38 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 13:19
Сообщения: 3565
Откуда: St.Petersburg
Благодарил (а): 4 раз.
Поблагодарили: 72 раз.
Ethereal писал(а):
Размер, который не определен ?

для сферического коня - да - неопределен.
когда же речь о конкретной форт-системе, под которую пишется программа, эта неопределенность - мнимая

_________________
С уважением, WingLion
Forth-CPU . RuF09WE
Мой Форт
Отсутствие бана это не заслуга юзера, а недоработка модератора (с)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Вт ноя 27, 2012 11:41 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Ethereal писал(а):
Бесполезное предупреждение ? :shock:

Посмотрите ещё раз на тот цикл. Это шаблонный код, такой в 90% программ.
Повторюсь: "Видно, что от знаковости результат не зависит".

Ethereal писал(а):
Только что компильнул на gcc 4.2.4. Так этот gcc даже и предупреждения не выдал.

Указали любимый флаг параноиков -Wextra? 8) 4.6.3 предупредит с этим флагом.

Ethereal писал(а):
Для него просто -1 > 1 и все тут ! :))

1. Из типов одинаковой ширины даётся предпочтение беззнаковым. Это компромисс с определенными целями.
2. Программист всегда прав.

Ethereal писал(а):
Зато если бы было две операции сравнения - знаковая > и беззнаковая u> ,
то i > j читалось бы "если i больше j знаково" и никакой ошибки или
двусмысленности не было бы.

Двусмысленность (если о ней подумал программист) устраняется явным приведением типов.
Лишние операторы не нужны.
Если же программист не продумал, какой закорючкой сравнить числа разной знаковости, он выберет ту, что проще. То есть знаковую >. И может получится так:
Код:
int i = 123;
unsigned u = 0xfff0000;
if (i > u) KILL_USER();

Благодаря актуальным правилам приведения типов этод код никого не убивает! Это плюс.


Последний раз редактировалось dynamic-wind Вт ноя 27, 2012 11:52, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Вт ноя 27, 2012 11:46 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Ethereal писал(а):
На таких архитектурах как Альфа прочитать/записать байт означало прочитать слово, модифицировать в нем байт, записать слово обратно.

Вот именно. Это значит, что под Альфу нельзя соптимизировать код путём замены масок и сдвигов на чтение-запись байтов. И не только под неё.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Пт ноя 30, 2012 21:55 
Не в сети
Аватара пользователя

Зарегистрирован: Ср фев 23, 2011 20:42
Сообщения: 600
Откуда: Карелия
Благодарил (а): 3 раз.
Поблагодарили: 24 раз.
WingLion писал(а):
Ethereal писал(а):
Размер, который не определен ?

для сферического коня - да - неопределен.
Так ведь сферический конь данных - это и есть тип.

Вот такие сферические кони в Си - int и long. Они различаются только размерами. Которые также не определены. Но именно эти неопределенные размеры определяет их тип. Если я название int заменю на signed cell, а long на signed double cell что-то изменится ? Ничего. Потому-что не может быть дело в названиях. А если я уберу уточнение signed, оставив это аспект в неопределенности, то неужели signed cell и signed double cell перестанут быть типами ? Нет не перестанут. Потому-что в Си именно таков тип char. Его знаковость или беззнаковость описанием языка не определена. Этот выбор оставлен на усмотрение компилятора и программиста. Обычно он задается опцией.
dynamic-wind писал(а):
Двусмысленность (если о ней подумал программист) устраняется явным приведением типов.
Что делает бессмысленной саму идею строгой типизации. Потому-что
1.) Сначала придумываем строгую типизацию и тем самым порождаем двусмысленность.
2.) Для устранения двусмысленности используем явное приведение типов, тем самым херя строгую типизацию.
Тебе не кажется этот круг порочным ?

Получается, что строгая типизация создана для того, чтобы ее нарушать.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Сб дек 01, 2012 14:28 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Ethereal писал(а):
dynamic-wind писал(а):
Двусмысленность (если о ней подумал программист) устраняется явным приведением типов.
Что делает бессмысленной саму идею строгой типизации. Потому-что
1.) Сначала придумываем строгую типизацию и тем самым порождаем двусмысленность.
2.) Для устранения двусмысленности используем явное приведение типов, тем самым херя строгую типизацию.
Тебе не кажется этот круг порочным ?

Получается, что строгая типизация создана для того, чтобы ее нарушать.

Не-а. Строгая типизация сама не порождает двусмысленности!

1. Строгая типизация придумана для того, чтобы отлавливать часть ошибок в программе. Это хорошо.
2. Беззнаковые типы введены, чтобы "расширить" слово на один бит и упростить кое-какие операции. Это неплохо.
3. Перегрузку операторов делают по фортрановской традиции, она облегчает кодирование математики. Это нормально.
Иногда между этими фичами возникают конфликты, программист их разрешает явным приведением типов.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Сб дек 01, 2012 16:23 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Ср дек 06, 2006 09:23
Сообщения: 660
Благодарил (а): 7 раз.
Поблагодарили: 25 раз.
а по мне так без типов лучше.... вот ни разу за все время работы с Фортом отсутствие строгой типизации не мешало и не напрягало. определенная гибкость и свобода :) - ячейки + работа со словами разной длины -вполне. все остальное затачивается под конкретную задачу.

в Лиспе же тоже элемент списка может быть многолик )


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Сб дек 01, 2012 22:35 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2168
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 41 раз.
dynamic-wind писал(а):
1. Строгая типизация придумана для того, чтобы отлавливать часть ошибок в программе. Это хорошо.

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

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Сб дек 01, 2012 22:47 
Не в сети

Зарегистрирован: Вс апр 25, 2010 11:14
Сообщения: 200
Откуда: Москва
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
chess писал(а):
Эта часть в плане вклада в повышение производительности программиста ничего не дает, а иногда и понижает эту производительность. Единственное, позволяет писать формулы в математической нотации, да и то от оценок масштабирования и точности не освобождает.

Не все являются настолько крутыми программистами. Тем, кто программирует плохо (или это не его основная работа) такой вид типизации помогает упорядочить код.

Кроме того, чем больше известно о коде при компиляции, тем проще и эффективней программная оптимизация.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: о типизации в Форте
СообщениеДобавлено: Пн дек 03, 2012 11:20 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
chess писал(а):
Эта часть в плане вклада в повышение производительности программиста ничего не дает
Компилятор обнаруживает многие ошибки, повышая производительность человеческого труда.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 114 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB