1
0
Fork 0

Add example 1: "ruby-does-not-follow-semver"

master
Alex Kotov 2 years ago
parent 31dbe04d4f
commit 8621d66c0c

1
.gitignore vendored

@ -0,0 +1 @@
Gemfile.lock

@ -0,0 +1,16 @@
Ruby не следует спецификации семантического версионирования
===========================================================
Данный пример должен показать, что Ruby не в полной мере следует спецификации
[семантического версионирования](https://semver.org), то есть в рамках одной
старшей (*major*) версии вносятся некоторые изменения, нарушающие обратную
совместимость. Так, ещё в
[документации Ruby 2.3](https://ruby-doc.org/stdlib-2.3.8/libdoc/bigdecimal/rdoc/BigDecimal.html)
было указано два способа создания экземпляров класса `BigDecimal`:
`BigDecimal.new(...)` и `BigDecimal(...)`. Позднее первый способ был объявлен
устаревшим, а в Ruby 2.7 он уже не работает. Это влияет на переносимость
библиотек. Например, `activesupport` 5.0 уже не работает на Ruby 2.7.
Пример состоит из двух одинаковых программ, выполняемых на разных версиях Ruby
и поэтому находящихся в разных поддиректориях: [Ruby 2.6](/ruby2.6) и
[Ruby 2.7](/ruby2.7).

@ -0,0 +1,11 @@
Подготовка к запуску: `bundle install`
Запуск: `bundle exec rake`
Ожидаемый вывод:
```
bundle exec /home/kotovalexarian/repos/global/causa-arcana/lesson-ruby3/1-ruby-does-not-follow-semver/ruby2.6/main.rb
/home/kotovalexarian/repos/global/causa-arcana/lesson-ruby3/1-ruby-does-not-follow-semver/ruby2.6/main.rb:5: warning: BigDecimal.new is deprecated; use BigDecimal() method instead.
true
```

@ -0,0 +1,5 @@
#!/usr/bin/env ruby
require 'bigdecimal'
puts (BigDecimal.new('3.141592653589793').to_f - Math::PI).abs <= 1e-16

@ -0,0 +1,33 @@
Подготовка к запуску: `bundle install`
Запуск: `bundle exec rake`
Ожидаемый вывод:
```
bundle exec /home/kotovalexarian/repos/global/causa-arcana/lesson-ruby3/1-ruby-does-not-follow-semver/ruby2.7/main.rb
bundler: failed to load command: /home/kotovalexarian/repos/global/causa-arcana/lesson-ruby3/1-ruby-does-not-follow-semver/ruby2.7/main.rb (/home/kotovalexarian/repos/global/causa-arcana/lesson-ruby3/1-ruby-does-not-follow-semver/ruby2.7/main.rb)
Traceback (most recent call last):
15: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/bin/bundle:23:in `<main>'
14: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/bin/bundle:23:in `load'
13: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/exe/bundle:37:in `<top (required)>'
12: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/lib/bundler/friendly_errors.rb:128:in `with_friendly_errors'
11: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/exe/bundle:49:in `block in <top (required)>'
10: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/lib/bundler/cli.rb:24:in `start'
9: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
8: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/lib/bundler/cli.rb:30:in `dispatch'
7: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
6: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
5: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
4: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/lib/bundler/cli.rb:474:in `exec'
3: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/lib/bundler/cli/exec.rb:28:in `run'
2: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/lib/bundler/cli/exec.rb:63:in `kernel_load'
1: from /home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/bundler-2.2.21/lib/bundler/cli/exec.rb:63:in `load'
/home/kotovalexarian/repos/global/causa-arcana/lesson-ruby3/1-ruby-does-not-follow-semver/ruby2.7/main.rb:5:in `<top (required)>': undefined method `new' for BigDecimal:Class (NoMethodError)
rake aborted!
Command failed with status (1): [bundle exec /home/kotovalexarian/repos/glo...]
/home/kotovalexarian/repos/global/causa-arcana/lesson-ruby3/1-ruby-does-not-follow-semver/ruby2.7/Rakefile:2:in `block in <top (required)>'
/home/kotovalexarian/.rvm/gems/ruby-2.7.3/gems/rake-13.0.3/exe/rake:27:in `<top (required)>'
Tasks: TOP => default
(See full trace by running task with --trace)
```

@ -0,0 +1,5 @@
#!/usr/bin/env ruby
require 'bigdecimal'
puts (BigDecimal.new('3.141592653589793').to_f - Math::PI).abs <= 1e-16

@ -12,6 +12,7 @@ Ruby 3.0
* [Обзор](#ruby-30)
* [Содержание](#содержание)
* [Примеры](#примеры)
* [Официальные публикации](#официальные-публикации)
* [Мотивация](#мотивация)
* [Время выпуска](#время-выпуска)
@ -19,6 +20,26 @@ Ruby 3.0
Примеры
-------
Поскольку примеры требуют разных версий Ruby, желательно использовать какое-то
программное обеспечение для управления версиями Ruby, например
[Ruby Version Manager](https://rvm.io). В каждой директории с примером находится
файл `.ruby-version`, поэтому версия Ruby переключается автоматически при
переходе в эту директорию в вашей командной оболочке, если Ruby Version Manager
установлен правильно.
Обратите внимание, что некоторые примеры состоят из нескольких независимых
программ. Если в директории примера нет ничего, кроме других директорий и файла
`README.md`, то нужно переходить в эти поддиректории. Более подробно о каждом
примере читайте в файле `README.md`, который есть в каждой директории и
поддиректории.
1. [Ruby не следует спецификации семантического версионирования](/1-ruby-does-not-follow-semver)
Официальные публикации
----------------------
@ -44,8 +65,7 @@ Ruby 3.0
процессом разработки языка изнутри, впервые появилась возможность попробовать
его новые относительно стабильные возможности без необходимости самостоятельно
собирать программное обеспечение из исходных кодов, например путём установки с
помощью [Ruby Version Manager](https://rvm.io) (`rvm install
ruby-3.0.0-preview1`).
помощью Ruby Version Manager (`rvm install ruby-3.0.0-preview1`).
Что касается дистрибутивов популярных операционных систем, то в стабильных
версиях большинства из них до сих пор используется Ruby 2.7:

@ -0,0 +1,9 @@
ruby(
File.read(File.expand_path('.ruby-version', __dir__))
.strip
.match(/\Aruby-(\d+\.\d+\.\d+)\z/)[1],
)
source 'https://rubygems.org'
gem 'rake', '~> 13.0'

@ -0,0 +1,3 @@
task :default do
sh 'bundle', 'exec', 'main.rb'
end
Loading…
Cancel
Save