Re: Скажите пожалуйста :)

Fact0r

( О языке программирования )
В каких языках из перечисленных ниже отсутствует
1) перечислимый тип данных?
2) беззнаковый целый тип?
Паскаль, Си, Ада83, Си++, Ада95, оберон, оберон-2, Модула-2, JAVA, C#
В каких из перечисленных ниже языков есть
3) двусторонняя связь между модулями при раздельной трансляции?
4) возможность разделной трансляции вложнных модулей?
Ада, Си++, Ада95, оберон, Модула-2, JAVA, C#, Delphi

Ivan8209

"Пожалуйста."
Заголовок сложно было приличный подобрать?
http://dmoz.org/Computers/Programming/Languages/
---
...Я работаю антинаучным аферистом...

Fact0r

Кто знает? Помогаете, пожалуйста !

Fact0r

"Заголовок сложно было приличный подобрать?"
Понимаю
---- "Пожалуйста."
Спасибо !

Fact0r

Кто знает ответ?
Для меня трудно найти ответ на http://dmoz.org/Computers/Programming/Languages/

Ivan8209

Обучение хождению по ссылкам здесь стоит недёшево.
Я знаю неполные ответы.
---
...Я работаю антинаучным аферистом...

Fact0r

Скажете мен то что вы знаете
Спасибо !

Ivan8209

> Скажете мен
Это мне напомнило о том, как сегодня мне посреди Москвы
один прохожий сказал "якши."
Перечислимый тип присутствует в Паскале, в Аде, в Сях.
Из общих соображений он может (не уверен) отсутствовать в Обероне.
Беззнаковый целый тип отсутствует в Паскале.
В Аде вместо него есть "INTEGER range 0..чегототам'MAXчегототам".
Из общих соображений, может отсутствовать в Обероне.
Что такое "двусторонняя связь" не догадался --- лень.
В Аде возможность раздельной трансляции вложенных модулей есть.
---
...Я работаю антинаучным аферистом...

Fact0r

"якши" ?
Не понимаю ,что это?

maggi14

"хорошо" на ряде тюркских языков

Fact0r

Кто ещё знает ответы?
Не важно польны, важно правильны

Fact0r

Ivan8209

Вот и я тоже думаю, неужели я так похож на татарина?
---
...Я работаю антинаучным аферистом...

DestroyerXXX

молодец!

Fact0r

хаха ,наверное

Ivan8209

Можно попробовать спросить у Шатки...
---
...Я работаю антинаучным аферистом...

Fact0r

"спросить у Шатки..."
Как ?

Ivan8209

Прямо.
Можно даже прямо здесь.
---
...Я работаю антинаучным аферистом...

Fact0r

Я жду......

rosali

В Яве нет беззнаковых целых.

Fact0r

А другие как ?

bastii

3) двусторонняя связь между модулями при раздельной трансляции?
4) возможность разделной трансляции вложнных модулей?
а что это значит?

Fact0r

В каких из перечисленных ниже языков есть двусторонняя связь между модулями при раздельной трансляции?
В каких из перечисленных ниже языков есть возможность разделной трансляции вложнных модулей?

tashka

Кажется только в Аде есть двусторонее связывание.
Это вопросы по курсу Языки программирования на 3 курсе вмк,лекции этого года лежат на vatt2001.hotbox.ru.

bastii

Что такое двусторонняя связь между модулями и что такое вложнные модули?

Fact0r

BINGO~!

Fact0r

Нельзя unzip !

bastii

ну и куда принципы сундучка и чемоданчика завели Джаву?

bastii

В 1995 году появился язык Java. Была развернута беспрецедентная маркетинговая кампания.
-- и это тоже

Fact0r

Меня спросил?
Если я знаю,тогда хороше будет

tashka

в этой лекции расматривали раздельную компиляцию и связывание.

bastii

В языках Java, C# и Delphi массивы - частные случаи объектов
и
У всех массивов есть методы a.length – показывает длину массива, a.setlength – позволяет установить новую длину массива
правда что ли?

Fact0r

Тоже нельзя unzip !

tashka

слушай, этот экзамен очень легкий. я сдал не готовясь, надо быть китайцем что-бы попасть на пересдачу.
это не архив, это word документ, их нельзя аплодить, из-за этого файл надо переименовать из fileXXX.zip -> fileXXX.doc

bastii

а разве internal в С# это не доступ внутри сборки (в лекциях внутри пространства имен -- бред, зачем такое нужно)?

Fact0r

