|
|
  |
Python для разработчика, зачем? |
|
|
|
Mar 15 2018, 11:33
|
Профессионал
    
Группа: Участник
Сообщений: 1 075
Регистрация: 30-09-05
Пользователь №: 9 118

|
У меня. Давно, работа, первое, что вспомнилось: - контрольно-измерительные стенды для исследований/отбраковки разработанных интегральных схем (мелкая серия для внутренних нужд), на базе ПК с многоканальной платой аналого-цифрового ввода-вывода - все ПО писал сам на Паскале, с выводом на экран графиков, осциллограмм, и тд; - вспомогательное ПО разработки ИС - на Паскале; - что-то подсчитать/проанализировать - на Паскале (что сложнее - Maple). Это все было в дополнение к основной задаче - разработке схемотехники/топологии/методологии ИС (вел всю цепочку от согласования ТЗ до готового кристалла). Сейчас, хобби: - трансляторы своих языков в Верилог - на Паскале; - обработка данных от ПЛИС - чаще Паскаль, редко Си, еще реже Octave. - дизайны для ПЛИС - свои языки + Верилог. Раньше было интереснее - все можно было делать своими руками. Сейчас инженеры, как роботы на конвейере, называется - "умение работать в команде".
Сообщение отредактировал Leka - Mar 15 2018, 11:34
|
|
|
|
|
Mar 15 2018, 17:33
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(dxp @ Mar 15 2018, 17:37)  Ну, самодельные костыли всё же не так удобны, безопасны и просты для понимания и использования, как встроенные в язык средства. это не костыли, а именно средства языка, которые позволяют копать, ну или не копать, надо ООП и наследование - пожалуйста. Цитата(dxp @ Mar 15 2018, 17:37)  Выглядеть будет обычно. Конечно, рантайм ему потребуется. У меня есть опыт только с Qt, так вот когда я запускал программу под вендой, мне достаточно было установить питон и PyQt, дальше всё запустилось без вопросов. Для венды придётся слепить инсталлятор, который установит вышеупомянутое, но инсталляторы для венды - обычное дело. ну то есть для совсем простого приложения которое пусть, например, не знаю id3 tagи от mp3 анализирует/сортирует, но с совсем простым гуём, придётся не одну сотню МБ скачать. да, объёмы дисков нынче в терабайтах измеряются, а скорости интернета в десятках и сотнях мбит, но как-то всё равно некрасиво. помнится как-то понадобилось посмотреть некий специфичный софт для расчётов, на питоне, будучи с ним совсем не знаком, сначала по совету сдуру поставил какую-то анаконду, ещё как оказалось не той 2/3 версии. а потом оно ещё попросило определённую версию MSVC, чтобы какую-то из зависимых библиотек вроде scipy или чего-то похожего пересобрать. вот это сходил за хлебушком, а надо-то было совсем какую-то простую вещь сделать. Цитата(dxp @ Mar 15 2018, 17:37)  Однако на нём успешно пишут приложения (Node.js). И жабоскрипные приложения мне попадались много чаще, чем на луа. тем не менее не могу назвать ни одно приложение на node.js, которым бы именно приходилось пользоваться. Цитата(dxp @ Mar 15 2018, 17:37)  Ну, так вон народ и на Tcl лабает приложения, и объекто-ориентированные, и с гуями... Но, полагаю, вы не будете сторонником этого подхода.  да если гуи совсем простые вроде нескольких полей ввода и пары кнопок, то без разницы на чём делать и весь Qt для этого совсем не нужен. Цитата(dxp @ Mar 15 2018, 17:37)  О, а я на питон как раз внимание обратил именно из-за того, что эти оба так достали при обработке многострочных текстов. Собственно, питон именно для этих случаев и начал использовать. А потом пошло-поехало - сперва простые утилиты, потом как интерактивная среда для вычислений, исследований, а потом и полноценные GUI приложения. До момента знакомства с питоном утилиты писал на С++, с тех пор исключительно на питоне. аналогично, только с lua и mathematica пришлось познакомиться из-за femm и radia для магнитостатики, а потом как-то затянуло.
|
|
|
|
|
Mar 16 2018, 08:52
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(_pv @ Mar 16 2018, 00:33)  это не костыли, а именно средства языка, которые позволяют копать, ну или не копать, надо ООП и наследование - пожалуйста. Что сделать-то можно, не сомневаюсь. Вон люди на С в ООП стиле пишут, вполне работает. Но вопрос цены: удобство, безопасность, прозрачность и т.д. Хочется узнать поподробнее, как это выглядит на практике. Например, в питоне класс: Код class TSlon a = 5 def __init__(self): self.b = 10
...
slon = TSlon()
a = slon.a + slon.b # a: 15 Далее, наследование: Код class TMamont(TSlon): def __init__(self): super().__init__()
def add(self, x): self.a += x
...
mamont = TMamont()
mamont.add(4) # mamont.a: 9 Как подобный код выглядит на Lua? Не измерения ради, а правда любопытно, как это реализовывается на языке, где нет встроенной поддержки таких средств. Цитата(_pv @ Mar 16 2018, 00:33)  ну то есть для совсем простого приложения которое пусть, например, не знаю id3 tagи от mp3 анализирует/сортирует, но с совсем простым гуём, придётся не одну сотню МБ скачать. Зачем? Нужен сам питон и графические либы (Qt, wxWidgets или что там используется). В линухах питоны есть "искаропки", для венды придётся скачать. Инсталлятор для 64-битной версии: Python 2.7 что-то порядка 20 МБ, 3.6 - 30 МБ. Далее, сами графические либы - это преимущественно динамические библиотеки (dll/so), они нужны будут в любом случае для любого языка - в т.ч. и для С/С++, если только не собрать статически. Графический фреймворк PyQt5 вытягивается одной командой через pip (типа менеджера пакетов питона). Для венды питоновое приложение можно собрать с помощью PyInstaller, который родит самодостаточный exe-шник. Да, размер тоже будет не 20 байт, где-то от полутора мегов, насколько помню, давно уже ничего такого не собирал. Не тянет совсем. Цитата(_pv @ Mar 16 2018, 00:33)  помнится как-то понадобилось посмотреть некий специфичный софт для расчётов, на питоне, будучи с ним совсем не знаком, сначала по совету сдуру поставил какую-то анаконду, ещё как оказалось не той 2/3 версии. а потом оно ещё попросило определённую версию MSVC, чтобы какую-то из зависимых библиотек вроде scipy или чего-то похожего пересобрать. вот это сходил за хлебушком, а надо-то было совсем какую-то простую вещь сделать. Ну, тут у меня понимания не возникает. Это обычное дело, когда погружаетесь в какую-то область. Отвлечённо: чтобы подвинуть дорожку в печатной плате, разработанной в Altium, таки придётся тянуть и ставить оный пакет. А всего-то хотелось какой-то мелочи. Anaconda - это сборка Python + набор библиотек для научных расчётов, влючая Numpy, Matplotlib, IDE a-la Matlab Spyder, и прочее. Я предпочитаю ставить все эти штуки по отдельности по мере надобности, но на венде анаконда - пожалуй, единственный нормальный путь, быстро и без лишнего геморроя. И не такая уж она и огромная на фоне современных САПР. Матлаб тот же толще. Цитата(_pv @ Mar 16 2018, 00:33)  тем не менее не могу назвать ни одно приложение на node.js, которым бы именно приходилось пользоваться. Мне вот этим довелось попользоваться. Правда, не всё устраивало, а поправить под себя эффективно не мог (не владею инструментом), поэтому идею позаимствовал и реализовал на питоне.  На Lua самостоятельных приложений видеть не доводилось, и ни разу не замечал, чтобы кто-то ими пользовался. А вот встроенные (плагины) - сплошь и рядом. Согласитесь, что по количеству и разнообразию самостоятельных приложений питон и луа сравнивать не приходится. Как и по количеству встраиваемых (но уже с обратным приоритетом). И это неспроста. Всякому инструменту - своя ниша. P.S. Я не спора для пишу посты сюда, мне правда интересно. Есть желание научиться встраивать Lua в приложения на C/C++. Если у вас есть подобный опыт, можете посоветовать что-нибудь для старта (ну, ссылки с внятным освещением вопроса или примерчик простейший - типа, программа на С с main, и из неё вызывать функцию на Lua)?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Mar 16 2018, 09:35
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(dxp @ Mar 16 2018, 10:52)  Мне вот этим довелось попользоваться. Правда, не всё устраивало, а поправить под себя эффективно не мог (не владею инструментом), поэтому идею позаимствовал и реализовал на питоне.  Хотел бы я посмотреть на реализацию на питоне вот такой идеи - https://habrahabr.ru/post/327628/ . Похожая тема, но гораздо полезней для разработчиков. Нет, что ни говорите, а экосистема питона включая либы просто эрзац более продвинутых решений. В embedded гораздо выгоднее изучать и применять JavaScript. Он и в микроконтроллеры встраивается, и WEB GUI на нем делают, и кросплатформенные приложения и серверные.
|
|
|
|
|
Mar 16 2018, 10:02
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(AlexandrY @ Mar 16 2018, 16:35)  Хотел бы я посмотреть на реализацию на питоне вот такой идеи - https://habrahabr.ru/post/327628/ . Напишите на питоне и увидите. Цитата(AlexandrY @ Mar 16 2018, 16:35)  Похожая тема, но гораздо полезней для разработчиков. Ни разу не похожая. А похожая лежит тут. Цитата(AlexandrY @ Mar 16 2018, 16:35)  Нет, что ни говорите, а экосистема питона включая либы просто эрзац более продвинутых решений. Если хочется покозырять умением выдрать из pdf данные и сгенерить целевые файлы, вот вам задание: SoC Xilinx Zynq-7000, вендор не озаботился составлением заголовочных файлов для периферии СнК. Поэтому приходится выполнять эту работу самостоятельлно. Файл документации, вторая его половина содержит таблицы с описаниями регистров кристалла. Задача: распарсить таблицы, извлечь информацию и родить набор заголовочных файлов для всех периферийных устройств. На питоне эта задача выполнена, результат тут. Три набора файлов (разные стили - макросами, перечислениями и константами). Покажите всю мощь и мастерство владения дельфями?
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Mar 16 2018, 10:09
|

