Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: PureBasic  (Прочитано 30714 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Neki
Интересующийся

nl
Offline Offline

« : 03-01-2016 17:29 » 

PureBasic это новая версия языка программирования бейсик с широкими возможностями. Стандартная библиотека содержит множество функций (примерно 1500) различной направленности, такой как GUI (графический интерфейс – окна, кнопки, таблицы и пр.), 2D и 3D, растровая и векторная графика, базы данных, регулярные выражения, функции криптографии (AES, Base64, CRC32, MD3, SHA1, SHA2, SHA3 и др.), функции работы с интернетом, в т. ч. протоколами TCP, UDP (поддерживается IPv4 и IPv6), а также с HTTP/HTTPS, FTP, E-MAIL и функций обработки исключений в релизных программах с указанием места ошибки (имя исходного файла, номер строки и причина ошибки), функции работы с ZIP, 7z, TAR (gz и bzip2) архивами др. функции. Это далеко не полный список. Ознакомится со всеми функциями, а также с особенностями языка и его IDE можно в онлайн справке. http://purebasic.com/documentation/index.html
Язык довольно прост и по большей части интуитивно понятен. Он очищен от "мусора" присутствующего в традиционном бейсике и в него добавлены новые, конструкции существенно упрощающие программирование, например такие как ассоциативный массив, двусвязный список, пространства имен и др. Доступны все Windows API функции. Чтобы не возникало конфликта имен с функциями стандартной библиотеки, у API добавлен нижний пробел между именем функции и открывающей скобкой. Пример вызова функции MessageBox.
Код:
MessageBox_(0, "Текст", "Заголовок", #MB_ICONINFORMATION)
Будет у функции окончание A или W зависит от настроек компиляции (ASCII либо Unicode).
Язык сочетает низкий порог вхождения (легкодоступен для понимания) и широкие возможности, которые практически ничем не ограничены. Они близки к .NET подобным языкам, но при этом, код компилируется в натив (неуправляемый код) и доступны ассемблерные инструкции, в которых кроме базового набора допустимы также MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, SSE4a, AVX и 3DNow!, EM64T и AMD64. Такой обширный набор поскольку в процессе компиляции исходного файла задействован компилятор ассемблера FASM и доступны почти все его возможности, в т. ч. макрокоманды, выполняемые во время компиляции.
Среда разработки достаточно удобна и состоит из редактора кода (с подсветкой синтаксиса, автодополнением, сверткой кода и т. д.), визуального редактора форм, отладчика (можно выбрать интегрированный, консольный либо же внешний) у которого среди прочих возможностей доступна отладка по сети. Среда многоязычна и среди прочих присутствует русский язык. Он выбирается в настройках. Цепочка следующая: меню Файл (File) -->  Настройки (Preferences) -->  Язык (Language).
Компилятор создает 32 и 64 разрядные приложения и библиотеки (зависит от настроек компиляции) которые имеют небольшой размер и не зависят от сторонних библиотек кроме системных, по умолчанию присутствующих в Windows. После небольшой модификации файлов среды разработки, возможно создание драйверов режима ядра для Windows.
В виду простоты и возможностей языка его можно порекомендовать как для обучения в качестве первого языка, так и для профессиональной разработки софта. Он очень удобен для создания программ, таких как инжекторы, хуки системных функций и пр.

Среда разработки не требует установки и будет работать с любого носителя информации допускающего чтение, запись и исполнение файлов. Запускать следует кликнув по файлу PureBasic Portable.exe.

Пара скриншотов среды разработки.






Ссылка для скачивания среды программирования PureBasic.
https://www.dropbox.com/s/zld5l3f5z89jni4/PureBasic%205.40%20LTS%20Windows%20x86%20x64%20Portable.rar

Зеркало 1.
http://rghost.net/7rpfgnVl8

Зеркало 2.
http://turbobit.net/iqbfdbsus5o5.html
« Последнее редактирование: 04-01-2016 13:25 от RXL » Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 03-01-2016 17:51 » 

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

Поддерживаются ли более современные парадигмы, чем структурная (при беглом просмотре документации не обнаружил)? Если нет, в чем состоит образовательная ценность языка (не говоря о профессиональной)? Пока даже не берем в расчет однозначное мнение Дейкстры по сабжу:

Цитата
Практически невозможно научить хорошо программировать студентов, ориентированных первоначально на БЕЙСИК: как потенциальные программисты они умственно оболванены без надежды на исцеление.

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

Назовите, пожалуйста, хотя бы одно преимущество в данной области перед тем же C, например.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Neki
Интересующийся

nl
Offline Offline

« Ответ #2 : 03-01-2016 18:18 » 

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


Цитата
Пока даже не берем в расчет однозначное мнение Дейкстры по сабжу:
Ответ есть в вики. https://ru.wikipedia.org/wiki/Бейсик
Цитата
В ответ на критику адепты Бейсика замечают, что критики приписывают языку те негативные стороны, которые следовало бы отнести к его неправильному применению. Недостатки Бейсика (если иметь в виду ранние диалекты) проявляются при попытке профессиональной разработки на нём сложных и крупных программ и при использовании его как базового языка для обучения программистов, но ни для одного их этих применений данный язык не предназначался; его основной задачей было предоставить студентам-непрограммистам возможность после минимального обучения самостоятельно писать простейшие программы для собственных нужд, чтобы не отвлекать на эту работу специалистов. Этой задаче язык вполне соответствует.

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

Цитата
Назовите, пожалуйста, хотя бы одно преимущество в данной области перед тем же C, например.
Ну например проще. На словах это не объяснить. Если хотите можете написать небольшую программу на C, которую я переведу на PureBasic и тогда можно будет их сравнить.
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 03-01-2016 18:56 » 

При необходимости ООП прикручивается макросами или препроцессором.

Посмотрел макросредства в документации, но не сообразил, каким образом, например, реализовать полиморфное поведение классов-наследников. Можете показать на простом примере (базовый класс, дочерний класс, единственный полиморфный метод)?

Но процедурной достаточно для многих проектов. В том же Windows API и OpenGL чистая процедурщина без ООП и никто не жалуется.

Не вполне понятен аргумент. Возьмем, к примеру, какой-либо из наиболее ходовых паттернов GoF, скажем, Composite. Как его реализовать средствами сабжа, чтобы при этом никто не пожаловался?

То же касается SOLID, GRASP и подобных инструментов проектирования.

Если хотите можете написать небольшую программу на C, которую я переведу на PureBasic и тогда можно будет их сравнить.

https://forum.shelek.ru/index.php/topic,3152.msg56723.html#msg56723 - совсем небольшая функция, иллюстрация к опубликованной на форуме статье. Можно попробовать размяться на ней, там всего несколько строк, причем никакой объектной, функциональной и прочих продвинутых парадигм, чистая покрытая мхом структурщина. Функция настолько проста, что даже в комментариях не нуждается. Сохраним ясность кода после перевода?

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

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 03-01-2016 19:27 » 

Dale, Зря ты так. Билли и Пол тоже начинали с бейсика. И чего сейчас имеют и изрбрели. Улыбаюсь Правда времена были другие. 1975 год на дворе и компьютер Альтаир.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Qulac
Постоялец

ru
Offline Offline

« Ответ #5 : 03-01-2016 20:01 » 

Neki, лучшая реклама ЯП это IDE для него, которая написана на нем самом.  Улыбаюсь
Записан
Neki
Интересующийся

nl
Offline Offline

« Ответ #6 : 03-01-2016 20:51 » 

Цитата
Посмотрел макросредства в документации, но не сообразил, каким образом, например, реализовать полиморфное поведение классов-наследников.
Речь шла о простой реализации ООП без наворотов...

Цитата
Не вполне понятен аргумент.
ООП может быть реализовано на базе функций. Многие Windows API функции (например CreateWindowEx) возвращают указатель на область памяти, данные которой можно считать объектом.

Цитата
совсем небольшая функция
Функция слишком элементарная и ее упростить не получится (разве что изменив алгоритм).
Речь шла о другом. О конструкциях языка упрощающих программирование.
Допустим для хранения данных необходимо дерево, частный случай, хранение информации обо всех файлах во всех подпапках заданной папки. В PureBasic его можно сделать из структуры содержащей двусвязный список.
Код:
Structure Files
  Name.s ; Имя файла
  Size.q ; Размер файла
EndStructure

Structure Tree
  DirName.s            ; Имя папки.
  List Files.Files()   ; Список файлов текущей папки.
  List Dirs.Tree()     ; Список вложенных папок текущей папки.
EndStructure
Каждый элемент двусвязного списка "Dirs" содержит экземпляр структуры "Tree", который в свою очередь имеет двусвязный спискок "Dirs" и дак далее. Вложенность ограничена лишь доступным объемом памяти для процесса.
Пример заполнения дерева в глубину.
Код:
s.Tree ; Создание экземпляра структуры.

AddElement(s\Dirs())
AddElement(s\Dirs()\Dirs())
AddElement(s\Dirs()\Dirs()\Dirs())
AddElement(s\Dirs()\Dirs()\Dirs()\Dirs())

; И так далее

ClearStructure(s, Tree) ; Освобождение всех ресурсов, занимаемых данными структуры.
Наиболее удобно заполнять с помощью рекурсии.
Код сканирующий выбранную папку и сохраняющий данные обо всех файлах всех подпапкок, а затем отображающий их в консоли.
Код:
Structure Files
  Name.s ; Имя файла
  Size.q ; Размер файла
EndStructure

Structure Tree
  DirName.s            ; Имя папки.
  List Files.Files()   ; Список файлов текущей папки.
  List Dirs.Tree()     ; Список вложенных папок текущей папки.
EndStructure


Procedure ScanDir(*s.Tree, AllDir.s) ; Сохранение структуры указаной папки
 
  If *s=0
    ProcedureReturn
  EndIf
 
  id = ExamineDirectory(#PB_Any, AllDir, "*.*")
  If id
   
    While NextDirectoryEntry(id)
     
      If DirectoryEntryType(id) = #PB_DirectoryEntry_Directory ; Папка
       
        Dir.s = DirectoryEntryName(id)
        If Dir<>"." And Dir<>".."
         
          If AddElement(*s\Dirs())
            *s\Dirs()\DirName = Dir
            ScanDir(*s\Dirs(), AllDir+Dir+"\") ; Рекурсивный вызов процедуры
          EndIf
         
        EndIf
         
      Else ; Файл
       
        If AddElement(*s\Files())
          *s\Files()\Name = DirectoryEntryName(id)
          *s\Files()\Size = DirectoryEntrySize(id)
        EndIf
       
      EndIf
     
    Wend

   
    FinishDirectory(id)
  EndIf
 
EndProcedure


Procedure View(*s.Tree, Pos) ; Отображение в консоли структуры папки.
 
  If *s=0
    ProcedureReturn
  EndIf
 
  PrintN(Space(Pos)+*s\DirName+" (папка)")
 
  Pos+4
 
  ForEach *s\Files() ; Отображение списка файлов текущей папки.
    PrintN(Space(Pos)+*s\Files()\Name+"  ("+*s\Files()\Size+") байт")
  Next
 
  ForEach *s\Dirs() ; Отображение всех подпапок текущей папки.
    View(*s\Dirs(), Pos) ; Рекурсивный вызов процедуры
  Next
EndProcedure

OpenConsole()
s.Tree ; Создание экземпляра структуры.

s\DirName = PathRequester("Выберите папку для сканирования", "")
If s\DirName
  ScanDir(s, s\DirName)
  View(s, 0)
Else
  PrintN("Папка не выбрана")
EndIf

ClearStructure(s, Tree) ; Освобождение всех ресурсов, занимаемых данными структуры.

Print("Нажмите Enter для закрытия программы")
Input()
Все это сделано без явного выделения и освобождения памяти что уменьшает вероятность ошибок и утечки памяти.
К сообщении прикрепил исходник и компилированную программу.

Цитата
Neki, лучшая реклама ЯП это IDE для него, которая написана на нем самом
IDE написана на PureBasic, но я не считаю это чем-то выдающимся.

* Tree.rar (8.33 Кб - загружено 946 раз.)
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #7 : 03-01-2016 21:07 » 

Билли и Пол тоже начинали с бейсика. И чего сейчас имеют и изрбрели. Улыбаюсь

И что же они изобрели-то, интересно?  Ага

Семейство ОС Windows NT, сделанное руками той самой команды, которая ранее делала ОС VAX/VMS для легендарного суперминикомпьютера? Или, может, платформу .NET, ради которой сманили Андерса Хейлсберга из Борланда, который (Борланд) после этого вообще слил свою линию систем разработки и уполз в другом направлении?

Эта сладкая парочка - очень удачливые бизнесмены в мире софта, этого не отнять; но вот по части изобретений - совсем негодный пример.

Правда времена были другие. 1975 год на дворе и компьютер Альтаир.

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

Добавлено через 42 минуты и 54 секунды:
Речь шла о простой реализации ООП без наворотов...

Тогда у меня плохая новость: не бывает "простой реализации ООП без наворотов".

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

ООП может быть реализовано на базе функций. Многие Windows API функции (например CreateWindowEx) возвращают указатель на область памяти, данные которой можно считать объектом.

С таким же основанием можно, скажем, меня считать Дартом Вейдером. В смысле - считать-то данные объектом никому не запретишь, но толку с этого минимум.

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

На самом деле можно использовать объектно-ориентированное проектирование с последующей реализацией кода на процедурном языке (те, кто интересуется темой, видел соответствующую книгу в моей подборке публикаций), но это отнюдь не путь Windows API.

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

В этом месте программисты на Java, C# etc. прервут чтение и побегут искать в энциклопедиях, что означает совершенно незнакомая им фраза "утечка памяти".

IDE написана на PureBasic, но я не считаю это чем-то выдающимся.

Тут солидарен на 100%. К счастью, прошли времена, когда выращенные на перфокартах программисты млели от какого-нибудь турбопаскаля 1.0. Сегодня редактором текста с кнопочкой для компиляции трудно кого-либо удивить. Инструменты выбирают по другим критериям.
« Последнее редактирование: 03-01-2016 21:50 от Dale » Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Neki
Интересующийся

nl
Offline Offline

« Ответ #8 : 04-01-2016 12:41 » 

Цитата
В этом месте программисты на Java, C# etc. прервут чтение и побегут искать в энциклопедиях
В отличие от этих языков, PureBasic компилирует программу в машинный код, а не в промежуточный.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #9 : 04-01-2016 13:09 » 

Кстати, продукт-то коммерческий. На лицо реклама. Или, неожиданно, Full-версия стала бесплатной?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #10 : 04-01-2016 16:15 » 

В отличие от этих языков, PureBasic компилирует программу в машинный код, а не в промежуточный.

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

Главное, что проблема утечек памяти, причину которой искать обычно не так просто, перестала существовать. Если для этого где-то внутри появился промежуточный код, кого это волнует? Лично меня - нисколько, реализуйте как угодно, лишь бы работало быстро и стабильно.

Кстати, продукт-то коммерческий. На лицо реклама. Или, неожиданно, Full-версия стала бесплатной?

Фигасе, за это еще и деньги платить нужно??? Свят-свят... Этот аспект я и не заметил. Совсем весело.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Neki
Интересующийся

nl
Offline Offline

« Ответ #11 : 04-01-2016 17:01 » 

Цитата
И что это меняет по существу?
По существу, для некоторых задач управляемый код не подходит. В основном это низкоуровневые операции, типа перехвата функций, глобальных хуков и много чего другого. Или из Java или C# кода возможно получить нативную, процедурную DLL, у которой отсутствуют зависимости от java-машины или JIT-компилятора?

Цитата
Фигасе, за это еще и деньги платить нужно???
Стоимость лицензии индивидуального разработчика (79 евро) вообще смешная на фоне цены на другие среды разработки, скажем Embarcadero RAD Studio.
Лицензия покупается один раз, а все вновь выпускаемые версии, доступны в виде бесплатных обновлений.
« Последнее редактирование: 04-01-2016 17:05 от Neki » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #12 : 04-01-2016 17:27 » 

Насчет утечек памяти, в С++ с применением Boost.SmartPointer тоже можно забыть об утечках памяти. Кстати часть умных указателей уже перенесли в стандартную библиотеку. Компиляторы как правило компилируют в машинный код процессора. Так что я не вижу примушество PוureBasic перед С++11. Плюс ко всему. При соблюдении некоторых условий написания кода, программы получаются кроссплатформенными. Java этим тоже может похвастаться. PureBasic судя по всему Wx86 only.

И паровая машина в свое время была на острие прогресса, только где она нынче...

Я бы не горячился с такими высказываниями. Цифры отсюда.
Выработка электроэнергии в 2013 году АЭС 17,1% от обшего объема. По Европейской части вообше 42 %. Как это не парадоксально, но это паровая машина в чистом виде.
На 2010 годы Гидроэлектростанции вырабатывают около 18-19 %. Тут нету паровых машин. Улыбаюсь
Геотермальная, ветровая и солнечная энергетика очень маленький процент.
Все остальнеое остается на ТЭЦ. Также паровые машины Улыбаюсь
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Neki
Интересующийся

nl
Offline Offline

« Ответ #13 : 04-01-2016 17:56 » 

Цитата
Насчет утечек памяти, в С++ с применением Boost.SmartPointer тоже можно забыть об утечках памяти.
Будет ли код также прост для понимания? Не снизят ли производительность эти "умные указатели"?

Цитата
Так что я не вижу примушество PוureBasic перед С++11
Код проще и понятней, это не преимущество?

Цитата
PureBasic судя по всему Wx86 only.
На скрине в начале темы видно что в этой сборке компилятор для Windows x86 и x64.
Но существуют версии для Linux (x86 и x64) и MacOS X (x86 и x64). А также уже не поддерживаемые версии для MacOS PowerPC и AmigaOS.
Стандартная библиотека функций кроссплатформенная.
« Последнее редактирование: 04-01-2016 17:58 от Neki » Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #14 : 04-01-2016 18:11 » 

Neki, Сейчас большинство устройств, это не x86. А ARM. Все смартфоны и большинство таблетов.
Насчет скорости.
Сейчас как раз читаю книжку по Boost. В одной из первых глав, расказываюших про умные указатели, как раз есть пример, где тупо пересоздается указатель около трех миллионов раз. У меня этот код выполняется 0,5 секунды. Причем компьютер у меня 4 летней давности. И тогда он был "рабочей лошадкой".
Код: (C++)
#include <boost/shared_ptr.hpp>
#include <iostream>
#include <ctime>

int main()
{
  boost::shared_ptr<int> p;
  std::time_t then = std::time(nullptr);
  for (int i = 0; i < 3000000; ++i)
    p.reset(new int{i});
  std::time_t now = std::time(nullptr);
  std::cout << now - then << '\n';
}
Кстати, скажи, где тут усложнение читаемости? Да и указатель заточен на мультипоточность.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #15 : 04-01-2016 19:09 » 

Вить, 3 млн раз — это не только указатель изменяется, но и new + delete. Не чистый эксперимент.
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #16 : 04-01-2016 19:16 » 

Ром, этот указатель можно расшаривать. И он считает количество ссылок на него. Т.е. получается, что + еше и пересоздание механизма расшаривания.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 05-01-2016 00:26 » 

Я бы не горячился с такими высказываниями. Цифры отсюда.
Выработка электроэнергии в 2013 году АЭС 17,1% от обшего объема. ... Как это не парадоксально, но это паровая машина в чистом виде.

"Я бы не горячился с такими высказываниями" (С). Паровая машина Уатта (та самая, классическая) и сегодняшняя турбина - две ну очень большие разницы. Но в данной теме не суть важно.

По существу, для некоторых задач управляемый код не подходит. В основном это низкоуровневые операции, типа перехвата функций, глобальных хуков и много чего другого. Или из Java или C# кода возможно получить нативную, процедурную DLL, у которой отсутствуют зависимости от java-машины или JIT-компилятора?

Нет, нельзя, поскольку это языки высокого уровня и предназначены совсем для других задач. Для низкоуровневых операций специально заточен низкоуровневый язык C, который, в свою очередь, чрезвычайно неэффективен (в смысле трудоемкости проектирования, а не качества результирующего кода) в тех областях, где C# и Java - как рыба в воде. IMHO это вполне естественно, когда для каждого вида работ используется специальный инструмент; "швейцарские карманные ножики" на 150 предметов профессионалами не используются.

Функция слишком элементарная и ее упростить не получится (разве что изменив алгоритм).

Неожиданный поворот. До этого речь шла о выразительности нового языка, которая существенно превосходит таковую для классического C. Я всегда полагал, что простой алгоритм можно переписать на более выразительном языке (например, с Фортрана на Паскаль) как минимум без потери ясности, и менять сам алгоритм при этом не потребуется.

Более того, раз уж речь зашла о низкоуровневых манипуляциях, ожидал, что аналог копирования строк не уступит в элегантности сишному варианту:
Код: (C)
while (*t++ = *s++);

Ладно, раз на простых вещах не получается, давайте возьмем фрагмент чуть побольше:
(click to show)
Код: (C)
#include <stdio.h>
 #include <string.h>
 #include <errno.h>
 #include <stdlib.h>
 #include <sys/socket.h>
 #include <arpa/inet.h>
 #include <unistd.h>
 #include <netdb.h>

 void error(char* msg)
 {
   fprintf(stderr, "%s: %s\n", msg, strerror(errno));
   exit(1);
 }

 int open_socket(char* host, char* port)
 {
   struct addrinfo *res;
   struct addrinfo hints;
   memset(&hints, 0, sizeof(hints));
   hints.ai_family = PF_UNSPEC;
   hints.ai_socktype = SOCK_STREAM;
   if (getaddrinfo(host, port, &hints, &res) == -1)
     error("Can't resolve the address");
   int d_sock = socket(res->ai_family, res->ai_socktype,
                        res->ai_protocol);
   if (d_sock == -1)
     error("Can't open socket");
   int c = connect(d_sock, res->ai_addr, res->ai_addrlen);
   freeaddrinfo(res);
   if (c == -1)
     error("Can't connect to socket");
   return d_sock;
 }
  int say(int socket, char* s)
 {
   int result = send(socket, s, strlen(s), 0);
   if (result == -1)
     fprintf(stderr, "%s: %s\n", "Error talking to the server", strerror(errno));
   return result;
 }

 int main(int argc, char* argv[])
 {
   int d_sock;
   d_sock = open_socket("en.wikipedia.org", "80");
   char buf[255];
   sprintf(buf, "GET /wiki/%s http/1.1\r\n", argv[1]);
   say(d_sock, buf);
   say(d_sock, "Host: en.wikipedia.org\r\n\r\n");
   char rec[256];
   int bytesRcvd = recv(d_sock, rec, 255, 0);
   while (bytesRcvd) {
     if (bytesRcvd == -1)
       error("Can't read from server");
     rec[bytesRcvd] = '\0';
     printf("%s", rec);
     bytesRcvd = recv(d_sock, rec, 255, 0);
   }
   close(d_sock);
   return 0;
 }
(скопипастил фрагмент из букваря по C для начинающих, подвернувшегося под руку).

Если результат на ЧистоВасике выразительностью превзойдет сишный оригинал, можно сказать, что усилия не потрачены впустую. (Все примеры специально привожу на C, поскольку честнее сравнивать процедурные языки между собой, не вовлекая в сравнение более развитые парадигмы).
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
zubr
Гость
« Ответ #18 : 05-01-2016 06:02 » 

Имхо, спор слепого с глухим.
С практической точки зрения:
Если я использую в своей работе C, C++, мне нет никакого смысла изучать васик, так как нужный мне функционал, я прекрасно получаю из вышеуказанных языков. Если я новичок, и изучив васик, мне все равно придется изучать C-образные языки, ну хотя бы потому, что:
1. Врядли в профессиональной деятельности удастся всю жизнь просидеть на одном васике как инструменте и на одних типовых задачах.
2. В большинстве разработок код пишется не с нуля, а используется уже готовый и зачастую он сишный.
Такова вот селяви.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #19 : 05-01-2016 09:47 » new

Да никакой это не спор, а просто попытка раскрутить продуктик. Причём слабая.

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

А пока я так и не понял, зачем он нужен?

А так... Ну IDE на нём, "и фсё?" (с) Так это же "чистое искусство" - т.е. программирование ради программирования. Все приводимые Вами аргументы - слабое "подтягивание" до неких, уже существующих, стандартов. Причём не совсем удачное. Ну зачем нужен ещё один "уродец" ООП, или, как Вы выразились: "ООП без наворотов", ведь есть уже, например, MFC: и под виндой, и с поддержкой (native) Win API.

А вобще, это всё так и дышит несерьёзностью.

Цитата
Назовите, пожалуйста, хотя бы одно преимущество в данной области перед тем же C, например.
Ну например проще. На словах это не объяснить. Если хотите можете написать небольшую программу на C, которую я переведу на PureBasic и тогда можно будет их сравнить.

И что?

Цитата
совсем небольшая функция
Функция слишком элементарная и ее упростить не получится (разве что изменив алгоритм).
Речь шла о другом. О конструкциях языка упрощающих программирование.

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

Добрый (ИМХО излишне) Dale, предоставил Вам последний шанс. В противном случае, эта тема будет рацениваться как реклама, со всеми вытекающими последствиями.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Neki
Интересующийся

nl
Offline Offline

« Ответ #20 : 05-01-2016 12:59 » 

Цитата
Неожиданный поворот. До этого речь шла о выразительности нового языка, которая существенно превосходит таковую для классического C.
Если этот код тупо переписать на другой ЯП, то выразительности это не добавит.

Цитата
ожидал, что аналог копирования строк не уступит в элегантности сишному варианту:
Копирование строк.
Код:
Str1.s = "Hello World!" ; Первая строковая переменная
Str2.s                  ; Вторая строковая переменная

Str2 = Str1             ; Копирование строки.

MessageRequester("", Str2) ; Отображение строки на экране

Цитата
Ладно, раз на простых вещах не получается, давайте возьмем фрагмент чуть побольше:
Эту задачу возможно решить парой строк кода (использованы функции из стандартной библиотеки).
Код:
InitNetwork()

*Buff = ReceiveHTTPMemory("en.wikipedia.org")
If *Buff
  MessageRequester("", PeekS(*Buff, -1, #PB_UTF8))
  FreeMemory(*Buff)
EndIf
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #21 : 05-01-2016 14:25 » 

Если этот код тупо переписать на другой ЯП, то выразительности это не добавит.

То есть Вы утверждаете, что сам язык никак не может повлиять на выразительность написанной на нем программы?

Заметьте, я не настаивал, чтобы это непременно было сделано тупо. Если, к примеру, фрагмент кода переписать с FORTRAN-IV на Pascal или Algol-60 (не тупо), ничего не меняя по сути в самом алгоритме, код тем не менее будет читаться гораздо легче исключительно благодаря особенностям самих языков. Я уже не говорю про тот же ассемблер, который тоже может делать то же самое; но как он это делает и как это потом читать...

Копирование строк.

Собственно копирование в данном случае не было самоцелью. На C тоже можно вызвать библиотечную функцию strcpy. Речь шла исключительно о языковых средствах для низкоуровневой эффективной манипуляции байтами (как было обещано в начале темы), об их компактности и выразительности. Ожидал увидеть демонстрацию косвенной адресации, средств инкремента/декремента указателей и т.п., а увидел в общем ничто.

Эту задачу возможно решить парой строк кода

Таки весь фрагмент заменить реально парой? Не похоже, либо тут действительно сильная магия.

IMHO тема близка к исчерпанию, пора подвести итог. Мне он видится таким. Если уж речь зашла об инструменте для
профессиональной разработки софта
, давайте мыслить профессиональными категориями. Жизненный цикл софта достаточно продолжителен (по крайней мере, успешного софта), кто сомневается, может развеять сомнения, изучив стандарт ISO/IEC 12207. Собственно кодирование занимает в нем от силы процентов 10 (хотя я больше уверен в цифре 5). Гораздо больше и времени, и средств отнимают процедуры управления качеством, в частности, верификация/валидация кода.

Если представленный продукт обладает инструментами для управления качеством кода (статический анализатор, профилировщик, утилиты для сбора основных метрик, среда функционального или хотя бы только модульного тестирования etc), то у него, возможно, есть будущее и потенциальные профессиональные пользователи (хотя я и разделяю скептицизм большинства откликнувшихся в теме, но все же даже у Стаса Михайлова есть своя аудитория, так что однозначное категоричное "нет" говорить все же не буду). Все языки, пригодные для профессиональной разработки, эти инструменты имеют. Если таких инструментов нет и в ближайшем будущем не планируются их появление, то это просто игрушка для дилетантов, которым не хватило фантазии найти лучшее применение для 79 евро.

У кого-то есть другое мнение? Коммерцию/рекламу отбросим в сторону, за достойный инструмент действительно не грех заплатить.
Записан

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Neki
Интересующийся

nl
Offline Offline

« Ответ #22 : 05-01-2016 16:51 » 

Цитата
Таки весь фрагмент заменить реально парой?
Да, и он будет работать корректнее вашего варианта. Потому что попытка зайти на en.wikipedia.org через 80 порт приведет к переадресации на https://en.wikipedia.org/wiki/Main_Page и порт 443.
В вашем коде это не учитывается, а функция ReceiveHTTPMemory это корректно обрабатывает и выдаст код страницы.

Цитата
профилировщик, утилиты для сбора основных метрик, среда функционального или хотя бы только модульного тестирования
Профилировщик входит в состав отладчика, наряду с другими инструментами, например такими как Purifier следящий чтобы код не обращался к памяти вне допустимых границ.
Скриншоты
Меню отладчика



Профилировщик, показывает частоту выполнения каждой строки кода.



Просмотр регистров процессора с возможностью модификации.



Просмотр содержимого стека с отображением локальных переменных.



История вызовов процедур.



Число вывозов процедур.



Просмотр переменных. Но удобнее это делать в коде наведя курсор мышки на переменную.



Для тестирования предназначена утилита PureUnit, находящаяся в папке SDK. Из ее описания.
Цитата
  PureUnit allows automated unit testing for PureBasic code with similar
concepts to other xUnit frameworks like JUnit. The basic idea of unit
testing is the creation of a set of tests that can run without user
interaction so they can be repeated many times during the development
process to ensure that the code still does what it is supposed to do.

  The main reason for the creation of PureUnit was the testing of
(user-)libraries for PureBasic, but it can be used to test code written
in PureBasic itself just as well. Caused by the fact that the goal is
testing without user interaction, PureUnit is not intended for testing
entire application or a finished program, but rater for testing the parts
of a program like individual functions which can be executed separately
from the rest of the program to verify their correctness. (for example
an includefile with commonly used functions etc).

  PureUnit consists of a set of keywords (in the form of macros) to write
the actual test code and a tool which will analyze the code to extract
information, compile and run the test code and report the status back to the
user. The tool comes with a commandline interface for use in makefiles or scrips
and a user interface for convenient testing directly from the PureBasic IDE
for example.
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #23 : 05-01-2016 21:39 » 

Цитата
Профилировщик, показывает частоту выполнения каждой строки кода.
А затраченное время? Без этого оценка весьма поверхностна.

Цитата
Число вывозов процедур.
Туда же.

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

Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Neki
Интересующийся

nl
Offline Offline

« Ответ #24 : 05-01-2016 22:23 » 

Есть сторонний профилировщик, отображающий время выполнения каждой строки. http://www.purebasic.fr/english/viewtopic.php?f=27&t=43727
Записан
Dale
Блюзмен
Команда клуба

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #25 : 05-01-2016 23:32 » 

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

Это тоже ценная информация, при использовании автоматического тестирования позволяет выявить непокрытые тестами области.

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

Итак, реальные минусы:

1. Базовый язык (субъективно). Все-таки семейство Basic переживает не лучшие времена. Хотя, следует отдать должное, вымирать тоже не торопится: и в семье .NET без него не обошлось, и даже для микроконтроллеров версии имеются, причем имеют своих сторонников.
2. Процедурная парадигма (объективно). Лет 30 с небольшим назад процедурный язык имел шансы потягаться за место под солнцем с основными конкурентами - Pascal и C. Их убийцей, конечно, не стал бы, но какую-то определенную нишу занял бы наверняка. Сегодня отсутствие средств ООП ставит крест на использование таких мощных средств проектирования, как ООА, UML, паттерны проектирования, да и гибкие технологии существенно завязаны на объектность. Не знаю, какова нынче доля рынка разработки хуков и подобных вещей, но полагаю, что крайне невелика.

Плюсы, которые я разглядел:

1. Обширная библиотека. Ситуация, когда не нужно писать код, а достаточно просто вызвать нужную функцию из библиотеки, не может не радовать.
2. Кроссплатформенность. О ней многие говорят, но мало кто реально обеспечивает. В данном аспекте несколько огорчает отсутствие поддерржки Android, поскольку от гламурного мира Mac я весьма далек, а вот бюджетные гаджеты использую активно.
3. Наличие реально полезных инструментов, особенно XUnit. Если разработчики портируют еще и нечто типа Gherkin, можно всерьез претендовать на профессиональный подход.

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

Всего лишь неделя кодирования с последующей неделей отладки могут сэкономить целый час, потраченный на планирование программы. - Дж. Коплин.

Ходить по воде и разрабатывать программное обеспечение по спецификациям очень просто, когда и то, и другое заморожено. - Edward V. Berard

Любые проблемы в информатике решаются добавлением еще одного уровня косвенности – кроме, разумеется, проблемы переизбытка уровней косвенности. — Дэвид Уилер.
Neki
Интересующийся

nl
Offline Offline

« Ответ #26 : 06-01-2016 12:26 » 

Также полезны примеры программного обеспечения, созданного с его применением.
Создатель инсталляторов InstallForge и еще один вариант Bytessence Install Maker.
Плеер GreenForce-Player.
Торрент качалка pbTorrent Чем-то похож на µTorrent скрины.
Игра гонки Pure Racer графика оставляет желать лучшего, но при размере файлов игры 3.5 МБ она вполне приемлемая.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines