LINUX.ORG.RU

А как в вашем ЯП относятся к целочисленному переполнению?


0

4

Навеяло недавним забавным багом в Диабло. Вот взять джаву. Вроде современный безопасный язык, память не расстрелять, хоть ты что делай, нулл не разыменовать, все такие баги вылетают с исключениями. Вот с делением на 0 не помню, но вроде тоже исключение вылетит, если не float делишь. А int переполнится и фиг ты об этом узнаешь.

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

Чисто мое имхо — процессор должен кидать исключение (вызывать прерывание или как там такие ситуации обрабатываются) при переполнении по умолчанию, которое рантайм языка уже может обрабатывать как ему надо. В 99% случаев. А для 1% использовать другие инструкции, не кидающие исключение, ставить какой-нибудь флаг или использовать другой вариант. Ну это на аппаратном уровне, без этой поддержки реализовать отлов переполнения сложно, не будешь же после каждого сложения ставить проверку cf.

А как ваш ЯП помогает программисту в ситуации, когда происходит непредвиденное переполнение? Есть варианты всяких пайтонов, в которых прозрачно промоутится до многобайтной арифметики, но это, по-моему, жутко неэффективно (кстати аппаратное исключение и таким языкам поможет ускориться).

Или я не знаю возможностей современных аппаратных платформ и это всё есть, просто глупые джавы это не используют?

★★★★★

~/test % cat go-overload-test.go 
package main
import ("math"; "fmt")

func main() {
	var i int32 = math.MaxInt32
	fmt.Println(i)
	i++
	fmt.Println(i)
}

~/test % gccgo -Wall -Wextra -o go-overload-test-gccgo go-overload-test.go

~/test % ./go-overload-test-gccgo                           
2147483647
-2147483648

~/test % go run go-overload-test.go #Компилятор от Google
2147483647
-2147483648

Так что переполняемся, да.

proud_anon ★★★★★
()
Ответ на: комментарий от unt1tled

Но ведь сейчас стоимость упала

Стоимость чего - универсальных процессоров? Да, она упала.

а эффективность языка не так уж важна, учитывая железо?

Я говорил не об эффективности языка (с этим у Lisp на Lisp-машинах проблем не было), а об эффективности траты денег на Lisp-машины. Представь, что ты потратил $50k на одну машину, но она хорошо умеет только запускать AI-приложения.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Стоимость чего

стоимость всего компутерного железа

хорошо умеет только запускать AI-приложения

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

Киберпанк себе придумал. Тогда - не сейчас и в действительности все не так, как на самом деле.

unt1tled ★★★★
()
Ответ на: комментарий от unt1tled

хорошо умеет только запускать AI-приложения

не только

Когда Lisp-машины еще продавались - только.

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

Легко раздавать утверждения, которые нельзя проверить.

Сейчас в мире полтора профессиональных программера в логической парадигме.

Логическая парадигма? Лисп здесь не при делах.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Легко раздавать утверждения, которые нельзя проверить.

Им нет подтверждения лиш потому, что x86 все еще продается, зачем рыпаться?

Логическая парадигма? Лисп здесь не при делах.

Да, пьяный угар. Имел в виду функциональщину. Заговорили про AI, вот и всплыло.

unt1tled ★★★★
()
Ответ на: комментарий от unt1tled

Им нет подтверждения

Абсолютно никакого.

x86 все еще продается

Кроме x86 продается ARM, MIPS, PowerPC, даже немного SPARC. А вот Lisp-машин не продается совсем.

Имел в виду функциональщину.

И это тоже не про Лисп.

Пьянство - зло.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Абсолютно никакого.

Любая достаточно сложная программа на C или Фортране содержит заново написанную, неспецифицированную, глючную и медленную реализацию половины языка Common Lisp (ц).

Теоретическую имеет.

И это тоже не про Лисп.

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

Возвращаясь к первофакту: x86 - глючное поделие, от него все проблемы императивных языков.

unt1tled ★★★★
()
Ответ на: комментарий от unt1tled

Возвращаясь к первофакту: x86 - глючное поделие, от него все проблемы императивных языков

Плохое решение, но популярное решение лучше хорошего, но поддерживаемого тремя с половиной людьми. Я думаю, Лисп машины умерли в первую очередь из-за этого: Symbolics и Ко не смогли создать годную инфраструктуру под лисп-машины (которые тогда, как и компьютеры вообще, были уделом элиты). Потом подоспели микропроцессоры «общего назначения», которые были гораздо дешевле, но отнюдь не пропорционально тормознутее при качественной реализации Лиспа под них. Плюс на это сверху наложился ещё эффект AI Winter.

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

ilammy ★★★
()
Ответ на: комментарий от ilammy

Я скорее поверю, что появится какая-нибудь эрланг- или хацкель-машина.

Это и было моей основной идеей. Лисп - не Лисп, это дело второе. Первично зло*буче то, что такие парадигмы как логическая и функциональная были забыты за отупением программистов. Сейчас оно более-менее начинает шевелиться, как и весь AI. Задуматься о реализации пролога/хацкеля на аппаратном уровне стоит уже сейчас.

unt1tled ★★★★
()
Ответ на: комментарий от unt1tled

Стоимость упала, но не лисп-машин. Будешь делать лисп-машину - будет дорого. Пока не будет налажено нормальное производство и рынок. С учетом того, что профита от этого никакого, кому охота этим заниматься?

forCe
()
Ответ на: комментарий от ilammy

компьютеры вообще, были уделом элиты

Это и сейчас так. Виндовс-хомячки, домохозяйки и убунтоиды - не более чем ссзб, ведущееся на рекламу товарища Гейтса.

unt1tled ★★★★
()
Ответ на: комментарий от tailgunner

Кстати INTO это про OF, переполнение при умножении или делении. Результат ADD SUB он не ловит. А вообще ТСу, если уж он так хочет, надо замапить страницу на RO, и писать туда в случае CF/SF. Тогда и предиктор не завалится, и фолт стрельнет если надо. Правда барьер возникает, но и хрен с ним, авось сгладится.

MOV EBX, ro_page_addr
CMOVC [ebx], 00h
anonymous
()
Ответ на: комментарий от unt1tled

Да не забыто они при обучении. ФЛП - годовой курс у программистов по стандартам нашим. Сейчас там, как правило, изучают Haskell, лямбда-исчисление, немного лиспа, предикаты, пролог(разные ВУЗы по разному, от Turbo Prolog'а, до ViP'а, gnu'той реализации). Про какой-то московский ВУЗ мне говорили, что там Mercury еще дают.

Другое дело, что с практикой работы это мало связано... Как правило, студни к этому времени уже начинают подрабатывать на PHP. Хотя бывает везет и они работают на C#/Java или даже сишечке. Для таких еще не все потеряно.

forCe
()
Ответ на: комментарий от forCe

У вас там уже болонская система в действии? Она направлена на подготовку студентов для рынка труда как можно раньше. Это печально. Теория - вот что важно для программиста.
О неких годовых курсах хацкиля/лямбда вычислений/лиспа/пролога слышу в первый раз. Можно подробнее? На каком курсе? После бакалавра, магиста или уже в аспирантуре?

unt1tled ★★★★
()
Ответ на: комментарий от unt1tled

На 3 курсе у бакалавров должно быть. Около-программных специальностях. Погуглите, может найдете программы конкретных ВУЗов по ФЛП.

forCe
()
Ответ на: комментарий от unt1tled

Как пример - НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ. Рабочая программа учебной дисциплины «функциональное и логическое программирование» Основная образовательная программа

Основная образовательная программа: Направление 230100 – «Информатика и вычислительная техника»

(подготовка бакалавров)

Направление 230100 – «Информатика и вычислительная техника»

(подготовка дипломированных специалистов)

Специальность высшего профессионального образования 230105 – «Программное обеспечение вычислительной техники и автоматизированных систем»

Это правда 2005 год, но сейчас оно тоже есть.

forCe
()
Ответ на: комментарий от forCe

Интересно, какой процент студентов, уже имея Си головного мозга, поймет haskell/prolog.

Тут, пожалуй, надо тему новую в толксах создавать или опрос.

unt1tled ★★★★
()
Ответ на: комментарий от forCe

Сишник-то поймет, скорее всего. Вот после PHP...

Не думаю, что между си и пхп в этом отношении есть разница.
Хоть сишник на третьем курсе это похвально, но это адепт императивщины во всей красе, а если еще и системщик, то и x86 асма, что никак не способствует развитию навыков логического или функционального программирования. Математика в виде алгебры может помочь. Да.

PS. Нелюбовь к php разделяю.

unt1tled ★★★★
()
Последнее исправление: unt1tled (всего исправлений: 1)
Ответ на: Про sbcl от onanij

Какие конкретно теги используются - я не знаю, но могу сказать, что в случае (1+ most-positive-fixnum), вероятно, создается bignum в куче, и тогда значением выражения фактически является обычный указатель на тот вычисленный bignum. Это я так понимаю.

dave ★★★★★
()

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

encyrtid ★★★★★
()
Ответ на: комментарий от encyrtid

Я имел в виду — как рантайм узнает, что произошло переполнение и пора кинуть исключение.

Legioner ★★★★★
() автор топика
Ответ на: комментарий от Legioner

В CIL есть 2 типа инструкций сложения, add и add.ovf, у второй проверяется переполнение.

encyrtid ★★★★★
()
Ответ на: комментарий от unt1tled

Задуматься о реализации пролога/хацкеля на аппаратном уровне стоит уже сейчас.

Вот не стоит. Зачем? Чтобы было опять куча несовместимых друг с другом архитектур?

onanij
()
Ответ на: комментарий от unt1tled

Задуматься о реализации пролога/хацкеля на аппаратном уровне стоит уже сейчас.

Японцы уже пытались создать машины пятого поколения с аппаратной поддержкой пролога двадцать лет назад. У них ничего тогда не получилось.

dave ★★★★★
()
Ответ на: комментарий от dave

Японцы уже пытались создать машины пятого поколения с аппаратной поддержкой пролога двадцать лет назад. У них ничего тогда не получилось.

Ключевые слова «двадцать лет назад» и «тогда».

mix_mix ★★★★★
()
Ответ на: комментарий от dave

Какие конкретно теги используются - я не знаю, но могу сказать, что в случае (1+ most-positive-fixnum), вероятно, создается bignum в куче, и тогда значением выражения фактически является обычный указатель на тот вычисленный bignum. Это я так понимаю.

Так и есть.

mix_mix ★★★★★
()
Последнее исправление: mix_mix (всего исправлений: 1)
Ответ на: комментарий от mix_mix

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

dave ★★★★★
()
Ответ на: комментарий от mix_mix

Что сейчас принципиально изменилось в области построения таких машин? Какой профит от этого? Я люблю пролог, если что. Но вот широкого практического применения не вижу. Да и узкого, в принципе, тоже. И да, может сразу лучше рассчитывать на что-нибудь в духе mercury?

anonymous
()
Ответ на: комментарий от dave

Это теория ни на чем не основывается. А если смотреть статистику, то, например, с момента начала измерений IQ он постоянно растет. Хотя есть локальные ухудшения. СССР -> постсовок, например.

anonymous
()
Ответ на: комментарий от anonymous

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

onanij
()
Ответ на: комментарий от tailgunner

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

Легко раздавать утверждения, которые нельзя проверить.

и чем по-твоему FORTH-процессор более универсален, чем LITHP-процессор?

auto12884839
()
Ответ на: комментарий от tailgunner

Кроме x86 продается ARM, MIPS, PowerPC, даже немного SPARC. А вот Lisp-машин не продается совсем.

Следуя таким дурнопахнущим аргументам, можно заключить что Mictosoft (C) Шindoшs (TM) рвёт все жалкие недо-осы по всем параметрам.

auto12884839
()
Ответ на: комментарий от anonymous

Тут такая штука. Речь и язык очень сильно связаны со способностью человека мыслить. Практически все (старперы) в один голос утверждают, что лексикон современных молодых людей очень сильно оскуднел - многие не умеют выражать своих мыслей. Да это видно даже по ЛОРу. Так что, кое-какие основания у этой теории все же есть. Однако, тему развивать не хочу. Просто мне кажется, что японцы столкнулись тогда с какими-то фундаментальными проблемами.

dave ★★★★★
()
Ответ на: комментарий от auto12884839

и чем по-твоему FORTH-процессор более универсален, чем LITHP-процессор?

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

можно заключить что Mictosoft (C) Шindoшs (TM) рвёт все жалкие недо-осы по всем параметрам.

Заключай, конечно.

tailgunner ★★★★★
()
Ответ на: комментарий от anonymous

А если смотреть статистику, то, например, с момента начала измерений IQ он постоянно растет.

Неплохо бы пруфы предоставить. Вообще, IQ это достаточно условная величина, она отсчитывается от «среднего по больнице», как бы это среднее не скакало. И даже скакать оно не может без существенных изменений в виде патчей на ДНК или имплантов.

auto12884839
()
Ответ на: комментарий от tailgunner

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

Это Дзен такой? Мсье предлагает перейти на Дзен-процессоры?

Заключай, конечно.

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

auto12884839
()
Ответ на: комментарий от auto12884839

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

Это Дзен такой?

Это классика. Правда, ты с ней явно не знаком.

я недостаточно глуп

Не, вполне нормально.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Это классика. Правда, ты с ней явно не знаком.

Классика, применяемая таким противоестественным способом плавно превращается в Дзен.

Не, вполне нормально.

Для обычного человека нормально конечно, но такой степени мастерства, которую демонстрируешь ты, вряд ли когда-нибудь достигну.

auto12884839
()
Ответ на: комментарий от auto12884839

но такой степени мастерства, которую демонстрируешь ты, вряд ли когда-нибудь достигну.

Не скромничай. Тех заключений, что делаешь ты, мне никогда не сделать.

tailgunner ★★★★★
()

А как ваш ЯП помогает программисту в ситуации, когда происходит непредвиденное переполнение?

7> math:pow(2,1023).
8.98846567431158e307
38> math:pow(2,1024).
** exception error: an error occurred when evaluating an arithmetic expression
in function math:pow/2
called as math:pow(2,1024)

r ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.