фанат дивана
     
Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684

|
Расскажу, как я применяю питон в embedded. Если микроконторллер имеет интерфейс для общения с ПК (а зачастую это так), то я использую питон для написания тестов. Все функции обмена реализую в коде на питоне. Типа: считать текущие значения датчиков, задать параметры работы, изменить скорость опроса, и т. д. Это мне помогает трижды: - . При написании прошивки - я имею возможность проверить работу прошивки, обмен с ПК, соответствие обмена протоколу и т. д.
- . При передаче прошивки программисту прикладного уровня - он сразу видит, как можно работать с устройством.
- . При выяснении проблем с программистом прикладного уровня - если он мне говорит, что что-то не работает, я ему говорю -"тест работает, проблемы на твоей стороне"

Если программистом прикладного уровня являюсь я (такое тоже случается), то всё равно удобно сначала по-быстрому накидать тесты на питоне, а уже потом реализовывать полноценную работу на Qt. Ну и пару раз всякие алгоритмы расчётов/фильтрации обкатывал.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Mar 16 2018, 10:52
|
Гуру
     
Группа: Свой
Сообщений: 2 563
Регистрация: 8-04-05
Из: Nsk
Пользователь №: 3 954

|
Цитата(dxp @ Mar 16 2018, 15:52)  Как подобный код выглядит на Lua? Не измерения ради, а правда любопытно, как это реализовывается на языке, где нет встроенной поддержки таких средств. Код TSlon = {}
function TSlon:new(arg1) local this = {} this.a = 5 this.b = arg1 setmetatable(this, {__index = TSlon}) -- при обращении к методам конкретного экземпляра будут взяты методы из таблицы слона. return this end
function TSlon:sub(x) self.a = self.a - x return self.a end
setmetatable(TSlon, {__call = TSlon.new}) -- просто синтаксический сахар для конструктора foo = TSlon(1) <=> foo = TSlon:new(1)
slon = TSlon(10) print(slon.a + slon.b) -- 15 print(slon:sub(1)) -- 4
TMamont = {}
function TMamont:new(arg1) local this = TSlon(arg1) setmetatable(this, {__index = TMamont}) return this end
function TMamont:add(x) self.a = self.a + x return self.a end
setmetatable(TMamont, {__index = TSlon, __call = TMamont.new}) -- при обращении к методам мамонта, если таквой не найден, пойдём к слону
mamont = TMamont(0) print(mamont:add(4)) -- 9 print(mamont:sub(1)) -- 8, TSlon:sub Цитата(dxp @ Mar 16 2018, 15:52)  P.S. Я не спора для пишу посты сюда, мне правда интересно. Есть желание научиться встраивать Lua в приложения на C/C++. Если у вас есть подобный опыт, можете посоветовать что-нибудь для старта (ну, ссылки с внятным освещением вопроса или примерчик простейший - типа, программа на С с main, и из неё вызывать функцию на Lua)? "programming in lua" от автора для начала самое оно. предыдущие издания лежат на прямо на lua.org. найти последнее издание в pdf в интернете тоже не проблема. да и изменения там не особо принципиальные. Код --main.lua function luafunc (x, y) return x + cfunc(y) end Код //main.c int cfunc(lua_State * L){ lua_pushnumber(L, lua_tonumber(L, 1) * 2); //взять первый параметр, удвоить и положить обратно. return 1; //количество возвращаемых значений }
void main(){ lua_State * L = luaL_newstate(); lua_register (L, "cfunc", cfunc); //зарегистрировать свою С функцию в lua. luaL_dofile(L, "main.lua"); //выполнить луа код lua_getglobal(L, "luafunc"); //найти и положить на стэк глобальную луа функцию luafunc lua_pushnumber(L, 10); //затем ещё два параметра lua_pushnumber(L, 20); // lua_pcall(L, 2, 1, 0) //взять эти два параметра со стэка, затем функуцию, позвать её, она в свою очередь позовёт cfunc и потом вернёт 1 значение на стэк int z = lua_tonumber(L, -1); //взять его сверху стэка (-1) lua_pop(L, 1); //и почистить за собой printf ("%d", z); //50 = 10 + 20*2 } ну и есть куча всяких обёрток на плюсах для облегчения общения с lua, например с автоматическим разворачиванием луа таблиц со стэка в std::map и обратно
|
|
|
|
|
Mar 16 2018, 10:56
|

Гуру
     
Группа: Модераторы
Сообщений: 10 983
Регистрация: 23-11-05
Пользователь №: 11 287

|
Цитата(Эдди @ Mar 14 2018, 11:59)  А учитывая то, что у меня рвотный рефлекс на синтаксис пхытона, лучше при мне об этой дряни вообще не говорить (а то могу и заляпать ненароком)!!! А Вас сюда кто-то силком затащил? Автор попросил поделиться опытом тех, кто применяет Питон в своих разработках. Показать преимущества. Вы же, в привычной своей манере, вломились в ветку облить помоями то, что Вам не пришлось по душе, и, соответственно, "маст дай". Коверкая язык и изрыгая ругательства, устраиваете здесь очередной холивар. Этим взрослый человек пришёл поделиться с коллегами? Я прошу Вас, как минимум, воздерживаться в дальнейшем от участия в этой теме и вообще от грубостей. И всех присутствующих - не превращать тему в очередной оффтоп.
|
|
|
|
|
Mar 16 2018, 12:13
|

Adept
     
Группа: Свой
Сообщений: 3 469
Регистрация: 6-12-04
Из: Novosibirsk
Пользователь №: 1 343

|
Цитата(Leka @ Mar 16 2018, 18:49)  При беглом взгляде это интерактивная задача, надо глазами проверять формат таблиц для разных устройств. Формат таблиц там одинаковый, вот наполнение местами отличается - разные люди, видимо, писали для разных модулей. И это была основная проблема - приходилось глазами отсматривать и дополнять исходник (на это основное время и ушло). Но парсинг и генерация сами по себе от этого не зависят, т.ч. задача корректна. Цитата(_pv @ Mar 16 2018, 17:52)  "programming in lua" от автора для начала самое оно. предыдущие издания лежат на прямо на lua.org. найти последнее издание в pdf в интернете тоже не проблема. да и изменения там не особо принципиальные. Код --main.lua function luafunc (x, y) return x + cfunc(y)
<...>
lua_pop(L, 1); //и почистить за собой printf ("%d", z); //50 = 10 + 20*2 } Спасибо за пример. Собрал, запустил, ответ 50.  Надо осмыслить эту механику со стеком. И понять, как это обернуть, чтобы при использовании было проще.
--------------------
«Отыщи всему начало, и ты многое поймёшь» К. Прутков
|
|
|
|
|
Mar 17 2018, 09:57
|

Ally
     
Группа: Модераторы
Сообщений: 6 232
Регистрация: 19-01-05
Пользователь №: 2 050

|
Цитата(dxp @ Mar 16 2018, 12:02)  Задача: распарсить таблицы, извлечь информацию и родить набор заголовочных файлов для всех периферийных устройств. На питоне эта задача выполнена, результат тут. Три набора файлов (разные стили - макросами, перечислениями и константами). Покажите всю мощь и мастерство владения дельфями? Я бы рад, но вы здесь здорово присочинили. Посмотрите документацию по вашей ссылке и там не найдете имен использованных в хидерах. Вас кто-то ввел в заблуждение. Это на самом деле было сделано вручную, скрипты если и были, то на этапе выравнивания синтаксиса.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|