Size: a a a

Compiler Development

2020 February 11

VK

Vladimir Kazanov in Compiler Development
K R
С утрированно практической стороны (пользователя, естественно):

1. Объекты, замыкания есть, функции - значения.
2. Типы указывать не нужно.
3. Сборщик мусора.
4. Более-менее однопоточные.
5. Скорость выполнения байт-кода более-менее одинаковая.
6. Не требуют внешней виртуальной машины JVM/.NET.
7. Есть языковые менеджеры пакетов.
8. Энергичные вычисления, есть побочные эффекты.
9. Изменяемые значения. Семантика - всё boxed (у Питона нет выделенного типа ref, потому там известный ахтунг, конечно).

Отличия - у OCaml'а нет классов типов, поэтому выч. мат код требует некоторых мелких хаков, а вывод структур на консоль - ppx_deriving или т.п.

И я, честно говоря, ничего более близкого к Питону, но компилируемого и достаточно популярного, не вижу.
Под ваше определение можно практически любой ML подвести.

Я полжизни писал на питоне, и немного на SML и Окамле. И как пользователь могу сказать, что разработки в этих языках отличается радикально. Прежде всего из-за системы типов.

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

Или буднях в виде скорости байт-кода или нативного кода: Ocaml благодаря системе типов можно эффективно компилировать AOT, питон же в силу динамической природы обречён на  JIT.
источник

VK

Vladimir Kazanov in Compiler Development
А сборщик мусора в наши дни - проза жизни, по этому принципу группировать языки странно.
источник

VK

Vladimir Kazanov in Compiler Development
Я просто не понимаю, как их сравнивать :-)
источник

VK

Vladimir Kazanov in Compiler Development
И вообще. Кто пользуется окамлом на байт коде? Там всегда был хороший AOT компилятор
источник

KR

K R in Compiler Development
Vladimir Kazanov
Под ваше определение можно практически любой ML подвести.

Я полжизни писал на питоне, и немного на SML и Окамле. И как пользователь могу сказать, что разработки в этих языках отличается радикально. Прежде всего из-за системы типов.

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

Или буднях в виде скорости байт-кода или нативного кода: Ocaml благодаря системе типов можно эффективно компилировать AOT, питон же в силу динамической природы обречён на  JIT.
Ну объекты же в Ocaml'е. 😊 А вообще, это естественно, что разработка в Питоне и в ML различается сильно - они же даже для разных задач применяются.

Но если брать условия: похожесть на Питон (в неё входит отсутствие внешней вирт. машины), статическая типизация (это сразу сильно меняет круг задач и приёмов работы) да некоторая распространённость, то вот так и получается.

Собственно, я просто взял TIOBE рейтинг.
источник

VK

Vladimir Kazanov in Compiler Development
K R
Ну объекты же в Ocaml'е. 😊 А вообще, это естественно, что разработка в Питоне и в ML различается сильно - они же даже для разных задач применяются.

Но если брать условия: похожесть на Питон (в неё входит отсутствие внешней вирт. машины), статическая типизация (это сразу сильно меняет круг задач и приёмов работы) да некоторая распространённость, то вот так и получается.

Собственно, я просто взял TIOBE рейтинг.
Но я боюсь, что похожесть ограничивается отсутствием фигурных скобок.

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

VK

Vladimir Kazanov in Compiler Development
K R
Ну объекты же в Ocaml'е. 😊 А вообще, это естественно, что разработка в Питоне и в ML различается сильно - они же даже для разных задач применяются.

Но если брать условия: похожесть на Питон (в неё входит отсутствие внешней вирт. машины), статическая типизация (это сразу сильно меняет круг задач и приёмов работы) да некоторая распространённость, то вот так и получается.

Собственно, я просто взял TIOBE рейтинг.
А tiobe тут при чем? :-)
источник

KR

K R in Compiler Development
Это рейтинг распространённости.
источник

VK

Vladimir Kazanov in Compiler Development
K R
Это рейтинг распространённости.
Мы ж про похожесть
источник

DP

Dmitry Ponyatov in Compiler Development
K R
Ocaml - это практически компилируемый Python. Только синтаксис отличается, да понятнее местами.
с библиотеками у него полный ноль по сравнению с Пыхтоном, и многопоточка тухловатая — multikernel уже лет 5 обещают
но для компиляторщиков вроде неплохо подходит, вроде даже нативный биндинг к LLVM в комплекте есть
источник

AT

Alexander Tchitchigin in Compiler Development
Dmitry Ponyatov
с библиотеками у него полный ноль по сравнению с Пыхтоном, и многопоточка тухловатая — multikernel уже лет 5 обещают
но для компиляторщиков вроде неплохо подходит, вроде даже нативный биндинг к LLVM в комплекте есть
Так Питон многопоток вообще не обещает! Точнее, обещает его отсутствие. 😄
источник

AT

Alexander Tchitchigin in Compiler Development
А async в OCaml шикарный - почти как в Haskell. 😊
источник

DP

Dmitry Ponyatov in Compiler Development
K R
С утрированно практической стороны (пользователя, естественно):

1. Объекты, замыкания есть, функции - значения.
2. Типы указывать не нужно.
3. Сборщик мусора.
4. Более-менее однопоточные.
5. Скорость выполнения байт-кода более-менее одинаковая.
6. Не требуют внешней виртуальной машины JVM/.NET.
7. Есть языковые менеджеры пакетов.
8. Энергичные вычисления, есть побочные эффекты.
9. Изменяемые значения. Семантика - всё boxed (у Питона нет выделенного типа ref, потому там известный ахтунг, конечно).

Отличия - у OCaml'а нет классов типов, поэтому выч. мат код требует некоторых мелких хаков, а вывод структур на консоль - ppx_deriving или т.п.

И я, честно говоря, ничего более близкого к Питону, но компилируемого и достаточно популярного, не вижу.
Nim ?
источник

а

а это кто in Compiler Development
K R
С утрированно практической стороны (пользователя, естественно):

1. Объекты, замыкания есть, функции - значения.
2. Типы указывать не нужно.
3. Сборщик мусора.
4. Более-менее однопоточные.
5. Скорость выполнения байт-кода более-менее одинаковая.
6. Не требуют внешней виртуальной машины JVM/.NET.
7. Есть языковые менеджеры пакетов.
8. Энергичные вычисления, есть побочные эффекты.
9. Изменяемые значения. Семантика - всё boxed (у Питона нет выделенного типа ref, потому там известный ахтунг, конечно).

Отличия - у OCaml'а нет классов типов, поэтому выч. мат код требует некоторых мелких хаков, а вывод структур на консоль - ppx_deriving или т.п.

И я, честно говоря, ничего более близкого к Питону, но компилируемого и достаточно популярного, не вижу.
"Типы указывать не нужно"

Есть огромная разница между дмнамической типизацией как в Python и статической типизацией с сильным автовыводом типов как в Ocaml :-)
источник

YS

Yuriy Syrovetskiy in Compiler Development
а это кто
"Типы указывать не нужно"

Есть огромная разница между дмнамической типизацией как в Python и статической типизацией с сильным автовыводом типов как в Ocaml :-)
второе — типы указывать не нужно
первое — типов нет
источник

а

а это кто in Compiler Development
Yuriy Syrovetskiy
второе — типы указывать не нужно
первое — типов нет
Ну нет. Когда типов нет, в рантайме будут постоянно происходить баги из-за неправильной интерпретации объекта, а в Python всё-таки есть проверка типов поэтому использовать int как float нельзя — будет ошибка несовпадения типов
источник

DP

Dmitry Ponyatov in Compiler Development
ну все-таки стоит учитывать общие впечатления пользователя языка, тех кто работает с ним на самом верхнем уровне, скорее как с черным ящиком (инструментом в себе)

по личному впечатлению окамл и питон имеют общее в плане "программирование как поток сознания", больше думаешь про задачу, а не про то скомпилится ли вот этот кусок кода, и как его для этого правильно обернуть в типы/классы

с С++\Java 5 минут кодишь задачу, полчаса разгребаешь type failtы различного вида
источник

YS

Yuriy Syrovetskiy in Compiler Development
а это кто
Ну нет. Когда типов нет, в рантайме будут постоянно происходить баги из-за неправильной интерпретации объекта, а в Python всё-таки есть проверка типов поэтому использовать int как float нельзя — будет ошибка несовпадения типов
"ошибка несовпадения типов" в Питоне — это и есть баг в рантайме из-за неправильной интерпретации объекта
источник

DP

Dmitry Ponyatov in Compiler Development
собственно, ЯП можно как раз классифицировать по точке, когда уровень освоения языка (скилл) достаточен для достижения этого состояния "поток сознания"

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

на самом дне - С++ и Haskell, там состояние потока сознания требует приближения к уровню понимания книг Степанова, чтобы язык перестал путаться под ногами
источник

YS

Yuriy Syrovetskiy in Compiler Development
Dmitry Ponyatov
собственно, ЯП можно как раз классифицировать по точке, когда уровень освоения языка (скилл) достаточен для достижения этого состояния "поток сознания"

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

на самом дне - С++ и Haskell, там состояние потока сознания требует приближения к уровню понимания книг Степанова, чтобы язык перестал путаться под ногами
но эта точка слишком субъективна для классификации
источник