[11:05:02] <valexey > обработка ошибок в стиле Go - говно
[11:07:20] <valexey > такое ощущение, что язык проектировали то ли сишники то ли обероновцы с полным блабом головного мозга
[11:08:10] <valexey > которые попытались решить свою чисто локальную проблему, случайно перекрыв путь решения более глобальных проблем.
[13:10:49] <ilovb> Вчера дома накрылся тырнет, и я потратил вечер на ковыряние текстовой подсистемы в ЧЯ
[13:11:16] <ilovb> Вывод: В черной коробке определенно не хватает средств отладки
[13:11:58] <ilovb> В чужом коде разобраться невозможно
[13:12:06] <ilovb> жопа одним словом
[13:14:16] <valexey > угу. дебагер пошаговый крайне нужен не для отлова ошибок, а для того, чтобы разобраться как нечто новое работает
[13:14:29] <valexey > новая либа, системное окружение и так далее
[13:14:59] <ilovb> Я на том форуме уже писал как с профайлером ЧЯ боролся
[13:15:07] <ilovb> бесполезная штука
[13:15:22] <valexey > говорить что пошаговый отладчик зло - все равно что говорить, что физикам-эксперементаторам нужно отказаться от бОльшей части регистрирующей аппаратуры
[13:15:35] <ilovb> Ага :)
[13:15:45] <valexey > да и вообще от опытов нужно отказаться. фигли? нужно сразу правильную теорию писать!
[13:15:58] <valexey > а эксперементы - они для приматичных слабаков
[13:16:15] <ilovb> Вот вызывается процедура, а откуда вызывается хер поймешь
[13:16:43] <ilovb> И трап нарочно не сделаешь, т.к. это код текстовой подсистемы :)
[13:17:38] <ilovb> Вчера только полным убийством ЧЯ получил цепочку вызовов. Хорошо хоть ЧЯ перед смертью трап в системном окне винды показывет...
[13:18:12] <ilovb> Гемор невероятный
[13:22:25] <ilovb> Вот так сей трап выглядит: http://imglink.ru/show-image.php?id=eb85f5276beb83687f0af1830939db8b
[13:23:41] <valexey > кстати, я подобным способом отлаживал в свое время squid
[13:24:20] <ilovb> :)
[13:24:42] <valexey > точнее разбирался в его устройстве
[13:24:56] <valexey > подкладываем бомбочку, запускаем - смотрим, рванет или нет.
[13:25:05] <valexey > и если рванет то где и как. и кугда ошметки полетят
[13:25:33] <ilovb> Точно! Такой процесс и есть :D
[13:27:22] <ilovb> И еще меня дико бесит полное отсутствие комментариев в коде
[13:27:43] <valexey > угу
[13:27:56] <ilovb> Некоторые процедуры ну нереально понять по коду
[13:28:11] <valexey > вообще код выглядит как нечто вторичное. как будто его транслятором с другого, более высокоуровнего языка, в КП перегнали
[13:29:20] <ilovb> У них там блин гениальные идеи в головах были, а мы теперь догадывайся по коду чего они такого охринительного хотели замутить :D
[13:30:29] <ilovb> И кстати в сравнении с текстовой подсистемой из книги "Прожект" в ЧЯ монстр тот еще
[13:30:45] <valexey > ну они там много навернули, да
[13:31:03] <ilovb> 1к против 10к строк кода
[13:31:05] <valexey > забыв задокументировать (то есть книжку написать)
[13:31:10] <valexey > гы
[13:31:37] <ilovb> они паблик интерфейс то прокомментировали да
[13:31:51] <ilovb> а вот приват конечно никому не нужен....
[13:32:01] <ilovb> они сами то как пишут в команде?!
[13:32:17] <valexey > вообще, местами мне кажется, что асм (как его привыкли оформлять) читабельней, чем код в ББ (где по 10 statement'ов на одну строку лепят подряд)
[13:32:35] <valexey > ilovb: уже похоже никак :-)
[13:32:40] <valexey > они ж заморозили разработку
[13:32:46] <ilovb> ну да :D
[13:33:36] <valexey > то есть разработка оказалась слишком дорогой :-)
[13:33:57] <valexey > кстати, никто из разработчиков ББ похоже для фану его не продолжает пилить. что как бы намекает…
[13:34:26] <valexey > на то, что он писан так и язык таков, что фану с него нуль.
[13:37:48] <valexey > в общем,у меня ощущение складывается, что ЧЯ нужно слегка прикопать и если что-то делать, то на базе книжки Проект Оберон
[13:40:47] <ilovb> Я такие мысли тоже хотел на форуме озвучить
[13:41:56] <ilovb> Делать с нуля на основе оригинального оберона. А в ЧЯ только подсматривать(комуниздить) некоторые моменты :D
[13:45:35] <ilovb> Вот 1С ругают за деревянность, а какой там все таки отладчик человечный
[13:45:49] <ilovb> Да и везде так, окромя оберонов :)
[13:48:24] <valexey > ну, все же не везде.  в D с отладчиком хреновато например
[13:49:05] <ilovb> Ну ладно, с вездЁй я дал маху.. :)
[13:50:08] <ilovb> блин работать надо, а я тут словоблудием занимаюсь :D
[13:50:15] <valexey > другое дело что везде где хреново создание нормального отладчика имеет высокий приоритет
[13:54:02] <ilovb> а оберкоровцам похер. Там сурьезные мужики. Они отладчиками не мараются
[13:58:17] <valexey > ну и глупо. особенно если они на ББ собираются кого-то программированию учить
[14:00:53] <ilovb> мне кажется что у них нет понимания того факта, что отладчик не только при написании кода нужен :)
[14:03:44] <valexey > точнее - не только для ловли багов
[15:47:42] <valexey > гм. что бы там не говорили, но Go это не оберон. Ибо например вот канонический пример кода на Go:
[15:47:49] <valexey > func Compare(a, b []byte) int {
   for i := 0; i < len(a) && i < len(b); i++ {
       switch {
       case a[i] > b[i]:
           return 1
       case a[i] < b[i]:
           return -1
       }
   }
   switch {
   case len(a) < len(b):
       return -1
   case len(a) > len(b):
       return 1
   }
   return 0
}

[15:48:04] <valexey > число ретурнов на строку кода зашкаливает :-)
[16:01:07] <valexey > корректный код в Go, который абсолютно не корректен будет будучи переписан на Си или С++:
[16:01:11] <valexey > func NewFile(fd int, name string) *File {
   if fd < 0 {
       return nil
   }
   f := File{fd, name, nil, 0}
   return &f
}

[17:51:05] <valexey > да, а вот полиморфизм в Go реализован совсем-совсем иначе
[17:51:22] <valexey > не похоже ни на C++/C#/Java, ни на Оберон
[17:51:40] <valexey > Пожалуй даже на ObjC не похож.
[18:10:20] <valexey > и, кстати, прочитав описалово Go, я теперь не очень понимаю что где в памяти у него лежит.
[18:12:08] <valexey > такое ощущение складывается, что все, или почти все, у него в куче
[18:12:12] <valexey > аки в жабе
[18:12:21] <valexey > и даже больше - сами объекты похоже фрагментированны
[19:05:39] <vlad2> А как там низкий уровень выглядит?
[19:13:28] <valexey > в смысле?
[19:16:47] <vlad2> Одинаковый адрес для двух объектов, напаример.
[19:21:03] <valexey > до деталей реализации пока не добрался
[19:22:05] <valexey > а так низкий уровень там через пакет unsafe
[19:27:41] <vlad2> А че там с кодами возврата не так?
[19:28:14] <vlad2> Исключений нет?
[19:29:17] <valexey > исключений нет, да
[19:29:30] <valexey > зато можно вернуть несколько значений за раз
[19:29:56] <valexey > в результате на одну строку логики в перемешку с оной логикой торчит 3-4 строчки кода обработки ошибок
[19:30:09] <valexey > логику не видно, виден только код обработки
[19:30:10] <vlad2> А че так грустно? Типа не бывает исключений в системном языке или чего?
[19:30:11] <valexey > ужас
[19:30:41] <valexey > исключений там нет, но есть паника (panic) с раскруткой стека
[19:30:45] <valexey > которую можно поймать :-D
[19:31:10] <vlad2> ASSERT? :)
[19:31:24] <valexey > panic :-)
[19:31:30] <valexey > с раскурткой стека же
[19:31:43] <valexey > то есть если оно сработало, то еще можно поймать и не сложиться
[19:31:52] <vlad2> И чего, в паланах нет исключений?
[19:32:42] <valexey > нет. по сути эта паника - и есть исключения
[19:32:53] <valexey > но они используются в крайних случаях, когда уже все
[19:33:04] <valexey > в результате обычный код выглядит так:
[19:33:09] <valexey > func root(w http.ResponseWriter, r *http.Request) {
    c := appengine.NewContext(r)
    q := datastore.NewQuery("Greeting").Order("-Date").Limit(10)
    greetings := make([]Greeting, 0, 10)
    if _, err := q.GetAll(c, &greetings); err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
        return
    }
    if err := guestbookTemplate.Execute(w, greetings); err != nil {
        http.Error(w, err.Error(), http.StatusInternalServerError)
    }
}

[19:33:16] <vlad2> Они как-то типизированы? Или как AASERT? :)
[19:34:57] <valexey > типизированны. то есть если панику поймать recover'ом, то оно выдаст тот аргумент который был передан функции panic, а дальше можно уже посмотреть какого он там был типа и чо с ним вообще можно сделать
[19:35:22] <valexey > но это не важно. важно что ВСЕ либы используют еррор-коды
[19:35:24] <valexey > см код выше
[19:35:37] <valexey > и это МАЛЕНЬКИЙ код
[19:35:56] <valexey > но соотношение кода обрабатывающего ошибки и полезного кода уже видно
[19:36:07] <vlad2> Угу. Печально.
[19:36:14] <valexey > и в отличае от сей, тут не прокатит трюк с ленивыми вычислениями
[19:36:28] <valexey > ибо возвращают несколько значений за раз
[19:36:38] <valexey > то есть даже си будет читабельней
[19:38:40] <vlad2> Да, че-то не додумали. Возврат нескольких значений сделали, а отдельную херню для возврата ошибки - нет. Опять все вместе.
[19:39:42] <vlad2> Уж лучше просто соглашение - возврат всегда код оишибки, все остальное через аргументы.
[19:39:59] <valexey > ну, говорю же сишникооберонщики ваяли :-) им надоело возвращаемое значение через указатель в виде аргумента передавать (ведь возвращают все функции код ошибки, а два значения вернуть низя), ну и запилили возможность возвращать сразу МНОГО переменных
[19:41:25] <vlad2> Ну да, а просто избавиться от возврата ошибки, чтобы спокойно писать f(g(k())) - это уже следующий шаг, видимо :)
[19:42:02] <valexey > кстати, там теперь присваивание (=) это не expression, a statement
[19:42:08] <valexey > равно как и ++,--
[19:42:38] <valexey > то есть язык стал более императивным нежели Си
[19:44:31] <vlad2> А че там с посмертным дампом?
[19:46:18] <valexey > хез. не смотрел еще.
[19:46:43] <valexey > но в принципе средства отладки там вроде как приличные. и профайлер есть и прочее разное
[20:56:52] <ilovb> valexey, я вот думаю что задачка про разузлование на форуме скорее всего будет не интересна
[20:58:46] <ilovb> Там SQL, а на форуме с ним вроде никто и дела не имеет (окромя меня)
[21:00:24] <ilovb> Кто у нас еще СУБД занимается?
[21:01:30] <vlad2> Я занимаюсь постольку поскольку.
[21:01:49] <vlad2> Всеми силами стараюсь, чтоб этого говна было меньше.
[21:01:49] <ilovb> Так один есть :)
[21:02:05] <ilovb> SQL?
[21:02:17] <vlad2> Угу. Кода на SQL.
[21:02:31] <ilovb> Да гадость та еще
[21:02:43] <ilovb> но не денешься никуда
[21:03:06] <vlad2> Про деревья интересно было почитать, спасибо за ссылку.
[21:03:47] <vlad2> Но вывод по-прежнему один - нафиг-нафиг какие-либо усложнения на счтороне SQL.
[21:04:32] <ilovb> А вот у меня как раз задача когда разузловывать нужно на стороне SQL.
[21:04:35] <valexey > у меня тоже БД появляется
[21:04:37] <valexey > GQL
[21:04:38] <vlad2> Чем тупее все там лежит (без триггеров и прочих харанимых процедур) - тем лучше.
[21:05:51] <ilovb> valexey, што за звер GQL&
[21:05:58] <ilovb> GQL?
[21:07:29] <valexey > Google Query Language
[21:07:34] <ilovb> :D
[21:08:01] <valexey > не реляционка, в общем
[21:08:42] <ilovb> Да гуголь вездесущ
[21:10:02] <valexey > ну там есть возможность и sql cloud storage использовать
[21:10:11] <valexey > но нахрена мне реалиционка в проекте?
[21:10:25] <ilovb> А что за проект?
[21:10:53] <valexey > да так. немного медицины, немного математики, немного веба и смартфонов
[21:11:19] <ilovb> Любопытная солянка :)
[21:11:45] <ilovb> Это как оно все в одной кастрюле оказалось?
[21:13:00] <ilovb> Нашел по нашей задачке готовое решение http://infostart.ru/public/93020/
[21:13:32] <ilovb> Формирую за год на смешных объемах - "Недостаточно памяти" :)
[21:13:48] <valexey > ну есть прибор (наш) он снимает с человека некие показания. пересылает на смартфон по блютусу (точнее по ble) там обрабатывается хитро, показывается + до кучи данные идут на сервер (веб-сервер) в облаке где хранятся и откуда их можно посмотреть как в режиме реального времени, так и историю/статистику глянуть
[21:14:27] <valexey > полчаса измерений - примерно мегабайт данных
[21:14:36] <valexey > много людей, много часов измерений
[21:15:36] <ilovb> Интересные у вас задачки
[21:15:43] <valexey > угу
[21:15:57] <valexey > сами себе ставим :-)
[21:16:06] <ilovb> это как?
[21:16:15] <valexey > в смысле?
[21:16:26] <valexey > ну веб родился на прошлой неделе по моей инициативе например
[21:16:45] <valexey > у нас же нет дяди-заказчика по сути. то есть мы не аутсорсингом занимаемся
[21:16:53] <valexey > соответственно ТЗ формируем тоже сами
[21:17:06] <ilovb> Т.е. вы сами себе сервисы проектируете?
[21:17:19] <ilovb> И сами их продаете?
[21:18:07] <valexey > продаваться будет устройство конечному пользователю
[21:18:15] <valexey > то есть обычному человеку. баксов за 100
[21:19:08] <valexey > но в общем, да. если вдруг сервисы будут платные, то "продавать" тоже сами
[21:19:08] <ilovb> Без абонентки за сервис?
[21:19:22] <valexey > а это уже как сложится. может быть и без
[21:19:27] <ilovb> понятно
[21:20:07] <ilovb> romiras, SQL любишь? :D
[21:20:08] <valexey > чот я походу матлаб повесил.
[21:20:31] <romiras> я тут только мимом проходил.
А шо?
[21:21:21] <romiras> Меня небось обсуждали, да?
[21:21:43] <ilovb> Да вот думаю создавать на форуме тему связанную с SQL или нет
[21:21:54] <valexey > кстати, если кто-то будет говорить, что Go это такой оберон с неправильным синтаксисом - бейте канделябром. Там ну очень мало общего. Только разве что синтаксис привязанных к типу функций похож на синтаксис Оберона-2. И все
[21:21:54] <ilovb> опрос так сказать
[21:22:08] <romiras> а кроме меня некому будет ответить?
[21:22:33] <ilovb> Все остальные 2 человека уже ответили :)
[21:22:48] <ilovb> на опрос
[21:22:57] <romiras> Тогда Го - сильно искажённый Оберон? :)
[21:23:45] <valexey > оно к оберону имеет отношения меньше чем к ObjC
[21:23:49] <valexey > или к ерлангу
[21:25:08] <romiras> Го создали путём слития нескольких веток одновременно
[21:25:23] <romiras> Эдакая смесь ежа с ужом
[21:25:40] <valexey > не это все равно что сказать, мол Паскаль получили путем слития нескольких веток одновременно :-)
[21:25:53] <valexey > язык действительно новый.
[21:26:05] <valexey > новый настолько, насколько это вообще возможно
[21:26:13] <valexey > сейчас насколько возможно
[21:26:13] <romiras> влили новуый кров
[21:26:43] <valexey > не сказал бы что я в восторге от результата, плюсы мне таки больше нравятся, но тем не менее :-)
[21:29:09] <romiras> Меня интересует, можно ли навесить Блэкбоксовый каркас на Джаву.
[21:29:30] <romiras> Допустим, какое-то его подмножество
[21:31:23] <ilovb> Что значит навесить? Переписать?
[21:32:04] <ilovb> Или типа сделать аналог ЧЯ на жабе?
[21:32:45] <romiras> Host-часть и наверно часть Std реализации
[21:34:12] <valexey > ты смотришь на GPCP что-ли?
[21:34:13] <romiras> Правда, Пётр как-то делился некоторыми проблемами несовместимости между семантикой КП на GPCP и BB.
[21:34:18] <valexey > или прям таки на языке жаба?
[21:34:48] <romiras> по-моему, ББ на Джаве никак не возможен
[21:35:09] <romiras> В смысле, ядро и компилятор
[21:35:14] <valexey > почему? прям таки портировать - нет. но написать по мотивам - вполне
[21:35:37] <valexey > компилятор хоть на прологе пиши :-) какая разница?
[21:37:07] <romiras> да нет смыслу ещё один компилятор придумывать, когда уже их два есть. Речь о каркасе пока, с возможностью подзагрузки модулей, если это возможно.
[21:38:22] <romiras> Ещё я на днях копался в сети в поисках информации по связки GCC + Оберон и выискал, что оказывается, в прошлом была такая попытка для Оберона-2
[21:38:56] <valexey > с подзагрузкой модулей у жабы все хорошо
[21:39:10] <valexey > вот с подвугрузкой придется слегка помучаться с класслоадерами
[21:40:43] <romiras> Называлась она Oxygen Oberon-2 compiler. Исходников так и не видел, хотя проект был зарегистрирован. Не помню, на Берлиозе что-ли.
Еле нашёл автора. Отправил ему письмо спросить что да как, но он пока не ответил ничего.
[21:43:04] <valexey > а ты готов серьезно допиливать чужой компилятор?
[21:45:35] <romiras> Да не то что готов-не готов . Мне интересно как это работает. Если там мало возиться, то я может чего и доработаю.
[21:45:55] <romiras> до компиляторостроительства не дорос ещё
[21:46:19] <ilovb> А Host чем заинтересовал? Архитектурой?
[21:48:34] <ilovb> То, что там реализовано имхо за пределами ЧЯ мало ценности имеет
[21:49:17] <romiras> Host сам по себе не столь интересный. Интересно попробовать КП на новых архитектурах.
[21:49:25] <valexey > для того чтобы полноценно дорабатывать чужой компилятор нужно иметь квалификацию выше чем при написании своего
[21:49:54] <romiras> я и не спорю
[21:50:19] <ilovb> Не боги горшки обжигають :)
[21:50:45] <valexey > угу. но если исходить из практических соображений - лучше написать новый компилятор с нуля
[21:50:56] <valexey > ну, а если чисто поиграться, то можно конечно и чужой потискать
[21:52:01] <romiras> Разве GPCP так плох для Джавы?
[21:52:27] <ilovb> А кто его знает? Я не ковырял
[21:52:29] <valexey > почему же? он не плох. только ББ на нем не напишешь :-)
[21:52:41] <valexey > точнее не портируешь
[21:52:51] <valexey > нужно пересматривать архитектуру ББ.
[21:53:07] <ilovb> А ее так и так нужно пересматривать :D
[21:53:38] <valexey > тогда уж проще пересмотреть архитектуру Оберон ОС, оно хоть задокументированно нормально :-)
[21:53:45] <valexey > и реализовать для современных реалий
[21:53:54] <ilovb> Вот я тоже так думаю
[21:54:01] <valexey > /me посмотрел на полкило докуметации в коричневой обложке
[21:54:58] <ilovb> Я вот читаю прожект и понимаю что оберон и ЧЯ очень разные весчи
[21:55:20] <romiras> За то время, что я возился с ББ, я пришёл к выводу, что он довольно сильно завязан на особенностях архитектуры и низлежащей ОС. Довольно старомодный подход.
Почти всё мыслимое реализуется на голых возможностях ОС. Вплоть до позиции вывода текста.
[21:56:22] <ilovb> А оберон то по лицензии как? Кто знает?
[21:56:43] <valexey > если реализуешь что-то по мотивам - то не будет проблем
[21:56:43] <romiras> лицензия полукоммерческая, так сказать
[21:56:48] <valexey > если копипастить код - хз
[21:56:54] <valexey > но думаю тоже особых проблем не будет
[21:59:52] <ilovb> Вот вы говорите компилятор... Мне больше интересует что компилировать. Оригинальный оберон?
[22:00:28] <ilovb> Или модификацию какую?
[22:00:43] <valexey > я за оберон-7
[22:00:51] <valexey > он простой, примитивный.
[22:00:54] <valexey > и фичастый
[22:00:57] <valexey > :-)
[22:01:09] <ilovb> Я на нем остановиться?
[22:01:26] <ilovb> Мне вот этот момент не понятен
[22:03:05] <ilovb> Я на нем остановиться? -> И на нем остановиться?
[22:07:30] <ilovb> А чем он лучше старого? Я не разбирался
[22:07:37] <ilovb> Там много отличий?
[22:08:28] <valexey > скорее это хорошая точка для старта
[22:08:37] <valexey > он местами попроще. что-то вычищено
[22:08:50] <valexey > если что-то аналогичное КП делать, то на базе Оберона-07
[22:09:00] <ilovb> понятно
[22:09:32] <valexey > Тем более что если за базу брать Проект Оберон, то Оберон-07 там более близок чем Оберон-2 или КП
[22:13:45] <romiras> О-07 слишком выхолощенный. По-моему, он не подходит для десктоп-программ.
[22:14:32] <valexey > почему? по моему, вполне потянет
[22:14:55] <valexey > но в любом случае начать можно с него. наработав опыт и набив шишек станет понятно куда дальше двигаться
[22:15:05] <valexey > ладно, пойду домой
[22:15:20] <romiras> Слишком большая нагрузка на библиотеки, которых вообще нема. Компилятор - ядро, а библиотеки как раз и дают всю мощь в разработке
[22:15:32] <romiras> счастливо
[22:15:44] <valexey > с созданием либ у оберона вообще проблемы. он не слишком дружелюбен либостроителям
[22:21:14] <romiras> rifat добавлял в свою реализацию Оберона-07 какую-то особенность. Кажется, что-то с динамическими массивами.
[22:42:58] <vlad2> Грсуто без динамических массивов. Брэйнфаком попахивает :)
[22:43:46] <vlad2> Типа можно обойтись, но зачем?
[23:05:49] <TRUE> ilovb: тему на форуме создавай alexux тебе объяснит, что ты ничего ещё не знаешь : )
[23:27:14] <valexey> ну, на самом деле динамические массивы можно не вшивать в язык
[23:27:28] <valexey> они как раз вполне реализуются (системной)библиотекой.
[23:27:44] <valexey> ну, то есть такой которая использует какой-нибудь SYSTEM прямо либо косвенно