LINUX.ORG.RU

Избранные сообщения dnb

10 причин почему программист на С++ может выбить много денег

Форум — Development

Список в конце поста написан Лавсаном 2 года назад. (2011-03-23 19:56:00) (источник)
Надеюсь, автор не подаст жалобу в Роспатент за перепечатку :-)
Кстати, sudo cast lovesan.

Чтобы проверить актуальность вопроса, всю последнюю неделю я долго и нудно использовал этот список в дискуссиях. Чтобы разобрать отдельные пункты отдельно.

Временное резюме: С++ всё еще актуален по историческим причинам. Еще есть мобилки (sudo cast mono), гиперкластеры для шиндовс 3.11 (sudo cast vromanov) и базы данных. Т.к. он актуален, но не предназначен ни для чего (см. выводы в конце списка) новых специалистов по нему должно быть мало. Маленькая конкуренция на огромной области применения — огромное лавэ $$$. Вот это и есть истинная причина использовать кресты — возможность срубить €€€.

Честно говоря, «хитрый план» мне уже очень надоел, поэтому пора открыть карты.

Заодним, крестопоклонники смогут выйти на последний и решительный бой, т.к. сегодня пятница и вечером будет время пообщаться. Поклонникам мамкиного борща тоже наверняка есть что добавить, конструктивно и аргументированно.

Вот этот список:

  1. Вырвиглазный синтаксис и контекстно-зависимая грамматика
    • медленная компиляция
    • частые «internal error» в компиляторах
    • код плохо читается и его сложно поддерживать
    • разбор кода различными инструментами, вроде IDE, и его генерация - сильно затруднены
  2. ручное управление памятью
    • неудобства при работе с динамической памятью
    • утечки памяти
    • висячие ссылки
    • сегфолты
    • стандартные средства, как то malloc/new, работают медленно
    • фрагментация кучи
    • велосипедные аллокаторы на каждом шагу
      • которые далеко не факт что эффективнее malloc/new

    • велосипедные счетчики ссылок на каждом шагу, опять же
      • медленная работа
      • перерасход по памяти

    • отладка затруднена
    • написание GC, по факту, невозможно, отчасти из-за (5), (7) и (8)
  3. Никакого ABI
  4. Нестандартизированный и непредсказумый name mangling
  5. Дублирование функционала Си
    • сами фичи из Си никуда не деваются при этом
      • отчасти из-за того, что по функционалу превосходят аналоги из C++

    • запутывает новичков
    • malloc - new/new[], free - delete/delete[]
    • препроцессор - шаблоны
    • указатели - ссылки
      • ссылка не может быть NULL, что способствует появлению висячих ссылок и сегфолтов

    • структуры - классы
    • stdio - iostream
  6. Стандартная библиотека убога
    • Отсутствует даже такой функционал, как вменяемая работа со строками и многомерные массивы
      • Юникод?

  7. Слабая типизация
    • способствует ошибкам
    • затрудняет отладку
    • const не дает абсолютно никаких гарантий
    • при этом система типов невероятно переусложенена
      • в основном из-за пунктов (2), (5) и (9)
      • медленная компиляция
      • частые внутренние ошибки в компиляторах

  8. объектая система убога
    • практически никакой интроспекции
      • отладка затруднена
    • передача объектов по значению
      • понятие идентичности объекта теряет смысл
      • добавляет сложностей в управлении памятью
      • добавляет сложностей при отладке
      • используется часто, по причине (2)
        • перерасход по памяти
        • медленная работа

    • множественное наследование неудобно в использовании
      • проблема ромба по дефолту не разрешается никак

    • исключения в конструкторах гарантированно влекут утечку памяти
      • исключения в деструкторах тоже, и просто утечку - еще в лучшем случае
        • коды ошибок деструкторы и конструкторы возвращать не могут
          • ошибки в них не обработать никак
            • поэтому ими стараются не пользоваться
              • раздувание кода

    • деструктор можно вызывать до выхода из блока кода, или до delete
      • гарантированная утечка ресурсов/сегфлот
      • это не предотвратить никак, деструктор обязан быть public

    • одиночная диспетчеризация
      • виртуальные методы в конструкторах не работают
      • реализована убого
        • pure virtual function call
        • сложности в случае с множественным наследованием
        • деструкторы обязаны быть виртуальными
          • по дефолту - не виртуальные

        • никаких интерфейсов, только классы

    • порядок инициализации статических членов классов не определен
    • private, public и protected не дают никаких гарантий сокрытия данных
      • к инкапсуляции же не относятся совершенно никак

    • отсутствие «свойств»
      • вынуждает городить getter'ы и setter'ы
        • раздувание кода
        • размывание интерфейса класса

    • неявно генерирумые конструкторы, деструкторы и операторы присваивания
    • «friend» нарушают инкапсуляцию
  9. шаблоны
    • очень сильно замедляют компиляцию
    • раздувание кода
    • обфускация кода
    • результат раскрытия плохо предсказуем
    • сложности в отладке
      • километровые и плохо читаемые сообщения об ошибках при компиляции

    • нарушают инкапсуляцию
      • обязаны содержать реализацию в заголовочных файлах

    • позволяют генерировать некорректный код
  10. исключения
    • отсутствие finally/unwind-protect
      • заставляет городить классы ради одних деструкторов
        • раздувание кода
        • медленная компиляция
        • медленная работа

    • конфликтуют с другими возможностями языка
      • конструкторы/деструкторы
      • ручное управление памятью

    • работают медленно
    • малофункциональны (ср. CL condition system)

По причинам 3, 4, 5, 9 и 10 C++ совершенно неприменим для системного и низкоуровневого программирования. А по причинами 1, 2, 5, 6, 7, 8, и, опять же, 9 и 10 - и для прикладного.

У C++ нет области применения.

stevejobs
()

Как пустить весь исходящий трафик через определенный интерфейс?

Форум — Admin

Есть интерфейсы ppp0,ppp1,ppp2. Нужно, каждые 5 минут пускать весь траф сервера через следующий интерфейс. Это можно сделать, добавив строку в крон, но какую строку - не знаю.

Пустить трафик через определенный ip я могу с помощью команды:
ip route add tab 2 default via 192.168.1.1 src 192.168.10.2
и iptables -t nat -A POSTROUTING -s ip моего сервера -o ppp0 -j SNAT --to-source 192.168.10.2

Но как пустить именно через интерфейс? мой ifconfig:

ppp3      Link encap:Point-to-Point Protocol
          inet addr:192.168.10.2  P-t-P:192.168.127.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1446  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:742 (742.0 B)  TX bytes:92 (92.0 B)

ppp1      Link encap:Point-to-Point Protocol
          inet addr:192.168.10.2  P-t-P:192.168.127.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1446  Metric:1
          RX packets:12 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:742 (742.0 B)  TX bytes:92 (92.0 B)

ppp2      Link encap:Point-to-Point Protocol
          inet addr:192.168.10.2  P-t-P:192.168.127.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1446  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:98 (98.0 B)  TX bytes:92 (92.0 B)

 , , ,

bossuvarkin
()

Помогите решить.

Форум — Development

Если лень читать - надо быстро посчитать:

 ( 3877^n)- 1) / ( 3877 - 1 ) mod 139968, где n - числа порядка 10^9.




Предыстория. Тут недавно в новостях в новости про раст разговор зашел про бенчмарки, а конкретно про fasta(http://benchmarksgame.alioth.debian.org/u64q/fasta-description.html#fasta), но это не важно.

Решил я значит тут запилить масштабируемый lc-генератор. Я искал в интернетах что-то подобное - нашел только: https://github.com/johannesgerer/jburkardt-c/blob/afff376e712b07088c09e729e89... но оно не работает и полезного я нашёл там только:

SEED(N) = a^N * SEED + ( a^N - 1) / ( a - 1 ) * b

Но до этого я смог дойти сам. В конечном итоге я всё запилил - всё работает, но при распараллеливании возникла проблема.

Надо инициализировать каждый воркер значением: a^N mod m и ( a^N - 1) / ( a - 1 ) mod m.

Посчитать быстро a^N mod m - труда не составляет, ибо a^(N/ 2) ^ 2 = a^N. Но вот как посчитать ( a^125000000 - 1) / ( a - 1 ) mod m - я так и не осилил.

Сейчас использую кастыль(но он работает дольше чем генерация 250кк чисел на одном ведре):

double mod_139968(double n) {
  return n + (floor(n * 1. / 139968) * -139968);
}


double calc_sumpown(uint64_t n) {
  double sum = 1, apown = 1;
  while(--n) {
    sum += (apown = mod_139968(apown * 3877));
  }
  sum = mod_139968(sum);
  return sum;
}

Я уже сижу над этим дня 3-4 и перегуглил всё что мог - не помогло. Я даже не могу придумать/найти ключевые слова чтобы что-то на эту тему нагуглить.

По ссылке выше есть https://github.com/johannesgerer/jburkardt-c/blob/afff376e712b07088c09e729e89..., но она не работает, а что конкретно она там решает - я не понимаю.

 , ,

registrant27492
()

Заблокировать АНБшный зонд в пару строчек

Форум — Talks

Нашел интересную заметку:
https://webcache.googleusercontent.com/search?q=cache:MgNguLTcMtkJ:www.matvee...

оригинал уже предусмотрительно потерли, там описывается как можно долго и нудно заблокировать часть ботнета AKAMAI

а может быть уже есть какой-нибудь RBL со всеми хостами этого Акамая?

в iptable можно парой строчек заблокировать по RBL?

Перемещено leave из security

 , , ,

sanyock
()

Как собрать apk для android из сорцов с github?

Форум — Development

Есть простой способ для людей, не умеющих в програминг?
Вот скачал я с github zip-архив, распаковал, внутри обнаружились файлики Android.mk, CleanSpec.mk и кучка директорий с непонятными файлами внутри.
Какие пакеты установить в систему и что запустить, чтобы на выходе получился apk для девайса с процессором MediaTek MT6795?

 ,

Lavos
()

Как с помощью dd менять одни байты(значения) идущие подряд другими? Как использовать метасимволы, маски при этом? Приведите примеры, если можно.

Форум — General

 , , , ,

Mindincrash
()

Куда разместить бота telegram на python?

Форум — General

Пробовал heroku - клиент не идет на мой пк, openshift - хз как там запустить простой скрипт, cloud9 - на нем остановился, но там часто падает бот, из-за ограничений. Подойдет только бесплатный. Бот использует polling.

 , , ,

vovawed
()

Помогите выбрать ноутбук для девушки с прицелом на Linux до 300 у.е.

Форум — Linux-hardware

Нужно девушке моей выбрать ноутбук. Бюджет сильно ограничен, так что ориентируюсь на Б/У. Винда ей не нужна, нормально работала раньше на линуксе.

Я смотрю в сторону Thinkpad, т.к. если Б/У то, как по мне лучше их. Но дел с ними раньше не имел и конкретную модель выбрать не могу.

Экран нужен 14-15". Сам ноут, желательно, полегче.

Основные задачи - браузер, LaTeX, PDFки, IntelliJ IDEA (учится), кинчики.

 

aquadon
()

Посоветуйте что почитать, посмотреть, по ассемблеру в Linux, и хороший debugger.

Форум — General

Желательно или по NASM или GNU Assembler. Второй более принят в Linux-сообществе?

 , ,

Mindincrash
()

Задолбали скриншоты с лором или минутка самопиара

Галерея — Скриншоты

Сильно кастомный Notion WM
Vimperator
Dzen2
mpd + ncmpcpp

Собственный бложик с кастомным css на jekyll.

 , ,

e7z0x1
()

D, Go и Rust, взлетит ли что-нибудь?

Форум — Development

Привет, LOR. На данный момент в окружающее пространство уже некоторое время накатывает следующая мысль: «Разработчикам прикладного ПО, использующим в своей практике Си и C++, крайне необходимо облегчить жизнь, избавив от ошибок с памятью и предоставив удобные механизмы для параллельного программирования». Одни адепты, этакие Базаровы от программирования, предлагают воплощать задумку с помощью новых языков: D, Go и Rust. Другие же, коих пока явно больше, всячески не желают выходить из своей зоны комфорта, предлагая включать необходимое в новые стандарты уже используемых инструментов.

Как думаешь, садиться ли уже сейчас за изучение одного из убийц Си/C++, чтобы через 5 лет не оказаться на обочине индустрии, или же все продолжит идти в старом русле с незначительными вливаниями новшеств?

 , , , ,

Nashorn
()

Python в научных вычислениях

Новости — Документация
Группа Документация

Доктор физико-математических наук Андрей Грозин прочитал цикл лекций об использовании Python в целях ликвидации безграмотности среди студентов, аспирантов и прочих. Презентации были приготовлены для представления в среде Jupyter. Видеоматериалы лекций с разрешения лектора доступны под свободной лицензией CC-BY-SA. Исходные видеофайлы будут выложены в торрентах позже.

( читать дальше... )

>>> YouTube

 ,

Evgueni
()

Залогиниться под рутом в скрипте

Форум — General

Есть удаленный компьютер под Debian Wheezy, на котором:

  • нет ssh,
  • не настроен sudo,
  • у su нет опции -S,
  • остутствует expect и pexpect,
  • при загрузке обновляется репозиторий git и из него выполняется определенный скрипт на Python 3.

Возможно ли с такими ограничениями выполнить определенные действия от рута питоном или создав bash-сценарий и запустив его?
В частности нужно создать правило udev.

 , ,

metrokto
()

Изучение ассемблера: суть и с чего начать?

Форум — Development

Доброго времени суток всем ЛОРовцам!

Начну немного с предистории. Живу под «гордым» названием веб-разработчик. Для клиентов маг и бездарь одновременно (хотя, второе чаще). Для понимающих просто очередной фронтендщик, который пишет велосипеды на ванильке. Помимо JS знаю, наверное, ниже среднего PHP, BASH и Lua. Когда-то учил Basic, Pascal, C и Python. И тут понятно, что не могу я назвать себя программистом - левел не тот. Вот по этой причине и для души хочу начать изучать ассемблер.

А теперь к сути. Почитал немного информации, понял, что есть команды процессора, используя которые мы создаем программу. Эти команды у разных процессоров/архитектур разные. Но как с этим всем работать пока не понял. Исходя из этого у меня есть ряд вопросов:

  1. Я так понимаю, что текст программы на ассемблере необходимо компилировать, да? Есть какой-нить предустановленный компилятор в GNU/Linux?
  2. Есть какие-то общие правила написания программ? Что-то вроде var arr; function(){};. Как-то же необходимо связывать меж собой команды процессора. Что это за WASM или TASM?
  3. Сборка программы на ассемблере возможна не на устройстве, для которого пишется программа? Если сравнивать с компиляцией ядра Linux.
  4. Я так понимаю, что для «переменных» необходимо жестко указывать ячейку памяти процессора и ОЗУ, да? Что на счет этого стоит учить? Необходимо для старта читать кучу материала о страницах памяти и т.д.?

Планирую начать с чего-то простого, например, Z80 или MC6800. Думаю, завтра у меня еще вопросы будут :) .

В общем, кто что посоветует, с чего начать, где эти основы брать? А то я как по среди моря не вижу куда плыть.

P.S. За ранее всем спасибо!

 ,

EmgrtE
()

Защита WiFi

Форум — Admin

А не подскажете ли как защитить клиентов, подключенных к моей точке от подобных прог:
http://4pda.ru/forum/index.php?showtopic=275319
http://4pda.ru/forum/index.php?showtopic=615058

Видел эффекты от них, на беспарольных точках - впечатлило, но я как понимаю если даже ключ будет wpa/psk не даст защиты, скажем если этот злоумышленник, как и все другие пользователи будет доступен к ВиФи. В общем интересно, а можно ли что-то для защиты от этих прог выставить в настройках роутера?

 , , ,

NK
()

Убойный твиттер devops отрасли

Форум — Talks

Открылся в твиттер попахивающий желтизной канал devops отрасли, над некоторыми постами ржал до упаду - https://twitter.com/yellow_madops

Примеры:
«Цыгане обучили украденного ребенка Ruby и теперь он попрошайничает у инвесторов»
«Иисус терпел и нам велел» - протодьякон Никодим о внедрении OpenStack в датацентрах РПЦ
В докер-контейнере Amazon ECS ночевал бомж, укравший SSO токен у неосторожного стартапера. Скандальные фото!!!

 ,

Gamer
()

Мой Firefox

Галерея — Скриншоты

С момента моего прошлого скриншота в галерее конфигурация лисы почти не изменилась, однако там я лишь вскользь упомянул о сделанных мной настройках и установленных дополнениях, иначе пост был бы слишком огромным. Однако, многие заинтересовались, а отвечать каждому было лень, поэтому было решено написать этот пост, где я всё разложу по полочкам. Итак, поехали.
Установленные дополнения (некоторые не столь важные я упоминать не буду):

  • Classic Theme Restorer (Customize UI) - Довольно известное дополнение. Позволяет очень тонко настроить внешний вид браузера
  • Disconnect - Убирает «жучки» с сайтов
  • Download Panel Tweaker - некоторые улучшения для встроенной панели загрузок
  • Greasemonkey - менеджер пользовательских скриптов
  • NoScipt - отключает JavaScript на сайтах
  • Pure URL - убирает всякий мусор из адресной строки
  • Stylish - менеджер пользовательских стилей
  • Tabs Mix Plus - Позволяет очень тонко настроить вкладки и всё, с ними связанное
  • Менеджер сессий - Позволяет сохранять текущие вкладки (сессии)
  • Ublock - Легковесный аналог AdBlock
  • VkOpt - дополниельный набор настроек и функций для вк

Установленные юзерстили:

Установленные юзерскрипты:

  • Anti AdBlock Killer - болкирует блокировщики блокировщика рекламы
  • LOR Code Tools - знаменитый юзерскрипт от Eddy_Em
  • VK Download Media - потому что кнопка «скачать» у vkopt выглядит ужасно

Стартовая страница
Тема: Operafx, также хорошо смотрится с темой Mx4.
Иконки noscript перекрашены для лучшего соответствия общей теме оформления. Как это сделать, можн прочитать тут.
Ш: Arial 16
cast smilessss и shayger как интересующихся

>>> Просмотр в png

 

sudopacman
()

эволюция классового общества

Форум — Development

Проблема такова (SBCL)

(defclass c1 () ((i :initform 1)))
(defparameter *i1* (make-instance 'c1))
(defclass c1 () ((i :initform 1)(j :initform (print "Ura"))))
(trace update-instance-for-redefined-class)
(defclass c1 () ((i :initform 1)))
(slot-value *i1* 'i)
  0: (UPDATE-INSTANCE-FOR-REDEFINED-CLASS #<C1 {253D0051}> NIL NIL NIL)
  0: UPDATE-INSTANCE-FOR-REDEFINED-CLASS returned #<C1 {253D0051}>

«Ura» не напечаталось вовсе. Умный рантайм оптимизировал процесс эволюции и класс сразу скакнул в своей эволюции из первобытно-общинного строя в социализм, минуя промежуточную версию. Если бы мы между изменениями класса обратились к сущности, то прогресс прошёл бы за два этапа.

Поэтому приведённый вот здесь

http://www.lispworks.com/documentation/HyperSpec/Body/f_upda_1.htm#update-ins...

пример про превращение прямоугольных координат в полярные - на самом деле будет работать только с оговорками.

Если мы потом захотим преобразовать полярные координаты ещё в какие-то, а потом ещё и ещё, то нам нужно будет написать не N ветвей на каждый этап эволюции, а N*(N-1), на скачок от любой версии к любой другой. Плюс может оказаться нетривиальной задачей понять, откуда и куда мы мигрируем. Впрочем, это не так уж и тяжело - (наверное) достаточно завести слот «номер версии», который будем заменять другим на каждом шаге. Типа такого:

(unintern 'c1)
(unintern '*i1*)
(defclass c1 () ((i :initform 1) (version1 :initform nil)))
(defparameter *i1* (make-instance 'c1))
(defclass c1 () 
  ((i :initform 1)
   (j :initform (print "Ura"))
   (version2 :initform nil)))
(trace update-instance-for-redefined-class)
(defclass c1 () 
  ((i :initform 1)
   (version3 :initform nil)
   ))
(slot-value *i1* 'i)

  0: (UPDATE-INSTANCE-FOR-REDEFINED-CLASS #<C1 {24134041}> (VERSION3) (VERSION1) (VERSION1 NIL))
  0: UPDATE-INSTANCE-FOR-REDEFINED-CLASS returned #<C1 {24134041}>

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

А теперь - почему у меня с этим проблемы. Я захотел довольно простую (казалось бы) вещь - поменять тип поля с числа на строку с сохранением данных. Данные должны преобразоваться в строку с помощью prin1-to-string.

Тут вопроса, собственно, нет. Это просто пока что мысли вслух :)

 ,

den73
()

ЛИСПИТОН

Форум — Development

Обратили внимание, что ЛИСПИТОН «Pixie» (Pixie lang) становится всё популярнее среди энтузиастов программирования из многих стран.

Скажем прямо: Pixie это легковесный Lisp, одинаково пригодный как для общего применения, так и для shell scripting.

Написан на языке RPython (на котором написан PyPy), стандартная библиотека в значительной степени вдохновлена Clojure и другими функциональными ЯП; предоставляет быстрый GC и молниеносный JIT.

Далее информация не для средних умов:

  • Immutable datastructures
  • Protocols first implementation
  • Transducers at-the-bottom
  • Coroutines for transducer inversion of control (transducer to lazy-seq conversion)

TODO:

  • Easy FFI
  • Pattern matching

Ознакомиться и начать широко применять в повседневной работе: https://github.com/pixie-lang/pixie

 , , , ,

vim
()

Vala for Windows

Форум — Development

Решил покодить в универе на Vala. Сижу сейчас на паре. Скачал компилятор под венду, скачал GTK под венду, установил Geany.
Компилирую простую программу — не работает (запускается, но никакого ввода/вывода). Компилирую другую — работает. Пробую несколько раз, понимаю, что не работают только программы, где не используются массивы.

void main() {
	stdout.printf("Hello world!\n");
}
void main() {
	int[] a = { 42 };
	stdout.printf("Hello world!\n");
}
Тут первая выведет хелловорд, а вторая не выведет. Что за фигня? Неужели на вражеской венде всё настолько плохо?

 , , , ,

CYB3R
()