Какие есть альтернативы питону для консольных приложений?
Добрый вечер.
Сразу прошу прощения за глупый вопрос, сам таких не люблю. Но я запутался.
Мне нужен язык для написания всяких скриптов для личных нужд как совсем простых, так и довольно лсожных. Без гуя, просто консольное приложение. Запускаться будет на линуксе, так что кроссплатформенность не критична. Если будет возможность, начну писать сайты на нем вместо php.
Чего я бы хотел от языка:
- нормальное ооп
- многопоточность
- возможность использовать его для веб (хотя не обязательно)
- очень желательна строгая типизация
На что я уже посмотрел:
- ruby У этого языка мне больше всего понравился синтаксис и полная ооп-шность. Так же есть мощные веб-фреймворки. Но по части НЕ веба он не очень (сужу по дискуссиям, на которые указал гугл).
- python Отличный язык. Есть почти на всех линуксах. Очень много либ. Так же есть фреймворки для веба. Но ооп в нем неполноценное. Я по красней мере не нашел интерфейсов, абстрактных классов и приватных методов из коробки.
- perl Об этом языке знаю мало. Отталкивает его слабая востребованность. Я не говорю, что он вообще не нужен, но если сравнивать с предыдущими языками, то это очевидно. Так же гугл указывает на то, что с многопоточностью у него не все в порядке.
- golang Интересный, но без класического ооп. Не понравилось. Плюс я не нашел СТАБИЛЬНЫХ и сформировавшихся фреймворков для него. Видимо еще молод.
Вот все маюсь. Вроде питон хорошо подходит, но останавливает его недоООП.
Собственно, интересует два вопроса:
- Можно ли реализовать в питоне полноценное ооп?
- Какие есть альтернативы?
from abc import ABCMeta, abstractmethod
class Abstract(object):
__metaclass__ = ABCMeta
@abstractmethod
def foo(self):
pass
Abstract()
>>> TypeError: Can not instantiate abstract class Abstract with abstract methods foo
class B(Abstract):
pass
B()
>>> TypeError: Can not instantiate abstract class B with abstract methods foo
"Чем абстрактный класс отличается от интерфейса?" - тем, что обычно можно наследовать только один класс (пусть и абстрактный) и сколько угодно интерфейсов. Если есть полноценное множественное наследование - то да, интерфейсы не нужны.
"в интерпретируемых языках этого не делают" - на сколько я понимаю, сейчас понятие "интерпретируемого языка" условно, почти все "интерпретаторы" просто компилируют на лету.
В контекте питона: он "компилируется" (утилита так и называется) без оптимизации в читаемый байт-код, который пошагово интерпретируется на стековой машине
Я использую bash для повседневных мелких задач, python для более сложных. А нужны ли вам абстрактные классы и интерфейсы для ваших задач? В python этот функционал либо добавляется модулями, либо парой строк кода (нужно лишь проникнуться метапрограммированием))
И какая многопоточность нужна? Если просто для обхода блокировок чтения-записи (что в большинстве и нужно), то такое есть. А насчет типизации - в python она строгая)
@HaruAtari ну для вего свои инструменты должны быть. А для того, чтобы разобрать логи, налабать бекапилку конфигов или сбор какой-либо статистики python или что-то другое уж больно жирно
@leahch Пробовал яву/скалу. Слишком монструозные.
Во первых надо в байткод компилировать. Во вторых - те фреймворки, которые я попробовал были слишком избыточны.
Хотя скала - довольно интересный язык.
Если у вас есть опыт - поделитесь, как его для веба использовать?
python. интерфейсы и абстрактные классы накатываются библиотеками, а приватные методы есть из коробки, просто не такие к которым привыкли в других языках.
habrahabr.ru/post/72757 - интерфейсы и абстрактные классы.
а по поводу приватных методов на вики можно прочесть.
это конечно не настоящие приватные методы, но их вполне хватает.