Кто может мне написать ответы?
1)
2)
3)
4)
Важно правильны,не обязательно польны

Fact0r

Спасибо!

tashka

лекции на

Fact0r

ещё нельзя!
с ума сошёл

Dmitriy82

Если не путаю, в джаве есть беззнаковое целое - char.
Хотя может я ошибся...

rosali

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

bleyman

>У всех массивов есть методы a.length – показывает длину массива, a.setlength – позволяет
>установить новую длину массива
в шарпе нельзя менять длину.
>В языках Java, C# и Delphi массивы - частные случаи объектов
В жаве и шарпе кроме объектов вообще ничего нет. Рассуждать можно разве что о различиях между reference types и value types, но тогда надо именно такими словами говорить об этом. Да, массивы - референс тайп.
>а разве internal в С# это не доступ внутри сборки
Разве. Ещё, кстати, бывает protected internal, соответствует assembly_or_family в мсиле, доступ и изнутри сборки, и от наследников. А вот assembly_and_family в шарпе нету, и правильно.
>В Яве нет беззнаковых целых.
Чо, реально? Вот говно! Хотя что-то в этом есть, на самом деле...

rosali


>В Яве нет беззнаковых целых.
Чо, реально? Вот говно! Хотя что-то в этом есть, на самом деле...
А ты разве никогда в С++ не трахался со знаковым >>? В Яве есть >> и >>> а тип аргументов один и тот же. Какой вообще смысл от этого unsigned если overflow check-а все равно нет (в С++)?

bastii

Не понял. В C# нельзя писать protected internal? И почему это правильно?

Ivan8209

Что, в приплюснутом Си ">>" не вставляет знак?
---
...Я работаю антинаучным аферистом...

Dasar

Основной смысл от Unsigned - это то, что в два раза значений больше влезает - иногда это существенно.

Ivan8209

Никогда в игрушках не видел -2 млрд жителей?
---
...Я работаю антинаучным аферистом...

rosali

В С++ есть по крайней мере 4 (нефигово, да?) оператора >>
 
unsigned int >>(unsigned int, unsigned);
signed int >>(signed int, unsigned);
unsigned long long >>(unsigned long long, unsigned);
signed long long >>(signed long long, unsigned);
Семантика соответственно зависит. А вот для char-а или short-а такого оператора нет, поэтому делается implicit cast. Например может показаться, что функция

unsigned short f(unsigned short x)
{
return( (x << 2) >> 2 );
}
зануляет старшие два бита но это не так.
При всем при этом unsigned char или unsigned char кастятся в signed int На вот, экспериментальные данные

#define DECLARE_TYPE( type ) \
const char * type_name(type) \
{ return ( #type ); }

DECLARE_TYPE( char )
DECLARE_TYPE( signed char )
DECLARE_TYPE( unsigned char )
DECLARE_TYPE( signed short )
DECLARE_TYPE( unsigned short )
DECLARE_TYPE( signed int )
DECLARE_TYPE( unsigned int )
DECLARE_TYPE( signed long long )
DECLARE_TYPE( unsigned long long )
//these don't compile: "function already has a body"
//DECLARE_TYPE( short )
//DECLARE_TYPE( int )
//DECLARE_TYPE( long long )

#undef DECLARE_TYPE

void test(std::ostream & os)
{

#define TEST_TYPE( type ) \
{ \
type x = -4; \
os << int(x) << " :: " << type_name(x) << "; " \
<< int(x>>1) << " :: " << type_name(x>>1) << ";" << std::endl; \
}

TEST_TYPE( char )
TEST_TYPE( signed char )
TEST_TYPE( unsigned char )
TEST_TYPE( signed short )
TEST_TYPE( unsigned short )
TEST_TYPE( signed int )
TEST_TYPE( unsigned int )
TEST_TYPE( signed long long )
TEST_TYPE( unsigned long long )

#undef TEST_TYPE
}

rosali

Основной смысл от Unsigned - это то, что в два раза значений больше влезает
Сколько есть битов столько и есть, больше не станет. unsigned - это просто способ взглянуть на те же самые данные по-другому. Поскольку, повторюсь, overflow check-а нет, я в этом большого смысла не вижу. Да и сравниваются signed/unsigned между собой неправильно -warning "signed/unsigned mismatch" + casting, вместо того чтобы сравнить по-человечески...

Marinavo_0507

> это просто способ взглянуть на те же самые данные по-другому
Для того и нужны типы, чтоб определить нужный способ взгляда.
> Да и сравниваются signed/unsigned между собой неправильно
Недостаток языка: могло бы быть и правильное сравнение.

Ivan8209

Хоть десять.
Но пример с (x<<2)>>2 убивает.
Да-а, отвык я от сей. У нас всё проще.
---
...Я работаю антинаучным аферистом...

Dasar

> Сколько есть битов столько и есть, больше не станет. unsigned - это просто способ взглянуть на те же самые данные по-другому.
Ничего неутверждающее утверждение. Вообще, все программирование - это взглянуть на биты 1 и 0 по-другому.
> Поскольку, повторюсь, overflow check-а нет, я в этом большого смысла не вижу.
Как быть с операцией сравнения?
что больше: 0x80000000 или 0x40000000?
> Да и сравниваются signed/unsigned между собой неправильно
согласен - есть такой трабл.
хотя можно сделать свою функцию, которая будет сравнивать правильно.

Ivan8209

Как быть с операцией сравнения?
Обозвать по-разному --- и делов.
Сделать можно.
А заместить встроенную в язык --- нет.
---
...Я работаю антинаучным аферистом...

Dasar

> Как быть с операцией сравнения?
> Обозвать по-разному --- и делов.
Имхо, это изврат:

int CompareAsUnsigned(int left, int right)
{
if (left == right)
return 0;
if (left < 0 && right > 0)
return 1;
if (left > 0 && right < 0)
return -1;
if (left < right)
return -1;
else
return 1;
}

Вот такая функция естественнее выглядит:

int Compare(usigned int left, int right)
{
if (right < 0)
return 1;
if (left > (limits<unsigned int>::max_value >> 1
return 1;
if int)left < right)
return -1;
if int)left > right)
return 1;
return 0;

}

Dasar

> А заместить встроенную в язык --- нет.
неиспользуй встроенную
в чем проблема?

Ivan8209

> (limits<unsigned int>::max_value >> 1)
Константы насильники ещё не научились определять?
Первая выглядит лучше.
---
...Я рабоатю антинаучным аферистом...

Ivan8209

Везде писать "lt(x,y)" вместо принятого "x<y"?
Я никогда не сомневался в бедности мышления насильников.
---
...Я работаю антинаучным аферистом...

Dasar

> Я никогда не сомневался в бедности мышления насильников.
Причем здесь мышление?
Язык - это всего лишь инструмент для передачи мыслей между двумя исполнителями.

Dasar

> Везде писать "lt(x,y)" вместо принятого "x<y"?
Если не нравится, то наследуйся от стандартного компилятора и переопредели операцию < для сравнения signed с unsigned на lt

Ivan8209

Каяфа как-то подсказал умные слова: гипотеза Сепура---Ворфа.
Язык определяет мышление.
---
...Я работаю антинаучным аферистом...

Ivan8209

Так можно?
Насколько просто?
---
...Я работаю антинаучным аферистом...

Dasar

> Язык определяет мышление
Во-первых - это только гипотеза, и скорее это все-таки тенденция, а не правило.
Во-вторых - гипотеза подразумевает, что исполнитель думает на этом языке: перечитай еще раз мое высказывание.

Dasar

> Так можно?
можно.
> Насколько просто?
В зависимости от того, насколько грамотно спроектирован компилятор, на сколько он спроектирован под дальнейшее расширение.

Ivan8209

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

Ivan8209

Противоположная гипотеза потерпела несколько серьёзных крушений.
---
...Я работаю антинаучным аферистом...

Dasar

> То есть, другими словами, это не свойство языка, а свойство компилятора.
Дык, наследование, более общая концепция, чем какой-то там конкретный язык и конкретный компилятор.
еще раз повторю: наследование от компилятора не зависит, от компилятор зависит только простота наследования.
> что присутствую при очередной попытке впарить сферического коня
С++ - например, и есть такой, пример, "сферического коня".
Челам захотелось писать: a.Method(b вместо Method(a, b) - они взяли и отнаследовались.

Dasar

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

Ivan8209

Ну так приведи пример для Си++, почему я его второй раз должен спрашивать?
---
...Я работаю антинаучным аферистом...

rosali

хотя можно сделать свою функцию, которая будет сравнивать правильно.
Ну так тогда можно сделать функцию, которая будет умножать целые как беззнаковые, функцию, которая будет печатать их как беззнаковые. Если человеку нужны беззнаковые целые он их себе сделает (в С++ причем это будет выглядеть весьма эстетично). Речь о том, что примитивные C-ные unsigned неудобны. Я ими никогда не пользуюсь, меня злят warning-и на
 
for(int i=0; i<a.size; i++)
возникающие по причине a.size :: size_t.
Я прекрасно понимаю, что хочется красоты, хочется ортогонализовать представление данных, например, вместо
 
struct
{
int x;
int y;
//assert(x >= y) !
}
Клево бы писать
 
struct
{
int y;
unsigned int x_sub_y;
int x { return y+x_sub_y; }
}
Это все понятно, но на практике ну хоть ты тресни этого не получается сделать.

Dasar

С++ - это, пример, наследования
если тебе не нравится писать lt, то на основе этого примера делаешь свое наследование.

Ivan8209

"Три раза, Ганс, три раза. Запомни, Ганс: три раза."
Всё понятно.
Примера я так не увижу.
И очевидно, почему именно: его нет и быть _не_может_.
---
...Я работаю антинаучным аферистом...

Dasar

> Примера я так не увижу.
Допустим так:

Code code = Preprocess(file);
Ast ast = Parse(code);
foreach (Operation operation in ast.FindAllOperations)
if (operation.Name == '<' && operation.LeftOperand.Type == typeof(unsigned int) && operation.RightOperand.Type == typeof(int
operation.Kind = 'lt';
Compile(ast);

Dasar

> Это все понятно, но на практике ну хоть ты тресни этого не получается сделать.
так это скорее проблема конкретного языка, чем signed/unsigned типов.

Ivan8209

Опять вне языка?
Показываю, как это делается не на таких убогих языках, как диалекты сей.

guile> (< "asdf" "wert")
standard input:1:1: In procedure < in expression (< "asdf" "wert"):
standard input:1:1: Wrong type argument in position 1: "asdf"
ABORT: (wrong-type-arg)

Type "(backtrace)" to get more information or "(debug)" to enter the debugger.
guile> (define numerical-< <)
guile> (define (< a b) (if (and (number? a) (number? b (numerical-< a b) #f
guile> (< "asdf" "wert" )
#f
guile> (< 2 3)
#t
guile>

Быстро и просто.
---
"Три раза, Ганс, три раза. Запомни, Ганс: три раза."

Dasar

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

Dasar

еще запись термов тоже заменить нельзя.

rosali

так это скорее проблема конкретного языка, чем signed/unsigned типов
А я их как-то нигде больше и не встречал. Натуральные числа - это же даже не группа. А почему бы тогда не завести отдельный тип для нечетных чисел, и еще один для степеней двойки, или еще какую-нибудь ерунду. По-моему это все-таки не настолько фунаментально, чтобы быть неотъемлимой частью языка. Библиотека - пожалуйста. Дайте в языке средства, чтобы такие библиотеки красиво выглядили. Частично это у Страуструпа получилось. Но отобрать у Си слово unsigned у него не хватило смелости. К сожалению.

Dasar

> А я их как-то нигде больше и не встречал.
.Net.
> Натуральные числа - это же даже не группа
Это рассуждение теоретика, а не практика.
Все решаемые задачи можно поделить на два типа: прикладные(человеческие) и системные (машинные).
И если в прикладных задачах unsigned числа редко нужны, то в системных они нужны постоянно: чтение/запись, хранение в памяти и т.д.
причем так как задачи системные - то желательно чтобы они выполнялись максимально эффективно.
Соответственно введение unsigned типов в язык и явная поддержка их компилятором обеспечивает эту эффективность.

Ivan8209

Это всё неотъемлимые свойства языка.
Однако внутри этого языка переопределить функцию
труда не составляет.
В отличие от приплюснутых и зарешёченных сей.
Если помучаться над макросами Общего Шёпота,
то можно, вероятно, нашептать и посильнее.
Однако до того насильнильники даже додуматься не посмеют.
"Рождённый ползать летать не может."
Типа-а, гипотеза Сепура---Ворфа.
---
"Narrowness of experience leads to narrowness of imagination."
Rob Pike

Dasar

> Однако внутри этого языка переопределить функцию труда не составляет.
Ты уверен, что это существенная разница?
> "Рождённый ползать летать не может."
Рожденный ходить на четвереньках летать тоже не сможет.
Можно ли сказать, что второй сильно лучше, чем первый?

Ivan8209

Да, это существенная разница.
В частности, влияющая на переносимость программ.
Например, там, где я могу легко подсчитать разрядность и сделать
себе целые числа побольше, насильники садятся в лужу,
потому что длиннее long int у них ничего может не оказаться.
---
...Я работаю антинаучным аферистом...

rosali

насильники садятся в лужу, потому что длиннее long int у них ничего может не оказаться

template<int N>
class my_int
{
int data[N];
friend my_int<N> operator + (my_int<N> x, my_int<N> y);
//...
};

Property вот в C++ не хватает, ну и еще по мелочи, а так пока не убедил...

Marinavo_0507

и как сделать, чтобы правильно работало сравнение как с signed int, так и с unsigned?

Ivan8209

А замер разрядности?
Каков у тебя int, который ты так смело используешь?
---
...Я работаю антинаучным аферистом...

Julie16

А кто мешает поставить int32_t? Не придирайся по мелочам...

Ivan8209

А он везде есть?
Это не мелочи.
Эти "мелочи" приводят к разнице в три-четыре раза в объёмах
исходников со всеми вытекающими.
---
...Я работаю антинаучным аферистом...

Julie16

Везде.

Ivan8209

Это стандарт или "де-факто?"
---
...Я работаю антинаучным аферистом...

Julie16

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

Marinavo_0507

AFAIK в C99 определены такие типы.

Julie16

Даже так? Не знал. Тем более...

Ivan8209

Вопрос в том, какой ценой.
Вот цена-то и не устраивает.
---
...Я работаю антинаучным аферистом...

Ivan8209

И как узнавать наибольшую доступную разрядность?
Через так любимые насильниками "#ifdef"-ы?
---
...Я работаю антинаучным аферистом...

rosali

и как сделать, чтобы правильно работало сравнение как с signed int, так и с unsigned?
Ну,

class signed_int
{
public:
signed_int(signed int);
operator signed int;
...
};
class unsigned_int
{
public:
signed_int(unsigned int);
operator unsigned int;
...
};
bool operator < (signed_int, signed_int);
bool operator < (unsigned_int, unsigned_int);
bool operator < (signed_int, unsigned_int);
bool operator < (unsigned_int, signed_int);
...
Непростая начнется жизнь, но все-таки кое-что

Marinavo_0507

А нафига?

rosali

И как узнавать наибольшую доступную разрядность [в lispe]?
а?

Ivan8209

Q5?
Например, чтобы не работать с половинами 48-разрядных чисел там,
где можно сразу работать с целыми.
---
...Я работаю антинаучным аферистом...

Marinavo_0507

Ну типа int64_t по стандарту положен, а остальных считай что нет.

Ivan8209

А там её даже не надо узнавать.
Соответственно, снимается куча совершенно ненужных задач.
---
...Я работаю антинаучным аферистом...

bastii

Property вот в C++ не хватает, ну и еще по мелочи, а так пока не убедил...
А в VC++ они есть, даже в 6й версии

Julie16

Значит VC++ не является С++.

bastii

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

Ivan8209

Удаляем упоминания С++ из названия и оставляем "V".
---
...Я работаю антинаучным аферистом...

bastii

А какой тогда является? Хотя конечно VC++ 6 меньше всех на С++ похож.

mysha

наибольшая длина строки?

rosali

Не понимаю отмазок, почему в языке нет беззнаковых целых. Кому они мешают. Один раз на сто могут кому-то и пригодиться.
Типичное заблуждение. Сделаем из языка помойку, кому это мешает! Программист больше половины своего времени читает чужие программы, а не пишет свои. И чем больше в языке надуманных редко и криво используемых понятий, тем это сложнее. Ко всему прочему сложность и многообразие конструкций языка = сложность написания нового или эффективного компилятора.

rosali

даже в 6й версии
И как они там назывались Я пока только это нашел

Managed Extensions for C++ Reference
__property
До .NET я property только в BB видел.

bastii

Нет там какой-то __declspec(...) был.

bastii

Типичное заблуждение. Сделаем из языка помойку, кому это мешает!
Да ладно. Так уж добавление uint и еще пару типов сразу сделает из языка помойку.

Marinavo_0507

Когда приходится использовать int64_t там, где нужен uint32_t, ещё хуже получается.

rosali

Так уж добавление uint и еще пару типов сразу сделает из языка помойку
Я такого не говорил. Ну по крайней мере не хотел сказать Я просто имею в виду, что да-ладно-пусть-будет-вдруг-кому-пригодится это не аргумент. Пользуйтесь своими unsigned на здоровье. И словом const тоже. И список exception-ов в функциях пишите. Наверняка от этого всего есть польза, просто лично я пока не научился ее извлекать...

rosali

int64_t там, где нужен uint32_t
А вот uint33_t никогда не нужен?
Оставить комментарий
Имя или ник:
Комментарий: