Среда, 18 Декабря 2024, 11:48

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 2 из 2
  • «
  • 1
  • 2
Какой ЯП выбрать?
PBPROGДата: Четверг, 02 Сентября 2010, 17:03 | Сообщение # 21
постоянный участник
Сейчас нет на сайте
Quote (ezhickovich)
Не нужно переписывать одну и туже программу под разные платформы
А в чем плюс?
Один и тот же исходник можно просто перекомпилировать под требуемую платформу и все будет работать нативно без интерпретаторов! smile
ezhickovichДата: Четверг, 02 Сентября 2010, 18:22 | Сообщение # 22
[Великий и могучий хозяинъ]
Сейчас нет на сайте
PBPROG, вот именно нужна будет перекомпиляция, а так нет...


Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
bumДата: Четверг, 02 Сентября 2010, 18:49 | Сообщение # 23
почетный гость
Сейчас нет на сайте
Quote (PBPROG)
Все бы ничего, если бы не нужен был интерпретатор...
Это не всегда удобно, особено при распростанении программы!

Это не проблема. Есть способы запаковать все необходимые файлы вместе с интерпретатором в один контейнер и получить exe файл.

В *nix системах это вообще не проблема, поскольку там интерпретатор питона обычно всегда присутствует в системе, и exe файлов там нет.

Добавлено (02.09.2010, 18:49)
---------------------------------------------

Quote (PBPROG)
А в чем плюс?
Один и тот же исходник можно просто перекомпилировать под требуемую платформу и все будет работать нативно без интерпретаторов! smile

Это может быть просто только с программами на уровне Hello World.


Сообщение отредактировал bum - Четверг, 02 Сентября 2010, 18:48
PBPROGДата: Четверг, 02 Сентября 2010, 20:27 | Сообщение # 24
постоянный участник
Сейчас нет на сайте
Quote (bum)
Это не проблема. Есть способы запаковать все необходимые файлы вместе с интерпретатором в один контейнер и получить exe файл.
И какой будет размер исполняемого файла? biggrin

Quote (bum)
В *nix системах это вообще не проблема, поскольку там интерпретатор питона обычно всегда присутствует в системе
Но на большенстве компов установлена винда! И не стоит забывать про юзверей, котрые владеют тока мышкой и не додумаются что для проги нужен интерпретатор! А таких, сами понимаете, не мало!

Quote (bum)
exe файлов там нет.
Ага, там исполняемое файло без расшиерния. smile

Quote (bum)
Это может быть просто только с программами на уровне Hello World.
Вот вам пример, по сложнее хеловорда.
Оконная прога - текстовый редактор. Его исходик без модификаций можно скомпилировать под Windows x86, Windows x64, Linux x86, Linux x64, MacOS X Intel, MacOS X PowerPC и AmigaOS
http://pure-basic.narod.ru/docs/MultiOS.html


Сообщение отредактировал PBPROG - Четверг, 02 Сентября 2010, 20:28
ezhickovichДата: Четверг, 02 Сентября 2010, 20:54 | Сообщение # 25
[Великий и могучий хозяинъ]
Сейчас нет на сайте
Quote (PBPROG)
Но на большенстве компов установлена винда! И не стоит забывать про юзверей, котрые владеют тока мышкой и не додумаются что для проги нужен интерпретатор! А таких, сами понимаете, не мало!

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

Quote (PBPROG)
Вот вам пример, по сложнее хеловорда.
Оконная прога - текстовый редактор. Его исходик без модификаций можно скомпилировать под Windows x86, Windows x64, Linux x86, Linux x64, MacOS X Intel, MacOS X PowerPC и AmigaOS

Code
CompilerIf #PB_Compiler_OS = #PB_OS_Windows
      здесь должен быть код специально для Windows
  CompilerElse
      здесь должен быть код для других платформ
  CompilerEndIf

Имелось в виду "НЕ ИСПОЛЬЗУЯ ДИРЕКТИВЫ КОМПИЛЯТОРА"...
А то, что ты показал это тупо "разный код для разных платформ" и не катит...
Это всёравно, что писать новый код...



Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
PBPROGДата: Четверг, 02 Сентября 2010, 21:17 | Сообщение # 26
постоянный участник
Сейчас нет на сайте
Quote (ezhickovich)
Имелось в виду "НЕ ИСПОЛЬЗУЯ ДИРЕКТИВЫ КОМПИЛЯТОРА"...
В том коде использована кроссплаторменная библиотека функций, не API конкретной платформы.
Теперь по существу.
Вот весь код:
Code
   ; Эта процедура открывает файл, указанный в переменной File и загружает данные из него в редактор.
Procedure LoadFile(File.s)
  If ReadFile(0, File) ; Открытие файла.
     FileSize=Lof(0) ; Определение размера файла в байтах.
     FormatFile=ReadStringFormat(0) ; Определение кодировки файла (Ascii, UTF8 или Unicode).
     *mem=AllocateMemory(FileSize+1) ; Выделение памяти на 1 байт больше размера файла.
     ReadData(0, *mem, FileSize) ; Копирование данных из файла в память.
     SetGadgetText(1, PeekS(*mem,FileSize, FormatFile)) ; Преобразование кодировки и загрузка текста в редактор.
     FreeMemory(*mem) ; Освобождение памяти.
     CloseFile(0)     ; Закрытие файла.
     StatusBarText(1,0,File) ; Отображение пути к файлу в строке состояния.
  Else
     MessageRequester("Ошибка", "Не удалось открыть файл")     
  EndIf
EndProcedure

    ; Эта процедура сохраняет данные из редактора в файл.
Procedure SaveFile()
   ; Создание стандартного окна сохранения файла.
   File.s=SaveFileRequester("Сохраняем файл","","Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*",0)
   If File<>""
        If GetExtensionPart(File)="" And SelectedFilePattern()=0 ; Если не заданно расширение файла
          File=File+".txt"                    ; добавляем его
        EndIf
      If CreateFile(0,File) ; Создание файла на диске
         Text.s=GetGadgetText(1) ; Копирование текста из редактора в строковую переменную Text
         CompilerIf #PB_Compiler_OS = #PB_OS_Linux ; Это код для операционки Linux
           WriteStringFormat(0, #PB_Unicode) ; Запись в файл специальной метки, сообщающей что кодировка Unicode
           FormatFile=#PB_Unicode
         CompilerElse ; Это код для операционок Windows, MacOS и AmigaOS
           FormatFile=#PB_Ascii
         CompilerEndIf
         WriteString(0, Text,  FormatFile) ; Запись текста в файл в требуемой кодировке
         CloseFile(0) ; Закрытие файла.
      Else
        MessageRequester("Ошибка", "Не удалось сохранить файл")
      EndIf
   EndIf
EndProcedure

ProgPath.s=GetPathPart(ProgramFilename()) ; Получаем путь к исполняемому файлу

Gosub LoadSetting ; Вызов подпрограммы, читающей настройки программы из файла SettingEdit.ini

If Window_X<2 : Window_X=100 : EndIf
If Window_Y<2 : Window_Y=100 : EndIf

   ; Открытие главного окна
OpenWindow(1,Window_X,Window_Y,Window_Width,Window_Height,"Текстовый редактор",#PB_Window_MinimizeGadget|#PB_Window_MaximizeGadget|#PB_Window_SizeGadget|#PB_Window_Invisible)
  SmartWindowRefresh(1,1) ; Активация функции, уменьшающей мерцания окна при изменении его размеров
   
   If CreateMenu(0,WindowID(1)) ; Создание главного меню
    MenuTitle("Файл")
      MenuItem(1,"Открыть"+Chr(9)+"Ctrl+O")
      MenuItem(2,"Сохранить"+Chr(9)+"Ctrl+S")
      MenuBar()
      MenuItem(3,"Выход")
    MenuTitle("Формат")
      MenuItem(4,"Шрифт")
    MenuHeight=MenuHeight() ; Высота меню
   EndIf  
    
   If CreateToolBar(1,WindowID(1)) ; Создание панели инструментов
      ToolBarStandardButton(1, #PB_ToolBarIcon_Open)
         ToolBarToolTip(1,1,"Открыть файл")
      ToolBarStandardButton(2, #PB_ToolBarIcon_Save)
          ToolBarToolTip(1,2,"Сохранить файл")  
    ToolBarHeight=ToolBarHeight(1)  ; Высота панели инструментов
   EndIf
    
       ; Регистрация "горячих клавиш", дублирующих меню
   AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_O, 1)
   AddKeyboardShortcut(1, #PB_Shortcut_Control | #PB_Shortcut_S, 2)
    
     
   If CreateStatusBar(1,WindowID(1)) ; Создание строки состояния
      AddStatusBarField(#PB_Ignore) ; Создание одного раздела на всю строку состояния  
      StatusBarHeight = StatusBarHeight(1)  ; Высота строки состояния
   EndIf
    
   CompilerIf #PB_Compiler_OS = #PB_OS_Linux ; Код для Linux
      EditorX=2 ; Верхняя позиция редактора в окне
   CompilerElse
      EditorX=ToolBarHeight+2 ; Верхней позиция редактора смещена вниз на высоту панели инструментов
   CompilerEndIf
     ; Собственно редактор текста
  EditorGadget(1,1,EditorX, Window_Width-2, Window_Height-StatusBarHeight-MenuHeight-ToolBarHeight-4)
     SetGadgetColor(1,#PB_Gadget_FrontColor, $950121) ; Цвет текста
     SetGadgetColor(1,#PB_Gadget_BackColor, RGB(237, 255, 246)) ; Фон
      
     LoadFont(1, FontName.s, FontSize, FontStyle) ; Шрифт для редактора
     SetGadgetFont(1,FontID(1))
      
     File.s=ProgramParameter() ; Командная строка переданная программе при старте
     If File<>"" And FileSize(File)>=0 ; Передан путь к файлу
       LoadFile(File) ; Загружаем файл
     EndIf
      
        ; Активация функций, позволяющих открывать файл просто перетащив его в окно программы
     EnableWindowDrop(1, #PB_Drop_Files, #PB_Drag_Link)
     EnableGadgetDrop(1, #PB_Drop_Files, #PB_Drag_Link)

  HideWindow(1,0) ; Отображение окна
   
  Repeat ; Главный цикл Repeat - Until
     
    Event=WaitWindowEvent() ; Получаем идентификатор события в программе
     
    If Event=#PB_Event_SizeWindow ; Размер окна изменился
          ; Изменение размеров редактора
          ResizeGadget(1, #PB_Ignore, #PB_Ignore, WindowWidth(1)-2, WindowHeight(1)-StatusBarHeight-MenuHeight-ToolBarHeight-2)
     
    ElseIf Event=#PB_Event_WindowDrop Or Event=#PB_Event_GadgetDrop ; На окно перетащали файл
      If EventDropAction()=#PB_Drag_Link
        File=EventDropFiles() ; Получаем путь к файлу
        If FileSize(File)>=0 ; Файл существует
          LoadFile(File) ; Загружаем файл
        EndIf
      EndIf
       
    ElseIf Event=#PB_Event_Menu ; Событие в меню
       Menu=EventMenu() ; Определение выбранного пункта меню
       Select Menu
          Case 1 ; Пункт "Открыть"
             File.s=OpenFileRequester("Открываем файл","","Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*",0)
             If File<>""
               LoadFile(File)
             EndIf
              
          Case 2 ; Пункт "Сохранить"
             SaveFile()
             
          Case 3 ; Пункт "Выход"
             Break
             
          Case 4 ; Пункт "Шрифт"
             If FontRequester(FontName.s, FontSize,0,0, FontStyle)
               FontName=SelectedFontName()
               FontSize=SelectedFontSize()
               FontStyle=SelectedFontStyle()
               LoadFont(1, FontName, FontSize, FontStyle)
               SetGadgetFont(1,FontID(1))
             EndIf
             
       EndSelect
    EndIf
     
  Until Event=#PB_Event_CloseWindow ; Прерывание главного цикла при закрытии окна
  Gosub SaveSetting ; Вызов подпрограммы, сохраняющей настройки программы ф файле SettingEdit.ini
  End
   
   
LoadSetting: ; Подпрограмма читающая из файла SettingEdit.ini настройки программы
   OpenPreferences(ProgPath+"SettingEdit.ini")
     PreferenceGroup("Window")
       Window_X=ReadPreferenceLong("Window_X", 200)
       Window_Y=ReadPreferenceLong("Window_Y", 200)
       Window_Width=ReadPreferenceLong("Window_Width", 500)
       Window_Height=ReadPreferenceLong("Window_Height", 400)
     PreferenceGroup("Editor")
       CompilerIf #PB_Compiler_OS = #PB_OS_Windows
         FontName.s=ReadPreferenceString("FontName","Lucida Console")
       CompilerElse
         FontName.s=ReadPreferenceString("FontName","Liberation Mono")
       CompilerEndIf
       FontSize=ReadPreferenceLong("FontSize", 10)
       FontStyle=ReadPreferenceLong("FontStyle", 0)
   ClosePreferences()
Return

SaveSetting: ; Подпрограмма сохраняющая в файле SettingEdit.ini настройки программы
   If CreatePreferences(ProgPath+"SettingEdit.ini")
     PreferenceGroup("Window")
       WritePreferenceLong("Window_X", WindowX(1))
       WritePreferenceLong("Window_Y", WindowY(1))
       WritePreferenceLong("Window_Width", WindowWidth(1))
       WritePreferenceLong("Window_Height", WindowHeight(1))
     PreferenceGroup("Editor")
       WritePreferenceString("FontName", FontName)
       WritePreferenceLong("FontSize", FontSize)  
       WritePreferenceLong("FontStyle", FontStyle)
     ClosePreferences()
   EndIf
Return

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

Условная компиляция есть в процедуре SaveFile для выбора кодировки сохраняемого файла. Если сохроанять только в юникоде или Ascii, то можно исключить директиву условной компилятции.
Далее, если использовать шрифт по умлочанию, то можно исключить еще одну диективу условной компиляции.

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

ezhickovichДата: Четверг, 02 Сентября 2010, 21:40 | Сообщение # 27
[Великий и могучий хозяинъ]
Сейчас нет на сайте
PBPROG, однако это не решает проблему перекомпиляции... ( ведь для того чтобы перенести код под другую платформу его надо перекмпилировать... )

Добавлено (02.09.2010, 21:40)
---------------------------------------------
PBPROG, до меня тока ща дошёл смысл вашего ника =)
Теперь понятно почему вы так отстаиваете басик... happy



Я: О великий повелитель этой ничтожной вселенной - сокращённо ЁЖ!
PBPROGДата: Четверг, 02 Сентября 2010, 21:44 | Сообщение # 28
постоянный участник
Сейчас нет на сайте
Quote (ezhickovich)
ведь для того чтобы перенести код под другую платформу его надо перекмпилировать...
Это ложится на плечи разработчика и не является большой проблемой - юзеры получат самостоятельные скомпилированые исполняемые файлы для интерисующей их платформы.
А в случае, интерпретации, поиск интерпретатора под нужную платформу - проблема юзеров.
bumДата: Четверг, 02 Сентября 2010, 22:10 | Сообщение # 29
почетный гость
Сейчас нет на сайте
Quote (PBPROG)
И какой будет размер исполняемого файла? biggrin

С современными объемами жестких дисков это не имеет значения. Кроме того тот же py2exe не копирует полный дистрибутив питона, а берет из него только те файлы которые реально нужны. Большинство юзеров лишние съеденные 20-30Мб места на диске даже не заметят. Ведь никого же не смущает когда программы от Microsoft или Autodesk тянут за собой тонны файлов сомнительной важности.

Quote (PBPROG)
Но на большенстве компов установлена винда! И не стоит забывать про юзверей, котрые владеют тока мышкой и не додумаются что для проги нужен интерпретатор! А таких, сами понимаете, не мало!

Не на большинстве компов, а на большинстве десктопных компов. Есть разница. Кроме того, я же говорю, что есть способы все запаковать в одну папку (включая интерпретатор). Юзер запускает setup.exe, запускается инсталлятор, в конце получаете иконку в меню Пуск-Программы. Если все работает из коробки, то какая юзеру разница на чем программа написана? Ему нужны какие-то сакральные знания об интерпретаторе чтобы кликнуть по иконке?

Quote (PBPROG)
Ага, там исполняемое файло без расшиерния. smile

Не поверите, в *nix расширение файла не имеет никакого значения. За возможность запуска файла как программы отвечает соответствующий флаг в правах доступа. Если при этом файл не бинарный, а текстовый, то система ожидает в первой строке ссылку на интерпретатор. В этом случае, чтобы сделать питоновский файл запускаемым в Linux, достаочно просто вписать в первую строку #!/usr/bin/python и потом выполнить что-то вроде chmod +x file.py.

Quote (PBPROG)
Это ложится на плечи разработчика и не является большой проблемой - юзеры получат самостоятельные скомпилированые исполняемые файлы для интерисующей их платформы.

Не является большой проблемой? Сильно сказано.

Впрочем наверное действительно как-то темапошла не в то русло.

Сообщение отредактировал bum - Четверг, 02 Сентября 2010, 22:14
PBPROGДата: Четверг, 02 Сентября 2010, 22:26 | Сообщение # 30
постоянный участник
Сейчас нет на сайте
Quote (bum)
С современными объемами жестких дисков это не имеет значения.
Не у всех есть быстрый безлимитный инет чтобы скачать "лишних" несколько десятков метров! Проще и быстрее скачать скомпилированую прогу, размером, несколько сотен килобайт!

Quote (bum)
Не поверите, в *nix расширение файла не имеет никакого значения. За возможность запуска файла как программы отвечает соответствующий флаг в правах доступа
Я это знаю. А в никсах, скомпилированые исполняемые файлы почти всегда без расширения.

Quote (bum)
Не является большой проблемой? Сильно сказано.
Ну не проблема это. Ну потрачу на одну минуту больше - скомпилирую прогу под нужную платформу. Что сложного?
bumДата: Четверг, 02 Сентября 2010, 23:58 | Сообщение # 31
почетный гость
Сейчас нет на сайте
Quote (PBPROG)
Не у всех есть быстрый безлимитный инет чтобы скачать "лишних" несколько десятков метров! Проще и быстрее скачать скомпилированую прогу, размером, несколько сотен килобайт!

Наша проблема в том, что мы говорим о какой-то сферической программе в вакууме. Уже пошло обсуждение и Интернета. Не знаю, у меня дома 4Мбит безлимит, и на мобиле 1Гб предоплаченого трафика на месяц, да и в центре города во многих кафе есть WiFi. Помоему доступ к Интернету уже несколько лет как совсем не проблема. Это где сейчас скачать лишние несколько десятков метров накладно?

Quote (PBPROG)
Ну не проблема это. Ну потрачу на одну минуту больше - скомпилирую прогу под нужную платформу. Что сложного?

Да не бывает такого. Требование кросплатформенности резко увеличивает затраты на разработку. Да, это реально, но не нужно говрить, что это уж просто. Конечно кроссплатформенные фреймворки (Qt, wxWidgets, GTK) упрощают разработку, но они все равно не страхуют от всех проблем.


Сообщение отредактировал bum - Четверг, 02 Сентября 2010, 23:59
  • Страница 2 из 2
  • «
  • 1
  • 2
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг