• Как делаются скриптовые языки программирования?

    Короткий ответ: читаем книгу дракона. Есть и более навороченная литература, но начинают все с этой книги (нам по ней читали в универе курс трансляции языков).

    Длинный ответ: ваш транслятор принимает на вход последовательность символов (допустим, UTF-8 текст), "понимает" ее в соответствии со спецификацией вашего языка, и выплевывает в качестве вывода инструкции на другом языке (в виде текстового файла или файла спец. формата). Этим "друим языком" может быть язык ассемблера какой-то железной платформы (x86_64, ARM, SPARC), и результирующим файлом будет бинарник под указанную архитектуру (точнее - объектный модуль, бинарник потом будет собран линковщиком) - так компилятся, например, C/C++. "Другим языком" может быть язык виртуальной машины (LLVM/байткод Java/MSIL) - так компилятся С/C++ (если через LLVM), Java, Scala, C#, F#, VB. "Другим языком" может быть и более высокоуровневый язык - часто, чтобы не париться на начальных этапах развития языка генерацией машинного кода, делают транслятор, который генерит код на Си, и этот код на Си уже компилят известным компилятором в бинарник. Или к примеру, CoffeeScript/TypeScript транслируются в JavaScript, т.к. веб-браузеры кроме джаваскрипта исполнять пока ничего не умеют.

    Конечно же, вы можете написать интерпретатор, а не компилятор - тогда ваша программа будет сразу же исполнять инструкции на вашем языке, не генерируя какой-либо выходной файл. Так поступают довольно много систем, например Node.js. Python делает также, если отключить генерацию pyc-файлов (поправьте меня, если я ошибаюсь).

    На каком языке реализовать сам транслятор - не имеет особого значения. Более того, хорошим тоном считается реализовать на разрабатываемом языке компилятор этого же языка - это называется self-hosting. Обычно наличие компилятора языка на этом же языке считается первым этапом серьезного отношения к языку. Разумеется, первую версию компилятора нужно будет реализовать на уже существующем языке (или сделать bootstrapping, если уж вы совсем суровый разработчик).

    Т.к. в задачах разбора входного потока (parsing) уже набито очень много шишек, и люди посвятили свои жизни и научные карьеры изучению этого вопроса, то сделано и немало инструментов для помощи в разработке компилятора. Как правило, такие инструменты дают возможность описать грамматику вашего языка на некоем специализированном синтаксисе (вроде BNF), а потом по этому описанию генерят вам код лексера и парсера на удобном для вас языке (это модули, которые выполнят первичный разбор входного потока на вашем языке на токены, и построят абстрактное синтаксическое дерево (AST)). А вы уже дописываете к ним основную часть вашего компилятора. Как пример, при написании компиляторов на языке Си часто используют flex в связке с yacc/bison. Есть более комлексные пакеты, позволяющие генерить код парсеров на различных языках - ANTLR, GOLD. А можно и самому написать лексер и парсер, особенно если вы уже сделали первую версию компилятора и переписываете его на вашем же языке).
    Ответ написан
    Комментировать
  • Что можно сделать на Tornado?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Для чего я использую tornado, точнее cyclone.io, порт tornado под twisted.

    - для системы miidleware ТВ-приставок. Приставка лезет за страничкой к серверу, а в остальное время общается с ним по json/REST/comet. Админка статистики этого дела работает на отдельном порту и содержит 10 страниц + json/comet/rest.
    - для системы доступа к кластеру с тонких клиентов, сервер отдает данные в json о доступных точках входа на сервера кластера и запоминает выбор пользователя. Всего 30 строк кода, Карл :-) С одной стороны сервер подключается в influxdb, с другой отдает данные пользователям.
    - для админок к разным устройствам
    - для вещей, когда просто нужен вебсервер и шаблоны, и не нужна база данных, ORM, и куча лишнего говна.
    - для вещей, когда web-интерфейс как небольшая часть остального функционала
    - для web, когда нужно быстро туда-сюда прогнать данные.

    Если посмотреть на отличия с django, то django умеют делать отличный фреймворк для web, а торнадо - отличный фреймворк для http!

    Дополнил
    А чего далеко ходить. Простая конфигурилка для линукса, интерфейсы, логин/пароль, просмотр и конфигурилка запущенных служб. Раньше я это делал на webmin, теперь cyclon + angularjs.

    А вот.. вот делаю дизайн html для битрикс (уж простите...). Как-то нужно смотреть html/css + картинки + javascript, причем, все с путями реального сайта - 10 минут и у меня всё готово. Ну не апач с nginx для этого разворачивать же?

    Ну и как-то была задача типа чата (для удаленных устройств), когда нужно было обеспечить около 10к подключений. Без танцев с бубном и минимум кода.

    В общем везде, где просто нужен быстрый и простой web-сервер с моторчиком из питона. Раньше я для этого использовал jetty (java) с моторчиком на яве соответственно. На питоне это проще в два/три раза только из-за того, что можно по ssh зайти и тупо поправить в коде без компиляции (maven) и среды разработки (eclipse).
    Ответ написан
    6 комментариев
  • Python/Django-кидди, SQL-мартышка, Web-негр — что перспективнее (Ага, «Pre-Junior»)?

    @thepry
    Ruby on rails, 1С разработчик
    Советую python/django - приятный язык, хороший фреймворк. Трактор, опять же, можно завести. :-)
    Ответ написан
    2 комментария
  • Какой набор инструментов выбрать для реализации веб-проекта?

    @RadmirZ
    Делаем интернет-магазины на движке minicart.su
    Для начала вам надо хотя бы основы понять, почитайте вот это codenamecrud.ru/basics-of-web-development
    Ответ написан
    3 комментария