Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Ну и я бы сам алгоритм в функцию загнал, которая просто результат возвращает. Чтобы его можно было тестами покрыть или ещё где-то позвать. А ввод-вывод уже за пределами этой функции.
Хотя для лабы или одноразового скрипта не принципиально, конечно.
Ну в целом ты конечно прав: assertы проверяют на ошибки в программе, а не на вшение данные
Но ведь и завершать программу исключением в крестах тоже нельзя (иначе будет корка или доктор ватсон) а в ненативных языках это ок
Вощем ненужно тут асерт, лучше явно raise Exception(".."), я просто хотел одним зайцем двух махов убить: и assert полетит и в stderr и exit code испортит емнип
Дык в крестах это тоже делает рантайм! Он даже выводит исключение. Просто потом terminate() зовётся со всеми вытекающими (деструкторы не зовутся, корка и т.п.).
ну то есть терминейт ничего не делает на винде, так?
Проверим
Calls abort or a function you specify using set_terminate.
abort:
Aborts the current process and returns an error code.
By default, when an app is built with the debug runtime library, the abort routine displays an error message before SIGABRT* is raised.
By default, in non-debug builds of desktop or console apps, abort then invokes the Windows Error Reporting Service mechanism (formerly known as Dr. Watson) to report failures to Microsoft. This behavior can be enabled or disabled by calling _set_abort_behavior and setting or masking the _CALL_REPORTFAULT flag.
А если я разыменую нуль, то получу тот же самый вацон, но без рантайма же
Ничего в «Винду» не завезли. Функция «signal» целиком определена в «CRT». Это такой же костыль, как в «Cygwin» или в «Mingw», целиком расположенный в библиотеке языка.
signal выполняет SetConsoleCtrlHandler и шаманит с «exception-action table».
В случае ошибки в общем случае управление передается операционке, которая делает дамп и сообщает пользователю, что всё плохо.
Однако в случае непойманного исключения рантайм плюсов вызвает terminate, который на линуксе выводит красивое сообщение, а на винде тоже выводит при линковке с дебажной версией, а в релизной версии результат ничем не отличается от обычной ошбки.
> SIGSEGV может, наверное.
ну то есть это платформо-зависимо. Сигсегв на позиксе, какой нить SEH на винде итд
Ну т.е. я не зря пишу в крестопрогах try { ... } catch (...) { /* тут логируем исключение */ return 1; } чтобы моя прога корректно завершалась с ошибкой, а не падала в дамп.
Кстати, у нас в эйфории исключений нет. Вот просто нельзя поймать и обработать, например, обращение к неинициализированной переменной или выход за границы массива или нарушение типизации.
Можно только сдохнуть
А я считаю, что это правильно.
Если ты не сервер приложений и не хост для плагинов, то ловить рантайм ошибки не нужно.
В ерланге, как я понимаю, все живут в отдельных мирах и общаются через IPC, так что "плагин" может помереть не затронув "хоста", да?
Двоеточия есть и в lua (обращение к члену таблицы как к члену объекта).
Про Эйфорию написано так
Craig's thesis was heavily influenced by the work of John Backus on functional programming (FP) languages
Очень странно. Функциональщина там есть в стандартной библиотеке (всякие filter итд, которые получают sequence и routine_id функции-колбека), но она далеко не first class citizen.
Разве что применение оператора целиком ко всем членам последовательности ({1,2,3} * 2 = {2, 4, 6}) можно назвать чем-то с родни FP
У эрланга свои "процессы" безопасные, они не могут по хардкору уронить процесс, хоть и в том же адресном пространстве. А сишный код у него обычно во внешних слейвах крутится чтобы не поднасрал (хотя вроде можно и dll'кой если очень доверяешь).
охуенно, когда из дипломной работы вырастает ЯП, про который вообще левые питухи пиздят через тридцать лет на сайте, который ориентирован на другую половину Земли
Windows XP, Opera, антивирус (зонтик?) проводной интернет или дайлап (экраничики), само собой far, windirtree, msn messenger, gimp, все существующие в то время браузеры (зачем?!), и весьма мелкий экран
ну попробуй в 2020 в америкашке выпустить игрушку с грудастой белой девушкой на обложке, я на тебя посмотрю, лол
но вообще обиженные были всегда
в 70-е евреи в США обиделись на Заппу за его песню про джуиш квин (в которой он хотел еврейскую девушку), а еще во времена маккартизма пиздюлей получили чуваки в голливуде, которые еще во время войны сняли какие-то фильмы про союз
MPU-401 это обычный старый миди, а AWE32 вроде болеекрутой был?
>джойстик
я тут недавно как раз приносил его чудесный API, где время между записью и чтением кодирует положение палочки)
>тип
ох, сколко же их было. У меня под паскаль был спец модуль натырен, который умеет играть .wav и .midi на разных картах, и имел свою утилиту для настройки даже
Эта песня - кочегара рок! Эта песня - кочегара рок!
Эта песня - кочегара рок! Эта песня - кочегара рок!
Эта песня - кочегара рок! Эта песня - кочегара рок!
Эта песня - кочегара рок! Эта песня - кочегара рок!
Эта песня - кочегара рок! Эта песня - кочегара рок!
Эта песня - кочегара рок! Эта песня - кочегара рок!
Она умела выдавать трёхголосый меандр (без частотной модуляции), что было, конечно, лучше писиспикера (у него меандр был одноголосый), но хуже, чем SID и звуковые карты, появившиеся в конце 1980-х — начале 1990-х.
Про джуниора я читал в Журдена) Там было много нота бене типа "данный сервис есть только у JR (или наоборот -- нету у JR), так что всегда проверяйте тип машины, его по такому-то адресу записывает бивос"
Лолшто. В эрланге можно и нужно ловить исключения, если ты знаешь, что они вот тут возникнут, и знаешь что с ними делать. Let it crash про другое, это про случаи, когда после исключения ты не знаешь, что дальше делать с пользовательской сессией какой-нибудь, и проще на неё забить и начать с чистого листа.
Вообще кстати error handling это отдельная сложная тема, которая почему-то в литературе не всегда освещена, и при обучении ей уделяют недостаточно внимания порой.
В итоге многие молодые программисты в нормальный error handling не могут, и у них то весь код забит ненужными проверками и кетчами (которые часто просто давят ошибку) то наоборот -- программа падает от ошибки в пользовательских данных
Другое дело, когда, например, по протоколу базовая станция ожидает один ответ, а от разрядившейся китайской мобилки ей приходит другой, согласно let it crash базовая станция крашит процесс-сессию и говорит, мол, давай подключайся заново.
warzon131 # 0
bormand # 0 ⇈
MAPTbIwKA # 0
warzon131 # 0 ⇈
Rooster # 0 ⇈
warzon131 # 0
bormand # 0 ⇈
З.Ы. Ну и почему 0 если ты об ошибке сигналишь? Зачем наёбывать вызывающего?
warzon131 # 0 ⇈
а завершаю, чтобы не пошло печатать массив, который пустой.
bormand # 0 ⇈
> exit(0)
Я вот про эту ветку. Здесь то явно не успех.
warzon131 # 0 ⇈
bormand # 0 ⇈
warzon131 # 0 ⇈
bormand # 0 ⇈
Хотя для лабы или одноразового скрипта не принципиально, конечно.
MAPTbIwKA # 0 ⇈
bormand # 0 ⇈
guest # 0
bormand # 0 ⇈
guest # 0 ⇈
Ну ок, можно конечно пеерписать и явно кинуть исключение. Это всё равно лучше, чем писать в stdout и возвращать 0
bormand # 0 ⇈
Про исключение соглашусь: будет и текст в stderr (не stdout, который часто перенаправлен!) и бектрейс и exit code 1 автоматом.
guest # 0 ⇈
Но ведь и завершать программу исключением в крестах тоже нельзя (иначе будет корка или доктор ватсон) а в ненативных языках это ок
Вощем ненужно тут асерт, лучше явно raise Exception(".."), я просто хотел одним зайцем двух махов убить: и assert полетит и в stderr и exit code испортит емнип
Но и неойманный Excepion будет тоже самое
bormand # 0 ⇈
У меня там обычно обработчик в main'е, поэтому норм.
guest # 0 ⇈
Хотя проще наверное кросс-платформенно поймать в main.
А во всех скриптовых языках плюс еще в JVM и в .NET это делает рантайм
bormand # 0 ⇈
guest # 0 ⇈
А в не дебаговой случается обраьботка операционкой
это вообще не часть стандарта небось?
bormand # 0 ⇈
Само собой. Ну terminate() при необработанном исключении - вроде часть стандарта, а сама диагностика и корки - нет.
guest # 0 ⇈
GCC:
>terminate called after throwing an instance of ....
Винда:
Процесс сдох, писнув так:
Faulting application name: 1.exe, version: 0.0.0.0, time stamp: 0x5f96e4fa
Faulting module name: 1.exe, version: 0.0.0.0, time stamp: 0x5f96e4fa
Exception code: 0xc0000409
А потом запустился тот, который вместо вацона:
Ну то есть в случае винды случилось ровно то, чтобы случилось, если бы я попытался разыменовать нуль.
А в GCC нет.
Да?
bormand # 0 ⇈
guest # 0 ⇈
Проверим
Calls abort or a function you specify using set_terminate.
abort:
Aborts the current process and returns an error code.
By default, when an app is built with the debug runtime library, the abort routine displays an error message before SIGABRT* is raised.
By default, in non-debug builds of desktop or console apps, abort then invokes the Windows Error Reporting Service mechanism (formerly known as Dr. Watson) to report failures to Microsoft. This behavior can be enabled or disabled by calling _set_abort_behavior and setting or masking the _CALL_REPORTFAULT flag.
А если я разыменую нуль, то получу тот же самый вацон, но без рантайма же
*какой вам сиг на винде, дурачье?
bormand # 0 ⇈
guest # 0 ⇈
Он обычно криво реализован: я там багу в "spawn" один раз нашел
Кстати, зачем?
Потому что часть С++ https://en.cppreference.com/w/cpp/utility/program/signal ?
Saehrimnir # 0 ⇈
signal выполняет SetConsoleCtrlHandler и шаманит с «exception-action table».
bormand # 0 ⇈
Ну т.е. дамп таки будет даже если не дебажная сборка. Просто без злоебучего гуёвого окошка.
guest # 0 ⇈
но дамп будет и у
на чистых сях
я так понимаю, тут рантайм не причем?
bormand # 0 ⇈
guest # 0 ⇈
и на linux это приводит к Segmentation Fault.
Подведем итог:
В случае ошибки в общем случае управление передается операционке, которая делает дамп и сообщает пользователю, что всё плохо.
Однако в случае непойманного исключения рантайм плюсов вызвает terminate, который на линуксе выводит красивое сообщение, а на винде тоже выводит при линковке с дебажной версией, а в релизной версии результат ничем не отличается от обычной ошбки.
> SIGSEGV может, наверное.
ну то есть это платформо-зависимо. Сигсегв на позиксе, какой нить SEH на винде итд
bormand # 0 ⇈
guest # 0 ⇈
Кстати, у нас в эйфории исключений нет. Вот просто нельзя поймать и обработать, например, обращение к неинициализированной переменной или выход за границы массива или нарушение типизации.
Можно только сдохнуть
bormand # 0 ⇈
guest # 0 ⇈
Если ты не сервер приложений и не хост для плагинов, то ловить рантайм ошибки не нужно.
В ерланге, как я понимаю, все живут в отдельных мирах и общаются через IPC, так что "плагин" может помереть не затронув "хоста", да?
Двоеточия есть и в lua (обращение к члену таблицы как к члену объекта).
Про Эйфорию написано так
Craig's thesis was heavily influenced by the work of John Backus on functional programming (FP) languages
Очень странно. Функциональщина там есть в стандартной библиотеке (всякие filter итд, которые получают sequence и routine_id функции-колбека), но она далеко не first class citizen.
Разве что применение оператора целиком ко всем членам последовательности ({1,2,3} * 2 = {2, 4, 6}) можно назвать чем-то с родни FP
bormand # 0 ⇈
guest # 0 ⇈
Если слейвы в твоем адресном пространстве, то может быть и надо как-то обрабатывать их ошибки.
А если нет -- пусть дохнут, бляди.
Именно потому я за inetd, postfix main, и CGI:)
Ну я так понимаю, что и эрланг тоже так работет
bormand # 0 ⇈
guest # 0 ⇈
Мне это нравится.
А вот питухи, ловящие рантайм исключение в джаве не нравятся, равно как и собачки в пыхе.
ps: а зачем майки запилили сервис хост, и гоняют охулион .dllок в одном процессе?
Desktop # 0 ⇈
thesis это вроде тема дипломной работы по-буржуйски
guest # 0 ⇈
контекст такой
Many design ideas for the language came from Craig's Master's thesis in computer science at the University of Toronto.
Desktop # 0 ⇈
guest # 0 ⇈
какой 2005-й )))
http://pl-euphoria.narod.ru/mess_gb.htm
guest # 0 ⇈
единственный человек в России (ну кроме меня) который знает про Эйфорию.
Если честно, что про Петерлинк я последний раз слышал 17 лет назад.
>Состояние на ноябрь 2002 года
понятно
http://pl-euphoria.narod.ru/peter/kinz/2002/index.html
Desktop # 0 ⇈
- оо, охуенно, я тоже в винде ставлю панель задач наверх
MAPTbIwKA # 0 ⇈
Windows XP, Opera, антивирус (зонтик?) проводной интернет или дайлап (экраничики), само собой far, windirtree, msn messenger, gimp, все существующие в то время браузеры (зачем?!), и весьма мелкий экран
Desktop # 0 ⇈
guest # 0 ⇈
ну или вырежи ее гимпом, да поищи
Desktop # 0 ⇈
тем более, когда действительно есть Инканус
guest # 0 ⇈
Desktop # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
юзнетовский форум, лол
трассировщик, кстати:
http://pl-euphoria.narod.ru/fr_e.png
Saehrimnir # 0 ⇈
guest # 0 ⇈
MAPTbIwKA # 0 ⇈
А как без него на винде?
guest # 0 ⇈
MAPTbIwKA # 0 ⇈
https://i.postimg.cc/V6wxb8Mm/faaar.png
Saehrimnir # 0 ⇈
bagrinho # 0 ⇈
guest # 0 ⇈
Цвет редактора упоминяется еще тут (я бы уверен, что edit.com был черным!)
https://books.google.ru/books?id=FTbctntiaHgC&pg=RA14-PP4&lpg=RA14-PP4
Saehrimnir # 0 ⇈
guest # 0 ⇈
Я помню, что он от турбовиженовых IDE цветом отличался.
у gw-basic снизу вроде была панлька с инфой
Saehrimnir # 0 ⇈
Arbatan_Pokrovan # 0 ⇈
guest # 0 ⇈
Arbatan_Pokrovan # 0 ⇈
guest # 0 ⇈
А кто это решает, и что такое "современное средство разработки"? VSCode?
bormand # 0 ⇈
MAPTbIwKA # 0 ⇈
MAPTbIwKA # 0 ⇈
https://encrypted-tbn0.gstatic.com/images?q=tbn%3AANd9GcS99VIqy_vhT231qnJw9 2Fcwoa5-8-sv7OJjQ&usqp=CAU
Saehrimnir # 0 ⇈
guest # 0 ⇈
guest # 0 ⇈
попробуй basic:
* нужно указывать номера строк
* кавычка на shift 2
* потом run
OCEHHuu_nemyx # 0 ⇈
https://youtu.be/Ne-09Bs_bRo
MAKAKA # 0 ⇈
А вот это конечно сексизм, сейчас бы такую обложку не смогли бы сделать
https://upload.wikimedia.org/wikipedia/en/7/70/The_Great_Giana_Sisters_Coverart.png
OCEHHuu_nemyx # 0 ⇈
MAKAKA # 0 ⇈
Desktop # 0 ⇈
сегодня всё намного целомудреннее
https://www.mobygames.com/images/covers/l/428914-nier-automata-day-one-edition-windows-front-cover.jpg
guest # 0 ⇈
Desktop # 0 ⇈
Можешь почитать про Probotector или как вообще Контру переименовывали, например
guest # 0 ⇈
Desktop # 0 ⇈
guest # 0 ⇈
ну попробуй в 2020 в америкашке выпустить игрушку с грудастой белой девушкой на обложке, я на тебя посмотрю, лол
но вообще обиженные были всегда
в 70-е евреи в США обиделись на Заппу за его песню про джуиш квин (в которой он хотел еврейскую девушку), а еще во времена маккартизма пиздюлей получили чуваки в голливуде, которые еще во время войны сняли какие-то фильмы про союз
Desktop # 0 ⇈
https://cdn.shopify.com/s/files/1/1366/2939/products/STREETS_PS4_UK_3D_1024x1024.png?v=158876 1329
Тут их аж три. Ну ок, с видимым бюстом три.
Ларка за годы стала сильно скромнее, но всё равно
https://livecards.co.uk/pi/shadow-of-the-tomb-raider-pc-37447.png
ну а промо-материалов пруд пруди (GTA, Saints Row the Third)
конечно, обложка Giana Sisters это вообще какой-то постер для b-movie, соглашусь
раз ты фанат 80-х, я тебе ещё принёс: http://2.bp.blogspot.com/-HnYOnMcIULs/UQchNRGOLXI/AAAAAAAAA1U/1fwipI8nVmU/s640/tumblr_lsv56pUnMT1qjeisgo1_500.jpg
OCEHHuu_nemyx # 0 ⇈
https://ru.wikipedia.org/wiki/MOS_Technology_SID
Это не 8-битный ЦАП, как было у игровых приставок той эпохи, а аппаратный трёхканальный FM-синтезатор с фильтрами и с формирователем огибающей.
guest # 0 ⇈
OCEHHuu_nemyx # 0 ⇈
Для писюка SB вышел в 1989-м году, GUS — в 1992-м. А SID на C64 был уже в 1982-м.
MAKAKA # 0 ⇈
кто-то из них умел только PCM, кто-то только MIDI (уже не помню), но SB всех убил.
Как ща помню три переменных окружения: IO, DMA и IRQ
OCEHHuu_nemyx # 0 ⇈
MAKAKA # 0 ⇈
я чото писал даже него, помню, что он дочитывал буфер, и дергал меня за IRQ..
OCEHHuu_nemyx # 0 ⇈
MAKAKA # 0 ⇈
IRQ и DMA понятно, что такое T надо гугльнуть
OCEHHuu_nemyx # 0 ⇈
OCEHHuu_nemyx # 0 ⇈
T — тип звуковой карты.
Возможные значения:
1 — Sound Blaster.
2 — Sound Blaster Pro.
3 — Sound Blaster 2.0.
4 — Sound Blaster Pro (SB Pro 2.0).
5 — MCA Sound Blaster.
6 — Sound Blaster 16, Vibra 16 или AWE32.
MAPTbIwKA # 0 ⇈
>джойстик
я тут недавно как раз приносил его чудесный API, где время между записью и чтением кодирует положение палочки)
>тип
ох, сколко же их было. У меня под паскаль был спец модуль натырен, который умеет играть .wav и .midi на разных картах, и имел свою утилиту для настройки даже
MAPTbIwKA # 0 ⇈
пиздец, и как тебе живется с тремя гигами памяти?
guest # 0 ⇈
guest # 0 ⇈
Эта песня - кочегара рок! Эта песня - кочегара рок!
Эта песня - кочегара рок! Эта песня - кочегара рок!
Эта песня - кочегара рок! Эта песня - кочегара рок!
Эта песня - кочегара рок! Эта песня - кочегара рок!
Эта песня - кочегара рок! Эта песня - кочегара рок!
OCEHHuu_nemyx # 0 ⇈
• в 1987-м году первая звуковая карта;
• в 1992-м году банкротство.
Недолго что-то они продержались.
В 1984-м году у «IBM» вышла машина «Junior»:
https://en.wikipedia.org/wiki/IBM_PCjr
Она умела выдавать трёхголосый меандр (без частотной модуляции), что было, конечно, лучше писиспикера (у него меандр был одноголосый), но хуже, чем SID и звуковые карты, появившиеся в конце 1980-х — начале 1990-х.
Погуглил «DSS» (он называется «дизни саунд соурс», а не «систем»), нашёл вот эту статью:
https://bellofuturo.livejournal.com/4760.html
Как я понял, это банальный ковокс. Аналогичную питушню можно было спаять самому на 16 резисторах и воткнуть в LPT-порт.
*****
Итого получается, что в 1980-х писюк мог порадовать только писиспикером, а на C64 уже был хоть какой-то синтезатор.
MAKAKA # 0 ⇈
bormand # 0 ⇈
black lives matter?
CHayT # 0 ⇈
guest # 0 ⇈
одно дело поймать факт недоступности файла или невозможности прибайндить сокет к адресу
и совсем другое поймать обращение к минус первому элементу массива, например
guest # 0 ⇈
В итоге многие молодые программисты в нормальный error handling не могут, и у них то весь код забит ненужными проверками и кетчами (которые часто просто давят ошибку) то наоборот -- программа падает от ошибки в пользовательских данных
CHayT # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
rotoeb # 0
guest # 0 ⇈