Author Topic: Имбецилы  (Read 20103 times)

0 Members and 1 Guest are viewing this topic.

Offline Triton

  • Posts: 5744
Reply #75 on: November 13, 2009, 13:51
На мой взгляд, таки да, не хватает возможности явно указывать разрядность целочисленных типов. Также не хватает конкретных правил по преобразованию этих типов друг в друга и возможности средствами языка отслеживать арифметическое переполнение.
Что-то вроде int( 8 ), checked unsigned(32) и т.п.
Но это уже Ада получится. Жаль, что Ада не так распространена как Си, это очень достойный язык.
Молиться, поститься и слушать радио Ватника

Offline Алексей Гринь

  • Blogger
  • *
  • Posts: 24115
  • Gender: Male
Reply #76 on: November 13, 2009, 14:36
и возможности средствами языка отслеживать арифметическое переполнение
Проверка задним числом — постфактум — в таких делах не уместна. Проверяйте заранее пределы. Средствами языка Си возможно всё.

Вы сами-то поняли, что написали?
?

Не так давно вы хвалили Си и порывались писать собственный ООП слой на макросах (изобретать синтаксис). В Си очень и очень маленький словарь стандартной библиотеки (а в freestanding варианте - и вовсе почти весь отсутствует).
В общем, опять взаимоисключающие параграфы.
Ой лол. Взаимоисключающим параграфом было бы, если бы библиотеки у Си не было вообще. А она есть.

Что мешает сделать gtk-биндинг для любого языка (собственно, они и есть для многих языков) и не изобретать велосипед?
Тем, что это рукоблудие. Vala — родной для gtk язык без оверхеда и без синтаксиса больного дисграфией имбецила. Биндинги — костыли и говно.
肏! Τίς πέπορδε;

Offline Triton

  • Posts: 5744
Reply #77 on: November 13, 2009, 14:56
и возможности средствами языка отслеживать арифметическое переполнение
Проверка задним числом — постфактум — в таких делах не уместна. Проверяйте заранее пределы. Средствами языка Си возможно всё.
Давайте тогда уж и обращение по нулевому указателю средствами ОС не отслеживать, и деление на ноль оставлять как есть, и игнорировать запись данных в невыделенную страницу памяти. Будте последовательны. Это же тоже проверки задним числом, а средствами языка Си возможно всё.

Вы сами-то поняли, что написали?
?
Значит не поняли...

Тем, что это рукоблудие. Vala — родной для gtk язык без оверхеда и без синтаксиса больного дисграфией имбецила. Биндинги — костыли и говно.
Уровень аргументации вполне ясен, спасибо.
Молиться, поститься и слушать радио Ватника

Offline myst

  • Posts: 35581
Reply #78 on: November 13, 2009, 16:07
Контроль типов транслятором — это тоже проверка задним числом. :eat:
Даёшь полную свободу машинного кода и безошибочных кодеров!

Reply #79 on: November 13, 2009, 16:09
Я питал надежды по поводу BitC, но кажется, там всё стухло. :'(

Offline Алексей Гринь

  • Blogger
  • *
  • Posts: 24115
  • Gender: Male
Reply #80 on: November 13, 2009, 16:48
Значит не поняли...
А вы поясните, если такой умный.

Давайте тогда уж и обращение по нулевому указателю средствами ОС не отслеживать, и деление на ноль оставлять как есть, и игнорировать запись данных в невыделенную страницу памяти. Будте последовательны. Это же тоже проверки задним числом, а средствами языка Си возможно всё.
Ололо, ОС как раз и написана на Си, так что вы опять фейлите. Всё это реализовно как раз средствами языка Си :D

Контроль типов транслятором — это тоже проверка задним числом.
С фигов ли? Отличай compile-time-проверку от run-time-проверки. Транслятор балуется с compile-time, а это НИКАК не проверка задним числом. Более того, код вообще не запустится, если что не так: проверки не будет ВООБЩЕ. Вот run-time — проверка задним числом, да. Но как раз она Сяхой не поддерживается.
肏! Τίς πέπορδε;

Offline Triton

  • Posts: 5744
Reply #81 on: November 13, 2009, 17:12
Значит не поняли...
А вы поясните, если такой умный.
Бесконечная рекурсия, всего и делов.


Давайте тогда уж и обращение по нулевому указателю средствами ОС не отслеживать, и деление на ноль оставлять как есть, и игнорировать запись данных в невыделенную страницу памяти. Будте последовательны. Это же тоже проверки задним числом, а средствами языка Си возможно всё.
Ололо, ОС как раз и написана на Си, так что вы опять фейлите. Всё это реализовно как раз средствами языка Си :D
Гринь, спокойно, санитары уже выехали.  :D
Фейлите как раз вы, вы даже не понимаете, о чём я говорю.
Молиться, поститься и слушать радио Ватника

Offline myst

  • Posts: 35581
Reply #82 on: November 13, 2009, 17:17
Ололо, ОС как раз и написана на Си, так что вы опять фейлите. Всё это реализовно как раз средствами языка Си :D
Которая?

Reply #83 on: November 13, 2009, 17:22
С фигов ли? Отличай compile-time-проверку от run-time-проверки. Транслятор балуется с compile-time, а это НИКАК не проверка задним числом.
Всё, что после написания кода,  задним числом. Грамотное проектирование, грамотное кодирование — 0 ошибок, так? д'Артаньяны же не ошибаются. ;)

Offline Triton

  • Posts: 5744
Reply #84 on: November 13, 2009, 17:25
Quote
run-time — проверка
Когда ваш файловый менеджер обнулит при переносе файл с вашими-очень-важными-данными, вместо того, чтобы свалиться по эксепшену; когда ваш сервер отдаст злоумышленникам все приватные данные (после банального переполнения буфера или же, например, в результате атаки на переполнения умножения в calloc), вместо того чтобы упасть и своим трупом закрыть проход врагу, вот тогда вы мне расскажете про ненужность автоматических проверок целочисленной арифметики.
Молиться, поститься и слушать радио Ватника

Offline myst

  • Posts: 35581
Reply #85 on: November 13, 2009, 17:27
Способность Си превращать салат в кровавое месиво уже не раз аукнулось на эти годы. Прав был старик Вирт, ох, прав...

Offline Алексей Гринь

  • Blogger
  • *
  • Posts: 24115
  • Gender: Male
Reply #86 on: November 13, 2009, 17:45
Quote
Quote
Значит не поняли...
А вы поясните, если такой умный.
Бесконечная рекурсия, всего и делов.
Ну, блин, введите в пример третью структуру, не то важно. Компилер останавливается сразу же, даже не войдя в рекурсию, потому что он не знает, какой это такой тип - struct B. Ему нужно делать пинка под зад, то бишь форвард-декларейшен. Будь он двухпроходным, вошёл бы в рекурсию, да так бы и написал, что рекурсия.

Гринь, спокойно, санитары уже выехали.  :D
Фейлите как раз вы, вы даже не понимаете, о чём я говорю.
Ну вы-то можете говорить о чём угодно, только вот делаете вы не по теме. Обсуждались ограничения си. Вы в пример приводите вещи, как раз в 99.9% случаев реализованные на си.

Когда ваш файловый менеджер обнулит при переносе файл с вашими-очень-важными-данными, вместо того, чтобы свалиться по эксепшену; когда ваш сервер отдаст злоумышленникам все приватные данные (после банального переполнения буфера или же, например, в результате атаки на переполнения умножения в calloc), вместо того чтобы упасть и своим трупом закрыть проход врагу, вот тогда вы мне расскажете про ненужность автоматических проверок целочисленной арифметики.
Атаки переполнения и умножения в calloc существуют как раз из-за нежелания делать предпроверку, о которой я благую весть несу. Наличие в мире такой вещи, как "исключения", никак на это не влияет.
肏! Τίς πέπορδε;

Offline Triton

  • Posts: 5744
Reply #87 on: November 13, 2009, 18:04
Гринь, спокойно, санитары уже выехали.  :D
Фейлите как раз вы, вы даже не понимаете, о чём я говорю.
Ну вы-то можете говорить о чём угодно, только вот делаете вы не по теме. Обсуждались ограничения си. Вы в пример приводите вещи, как раз в 99.9% случаев реализованные на си.
Вы отличайте всё же палец от сами знаете чего. "Реализовано в языке" (как механизм с определённой семантикой) и "реализовано на языке" (как произвольный алгоритм) - это вещи разные совершенно.
Эти "вещи" реализованы аппаратурой процессора, ядром и принятой моделью исполнения процессов. А уж на чём они написаны - дело десятое. Хоть на басике, хоть в машинных кодах.
Когда программа делает *(int*)(NULL) = 123, то она прибивается операционной системой как глючная, а вовсе не потому, что такова семантика данной конструкций. По семантике это undefined behaviour, и с тем же успехом эта команда могла бы форматировать вам диск или менять разрешение на мониторе.

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

Reply #88 on: November 13, 2009, 18:31
Кстати fclose(NULL) согласно спецификации также обладает undefined behavior, и, надо сказать, в glibc этот behavior таки действительно undefined. (Во всяком случае, в версии glibc приблизительно трехлетней давности.) Ни проверок, ни игнорирования NULL, ни вызова abort()...
Одна единственная опечатка if (file == NULL) мне стоила почти недели отладки программы, которая работала "почти всегда" и падала в рандомном месте.
Тоже нерадивый программист в моём лице виноват?
Молиться, поститься и слушать радио Ватника

