Re: Скажите пожалуйста :)
Заголовок сложно было приличный подобрать?
http://dmoz.org/Computers/Programming/Languages/
---
...Я работаю антинаучным аферистом...
Кто знает? Помогаете, пожалуйста !
Понимаю
---- "Пожалуйста."
Спасибо !
Для меня трудно найти ответ на http://dmoz.org/Computers/Programming/Languages/
Я знаю неполные ответы.
---
...Я работаю антинаучным аферистом...
Спасибо !
Это мне напомнило о том, как сегодня мне посреди Москвы
один прохожий сказал "якши."
Перечислимый тип присутствует в Паскале, в Аде, в Сях.
Из общих соображений он может (не уверен) отсутствовать в Обероне.
Беззнаковый целый тип отсутствует в Паскале.
В Аде вместо него есть "INTEGER range 0..чегототам'MAXчегототам".
Из общих соображений, может отсутствовать в Обероне.
Что такое "двусторонняя связь" не догадался --- лень.
В Аде возможность раздельной трансляции вложенных модулей есть.
---
...Я работаю антинаучным аферистом...
Не понимаю ,что это?
"хорошо" на ряде тюркских языков
Не важно польны, важно правильны
---
...Я работаю антинаучным аферистом...
молодец!
хаха ,наверное
---
...Я работаю антинаучным аферистом...
Как ?
Можно даже прямо здесь.
---
...Я работаю антинаучным аферистом...
Я жду......
В Яве нет беззнаковых целых.
А другие как ?
3) двусторонняя связь между модулями при раздельной трансляции?а что это значит?
4) возможность разделной трансляции вложнных модулей?
В каких из перечисленных ниже языков есть возможность разделной трансляции вложнных модулей?
Это вопросы по курсу Языки программирования на 3 курсе вмк,лекции этого года лежат на vatt2001.hotbox.ru.
Что такое двусторонняя связь между модулями и что такое вложнные модули?
BINGO~!
Нельзя unzip !
ну и куда принципы сундучка и чемоданчика завели Джаву?
В 1995 году появился язык Java. Была развернута беспрецедентная маркетинговая кампания.-- и это тоже
Если я знаю,тогда хороше будет
в этой лекции расматривали раздельную компиляцию и связывание.
В языках Java, C# и Delphi массивы - частные случаи объектови
У всех массивов есть методы a.length – показывает длину массива, a.setlength – позволяет установить новую длину массиваправда что ли?
Тоже нельзя unzip !
это не архив, это word документ, их нельзя аплодить, из-за этого файл надо переименовать из fileXXX.zip -> fileXXX.doc
а разве internal в С# это не доступ внутри сборки (в лекциях внутри пространства имен -- бред, зачем такое нужно)?
1)
2)
3)
4)
Важно правильны,не обязательно польны
Спасибо!
лекции на
с ума сошёл
Хотя может я ошибся...
char это char, это не целое число, char-ы нельзя например складывать или умножать, их можно только сравнивать на равенство. Так что бессмысленно говорить, знаковые они или нет.
>установить новую длину массива
в шарпе нельзя менять длину.
>В языках Java, C# и Delphi массивы - частные случаи объектов
В жаве и шарпе кроме объектов вообще ничего нет. Рассуждать можно разве что о различиях между reference types и value types, но тогда надо именно такими словами говорить об этом. Да, массивы - референс тайп.
>а разве internal в С# это не доступ внутри сборки
Разве. Ещё, кстати, бывает protected internal, соответствует assembly_or_family в мсиле, доступ и изнутри сборки, и от наследников. А вот assembly_and_family в шарпе нету, и правильно.
>В Яве нет беззнаковых целых.
Чо, реально? Вот говно! Хотя что-то в этом есть, на самом деле...
А ты разве никогда в С++ не трахался со знаковым >>? В Яве есть >> и >>> а тип аргументов один и тот же. Какой вообще смысл от этого unsigned если overflow check-а все равно нет (в С++)?
>В Яве нет беззнаковых целых.
Чо, реально? Вот говно! Хотя что-то в этом есть, на самом деле...
Не понял. В C# нельзя писать protected internal? И почему это правильно?
---
...Я работаю антинаучным аферистом...
Основной смысл от Unsigned - это то, что в два раза значений больше влезает - иногда это существенно.
---
...Я работаю антинаучным аферистом...
Семантика соответственно зависит. А вот для char-а или short-а такого оператора нет, поэтому делается implicit cast. Например может показаться, что функция
unsigned int >>(unsigned int, unsigned);
signed int >>(signed int, unsigned);
unsigned long long >>(unsigned long long, unsigned);
signed long long >>(signed long long, unsigned);
зануляет старшие два бита но это не так.
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
}
Основной смысл от Unsigned - это то, что в два раза значений больше влезаетСколько есть битов столько и есть, больше не станет. unsigned - это просто способ взглянуть на те же самые данные по-другому. Поскольку, повторюсь, overflow check-а нет, я в этом большого смысла не вижу. Да и сравниваются signed/unsigned между собой неправильно -warning "signed/unsigned mismatch" + casting, вместо того чтобы сравнить по-человечески...
Для того и нужны типы, чтоб определить нужный способ взгляда.
> Да и сравниваются signed/unsigned между собой неправильно
Недостаток языка: могло бы быть и правильное сравнение.
Но пример с (x<<2)>>2 убивает.
Да-а, отвык я от сей. У нас всё проще.
---
...Я работаю антинаучным аферистом...
Ничего неутверждающее утверждение. Вообще, все программирование - это взглянуть на биты 1 и 0 по-другому.
> Поскольку, повторюсь, overflow check-а нет, я в этом большого смысла не вижу.
Как быть с операцией сравнения?
что больше: 0x80000000 или 0x40000000?
> Да и сравниваются signed/unsigned между собой неправильно
согласен - есть такой трабл.
хотя можно сделать свою функцию, которая будет сравнивать правильно.
Обозвать по-разному --- и делов.
Сделать можно.
А заместить встроенную в язык --- нет.
---
...Я работаю антинаучным аферистом...
> Обозвать по-разному --- и делов.
Имхо, это изврат:
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;
}
неиспользуй встроенную
в чем проблема?
Константы насильники ещё не научились определять?
Первая выглядит лучше.
---
...Я рабоатю антинаучным аферистом...
Я никогда не сомневался в бедности мышления насильников.
---
...Я работаю антинаучным аферистом...
Причем здесь мышление?
Язык - это всего лишь инструмент для передачи мыслей между двумя исполнителями.
Если не нравится, то наследуйся от стандартного компилятора и переопредели операцию < для сравнения signed с unsigned на lt
Язык определяет мышление.
---
...Я работаю антинаучным аферистом...
Насколько просто?
---
...Я работаю антинаучным аферистом...
Во-первых - это только гипотеза, и скорее это все-таки тенденция, а не правило.
Во-вторых - гипотеза подразумевает, что исполнитель думает на этом языке: перечитай еще раз мое высказывание.
можно.
> Насколько просто?
В зависимости от того, насколько грамотно спроектирован компилятор, на сколько он спроектирован под дальнейшее расширение.
Что ж, я так и думал, что присутствую при очередной попытке
впарить сферического коня.
---
...Я работаю антинаучным аферистом...
---
...Я работаю антинаучным аферистом...
Дык, наследование, более общая концепция, чем какой-то там конкретный язык и конкретный компилятор.
еще раз повторю: наследование от компилятора не зависит, от компилятор зависит только простота наследования.
> что присутствую при очередной попытке впарить сферического коня
С++ - например, и есть такой, пример, "сферического коня".
Челам захотелось писать: a.Method(b вместо Method(a, b) - они взяли и отнаследовались.
ну и что?
я надеюсь, ты знаешь, чем тенденция отличается от правила?
---
...Я работаю антинаучным аферистом...
хотя можно сделать свою функцию, которая будет сравнивать правильно.Ну так тогда можно сделать функцию, которая будет умножать целые как беззнаковые, функцию, которая будет печатать их как беззнаковые. Если человеку нужны беззнаковые целые он их себе сделает (в С++ причем это будет выглядеть весьма эстетично). Речь о том, что примитивные C-ные unsigned неудобны. Я ими никогда не пользуюсь, меня злят warning-и на
возникающие по причине a.size :: size_t.
for(int i=0; i<a.size; i++)
Я прекрасно понимаю, что хочется красоты, хочется ортогонализовать представление данных, например, вместо
Клево бы писать
struct
{
int x;
int y;
//assert(x >= y) !
}
Это все понятно, но на практике ну хоть ты тресни этого не получается сделать.
struct
{
int y;
unsigned int x_sub_y;
int x { return y+x_sub_y; }
}
если тебе не нравится писать lt, то на основе этого примера делаешь свое наследование.
Всё понятно.
Примера я так не увижу.
И очевидно, почему именно: его нет и быть _не_может_.
---
...Я работаю антинаучным аферистом...
Допустим так:
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);
так это скорее проблема конкретного языка, чем signed/unsigned типов.
Показываю, как это делается не на таких убогих языках, как диалекты сей.
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>
Быстро и просто.
---
"Три раза, Ганс, три раза. Запомни, Ганс: три раза."
Ограничение на скобочную запись, и то, что разделителем является пробел - все равно же остается.
еще запись термов тоже заменить нельзя.
так это скорее проблема конкретного языка, чем signed/unsigned типовА я их как-то нигде больше и не встречал. Натуральные числа - это же даже не группа. А почему бы тогда не завести отдельный тип для нечетных чисел, и еще один для степеней двойки, или еще какую-нибудь ерунду. По-моему это все-таки не настолько фунаментально, чтобы быть неотъемлимой частью языка. Библиотека - пожалуйста. Дайте в языке средства, чтобы такие библиотеки красиво выглядили. Частично это у Страуструпа получилось. Но отобрать у Си слово unsigned у него не хватило смелости. К сожалению.
.Net.
> Натуральные числа - это же даже не группа
Это рассуждение теоретика, а не практика.
Все решаемые задачи можно поделить на два типа: прикладные(человеческие) и системные (машинные).
И если в прикладных задачах unsigned числа редко нужны, то в системных они нужны постоянно: чтение/запись, хранение в памяти и т.д.
причем так как задачи системные - то желательно чтобы они выполнялись максимально эффективно.
Соответственно введение unsigned типов в язык и явная поддержка их компилятором обеспечивает эту эффективность.
Однако внутри этого языка переопределить функцию
труда не составляет.
В отличие от приплюснутых и зарешёченных сей.
Если помучаться над макросами Общего Шёпота,
то можно, вероятно, нашептать и посильнее.
Однако до того насильнильники даже додуматься не посмеют.
"Рождённый ползать летать не может."
Типа-а, гипотеза Сепура---Ворфа.
---
"Narrowness of experience leads to narrowness of imagination."
Rob Pike
Ты уверен, что это существенная разница?
> "Рождённый ползать летать не может."
Рожденный ходить на четвереньках летать тоже не сможет.
Можно ли сказать, что второй сильно лучше, чем первый?
В частности, влияющая на переносимость программ.
Например, там, где я могу легко подсчитать разрядность и сделать
себе целые числа побольше, насильники садятся в лужу,
потому что длиннее long int у них ничего может не оказаться.
---
...Я работаю антинаучным аферистом...
насильники садятся в лужу, потому что длиннее 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++ не хватает, ну и еще по мелочи, а так пока не убедил...
и как сделать, чтобы правильно работало сравнение как с signed int, так и с unsigned?
Каков у тебя int, который ты так смело используешь?
---
...Я работаю антинаучным аферистом...
А кто мешает поставить int32_t? Не придирайся по мелочам...
Это не мелочи.
Эти "мелочи" приводят к разнице в три-четыре раза в объёмах
исходников со всеми вытекающими.
---
...Я работаю антинаучным аферистом...
Везде.
---
...Я работаю антинаучным аферистом...
Конечно это не стандарт. И ты это прекрасно знаешь. А какая собственно говоря разница? Всегда можно это сделать самому.
AFAIK в C99 определены такие типы.
Даже так? Не знал. Тем более...
Вот цена-то и не устраивает.
---
...Я работаю антинаучным аферистом...
Через так любимые насильниками "#ifdef"-ы?
---
...Я работаю антинаучным аферистом...
и как сделать, чтобы правильно работало сравнение как с 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);
...
А нафига?
И как узнавать наибольшую доступную разрядность [в lispe]?а?
Например, чтобы не работать с половинами 48-разрядных чисел там,
где можно сразу работать с целыми.
---
...Я работаю антинаучным аферистом...
Ну типа int64_t по стандарту положен, а остальных считай что нет.
Соответственно, снимается куча совершенно ненужных задач.
---
...Я работаю антинаучным аферистом...
Property вот в C++ не хватает, ну и еще по мелочи, а так пока не убедил...А в VC++ они есть, даже в 6й версии
Значит VC++ не является С++.
Не понимаю отмазок, почему в языке нет беззнаковых целых. Кому они мешают. Один раз на сто могут кому-то и пригодиться. Слышал, что даже в следующей версии VB.NET их введут по просьбам трудящихся.
---
...Я работаю антинаучным аферистом...
А какой тогда является? Хотя конечно VC++ 6 меньше всех на С++ похож.
наибольшая длина строки?
Не понимаю отмазок, почему в языке нет беззнаковых целых. Кому они мешают. Один раз на сто могут кому-то и пригодиться.Типичное заблуждение. Сделаем из языка помойку, кому это мешает! Программист больше половины своего времени читает чужие программы, а не пишет свои. И чем больше в языке надуманных редко и криво используемых понятий, тем это сложнее. Ко всему прочему сложность и многообразие конструкций языка = сложность написания нового или эффективного компилятора.
даже в 6й версииИ как они там назывались Я пока только это нашел
До .NET я property только в BB видел.
Managed Extensions for C++ Reference
__property
Нет там какой-то __declspec(...) был.
Типичное заблуждение. Сделаем из языка помойку, кому это мешает!Да ладно. Так уж добавление uint и еще пару типов сразу сделает из языка помойку.
Когда приходится использовать int64_t там, где нужен uint32_t, ещё хуже получается.
Так уж добавление uint и еще пару типов сразу сделает из языка помойкуЯ такого не говорил. Ну по крайней мере не хотел сказать Я просто имею в виду, что да-ладно-пусть-будет-вдруг-кому-пригодится это не аргумент. Пользуйтесь своими unsigned на здоровье. И словом const тоже. И список exception-ов в функциях пишите. Наверняка от этого всего есть польза, просто лично я пока не научился ее извлекать...
int64_t там, где нужен uint32_tА вот uint33_t никогда не нужен?
Оставить комментарий
Fact0r
( О языке программирования )В каких языках из перечисленных ниже отсутствует
1) перечислимый тип данных?
2) беззнаковый целый тип?
Паскаль, Си, Ада83, Си++, Ада95, оберон, оберон-2, Модула-2, JAVA, C#
В каких из перечисленных ниже языков есть
3) двусторонняя связь между модулями при раздельной трансляции?
4) возможность разделной трансляции вложнных модулей?
Ада, Си++, Ада95, оберон, Модула-2, JAVA, C#, Delphi