Offline myst

  • Posts: 35581
Reply #89 on: November 13, 2009, 19:08
Попробуйте переписать тот же багнутый алгоритм на Оберон, а потом его хакнуть - успехов.
Кстати, из Oberon'а можно было бы сделать очень неплохой системный язык... Но гигатонны кода на C...

Reply #90 on: November 13, 2009, 19:11
In April 2009, Shapiro - driving force behind both BitC and Coyotos.[2] - announced that he had accepted a position at Microsoft to work on the Midori project, and that after August 2009 he would not be working further on BitC[3].

BitC is no longer under active development.
Ну точно стух. :'(

Offline Алексей Гринь

  • Blogger
  • *
  • Posts: 24115
  • Gender: Male
Reply #91 on: November 14, 2009, 00:15
Будь он двухпроходным, вошёл бы в рекурсию, да так бы и написал, что рекурсия.
В моновом Сишарпе, нопремер:
  Struct member `monostest.C.b' of type `monostest.B' causes a cycle in the struct layout(CS0523)

Эти "вещи" реализованы аппаратурой процессора, ядром и принятой моделью исполнения процессов.
Это, уважаемый, фелософея и димагогея. Любое 2 + 2 в итоге «реализованы аппаратурой процессора». Что вы хотите этим доказать?

Вы отличайте всё же палец от сами знаете чего. "Реализовано в языке" (как механизм с определённой семантикой) и "реализовано на языке" (как произвольный алгоритм) - это вещи разные совершенно.
Ухты, налицо путание семантики и синтаксиса. Если си синтаксически не понимает исключений, переполнений или ООПа, это не значит, что оно нереализуемо семантически.

С точки зрения семантики, разницы между

Quote
if(a == 0)
   fatal("Divide by zero!");
result = b / a;
   

и

Quote
try
{
   result = b / a;
}
catch(DivideByZeroException e)
{
   fatal("Divide by zero!");
}

НЕТ.
То, что вы втираете, это синтаксис. Да, средствами синтаксиса не ничего такого не реализовано. Оно и правильно.

"Реализовано на языке", "реализовано в языке" - бла-бла-бла, эти постоянные бессмысленные категоризации никому не упёрлись.

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

Тоже нерадивый программист в моём лице виноват?
Да, это ваша ошибка, а не си.
肏! Τίς πέπορδε;

Reply #92 on: November 14, 2009, 00:34
ag@ag-laptop:~/Проекты/cf$ cat main.c
#include "core/cfException.h"
#include "core/cfInvalidCastException.h"
#include "core/cfObject.h"

int main(void)
{
    CF_TRY
    {
        cfObject* o = CF_BOX_BOOL(false);
        int i = CF_UNBOX_INT(o);
        printf("Triton is cool!!111\n");
    }
    CF_CATCH(e)
    {
        printf("There was an invalid statement, but I ignored it! :)\n");

        CF_CATCHED;
    }
    CF_END_TRY;

    return 0;
}
ag@ag-laptop:~/Проекты/cf$ cd ./bin/Debug
ag@ag-laptop:~/Проекты/cf/bin/Debug$ ./cf

There was an invalid statement, but I ignored it! :)
ag@ag-laptop:~/Проекты/cf/bin/Debug$
肏! Τίς πέπορδε;

Reply #93 on: November 14, 2009, 00:42
Quote
CF_CATCHED
facepalm.bmp
肏! Τίς πέπορδε;

Offline Triton

  • Posts: 5744
Reply #94 on: November 14, 2009, 01:14
Ок, я буду на вашем языке разговаривать с вами.
Это ваша ошибка и проблема, что вы не понимаете (к примеру) всей глубины механизма шаблонов Си++, которые давно вкурило всё прогрессивное человечество. Учите матчасть и гуглите, гуглите.
Наше учение истинно потому что верно.
Молиться, поститься и слушать радио Ватника

Offline sknente

  • Posts: 3656
  • кавайная шкодница в чепчике
Reply #95 on: November 14, 2009, 04:44
Еще один спор ни о чем? Ням-ням.
:3

Offline myst

  • Posts: 35581
Reply #96 on: November 14, 2009, 14:57
Еще один спор ни о чем?
Предмет спора не имеет значения, важен процесс. ;)

 

With Quick-Reply you can write a post when viewing a topic without loading a new page. You can still use bulletin board code and smileys as you would in a normal post.

Note: this post will not display until it's been approved by a moderator.
Name: Email:
Verification:
Type the letters shown in the picture
Listen to the letters / Request another image
Type the letters shown in the picture:
√49 Напишите ответ строчными буквами:
«Сто одёжек, все без застёжек» — что это?: